@gunni Bei meiner Lösung habe ich ergänzt, wie man auf die Attribut-Daten zugreift.
Hallo Olli,
Danke für deine Hilfe ich habe nun wieder die "alte" Funktionaltität.
Falls das jemand auch nachbauen muss bzw. will, stelle ich hier meine Arbeit Online:
So sieht das Dasboard dafür aus:
Dazu habe ich vier Template-Sensoren erstellt die alle fünf Minuten den Zustand abfragen:
- 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 }}"
Für das Dashboard habe ich Markups erstellt mit der Prüfung ob Pakete vorhanden sind (>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 %} ***
Viele Grüße
Gunter
Hallo @all!
Ich habe noch folgendes gefunden, gefällt mit besser als meine Lösung:
https://github.com/home-assistant/core/issues/146634#issuecomment-3031355775
Meine Lösung ist etwas angepasst, so das auch über einen Button auf dem Dashboard
Eine Abfrage bei 17Tack erfolgen kann.
Screenshot:
Zusätzlich wird pro Sendung ein Link generiert der die Sendungsverfolgung von 17 Track aufruft:
benötigt wird dazu:
* Das folgende Python-Skript (installieren): https://github.com/pmazz/ps_hassio_entities
* Helper:
https://my.home-assistant.io/redirect/helpers/
Einen Taste (Button) Helper:
- 17trackstart
Sechs Text-Eingabe (Text) Helper:
- parcels_not_found
- parcels_in_transit
- parcels_out_for_delivery
- parcels_delivered
- parcels_undelivered
- parcels_alert
alias: 17Track description: Automation to fetch package status from 17Track triggers: - trigger: time_pattern hours: /1 - trigger: homeassistant event: start id: start - trigger: state entity_id: - input_button.17trackstart conditions: [] actions: - if: - condition: trigger id: - start then: - delay: hours: 0 minutes: 0 seconds: 10 milliseconds: 0 - action: seventeentrack.get_packages data: package_state: - not_found config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR response_variable: notfound - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_not_found state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ notfound.packages|length }}" - markdown: > ## <h1><font color="#800080"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete unbekannt ({{notfound.packages|length}})</font></h1> {% if notfound.packages|length > 0 %} {% for package in notfound.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}}{% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** - action: seventeentrack.get_packages data: package_state: - in_transit config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR response_variable: intransit - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_in_transit state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ intransit.packages|length }}" - markdown: > ## <h1><font color="#f0c216"><ha-icon icon="mdi:truck-delivery-outline"></ha-icon> Pakete auf dem Weg ({{intransit.packages|length}})</font></h1> {% if intransit.packages|length > 0 %} {% for package in intransit.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}}{% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** - delay: hours: 0 minutes: 0 seconds: 0 milliseconds: 500 - action: seventeentrack.get_packages data: config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR package_state: - ready_to_be_picked_up response_variable: outfordelivery - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_out_for_delivery state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ outfordelivery.packages|length }}" - markdown: > ## <h1><font color="#3358ff"><ha-icon icon="mdi:package-variant-closed"></ha-icon> Pakete in Zustellung ({{outfordelivery.packages|length}})</font></h1> {% if outfordelivery.packages|length > 0 %} {% for package in outfordelivery.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}}{% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** - action: seventeentrack.get_packages data: config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR package_state: - delivered response_variable: delivered - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_delivered state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ delivered.packages|length }}" - markdown: > ## <h1><font color="#30a414"><ha-icon icon="mdi:checkbox-marked-circle-outline"></ha-icon> Pakete geliefert ({{delivered.packages|length}})</font></h1> {% if delivered.packages|length > 0 %} {% for package in delivered.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}} {% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** - delay: hours: 0 minutes: 0 seconds: 0 milliseconds: 500 - action: seventeentrack.get_packages data: config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR package_state: - undelivered response_variable: undelivered - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_undelivered state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ undelivered.packages|length }}" - markdown: > ## <h1><font color="#ff9966"><ha-icon icon="mdi:archive-cancel"></ha-icon> Pakete nicht geliefert ({{undelivered.packages|length}})</font></h1> {% if undelivered.packages|length > 0 %} {% for package in undelivered.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}}{% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** - action: seventeentrack.get_packages data: config_entry_id: 01JZ7GQE5EGHWHVHAEAT4NNSDR package_state: - alert response_variable: alert - action: python_script.hass_entities metadata: {} data: action: set_state_attributes entity_id: input_text.parcels_alert state: "{{ 'Stand: '~ now().strftime('%H:%M')}}" attributes: - amount: "{{ alert.packages|length }}" - markdown: > ## <h1><font color="#FF0000"><ha-icon icon="mdi:archive-alert"></ha-icon> Warnung ({{alert.packages|length}})</font></h1> {% if alert.packages|length > 0 %} {% for package in alert.packages %} *** - **{% if package.friendly_name != None and package.friendly_name|length > 0 %}{{ package.friendly_name }} ({{ package.tracking_number }}){% else %}{{package.tracking_number}} {% endif %}** {% if package.info_text != None and package.info_text|length > 0 %}**Status**: {{ package.info_text }}{% endif %} {% if package.timestamp is defined and package.timestamp != None %}**Stand**: {{ (package.timestamp | as_datetime).strftime('%d.%m.%Y - %H:%M Uhr') }} {% endif %} {% if package.location != None and package.location|length > 0 %}**Standort**: {{ package.location }}{% endif %} [Web Sendungsverfolgung](https://t.17track.net/de#nums={{package.tracking_number}}) {% endfor %} {% else %} - {% endif %} *** mode: single
Dashboard (3 Cards):
1.:
type: markdown content: |- {% if (not 'amount' in states.input_text.parcels_in_transit.attributes) %} No parcels tracked at this time {% else %} {% if states.input_text.parcels_in_transit.attributes.amount|int > 0 %} {{states.input_text.parcels_in_transit.attributes.markdown}} {% endif %} {% if states.input_text.parcels_out_for_delivery.attributes.amount|int > 0 %} {{states.input_text.parcels_out_for_delivery.attributes.markdown}} {% endif %} {% if states.input_text.parcels_delivered.attributes.amount|int > 0 %} {{states.input_text.parcels_delivered.attributes.markdown}} {% endif %} {% if states.input_text.parcels_not_found.attributes.amount|int > 0 %} {{states.input_text.parcels_not_found.attributes.markdown}} {% endif %} {% endif %}
2.: (Für hier habe ich den Standard HA Button verwendet):
show_name: false show_icon: true type: button entity: input_button.17trackstart
3.:
type: markdown content: > <h5><font color='#097fba')>Ausgelöst: {{ as_timestamp(state_attr("automation.17track","last_triggered") )|timestamp_custom("%d.%m.%Y um %H:%M Uhr") }} [17track.net](https://user.17track.net/de)
Viele Grüße
Gunter
Produktempfehlungen