Integration seventeentrack is not working
The problem
Hello,
with the new Core version: 2025.5.0 the integration "seventeentrack" is not working as described in the 17Track documentation.
"Examples Dashboard summary card"
YAML Code..
What version of Home Assistant Core has the issue?
2025.5.0
What was the last working version of Home Assistant Core?
2025.4.4
What type of installation are you running?
Home Assistant OS
Integration causing the issue
seventeentrack
Link to integration documentation on our website
https://www.home-assistant.io/integrations/seventeentrack
Diagnostics information
No response
Example YAML snippet
type: markdown
title: Packages in transit
content: >
{% for package in
states.sensor['17track_in_transit'].attributes.packages %}
>- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{
package.info_text }}
{% endfor %}
Anything in the logs that might be useful for us?
Error on Dashboard:
UndefinedError: 'None' has no attribute 'attributes'
Additional information
No response
Hey there @shaiu, mind taking a look at this issue as it has been labeled with an integration (seventeentrack) you are listed as a code owner for? Thanks!
Code owner commands
Code owners of seventeentrack can trigger bot actions by commenting:
@home-assistant closeCloses the issue.@home-assistant rename Awesome new titleRenames the issue.@home-assistant reopenReopen the issue.@home-assistant unassign seventeentrackRemoves the current integration label and assignees on the issue, add the integration domain after the command.@home-assistant add-label needs-more-informationAdd a label (needs-more-information, problem in dependency, problem in custom component) to the issue.@home-assistant remove-label needs-more-informationRemove a label (needs-more-information, problem in dependency, problem in custom component) on the issue.
(message by CodeOwnersMention)
seventeentrack documentation seventeentrack source (message by IssueLinks)
This is indeed an issue for the documentation, as the extra attributes got removed in 2025.5 (see the backwards incompatible changes in the release notes) after they were deprecated for at least 6 months
Hello,
... and how do I get the information about my packages from now on? The integration is no use to me like this.
Best regrads Gunter
You'll find the answer in the release notes π
Running seventeentrack.get_packages in the Actions dev tool I can see all of the tracking info but have no idea how to use it in a card.
You'll find the answer in the release notes π
It's not enough to just point to release notes - it's like "I don't care - we wrote there something". As a regular user I would like to just open integration help page and copy-paste YAML from it to markdown card with some adjustments. Just like with an old release. You have changed the integration, but not help for it.
This is, what I've already wrote in https://github.com/home-assistant/core/issues/144499#issuecomment-2863897776 - the docs needs to be updated.
All the data from the former attributes are available when you run a script via Actions in the Development Tools. The "million dollar" question is how you can then display this output (stated in "Antwoord" in my screenshot) in a card (e.g. Markdown). Anyhow I don't understand why those attributes have disappeared, despite the fact that there is a need for this info.
Agreed. Would dearly love to know how to access the results. Response variable doesn't seem to be global...
Hello,
I now have the βoldβ functionality again. If anyone needs or wants to rebuild it, I'll put my work online here:
This is what the dasboard looks like:
To do this, I created four template sensors that query the status every five minutes:
- trigger:
- platform: time_pattern
minutes: "/5"
action:
- action: seventeentrack.get_packages
data:
config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
package_state:
- in_transit
response_variable: pakete_unterwegs
sensor:
- name: SevTrackPaketeUnterwegs
unique_id: seventeentrack_packages_in_transit
state: "{{ now().isoformat() }}"
icon: mdi:truck-delivery-outline
attributes:
packages: "{{ pakete_unterwegs.packages }}"
- trigger:
- platform: time_pattern
minutes: "/5"
action:
- action: seventeentrack.get_packages
data:
config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
package_state:
- not_found
response_variable: pakete_not_found
sensor:
- name: SevTrackPaketeNichtgefunden
unique_id: seventeentrack_packages_not_found
state: "{{ now().isoformat() }}"
icon: mdi:package-variant-closed
attributes:
packages: "{{ pakete_not_found.packages }}"
- trigger:
- platform: time_pattern
minutes: "/5"
action:
- action: seventeentrack.get_packages
data:
config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
package_state:
- delivered
response_variable: pakete_geliefert
sensor:
- name: SevTrackPaketeGeliefert
unique_id: seventeentrack_packages_delivered
state: "{{ now().isoformat() }}"
icon: mdi:checkbox-marked-circle-outline
attributes:
packages: "{{ pakete_geliefert.packages }}"
- trigger:
- platform: time_pattern
minutes: "/5"
action:
- action: seventeentrack.get_packages
data:
config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
package_state:
- ready_to_be_picked_up
response_variable: pakete_pickup
sensor:
- name: SevTrackPaketeBereitzurAbholung
unique_id: seventeentrack_packages_pickup
state: "{{ now().isoformat() }}"
icon: mdi:package-variant-closed
attributes:
packages: "{{ pakete_pickup.packages }}"
I have created markups for the dashboard with the check whether packages are available (>0):
type: conditional
conditions:
- entity: sensor.seventeentrack_packages_in_transit
state_not: "0"
card:
type: markdown
content: >-
<h1><font color="#f0c216"><ha-icon
icon="mdi:truck-delivery-outline"></ha-icon> Pakete auf dem Weg
</font></h1>
{% for package in
states.sensor.sevtrackpaketeunterwegs.attributes.packages %}
***
>- **{{ package.friendly_name }} ({{ package.tracking_number }}):**
{{ package.info_text }}
**Stand:** {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }}
**Wo ist das Paket derzeit:**
{{ package.location }}
{% endfor %}
***
type: conditional
conditions:
- entity: sensor.seventeentrack_packages_ready_to_be_picked_up
state_not: "0"
card:
type: markdown
content: >-
<h1><font color="#3358ff"><ha-icon
icon="mdi:package-variant-closed"></ha-icon> Pakete in Zustellung
</font></h1>
{% for package in
states.sensor.sevtrackpaketebereitzurabholung.attributes.packages %}
***
>- **{{ package.friendly_name }} ({{ package.tracking_number }}):**
{{ package.info_text }}
{% endfor %}
***
type: conditional
conditions:
- entity: sensor.seventeentrack_packages_not_found
state_not: "0"
card:
type: markdown
content: >-
<h1><font color="#800080"><ha-icon
icon="mdi:package-variant-closed"></ha-icon> Pakete unbekannt
</font></h1>
{% for package in
states.sensor.sevtrackpaketenichtgefunden.attributes.packages %}
>- **{{ package.friendly_name }}**
({{ package.tracking_number }})
{% endfor %} ***
type: conditional
conditions:
- entity: sensor.seventeentrack_packages_delivered
state_not: "0"
card:
type: markdown
content: >-
<h1>
<h1><font color="#30a414"><ha-icon
icon="mdi:checkbox-marked-circle-outline"></ha-icon> Pakete geliefert
</font></h1>
{% for package in
states.sensor.sevtrackpaketegeliefert.attributes.packages %}
***
>- **{{ package.friendly_name }} ({{ package.tracking_number }}):**
{{ package.info_text }}
{% endfor %}
***
Best regards Gunter
@GunterAv Perfect. That'll do me for now until I have some time to rework the visuals to suit my dashboard a little better. I've left the template sensor names in as they are, as I speak German and it might be fun to have some of it in my code! :) Vielen Dank! Ganz nΓΌtzlich! :)
Right here you find the solution to the described problem and for those wondering how this works some more details: https://smarterkram.de/community/postid/1585/
@GunterAv Many thanx, it works like a charm
I hope that someone can help..
I had this simple but efficient code that was perfectly working before..
I am now struggling to find a way to have the same working with the new method (no attibutes).. Tried in many different way with no luck
{# Delivered packages #}
{% for package in states.sensor.seventeentrack_packages_delivered.attributes.packages %}
<font color="green">{{ package.tracking_number }}</font><br>
<b>{{ package.friendly_name }}</b><br>
{{ package.info_text }}<br>
Data:
{% if package.timestamp %}
{{ package.timestamp | as_timestamp | timestamp_custom('%d-%m-%Y - %H:%M', true) }}
{% else %}
Data non disponibile
{% endif %}
<br><br>
{% endfor %}
{# In-transit packages #}
{% for package in states.sensor.seventeentrack_packages_in_transit.attributes.packages %}
<font color="blue">{{ package.tracking_number }}</font><br>
<b>{{ package.friendly_name }}</b><br>
{{ package.info_text }}<br>
Data:
{% if package.timestamp %}
{{ package.timestamp | as_timestamp | timestamp_custom('%d-%m-%Y - %H:%M', true) }}
-
{% set giorni = ((now().timestamp() - (package.timestamp | as_timestamp)) / 86400) | round(0) %}
<font color="red">{{ giorni }} giorno/i fa</font>
{% else %}
Data non disponibile
{% endif %}
<br><br>
{% endfor %}
the service returns no results despite I have on package
Hello,
I now have the βoldβ functionality again. If anyone needs or wants to rebuild it, I'll put my work online here:
This is what the dasboard looks like:
To do this, I created four template sensors that query the status every five minutes:
- trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - in_transit response_variable: pakete_unterwegs sensor: - name: SevTrackPaketeUnterwegs unique_id: seventeentrack_packages_in_transit state: "{{ now().isoformat() }}" icon: mdi:truck-delivery-outline attributes: packages: "{{ pakete_unterwegs.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - not_found response_variable: pakete_not_found sensor: - name: SevTrackPaketeNichtgefunden unique_id: seventeentrack_packages_not_found state: "{{ now().isoformat() }}" icon: mdi:package-variant-closed attributes: packages: "{{ pakete_not_found.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - delivered response_variable: pakete_geliefert sensor: - name: SevTrackPaketeGeliefert unique_id: seventeentrack_packages_delivered state: "{{ now().isoformat() }}" icon: mdi:checkbox-marked-circle-outline attributes: packages: "{{ pakete_geliefert.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - ready_to_be_picked_up response_variable: pakete_pickup sensor: - name: SevTrackPaketeBereitzurAbholung unique_id: seventeentrack_packages_pickup state: "{{ now().isoformat() }}" icon: mdi:package-variant-closed attributes: packages: "{{ pakete_pickup.packages }}"I have created markups for the dashboard with the check whether packages are available (>0):
type: conditional conditions: - entity: sensor.seventeentrack_packages_in_transit state_not: "0" card: type: markdown content: >- <h1><font color="#f0c216"><ha-icon icon="mdi:truck-delivery-outline"></ha-icon> Pakete auf dem Weg </font></h1> {% for package in states.sensor.sevtrackpaketeunterwegs.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} **Stand:** {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} **Wo ist das Paket derzeit:** {{ package.location }} {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_ready_to_be_picked_up state_not: "0" card: type: markdown content: >- <h1><font color="#3358ff"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete in Zustellung </font></h1> {% for package in states.sensor.sevtrackpaketebereitzurabholung.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_not_found state_not: "0" card: type: markdown content: >- <h1><font color="#800080"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete unbekannt </font></h1> {% for package in states.sensor.sevtrackpaketenichtgefunden.attributes.packages %} >- **{{ package.friendly_name }}** ({{ package.tracking_number }}) {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_delivered state_not: "0" card: type: markdown content: >- <h1> <h1><font color="#30a414"><ha-icon icon="mdi:checkbox-marked-circle-outline"></ha-icon> Pakete geliefert </font></h1> {% for package in states.sensor.sevtrackpaketegeliefert.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} {% endfor %} ***Best regards Gunter
@GunterAv could u pls help me to use your method? How should I use your code that you describe as "I created four template sensors that query the state ...."? Thanks
@GunterAv I checked already (before asking your help)..
I need your help to understand how to use that code.. considering that:
- cannot be used in configuration.yaml (combination of trigger, action e sensor)
- cannot be used as automation (sensor cannot be declared in an automation)
Question is.. where to put that code?
Do I need some specific blueprint?
That's the (basic) help I need..
It may seems a stupid question but without this basic info I am not able to use it..
Thanks for the comprehension
You should add it in your template.yaml, because these are templates. If you have a packages folder, just create a yaml file (give it a meaningfull name and start with
template: followed by - trigger: and so forth
Restart Home Assistant. Afterwards you can create the conditional cards mentioned in this post in your dashboard.
thanks.. I now realized how to do.. I confirm it works! Thanks a lot
This is indeed an issue for the documentation, as the extra attributes got removed in 2025.5 (see the backwards incompatible changes in the release notes) after they were deprecated for at least 6 months
The release notes say If you relied on these attributes in your automations or scripts, you will need to update them to use the dedicated sensors instead, which I probably could work with, but the integration doesn't create dedicated sensors for in transit packages (which are the most useful ones). π
Would it be possible to re-add these extra attributes in some way that is acceptable to HA (and if so, could someone give me pointers)?
I'm happy to open a PR so that I can get my custom card working again (without having to create new sensors).
Hello, I now have the βoldβ functionality again. If anyone needs or wants to rebuild it, I'll put my work online here: This is what the dasboard looks like:
To do this, I created four template sensors that query the status every five minutes:
- trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - in_transit response_variable: pakete_unterwegs sensor: - name: SevTrackPaketeUnterwegs unique_id: seventeentrack_packages_in_transit state: "{{ now().isoformat() }}" icon: mdi:truck-delivery-outline attributes: packages: "{{ pakete_unterwegs.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - not_found response_variable: pakete_not_found sensor: - name: SevTrackPaketeNichtgefunden unique_id: seventeentrack_packages_not_found state: "{{ now().isoformat() }}" icon: mdi:package-variant-closed attributes: packages: "{{ pakete_not_found.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - delivered response_variable: pakete_geliefert sensor: - name: SevTrackPaketeGeliefert unique_id: seventeentrack_packages_delivered state: "{{ now().isoformat() }}" icon: mdi:checkbox-marked-circle-outline attributes: packages: "{{ pakete_geliefert.packages }}" - trigger: - platform: time_pattern minutes: "/5" action: - action: seventeentrack.get_packages data: config_entry_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX package_state: - ready_to_be_picked_up response_variable: pakete_pickup sensor: - name: SevTrackPaketeBereitzurAbholung unique_id: seventeentrack_packages_pickup state: "{{ now().isoformat() }}" icon: mdi:package-variant-closed attributes: packages: "{{ pakete_pickup.packages }}"I have created markups for the dashboard with the check whether packages are available (>0):
type: conditional conditions: - entity: sensor.seventeentrack_packages_in_transit state_not: "0" card: type: markdown content: >- <h1><font color="#f0c216"><ha-icon icon="mdi:truck-delivery-outline"></ha-icon> Pakete auf dem Weg </font></h1> {% for package in states.sensor.sevtrackpaketeunterwegs.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} **Stand:** {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} **Wo ist das Paket derzeit:** {{ package.location }} {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_ready_to_be_picked_up state_not: "0" card: type: markdown content: >- <h1><font color="#3358ff"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete in Zustellung </font></h1> {% for package in states.sensor.sevtrackpaketebereitzurabholung.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_not_found state_not: "0" card: type: markdown content: >- <h1><font color="#800080"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete unbekannt </font></h1> {% for package in states.sensor.sevtrackpaketenichtgefunden.attributes.packages %} >- **{{ package.friendly_name }}** ({{ package.tracking_number }}) {% endfor %} *** type: conditional conditions: - entity: sensor.seventeentrack_packages_delivered state_not: "0" card: type: markdown content: >- <h1> <h1><font color="#30a414"><ha-icon icon="mdi:checkbox-marked-circle-outline"></ha-icon> Pakete geliefert </font></h1> {% for package in states.sensor.sevtrackpaketegeliefert.attributes.packages %} *** >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} {% endfor %} ***Best regards Gunter
@GunterAv could u pls help me to use your method? How should I use your code that you describe as "I created four template sensors that query the state ...."? Thanks
this works, BUT basically you do 4 API call to 17tracks every 5 minutes, so 48 api calls per day. PLUS the normal api calls of the integration that still updates the basic sensors. Is there a limit? Possible improvement could be to do only ONE sensor that gets all the package states, this would "only" do 12 calls per day. And maybe the templates could trigger the api call only if the basic sensors have state >0.
Still all of this seems so convoluted, what was wrong with the old way?
Sorry, but this still not working for me. HA updated to 2025.5.3 and I am unable to obtain any package number from the 17Track sensors. I only do ge the number of items on each state, but not the properties.
If I try to use the Markdown template listed on https://www.home-assistant.io/integrations/seventeentrack/ this is the error I get:
Please note that the entity is language dependent and being my local language Spanish, this is refering to:
Sorry, but this still not working for me. HA updated to 2025.5.3 and I am unable to obtain any package number from the 17Track sensors. I only do ge the number of items on each state, but not the properties.
If I try to use the Markdown template listed on https://www.home-assistant.io/integrations/seventeentrack/ this is the error I get:
Please note that the entity is language dependent and being my local language Spanish, this is refering to:
go to developer settings, actions, fire up the 17track action. If you get the packages, the integration works fine. Everything else is yaml code to re-create somehow the past behavior
Sorry, but this still not working for me. HA updated to 2025.5.3 and I am unable to obtain any package number from the 17Track sensors. I only do ge the number of items on each state, but not the properties. If I try to use the Markdown template listed on https://www.home-assistant.io/integrations/seventeentrack/ this is the error I get:
Please note that the entity is language dependent and being my local language Spanish, this is refering to:
go to developer settings, actions, fire up the 17track action. If you get the packages, the integration works fine. Everything else is yaml code to re-create somehow the past behavior
That worked, thanks. I am able to retrieve the packages properties from the Developer Tools / Actions and choosing seventeentrack.get_packages. On that execution I do get all the properties I was missing: (destination_country, origin_country, tracking_number, ...).
After uninstalling and reinstalling, the sensors will appear. In developer tools in actions I can get the data after seventeentrack.get_packages. Now how can I use this obtained data so that I can see it on the card? the card only shows the number of packages.
After uninstalling and reinstalling, the sensors will appear. In developer tools in actions I can get the data after seventeentrack.get_packages. Now how can I use this obtained data so that I can see it on the card? the card only shows the number of packages.
You have to define one by one the new sensors in template.yaml and then create a new conditional card referencing those sensors to retrieve the package(s) propertie(s).
If those are properly created, they will appear in helpers.
Unfortunately the preconfigured card does not show anymore any package property, other than the number of packages in each state, as it seems you have to customize that query.
GunterAV code works well once you get that sorted.
I've already made corrections to the code and the status shows unknown, I'm already feeling a bit dizzy π I think I should take @GunterAv code and change it to mine. is that all?
@rapiqui , the 17track sensor entities are in my language, when I create the sensors in template.yaml, I have to put it in the same language as well, in this case mine is Portuguese. With the code @GunterAv , I can't get there π. There are sensors in English and then there are also in German. I've been going around here and I can't π If you don't mind, could you paste your code here to see if I could do something? Thanks
why? just why?
There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest Home Assistant version and check if that solves the issue. Let us know if that works for you by adding a comment π This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.