bentou
(bentou)
May 29, 2024, 9:25am
1
Hello,
here is a card I made to follow my parcels comming all around the world from ebay or aliexpress…
With a short click on the logo, you jump on the web site, with a long click, it is the mobile web site.
The cards will be hidden if there are no item concerned.
Just add the tracking number on the web site or the mobile app, it will be displayed and updated on tour dashboard.
You can archive a parcel, it will disappear from the screen. here is my 17track configuration (standard integration):
The image /local/images/divers/full_owt_296x48.svg
comes from https://res.17track.net/global-v2/imgs/logo/svg/full_owt_296x48.svg
type: vertical-stack
cards:
- type: picture
image: /local/images/divers/full_owt_296x48.svg
tap_action:
action: url
url_path: https://buyer.17track.net/en/myshipment
hold_action:
action: url
url_path: https://m.17track.net/en/track
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_not_found
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_not_found.attributes.packages %}
>- <ha-icon icon="mdi:timer-sand"></ha-icon><font color= grey> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_in_transit
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_in_transit.attributes.packages %}
>- <ha-icon icon="mdi:airplane"></ha-icon><font color= Deepskyblue> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_ready_to_be_picked_up
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_ready_to_be_picked_up.attributes.packages
%} >- <ha-icon icon="mdi:flag-outline"></ha-icon><font color= royalblue>
**{{ package.friendly_name }} ({{ package.tracking_number }})</font>:**
{{ package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_delivered
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_delivered.attributes.packages %}
>- <ha-icon icon="mdi:check"></ha-icon><font color= limegreen> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_returned
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_returned.attributes.packages %} >-
<ha-icon icon="mdi:alert-box"></ha-icon><font color= red> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_undelivered
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_undelivered.attributes.packages %}
>- <ha-icon icon="mdi:alert-box"></ha-icon><font color= red> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.seventeentrack_packages_expired
above: 0
card:
type: markdown
content: >-
{% for package in
states.sensor.seventeentrack_packages_expired.attributes.packages %} >-
<ha-icon icon="mdi:alert-box"></ha-icon><font color= red> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
Have fun,
Benoît.
4 Likes
Is this still working with the new sensor names? I get error in the templates:
{% for package in states.sensor.17track_in_transit.attributes.packages %}
>- <ha-icon icon="mdi:airplane"></ha-icon><font color= Deepskyblue> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
ERROR: TemplateSyntaxError: expected token 'end of statement block', got 'track_in_transit'
Something to do with the sensor having a number right after the “sensor.”?
Thanks in advance
1 Like
bentou
(bentou)
December 5, 2024, 1:22pm
4
Hello,
I didn’t see any issue up to november version of HA.
I usually wait at least the 15th of the month before any upgrade
bentou
(bentou)
December 9, 2024, 6:39pm
5
Hello,
I had ro reinstall the application, so I have the new sensors.
and I had some issues. Corrected below:
type: vertical-stack
cards:
- type: picture
image: /local/images/divers/17track_296x48.svg
tap_action:
action: url
url_path: https://buyer.17track.net/en/myshipment
hold_action:
action: url
url_path: https://m.17track.net/en/track
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_not_found
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_not_found','packages') %}
>- <ha-icon icon="mdi:timer-sand"></ha-icon><font color= grey> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_in_transit
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_in_transit','packages') %}
>- <ha-icon icon="mdi:airplane"></ha-icon><font color= Deepskyblue> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_ready_to_be_picked_up
above: 0
card:
type: markdown
content: >-
{% for package in
state_attr('sensor.17track_ready_to_be_picked_up','packages') %} >-
<ha-icon icon="mdi:flag"></ha-icon><font color=blue> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_delivered
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_delivered','packages') %}
>- <ha-icon icon="mdi:check"></ha-icon><font color= limegreen> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_undelivered
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_undelivered','packages') %}
>- <ha-icon icon="mdi:emoticon-sad-outline"></ha-icon><font color= red>
**{{ package.friendly_name }} ({{ package.tracking_number }})</font>:**
{{ package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_expired
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_expired','packages') %} >-
<ha-icon icon="mdi:history"></ha-icon><font color=brown> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.17track_none
above: 0
card:
type: markdown
content: >-
{% for package in state_attr('sensor.17track_none','packages') %} >-
<ha-icon icon="mdi:alert-box"></ha-icon><font color= orange> **{{
package.friendly_name }} ({{ package.tracking_number }})</font>:** {{
package.info_text }} {{'\n'}} {% endfor %}
Regards,
Benoit.
2 Likes
I use a Markdown card instead, jinja macros are our friends:
type: markdown
title: 17Track Packages
content: >
{%- set details = {
'sensor.17track_in_transit': {'icon': 'mdi:airplane', 'color': 'deepskyblue'},
'sensor.17track_undelivered': {'icon': 'mdi:alert-box', 'color': 'red'},
'sensor.17track_not_found': {'icon': 'mdi:timer-sand', 'color':'grey'},
'sensor.17track_expired': {'icon': 'mdi:alert-box', 'color': 'red'},
'sensor.17track_ready_to_be_picked_up': {'icon': 'mdi:flag-outline', 'color': 'royalblue'},
'sensor.17track_delivered': {'icon': 'mdi:check', 'color': 'limegreen'},
'sensor.17track_none': {'icon': 'mdi:alert-box', 'color': 'red'}
} -%}
{%- macro format_package(package, sensor) -%}
<p><ha-icon icon="{{details[sensor].icon}}"></ha-icon> <b><font
color="{{details[sensor].color}}">
{%- if package.friendly_name -%}
{{ package.friendly_name}} ({{ package.tracking_number }})
{%- else -%}
{{ package.tracking_number }}
{%- endif -%}</font></b><br/>
{{ package.info_text | regex_replace(',? Carrier note:.*', '') }}
{%- if package.location %} {{ package.location }}{%- endif %}<br/>
<i>Updated: {{as_timestamp(package.timestamp) | timestamp_custom("%a %h %d
%-I:%M%p", local=True) }}</i></p>
{%- endmacro -%}
{% for sensor in device_entities(device_id('sensor.17track_delivered')) %}
{% if state_attr(sensor, 'packages') %}
#### {{ state_attr(sensor, 'friendly_name')|replace('17Track ', '') }}
{% for package in state_attr(sensor, 'packages') %}
{{ format_package(package, sensor) -}}
{% endfor %}
{% endif %}
{% endfor %}
never mind, it works after removing and reinstalling
bentou
(bentou)
April 15, 2025, 9:21am
9
that’s neat !!!
but if I have this line:
<i>Updated: {{as_timestamp(package.timestamp) | timestamp_custom("%a %h %d
%-I:%M%p", local=True) }}</i></p>
i get the message
ValueError: Template error: as_timestamp got invalid input 'None' when rendering template '{%- set details = { 'sensor.17track_in_transit': {'icon': 'mdi:airplane', 'color': 'deepskyblue'}, 'sensor.17track_undelivered': {'icon': 'mdi:alert-box', 'color': 'red'}, 'sensor.17track_not_found': {'icon': 'mdi:timer-sand', 'color':'grey'}, 'sensor.17track_expired': {'icon': 'mdi:alert-box', 'color': 'red'}, 'sensor.17track_ready_to_be_picked_up': {'icon': 'mdi:flag-outline', 'color': 'royalblue'}, 'sensor.17track_delivered': {'icon': 'mdi:check', 'color': 'limegreen'}, 'sensor.17track_none': {'icon': 'mdi:alert-box', 'color': 'red'} } -%} {%- macro format_package(package, sensor) -%} <p><ha-icon icon="{{details[sensor].icon}}"></ha-icon> <b><font color="{{details[sensor].color}}"> {%- if package.friendly_name -%} {{ package.friendly_name}} ({{ package.tracking_number }}) {%- else -%} {{ package.tracking_number }} {%- endif -%}</font></b><br/> {{ package.info_text | regex_replace(',? Carrier note:.*', '') }} {%- if package.location %} {{ package.location }}{%- endif %}<br/> <i>Updated: {{as_timestamp(package.timestamp) | timestamp_custom("%a %h %d %-I:%M%p", local=True) }}</i></p> {%- endmacro -%} {% for sensor in device_entities(device_id('sensor.17track_delivered')) %} {% if state_attr(sensor, 'packages') %} #### {{ state_attr(sensor, 'friendly_name')|replace('17Track ', '') }} {% for package in state_attr(sensor, 'packages') %} {{ format_package(package, sensor) -}} {% endfor %} {% endif %} {% endfor %}' but no default was specified