# Rückgabe aus einer Aktion für das Dashboard aufbereiten...

**URL:** <https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272>\
**Category:** Eure Fragen und Antworten\
**Created:** [10. Mai 2025 um 04:04 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272 "2025-05-10T04:04:42Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 04:04 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/1 "2025-05-10T04:04:42Z")

</div>

Hallo,

&nbsp;

mit der neuen Version 2025.05 hat sich die Intergration „17Track“ [(Dokumentation](https://www.home-assistant.io/integrations/seventeentrack)) geändert.

Leider wurde die Doku nicht angepasst ([siehe auch](https://github.com/home-assistant/core/issues/144499.)).

Ich habe zuvor meine Pakete wie unter „Examples/Dashboard summary card“ beschrieben, in meinem Dashboard angezeigt.

Jetzt gibt es nur noch die Aktion „seventeentrack.get\_packages“

Diese gibt folgendes Zurück:

```
packages:
  - destination_country: Germany
    origin_country: Poland
    package_type: Registered Parcel
    tracking_info_language: Unknown
    tracking_number: 1ZXXXXXXXXXXXXX
    location: Ort, DE
    status: In Transit
    info_text: Arrived at Facility
    friendly_name: Lieferung
    timestamp: "2025-05-10T04:36:00+00:00"

```

oder als Template:

```
{% set action_response = {"packages":[{"destination_country":"Germany","origin_country":"Poland","package_type":"Registered Parcel","tracking_info_language":"Unknown","tracking_number":"1ZXXXXXXXXXXXXX","location":"Ort, DE","status":"In Transit","info_text":"Arrived at Facility","friendly_name":"Lieferung","timestamp":"2025-05-10T04:36:00+00:00"}]} %}

```

&nbsp;

Wie kann ich diese Rückgabe so aufbereiten, so das ich diese in meinem Dashboard anzeigen kann?

Viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 05:11 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/2 "2025-05-10T05:11:12Z")

</div>

… mit zwei Pakten erhalte ich folgende Ausgaben:

```
packages:
  - destination_country: Unknown
    origin_country: Germany
    package_type: Registered Parcel
    tracking_info_language: Unknown
    tracking_number: "0034043XXXXXX"
    location: ""
    status: Not Found
    info_text: null
    friendly_name: Lieferung 2
  - destination_country: Germany
    origin_country: Poland
    package_type: Registered Parcel
    tracking_info_language: Unknown
    tracking_number: 1ZXXXXXXXXXXXXX
    location: Ort, DE
    status: In Transit
    info_text: Arrived at Facility
    friendly_name: Lieferung
    timestamp: "2025-05-10T04:36:00+00:00"

```

oder als Template:

```
{% set action_response = {"packages":[{"destination_country":"Unknown","origin_country":"Germany","package_type":"Registered Parcel","tracking_info_language":"Unknown","tracking_number":"0034043XXXXXX","location":"","status":"Not Found","info_text":null,"friendly_name":"Lieferung 1"},{"destination_country":"Germany","origin_country":"Poland","package_type":"Registered Parcel","tracking_info_language":"Unknown","tracking_number":"1ZXXXXXXXXXXXXX","location":"Ort, DE","status":"In Transit","info_text":"Arrived at Facility","friendly_name":"Lieferung 1","timestamp":"2025-05-10T04:36:00+00:00"}]} %}

```

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [10. Mai 2025 um 13:01 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/3 "2025-05-10T13:01:50Z")

</div>

Ich selbst nutze die Integration nicht, aber die Response müsste man zwischenspeichern und dann parsen.

In der 2025.5 Release-Note steht dazu ja folgendes:

 ![image.png](https://community.smarterkram.de/uploads/default/original/1X/1363b5caeefe23cf0b70d4b89c5c417581a681d5.png)

> **[2025.5: Two Million Strong and Getting Better](https://www.home-assistant.io/blog/2025/05/07/release-20255/#backward-incompatible-changes)**
>
> Celebrating 2 million users with quality of life improvements! Enjoy smarter backups with per-location retention, Z-Wave Long Range support, an improved entity picking experience, tons of new voice...

Das liest sich für mich so, als würde es dedizierte Sensoren nun geben?

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 13:11 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/4 "2025-05-10T13:11:00Z")

</div>

Hallo Olli,

leider Nein!  
Keine neue Sensoren, nur die Ausgabe über seventeentrack.get\_packages

Viele Grüße

Gunter

&nbsp;

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [10. Mai 2025 um 13:38 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/5 "2025-05-10T13:38:11Z")

</div>

Über einen Template-Sensor und die Aktion seventeentrack.get\_packages müsste man sich die Response doch aufbereiten können, ähnlich wie bei den Wetterdaten. Dort macht man ja bspw. folgendes:

```
template:
  - trigger:
      - platform: time_pattern
        hours: "/1"
    action:
      - action: weather.get_forecasts
        target:
          entity_id:
            - weather.forecast_home
        data:
          type: daily
        response_variable: vorhersage
    sensor:
      - name: Wettervorhersage
        unique_id: weather_entity_forecast
        state: "{{ now().isoformat() }}"
        icon: mdi:calendar-range
        attributes:
          forecast: "{{ vorhersage['weather.forecast_home'].forecast }}"

```

&nbsp;

Also bspw. alle 15 Minuten das Ding triggern, als action halt seventeentrack.get\_packages und die Response in einen neuen Sensor packen und dort die eigentliche Response als Attribute speichern. Weißt du, wie es meine?

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 13:59 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/6 "2025-05-10T13:59:44Z")

</div>

Hallo Olli,

leider nein.

Ich benötige aus den Daten:

tracking\_number: 1ZXXXXXXXXXXXXX  
location: Ort, DE  
status: In Transit  
info\_text: Arrived at Facility  
friendly\_name: Lieferung

Diese Daten habe ich zuvor in einem Markup angezeigt.

Viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [10. Mai 2025 um 15:05 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/7 "2025-05-10T15:05:15Z")

</div>

Also es gibt doch je Paketzustand einen eigenen Sensor:

 ![Screenshot_20250510-223129.png](https://community.smarterkram.de/uploads/default/original/1X/e8c04fc74c1897b3246126173726628c0cfcad91.png)

Und sofern ein Sensor \>0 ist steht in dem Attribut die Paket-Liste. In einer Markdown-Karte kann man nun prüfen, ob der jeweilige Zustandssensor \> 0 ist und wenn ja durch das Attribut iterieren.

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 15:11 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/8 "2025-05-10T15:11:20Z")

</div>

Hallo Olli,

ja, es gibt diese Sensoren, aber nur die Anzahl der Pakete.

&nbsp;

 ![Screenshot 2025-05-10 223820.png](https://community.smarterkram.de/uploads/default/original/1X/dc2a9a9f90cda4bf1e4a311d26584d49729f8e72.png)

Weiteren Datem sind nicht ersichtlich. keine Attribute.

Viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [10. Mai 2025 um 15:28 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/9 "2025-05-10T15:28:00Z")

</div>

Doch klar, schau dir die Attribute mal in den Entwicklerwerkzeugen an. Wenn \> 0, dann ist das Attribut gefüllt:

 ![Screenshot_20250510-225643.png](https://community.smarterkram.de/uploads/default/original/1X/d98263dba5927791bc34861bcc3ce78cd7123be3.png)

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 15:32 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/10 "2025-05-10T15:32:12Z")

</div>

Hallo Olli,

bei mir nicht.

![Screenshot 2025-05-10 223820.png](https://community.smarterkram.de/uploads/default/optimized/1X/2ad1184623d26bebd0a5b57bbc0a02d448308e4b_2_690x45.png)

Viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [10. Mai 2025 um 15:33 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/11 "2025-05-10T15:33:11Z")

</div>

Core Version: 2025.5.1

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [11. Mai 2025 um 04:20 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/12 "2025-05-11T04:20:39Z")

</div>

Ja, mein Fehler… Das war eine Testumgebung mit 2025.4.x - Sorry!

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [11. Mai 2025 um 04:25 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/13 "2025-05-11T04:25:25Z")

</div>

Erstelle eine Template-Sensor, die wie folgt aussehen kann:

```
- trigger:
    - platform: time_pattern
      minutes: "/15"
  action:
    - action: seventeentrack.get_packages
      data:
        config_entry_id: DEINE_ID_AUS_ENTWICKLERWERKZEUGEN
      response_variable: tmp_packages
  sensor:
    - name: Paketlieferungen
      unique_id: my_packages
      state: "{{ now().isoformat() }}"
      icon: mdi:calendar-range
      attributes:
        packages: "{{ tmp_packages.packages }}"

```

&nbsp;

Die config\_entry\_id kannst du in den Entwicklerwerkzeugen auslesen, wenn du die Aktion ausführst und in den YAML-Modus wechselst. Der Template-Sensor wird alle 15 Minuten die Aktion ausführen und deine Daten aktualisieren.

Als Ergebnis bekommst du einen neuen Sensor sensor.paketlieferungen, der alle gem. Aktion definierten Pakete (in meinem Beispiel keine Einschränkungen) enthält:

 ![image.png](https://community.smarterkram.de/uploads/default/original/1X/82eaf01e04a6dc8e8f06cf5b4ce7301ca3284036.png)

Über die Aktion kannst du bei Bedarf noch definieren, welche Stati in dem Sensor enthalten sein sollen.

Über die Attribute kann man dann iterieren, bspw. auch in einer Markdown-Card. Hierfür könnte der Code wie folgt aussehen:

```
{% for package in states.sensor.paketlieferungen.attributes.packages %}
{{ package.friendly_name }} ({{ package.tracking_number }}): {{ package.info_text }}
{% endfor %}

```

Und das Ergebnis ist dann:

 ![{1FF8F7A5-588B-48AB-96D0-CEA20AB2C03F}.png](https://community.smarterkram.de/uploads/default/original/1X/997c20f074d9e7cdf71ca62274b10b504960100b.png)

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [11. Mai 2025 um 04:26 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/14 "2025-05-11T04:26:47Z")

</div>

Hallo Olli,

kannst du mir erklären wie ich den Template-Sensor aufbauen muss, z.B. für die Einträge „tracking\_number“ die von der Rückgabe zurückgegeben werden?

Danke und viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [11. Mai 2025 um 05:02 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/15 "2025-05-11T05:02:16Z")

</div>

Hallo Olli,

ich habe jetzt mal einen Template Sendor zum Test aufgebaut, ich denke ich komme so mal einen Schritt weiter. Danke.

```
- trigger:
      - platform: time_pattern
        minutes: "/1"
    action:
      - action: seventeentrack.get_packages
        data:
          config_entry_id: XXXXXXX
        response_variable: pakete
    sensor:
      - name: 17TrackPakete
        unique_id: seventeentrack_packages
        state: "{{ now().isoformat() }}"
        icon: mdi:package-variant-closed
        attributes:
          rueckgabe: "{{ pakete.packages }}"

```

&nbsp;

Viele Grüße  
Gunter

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [11. Mai 2025 um 07:11 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/16 "2025-05-11T07:11:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [11. Mai 2025 um 07:14 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/17 "2025-05-11T07:14:36Z")

</div>

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.png](https://community.smarterkram.de/uploads/default/original/1X/c366599fb45b89080d696813bfdda630fdb4469e.png)

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 }}"

```

&nbsp;

Für das Dashboard habe ich Markups erstellt mit der Prüfung ob Pakete vorhanden sind (\>0):

&nbsp;

```
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

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![gunni](https://community.smarterkram.de/letter_avatar_proxy/v4/letter/g/ed655f/32.png) [@gunni](https://community.smarterkram.de/u/gunni)\
**Post date:** [9. Juli 2025 um 05:54 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/18 "2025-07-09T05:54:20Z")

</div>

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](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.jpg](https://community.smarterkram.de/uploads/default/original/1X/3b5c05c6b4811ba9e3ba1457a55d2328a730b5b7.jpeg)

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](https://github.com/pmazz/ps_hassio_entities)

\* Helper:  
[https://my.home-assistant.io/redirect/helpers/](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](https://my.home-assistant.io/redirect/automations/):

```
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

```

&nbsp;

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)

```

&nbsp;

Viele Grüße  
Gunter

&nbsp;

---

<div class="post-metadata">

**Author:** ![olli](https://community.smarterkram.de/user_avatar/community.smarterkram.de/olli/32/144_2.png) [@olli](https://community.smarterkram.de/u/olli)\
**Post date:** [9. Juli 2025 um 12:37 UTC](https://community.smarterkram.de/t/rueckgabe-aus-einer-aktion-fuer-das-dashboard-aufbereiten/272/19 "2025-07-09T12:37:24Z")

</div>

Das sieht richtig gut aus, lieber @gunni&nbsp;

Vielen Dank fürs Teilen!💪
