Benachrichtigungen
Alles löschen

[Gelöst] Rückgabe aus einer Aktion für das Dashboard aufbereiten...

19 Beiträge
2 Benutzer
2 Reactions
636 Ansichten
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 10 Jahren
Beiträge: 767
 

@gunni Bei meiner Lösung habe ich ergänzt, wie man auf die Attribut-Daten zugreift.


   
AntwortZitat
(@gunni)
Trusted Member
Beigetreten: Vor 10 Monaten
Beiträge: 41
Themenstarter  

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:

Screenshot 2025 05 11 143124

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

 

 


   
Olli reacted
AntwortZitat
(@gunni)
Trusted Member
Beigetreten: Vor 10 Monaten
Beiträge: 41
Themenstarter  

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:

Unbenannt 1

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

Automation:

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

 


   
AntwortZitat
 Olli
(@olli)
Mitglied Admin
Beigetreten: Vor 10 Jahren
Beiträge: 767
 

Das sieht richtig gut aus, lieber @gunni 

Vielen Dank fürs Teilen!💪


   
AntwortZitat
Seite 2 / 2