Rezepte¶
Elf fertige Beispiele zum Kopieren. Jedes Rezept sagt, wofür es gut ist, zeigt das YAML und nennt, was du anpassen musst.
So benutzt du ein Rezept¶
Automation:
- Einstellungen → Automationen & Szenen → Automation erstellen → neue, leere Automation.
- Im Editor über das Menü (⋮) oben rechts auf die YAML-Ansicht umschalten.
- Das YAML aus dem Rezept einfügen.
- Die Platzhalter ersetzen (siehe „Anpassen“ beim Rezept) und speichern.
Dashboard-Karte: Dashboard bearbeiten → Karte hinzufügen → ganz unten „Manuell“ wählen und das YAML einfügen.
Platzhalter
Diese Namen gibt es bei dir nicht. Ersetz sie durch deine eigenen Entitäten und Dienste:
| Platzhalter | Ersetzen durch |
|---|---|
notify.mobile_app_dein_handy |
den Benachrichtigungsdienst deines Handys |
binary_sensor.paketbox_klappe |
den Kontakt an deiner Paketbox oder deinem Briefkasten |
binary_sensor.einfahrt_lieferwagen |
deinen eigenen Sensor, der ein Lieferfahrzeug erkennt |
light.paket_led |
dein Licht oder deine LED |
tts.dein_tts_dienst |
deine Sprachausgabe |
media_player.dein_lautsprecher |
deinen Lautsprecher |
Alles, was mit sensor.pakete_, calendar.pakete oder parcel_tracker beginnt, kommt von der Integration und bleibt, wie es ist.
Doppelte Meldungen
Hast du die eingebauten Benachrichtigungen eingeschaltet, melden sie „in Zustellung“, „zugestellt“ und „abholbereit“ schon von selbst. Ein Rezept, das dasselbe meldet, verdoppelt die Meldung.
Die Namen von Entitäten, Attributen, Diensten und Event-Feldern in den Rezepten sind gegen den Code der Integration geprüft. Als ganze Automation mit echten Paketen ist nicht jedes Rezept durchgelaufen – probier ein Rezept aus, bevor du dich darauf verlässt.
1. Morgens ansagen, was heute kommt¶
Wofür: Du bekommst jeden Morgen eine Nachricht (oder eine Ansage), wie viele Pakete heute kommen und welche.
alias: "Pakete: Meldung am Morgen"
triggers:
- trigger: time
at: "07:30:00"
conditions:
- condition: numeric_state
entity_id: sensor.pakete_heute
above: 0
actions:
- action: notify.mobile_app_dein_handy
data:
title: "Pakete heute"
message: >-
{% set pakete = state_attr('sensor.pakete_heute', 'parcels') or [] %}
Heute {{ 'kommt 1 Paket' if pakete | count == 1 else 'kommen ' ~ (pakete | count) ~ ' Pakete' }}:
{{ pakete | map(attribute='name') | map('default', 'Paket ohne Namen', true) | join(', ') }}
mode: single
alias: "Pakete: Ansage am Morgen"
triggers:
- trigger: time
at: "07:30:00"
conditions:
- condition: numeric_state
entity_id: sensor.pakete_heute
above: 0
actions:
- action: tts.speak
target:
entity_id: tts.dein_tts_dienst
data:
media_player_entity_id: media_player.dein_lautsprecher
message: >-
{% set pakete = state_attr('sensor.pakete_heute', 'parcels') or [] %}
Heute {{ 'kommt ein Paket' if pakete | count == 1 else 'kommen ' ~ (pakete | count) ~ ' Pakete' }}:
{{ pakete | map(attribute='name') | map('default', 'ein Paket ohne Namen', true) | join(', ') }}
mode: single
Anpassen:
07:30:00: deine Uhrzeit.notify.mobile_app_dein_handybzw.tts.dein_tts_dienstundmedia_player.dein_lautsprecher: deine eigenen.sensor.pakete_heutezählt nur, was heute sicher kommt („In Zustellung“ oder fester Liefertag heute). Morgens ist ein Paket oft noch nicht „In Zustellung“. Willst du auch die möglichen Pakete nennen, nimm zusätzlichstate_attr('sensor.pakete_heute', 'possible_count').- Mit eingeschaltetem „Namen ausblenden“ nennt die Meldung nur neutrale Namen wie „DHL-Paket …2557“.
2. Paketbox geht auf: welches Paket war das?¶
Wofür: Die Klappe deiner Paketbox oder deines Briefkastens geht auf. Ist genau ein Paket „In Zustellung“, nennt die Meldung dieses Paket. Sonst kommt eine allgemeine Meldung.
alias: "Paketbox: Klappe geöffnet"
triggers:
- trigger: state
entity_id: binary_sensor.paketbox_klappe
from: "off"
to: "on"
variables:
in_zustellung: >-
{{ integration_entities('parcel_tracker')
| select('is_state', 'out_for_delivery') | list }}
actions:
- choose:
- conditions:
- condition: template
value_template: "{{ in_zustellung | count == 1 }}"
sequence:
- action: notify.mobile_app_dein_handy
data:
title: "Paketbox"
message: >-
Die Paketbox wurde geöffnet – vermutlich für
{{ state_attr(in_zustellung[0], 'name') or 'dein Paket' }}
({{ state_attr(in_zustellung[0], 'carrier_name') }}).
default:
- action: notify.mobile_app_dein_handy
data:
title: "Paketbox"
message: "Die Paketbox wurde geöffnet."
mode: single
Anpassen:
binary_sensor.paketbox_klappe: dein Kontakt. Meldet er „offen“ anders als miton, passfromundtoan.notify.mobile_app_dein_handy: dein Benachrichtigungsdienst.
So funktioniert es: Die Variable in_zustellung sammelt alle Paket-Sensoren der Integration mit dem Zustand out_for_delivery. Die Meldung ist eine Vermutung: Ob wirklich dieses Paket in der Box liegt, weiß die Integration nicht. „Zugestellt“ meldet der Paketdienst oft erst später.
Variante – das Paket gleich als erhalten markieren: Ist genau ein Paket „In Zustellung“, wenn die Klappe aufgeht, markiert diese Automation es mit dem Dienst parcel_tracker.mark_delivered als erhalten. Die Nummer kommt aus dem Attribut number des Paket-Sensors.
alias: "Paketbox: Paket als erhalten markieren"
triggers:
- trigger: state
entity_id: binary_sensor.paketbox_klappe
from: "off"
to: "on"
variables:
in_zustellung: >-
{{ integration_entities('parcel_tracker')
| select('is_state', 'out_for_delivery') | list }}
conditions:
- condition: template
value_template: "{{ in_zustellung | count == 1 }}"
actions:
- action: parcel_tracker.mark_delivered
data:
number: "{{ state_attr(in_zustellung[0], 'number') }}"
mode: single
Das Paket steht danach als „Erhalten“ in der Liste und zählt bei sensor.pakete_zugestellt_heute mit. Drei Dinge solltest du wissen:
- Die Markierung lässt sich nicht zurücknehmen, und der Paketdienst wird danach nicht mehr abgefragt. Geht die Klappe auch für Briefe oder für dich selbst auf, markiert die Automation womöglich ein Paket, das noch unterwegs ist. Nimm die Variante nur, wenn die Klappe wirklich nur für Pakete aufgeht.
- Bei mehreren Paketen „In Zustellung“ passiert nichts: Welches in der Box liegt, weiß niemand.
- Die Integration schickt für eine Markierung von Hand keine Benachrichtigung, und der Auslöser „Paket wurde zugestellt“ feuert nicht. Willst du eine Meldung, häng die Aktion
notify.mobile_app_dein_handyaus dem Rezept oben an.
3. Abends an die Abholung erinnern¶
Wofür: Liegt abends noch etwas in der Packstation, der Filiale oder im PaketShop, bekommst du eine Erinnerung.
alias: "Pakete: Erinnerung an die Abholung"
triggers:
- trigger: time
at: "18:00:00"
conditions:
- condition: numeric_state
entity_id: sensor.pakete_abholbereit
above: 0
actions:
- action: notify.mobile_app_dein_handy
data:
title: "Paket abholen"
message: >-
Abholbereit ({{ states('sensor.pakete_abholbereit') }}):
{{ state_attr('sensor.pakete_abholbereit', 'parcels')
| map(attribute='name') | map('default', 'Paket ohne Namen', true) | join(', ') }}
mode: single
Anpassen:
18:00:00: deine Uhrzeit.notify.mobile_app_dein_handy: dein Benachrichtigungsdienst.- Nur an bestimmten Tagen? Ergänz unter
conditionseine Zeit-Bedingung mit Wochentagen.
Wo das Paket liegt und bis wann, steht – wenn der Paketdienst es nennt – in den Attributen pickup_point und pickup_until von sensor.paket_<nummer>.
4. Licht als Anzeige: heute kommt noch etwas¶
Wofür: Eine LED oder ein Licht leuchtet, solange heute noch ein Paket erwartet wird. Ist alles zugestellt, geht es aus.
alias: "Pakete: Anzeige-Licht"
triggers:
- trigger: state
entity_id: sensor.pakete_heute
- trigger: homeassistant
event: start
actions:
- if:
- condition: numeric_state
entity_id: sensor.pakete_heute
above: 0
then:
- action: light.turn_on
target:
entity_id: light.paket_led
data:
color_name: orange
brightness_pct: 40
else:
- action: light.turn_off
target:
entity_id: light.paket_led
mode: restart
Anpassen:
light.paket_led: dein Licht. Kann es keine Farbe, lösch die Zeilecolor_name.- Für einen Schalter oder die LED eines Tasters nimmst du
switch.turn_onundswitch.turn_offmit deiner Entität und ohne den Blockdata. - Soll das Licht auch bei „möglichen“ Paketen leuchten, bau dieselbe Automation mit
sensor.pakete_moeglich.
So funktioniert es: Ein zugestelltes Paket zählt bei sensor.pakete_heute nicht mehr mit. Der Sensor fällt auf 0, das Licht geht aus.
5. Karte nur zeigen, wenn etwas unterwegs ist¶
Wofür: Die Karte steht nur auf dem Dashboard, solange es etwas zu sehen gibt.
active zeigt die Karte, solange ein Paket noch nicht zugestellt ist. Mit today erscheint sie nur, wenn heute sicher etwas kommt oder schon zugestellt wurde, mit today_possible zusätzlich bei möglichen Paketen. Alle Werte: Die Karte.
Anpassen:
- Statt
sensor.pakete_unterwegspasst auchsensor.pakete_heute,sensor.pakete_moeglich,sensor.pakete_zugestellt_heuteodersensor.pakete_abholbereit. - Die beiden Wege über Home Assistant funktionieren auch für jede andere Karte, z. B. eine Kamera-Karte, die nur an Liefertagen erscheint.
6. Meldung nur für einen Paketdienst oder ein bestimmtes Paket¶
Wofür: Du willst nicht jede Meldung, sondern nur die für DHL – oder nur die für das eine Paket, auf das du wartest.
alias: "Pakete: nur DHL in Zustellung"
triggers:
- trigger: event
event_type: parcel_tracker_status_changed
event_data:
new_status: out_for_delivery
conditions:
- condition: template
value_template: "{{ trigger.event.data.carrier == 'dhl' }}"
actions:
- action: notify.mobile_app_dein_handy
data:
title: "DHL kommt heute"
message: >-
{{ trigger.event.data.name or 'Ein Paket' }} ist in Zustellung.
mode: queued
Anpassen:
notify.mobile_app_dein_handy: dein Benachrichtigungsdienst.- Anderer Paketdienst:
dhlersetzen durchdpd,gls,hermesoderups. Shop-Bestellungen tragenamazon,ebayoderaliexpress. - Anderer Status:
new_statusändern, z. B.deliveredoderawaiting_pickup. Alle Werte: Die Status. -
Ein bestimmtes Paket nach Namen – ersetz die Bedingung durch:
-
Ein bestimmtes Paket nach Nummer (hier eine erfundene):
Ohne YAML: Statt des Event-Auslösers kannst du im Editor den Geräte-Auslöser „Paket ist in Zustellung“ wählen (siehe Auslöser ohne YAML). Die Template-Bedingung bleibt dieselbe.
Bei „zugestellt“ von Hand: Ergänz die Bedingung {{ not trigger.event.data.assumed }}, damit eine nur angenommene Zustellung nichts meldet.
7. Lieferwagen vor dem Haus und ein Paket dieses Dienstes ist in Zustellung¶
Wofür: Deine Kamera erkennt ein Lieferfahrzeug. Die Meldung kommt nur, wenn wirklich ein Paket dieses Paketdienstes „In Zustellung“ ist.
Die Erkennung musst du selbst mitbringen
Paket Tracker erkennt keine Fahrzeuge. Du brauchst eine eigene Erkennung, z. B. mit Frigate, die einen Sensor wie binary_sensor.einfahrt_lieferwagen liefert. Wie der Sensor bei dir heißt und ob er Paketdienste unterscheidet, hängt von deiner Einrichtung ab.
alias: "Pakete: Lieferwagen erkannt"
triggers:
- trigger: state
entity_id: binary_sensor.einfahrt_lieferwagen
to: "on"
conditions:
- condition: template
value_template: >-
{% set ids = integration_entities('parcel_tracker')
| select('is_state', 'out_for_delivery') | list %}
{{ ids | select('is_state_attr', 'carrier', 'dhl') | list | count > 0
or ids | select('is_state_attr', 'tracking_carrier', 'dhl') | list | count > 0 }}
actions:
- action: notify.mobile_app_dein_handy
data:
title: "DHL ist da"
message: "Ein Lieferwagen steht vor dem Haus, und ein DHL-Paket ist in Zustellung."
mode: single
Anpassen:
binary_sensor.einfahrt_lieferwagen: der Sensor deiner eigenen Erkennung.dhl(zweimal): das Kürzel des Paketdienstes, den dein Sensor erkennt –dhl,dpd,gls,hermesoderups.notify.mobile_app_dein_handy: dein Benachrichtigungsdienst.- Erkennt dein Sensor nur „irgendein Lieferwagen“, nimm die einfachere Bedingung:
sensor.pakete_heuteüber 0.
So funktioniert es: carrier ist der Paketdienst eines Pakets. Bei einer Shop-Bestellung, die eine Sendungsnummer übernommen hat, steht der Paketdienst in tracking_carrier. Die Bedingung prüft deshalb beide.
8. Geschenke: Namen ausblenden und einzelne Pakete umbenennen¶
Wofür: Auf dem Familien-Dashboard soll niemand lesen, was im Paket ist.
Schritt 1 – Namen ausblenden:
- Einstellungen → Geräte & Dienste → Paket Tracker → Konfigurieren.
- Den Schalter Namen ausblenden einschalten und speichern.
Jedes Paket heißt jetzt nur noch nach dem Paketdienst und den letzten vier Stellen seiner Nummer, z. B. DHL-Paket …2557 oder Amazon-Bestellung …4321 – auf der Karte, in den Sensoren, im Kalender, im Event und in den Benachrichtigungen.
Schritt 2 – einzelne Pakete selbst benennen: Ein Name, den du selbst vergibst, bleibt sichtbar. So erkennst du dein Paket wieder, ohne dass der Inhalt dasteht. Auf der Karte: Paket aufklappen → „Umbenennen“. Oder als Aktion:
Anpassen:
number: die Nummer deines Pakets (im Beispiel eine erfundene). Sie steht im Attributnumbervonsensor.paket_<nummer>.name: dein Name für das Paket.
Grenzen: Der Verlauf von Home Assistant behält, was er vor dem Einschalten aufgezeichnet hat. Das Symbol „Bestellung öffnen“ auf der Karte öffnet weiterhin die Bestellseite beim Shop. Der Schalter ist für den Blick aufs Dashboard gedacht, kein Schutz vor jemandem mit Admin-Zugang. Mehr unter Namen ausblenden.
9. Mail aus n8n übergeben¶
Wofür: Du hast Paketmails schon in n8n (oder Node-RED, einem Skript) und willst sie ohne eigenes Paket-Postfach an Paket Tracker geben.
Vorbereitung: In Home Assistant unter Profil → Sicherheit ein langlebiges Zugriffstoken anlegen.
Einstellungen des HTTP-Request-Nodes:
- Methode:
POST - URL:
http://homeassistant.local:8123/api/parcel_tracker/import_mail - Kopfzeile: Name
Authorization, WertBearer <Token> - Body: die komplette Mail als Binärdaten – der unveränderte Quelltext der Mail (RFC 822,
.eml) - Kein Formular-Upload: nicht als „Form-Data“ bzw. „multipart“ senden. Darauf antwortet Home Assistant mit 415.
Was zurückkommt: JSON mit result und parcels, z. B. {"result": "recognized", "parcels": ["00340999999999999911"]}. In n8n kannst du danach auf result verzweigen:
recognized: gelesen und angewendetunrecognized: keine Sendung erkanntignored: Werbung oder Konto-Mailstale: älter als 14 Tageduplicate: diese Mail wurde schon gelesen und angewendet
Anpassen:
homeassistant.local:8123: die Adresse deines Home Assistant, wie n8n ihn erreicht.<Token>: dein langlebiges Zugriffstoken. Leg es in n8n als Zugangsdaten ab, nicht im Klartext im Workflow.- Dein Mail-Node muss die rohe Mail liefern, nicht nur Betreff und Text. Der Import braucht die Kopfzeilen (Absender, Datum, Message-ID).
Zum Testen ohne n8n:
curl -H "Authorization: Bearer <Token>" --data-binary @mail.eml \
http://homeassistant.local:8123/api/parcel_tracker/import_mail
Alle Einzelheiten und Fehlercodes: Mail per HTTP übergeben.
10. Markdown-Karte: die Pakete von heute als Liste¶
Wofür: Eine schlichte Liste der heutigen Pakete, z. B. für ein Wand-Tablet oder als Zeile in einer bestehenden Übersicht.
type: markdown
title: Pakete heute
content: |
{% set heute = state_attr('sensor.pakete_heute', 'parcels') or [] %}
{% set moeglich = state_attr('sensor.pakete_heute', 'possible') or [] %}
{% set zugestellt = state_attr('sensor.pakete_heute', 'delivered_today') or [] %}
{% if heute %}
**Kommt heute:**
{% for p in heute %}
- {{ p.name or 'Paket' }}{% if p.eta_from and p.eta_to %} – {{ as_timestamp(p.eta_from) | timestamp_custom('%H:%M') }}–{{ as_timestamp(p.eta_to) | timestamp_custom('%H:%M') }} Uhr{% endif %}
{% endfor %}
{% else %}
Heute kommt sicher kein Paket.
{% endif %}
{% if moeglich %}
**Möglich:** {{ moeglich | map(attribute='name') | map('default', 'Paket', true) | join(', ') }}
{% endif %}
{% if zugestellt %}
**Schon zugestellt:** {{ zugestellt | map(attribute='name') | map('default', 'Paket', true) | join(', ') }}
{% endif %}
Anpassen:
title: deine Überschrift, oder die Zeile löschen.- Die Blöcke „Möglich“ und „Schon zugestellt“ kannst du löschen, wenn du nur die sicheren Pakete willst.
- Das Zeitfenster erscheint nur, wenn der Paketdienst eines nennt.
So funktioniert es: Die Listen parcels, possible und delivered_today sind Attribute von sensor.pakete_heute. Jeder Eintrag hat number, name, carrier, eta_from und eta_to. Alle Attribute: Sensoren, Kalender und Dienste.
11. Unterwegs ohne Abholbereite¶
Wofür: Eine Zahl nur für die Pakete, die noch zu dir unterwegs sind. sensor.pakete_unterwegs zählt alles, was noch nicht zugestellt ist, also auch die Pakete, die schon in der Packstation oder im Paketshop auf dich warten. Abholbereite zählen bei sensor.pakete_unterwegs und bei sensor.pakete_abholbereit mit. Zieht man die eine Zahl von der anderen ab, bleiben die Pakete, die noch kommen.
- Einstellungen → Geräte & Dienste → Helfer → Helfer erstellen → Template → Template-Sensor.
- Name:
Unterwegs ohne Abholbereite. -
Bei Zustandstemplate einfügen:
-
Maßeinheit:
Pakete, Zustandsklasse: „Messung“. -
Gibt es bei dir unter Erweiterte Optionen das Feld Verfügbarkeitstemplate, dort einfügen:
Speichern.
template:
- sensor:
- name: "Unterwegs ohne Abholbereite"
unique_id: pakete_unterwegs_ohne_abholbereite
unit_of_measurement: Pakete
state_class: measurement
availability: >
{{ has_value('sensor.pakete_unterwegs')
and has_value('sensor.pakete_abholbereit') }}
state: >
{{ [states('sensor.pakete_unterwegs') | int(0)
- states('sensor.pakete_abholbereit') | int(0), 0] | max }}
Danach Home Assistant neu starten (oder unter Entwicklerwerkzeuge → YAML die Template-Entitäten neu laden).
Anpassen:
- Der Name ist frei wählbar. Die Entität heißt danach, hier
sensor.unterwegs_ohne_abholbereite. - Das Verfügbarkeitstemplate (
has_value) lässt den Sensor „nicht verfügbar“ sein, solange einer der beiden Sensoren der Integration noch keinen Wert hat, z. B. kurz nach dem Start. So erscheint dann keine falsche Zahl.int(0)undmaxsind die zweite Sicherung: Die Zahl wird nie negativ. Paketeals Maßeinheit und die Zustandsklasse „Messung“ machen aus dem Verlauf eine Linie und heben die Werte in der Statistik auf. Wer das nicht will, lässt beides weg.
So funktioniert es: Beide Sensoren der Integration sind Zahlen. Kommt ein Paket in der Packstation an, steigt sensor.pakete_abholbereit um eins, sensor.pakete_unterwegs bleibt gleich: Der neue Sensor fällt um eins. Holst du es ab, fallen beide, und er bleibt, wie er ist. Alle Zählsensoren: Die vier Zählsensoren.