Live Activities in Home Assistant
Live Activities mit Home Assistant einrichten: Waschmaschine, E-Auto und Backofen live auf dem iPhone-Sperrbildschirm und in der Dynamic Island. Mit getesteten Regeln und Automationen zum Kopieren.
Geprüft mit Home Assistant 2026.9.2, Companion-App 2026.9.1 und iOS 27.0 auf einem iPhone 16 Pro Max.
Was sind Live Activities?
Eine Live Activity ist eine Karte auf dem Sperrbildschirm deines iPhones, die sich live aktualisiert. Auf iPhones mit Dynamic Island sitzt sie außerdem oben in der schwarzen Pille. Home Assistant startet solche Karten selbst: die Waschmaschine zeigt ihre Phase, das E-Auto seinen Ladestand, der Backofen die Restzeit.
Du brauchst dafür keine HACS-Integration. Die Companion-App kann das von Haus aus, du schickst nur eine ganz normale Benachrichtigung mit zwei zusätzlichen Feldern.
In der deutschen App heißt die Funktion „Live-Aktivitäten“. Ich bleibe hier beim englischen Begriff, weil er so auch im YAML und in der offiziellen Doku steht.

Hinweis: Keine Lust auf YAML von Hand? Im Live Activity Generator baust du deine Live Activity per Klick zusammen, siehst sie sofort in einer iPhone-Vorschau und kopierst das fertige YAML.
Voraussetzungen
| Was | Mindestens | Bei mir getestet |
|---|---|---|
| Home Assistant | 2026.7.0 | 2026.9.2 |
| Companion-App (iOS) | 2026.8.0 | 2026.9.1 |
| iOS | 17.2 | 27.0 |
| Gerät | iPhone | iPhone 16 Pro Max |
Warum die App mindestens 2026.8.0 sein muss: Der Code steckte schon in 2026.7, dort ließen sich Live Activities aber nur in TestFlight-Builds starten. Die erste öffentliche Version im App Store war 2026.8.0 vom 30. August 2026.
So prüfst du deine Versionen:
- Home Assistant: In der Companion-App unter Einstellungen → Companion-App tippst du im Bereich Server auf deinen Server. Unter Status zeigt die Zeile Version die Version deines Home Assistant.
- Companion-App: Unter Einstellungen → Companion-App tippst du ganz unten auf Über. Dort steht zum Beispiel „Home Assistant Companion 2026.9.1“.
- iOS: In den iPhone-Einstellungen unter Allgemein → Info steht die iOS-Version.
Eine Sache wird gern übersehen: Beim Start tauschen App und Home Assistant einen Token aus. Ohne Verbindung zu deinem Server passiert das nicht. Dann kommt die Live Activity nicht an. Wenn du unterwegs Updates sehen willst, brauchst du also einen funktionierenden Fernzugriff.
Welche iPhones eine Dynamic Island haben
Laut Apple: iPhone 14 Pro und 14 Pro Max, alle iPhone 15 und 16, iPhone 17, 17 Pro und 17 Pro Max, das iPhone Air sowie iPhone 18 Pro und 18 Pro Max.
Nicht dabei sind iPhone 16e und iPhone 17e. Die Home-Assistant-Doku schreibt „alle iPhone 15 und neuer“, das stimmt für diese beiden nicht. Dort siehst du die Live Activity nur auf dem Sperrbildschirm.
Und auf iPad, Android oder Mac?
iPad: Die Companion-App zeigt in Version 2026.9.x auf jedem iPad „Auf iPad nicht verfügbar“. Ein Nutzer mit iPadOS 27 berichtet, dass es trotzdem läuft. Eine Korrektur des Hinweises ist bereits gemergt, steckt aber noch in keinem Release. Ich konnte es nicht testen. Verlass dich auf dem iPad also nicht darauf.
Android: Dasselbe YAML erzeugt auf Android 16 oder neuer ein sogenanntes Live Update. Dort ist title Pflicht, sonst kommt nur ein normales Banner. Kartenfarben, Balkenfarbe, Balkenrichtung und silent gibt es nur auf dem iPhone. Ein Android-Gerät hatte ich nicht zum Testen, dieser Guide zeigt deshalb nur das iPhone.
Mac: Mit macOS Tahoe 26 zeigt der Mac Live Activities deines iPhones in der Menüleiste, wenn beide per iPhone-Synchronisierung verbunden sind. Starten kann die Mac-App selbst keine.
In der App einschalten
- Öffne in der Companion-App die Einstellungen und tippe auf Companion-App.
- Im Abschnitt Bleibe auf dem Laufenden tippst du auf Live-Aktivitäten.
- Unter Status sollten Live-Aktivitäten und Häufige Aktualisierungen auf Aktiviert stehen.

Steht dort etwas anderes, hast du Live Activities für Home Assistant im iPhone ausgeschaltet. Laut Apple findest du den Schalter in den iPhone-Einstellungen unter Apps → Home Assistant → Live-Aktivitäten.
Häufige Aktualisierungen
Die App beschreibt die Option so: Home Assistant darf Live Activities damit bis zu einmal pro Sekunde aktualisieren. Das ist die Angabe von Home Assistant, Apple selbst nennt keine Zahl. Wenn du oft aktualisierst, lass die Option an.
Die Beispiele in der App
Unter Beispiele liegen fertige Live Activities, statische und animierte. Tippst du bei einem Beispiel auf Start, erscheint es sofort auf deinem iPhone. Dazu gibt es jeweils das YAML.

Wichtig: Die Beispiele laufen laut App lokal auf dem Gerät. Sie zeigen dir, wie die Karte aussieht, beweisen aber nicht, dass der Weg von Home Assistant zu deinem iPhone funktioniert. Genau deshalb schicken wir im nächsten Kapitel eine echte Live Activity aus Home Assistant.
Datenschutz: das sieht jeder
Im selben Bildschirm steht ein Hinweis, den du ernst nehmen solltest: Inhalte von Live-Aktivitäten sind auf dem Sperrbildschirm und in der Dynamic Island auch ohne Face ID oder Touch ID sichtbar. Schreib also nichts hinein, was nicht jeder lesen darf, der dein iPhone in die Hand nimmt. „Alarmanlage unscharf“ gehört eher nicht auf den Sperrbildschirm.
Deine erste Live Activity in zwei Minuten
Schritt 1: Den Namen deines iPhones finden
Home Assistant spricht dein iPhone über einen eigenen Benachrichtigungsdienst an: notify.mobile_app_ plus der Gerätename.
Den Gerätenamen findest du in der Companion-App unter Einstellungen → Companion-App. Tippe im Bereich Server auf deinen Server (meiner heißt „Zuhause“). Unter Details steht die Zeile Gerätename.

Aus dem Namen wird der Dienst: klein geschrieben, Leerzeichen und Sonderzeichen werden zu Unterstrichen. Bei mir heißt der Dienst notify.mobile_app_jakku.
Den Namen kannst du auch in Home Assistant nachsehen: unter Einstellungen → Geräte & Dienste bei der Integration Mobile App. Schneller geht es über diesen My-Home-Assistant-Link.
Hinweis: Die neuere Aktion
notify.send_messagefunktioniert hier nicht. Sie verwirft das inneredata:komplett. Damit fehlt alles, was eine Live Activity ausmacht. Nimm immernotify.mobile_app_DEIN_GERAET.
Schritt 2: Die Aktion in Home Assistant ausführen
- Öffne in Home Assistant Einstellungen → Werkzeuge → Aktionen. Schneller geht es über diesen My-Home-Assistant-Link.
- Wechsle in den YAML-Modus.
- Füge das YAML unten ein und ersetze
DEIN_GERAETdurch deinen Gerätenamen aus Schritt 1. - Tippe auf Aktion ausführen.
- Schau auf dein iPhone. Die Karte ist da und das iPhone vibriert.
So sieht das in Home Assistant aus, im Screenshot mit meinem Geschirrspüler statt der Waschmaschine:

1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Waschgang läuft"
4 title: "Waschmaschine"
5 data:
6 tag: waschmaschine_test
7 live_update: true
8 critical_text: "Waschen"
9 progress: 30
10 progress_max: 100
11 notification_icon: "mdi:washing-machine"
12 notification_icon_color: "#2196F3"Was die Zeilen bedeuten:
messageist der Text unter dem Titel. Das Feld ist Pflicht, ohnemessagelehnt Home Assistant die Aktion ab.titleist die fette Überschrift.tagist der Name dieser einen Live Activity. Erlaubt sind Buchstaben, Ziffern, Bindestrich und Unterstrich, höchstens 64 Zeichen. Alles mit demselbentaglandet auf derselben Karte.live_update: truemacht aus der Benachrichtigung eine Live Activity. Ohne Anführungszeichen, es muss ein echtestruesein.critical_textist der kurze Status rechts oben.progressundprogress_maxzeichnen den Balken.notification_iconundnotification_icon_colorsetzen Icon und Farbe.
Die Waschmaschine gibt es auch als fertige Vorlage mit allen Phasen vom Einweichen bis Fertig: im Live Activity Generator öffnen.
Tipp: Beim Testen bitte nicht zwanzigmal hintereinander starten und beenden. iOS hat ein Budget dafür, wie oft eine neue Live Activity per Push starten darf. Ist es aufgebraucht, starten neue Activities einfach nicht mehr, ohne Fehlermeldung. Mehr dazu unter Grenzen.
Was wird wo angezeigt?
Dieselbe Live Activity sieht an vier Stellen unterschiedlich aus. Das hat mich am Anfang am meisten verwirrt, deshalb hier jede Ansicht einzeln. Tipp im ersten Bild auf die Punkte, dann siehst du, welches Feld wohin gehört.
Sperrbildschirm
- Icon-Kachel links: nur wenn du
notification_iconsetzt. Sonst fehlt die Kachel ganz. - Titel: eine Zeile.
- Zweite Zeile: die
messagemit bis zu zwei Zeilen. Läuft ein Timer, steht dort stattdessen der Timer. - Rechts oben:
critical_text. Fehlt der, steht dort der Prozentwert ausprogressundprogress_max. - Unten: der Fortschrittsbalken, wenn
progressundprogress_maxgesetzt sind. Sonst bei einem Countdown ein Timer-Balken.
Die Karte hat ohne eigene Farben einen durchscheinenden Glas-Hintergrund, durch den dein Hintergrundbild schimmert. Die offizielle Doku spricht von einem schwarzen Standard, das ist veraltet.
Mehrere Activities der App stapeln sich unter einer gemeinsamen Überschrift „Home Assistant“. Jede Karte kannst du nach links wischen und entfernen.

Dynamic Island kompakt
Das ist die Pille, die du im normalen Betrieb siehst.
- Links: das Icon in deiner Iconfarbe.
- Rechts: ein laufender Timer hat Vorrang. Ohne Timer kommt
critical_text, ohne den der Prozentwert.
Einen Balken gibt es in der kompakten Ansicht nicht.

Dynamic Island minimal
Läuft gleichzeitig eine zweite Live Activity, zum Beispiel eine Bildschirmaufnahme, teilt sich die Island. Home Assistant behält die Pille, zeigt dort aber nur noch das Icon. Kein Text, kein Timer.

Dynamic Island erweitert
Drückst du lange auf die Island, klappt sie auf:
- links die Icon-Kachel, daneben Titel und
messagein einer Zeile - rechts wieder Timer, sonst
critical_text, sonst Prozent - darunter der Balken
Anders als auf dem Sperrbildschirm bleibt die message hier neben dem Timer stehen. Und die Island ist immer dunkel mit weißer Schrift. Deine eigenen Kartenfarben gelten nur für den Sperrbildschirm. Dieses aufgeklappte Layout gibt es seit App-Version 2026.9.1.

Alles auf einen Blick
| Feld | Sperrbildschirm | Island kompakt | Island erweitert |
|---|---|---|---|
title | ja, 1 Zeile | nein | ja, 1 Zeile |
message | ja, 2 Zeilen, außer ein Timer läuft | nein | ja, 1 Zeile |
critical_text | rechts oben | rechts, wenn kein Timer läuft | rechts, wenn kein Timer läuft |
| Prozent | rechts oben, wenn kein critical_text | rechts, als letzte Wahl | rechts, als letzte Wahl |
| Timer | statt message | rechts, Vorrang | rechts, Vorrang |
| Balken | ja | nein | ja |
| Icon | Kachel links | links | Kachel links |
In der minimalen Ansicht siehst du nur das Icon.
Starten, aktualisieren, beenden
Das Prinzip ist simpel. Starten und aktualisieren ist dieselbe Nachricht. Gibt es noch keine Live Activity mit diesem tag, startet eine neue. Gibt es sie schon, wird sie aktualisiert.
Aktualisieren
Schick einfach dasselbe YAML noch einmal mit geänderten Werten:
1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Spülgang 1 von 2"
4 title: "Waschmaschine"
5 data:
6 tag: waschmaschine_test
7 live_update: true
8 silent: true
9 critical_text: "Spülen"
10 progress: 60
11 progress_max: 100
12 notification_icon: "mdi:washing-machine"
13 notification_icon_color: "#2196F3"Drei Dinge habe ich dabei auf dem iPhone getestet. Zwei davon widersprechen der offiziellen Doku:
- Der Titel lässt sich ändern. Die Doku sagt, er bleibt fest. Bei mir hat ein neuer Titel die Karte sofort umbenannt.
- Ohne
titlespringt die Karte auf den Starttitel zurück, nicht auf den zuletzt geschickten. Schick den Titel deshalb bei jedem Update mit. silent: truemacht das Update lautlos. Dazu mehr unter Vibration steuern.
Die Beispiele in der App schicken bei jedem Update alle Felder komplett mit, also auch Icon und Farbe. Mach das genauso, dann bleibt die Karte so, wie du sie haben willst.
Beenden
Zum Beenden schickst du den Befehl clear_notification mit demselben tag:
action: notify.mobile_app_DEIN_GERAET
data:
message: clear_notification
data:
tag: waschmaschine_testDie Karte verschwindet sofort. Doppelt beenden schadet nicht: Ich habe clear_notification für eine Activity geschickt, die ich vorher schon weggewischt hatte. Es passierte nichts und das iPhone vibrierte auch nicht.
Den gleichen Tag nicht sofort wiederverwenden
Hier bin ich reingefallen. Ich hatte eine Activity weggewischt, sie beendet und direkt danach mit demselben tag neu gestartet. Die neue Karte erschien, lief etwa 20 Sekunden und verschwand dann von selbst. Mit einem neuen tag blieb sie stehen.
Wie lange man warten muss, weiß ich nicht. Das war ein einzelner Test. Ich will dir keine Zahl erfinden. Für Automationen heißt das: Starte nicht im selben Moment neu, in dem du gerade beendet hast.
Antippen öffnet ein Dashboard
Mit url legst du fest, was beim Antippen der Karte passiert. Ein relativer Pfad wie /lovelace/0 öffnet diese Ansicht in der App. Eine https://-Adresse öffnet laut Quellcode einen Browser innerhalb der App.
Die url gilt immer nur für das Update, mit dem sie kommt. Schickst du ein Update ohne url, öffnet ein Tippen wieder nur die Startseite deines Servers. Also auch hier: bei jedem Update mitschicken.
Timer richtig einsetzen
Einen Timer schaltest du mit chronometer: true ein. Dazu gehört immer when, sonst zeigt die Karte gar keinen Timer. Und when ohne chronometer ignoriert die App.
Mit when_relative: true bedeutet when „Sekunden ab jetzt“. Ohne ist when ein Unix-Zeitstempel. Die Zeit läuft als M:SS oder H:MM:SS, die Sekunden lassen sich nicht ausblenden.
Countdown
Ein positiver Wert zählt herunter. 2700 Sekunden sind 45 Minuten:
1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Pizza im Ofen"
4 title: "Backofen"
5 data:
6 tag: backofen_test
7 live_update: true
8 chronometer: true
9 when: 2700
10 when_relative: true
11 notification_icon: "mdi:stove"
12 notification_icon_color: "#F44336"Auf dem Sperrbildschirm ersetzt der Timer die message, unten läuft ein Balken leer. Was genau bei null passiert, habe ich noch nicht auf dem Gerät geprüft. Beende die Activity lieber selbst, wenn der Timer abgelaufen ist.

Stoppuhr ab Start
Mit when: 0 zählt der Timer ab dem Start hoch. Einen Balken gibt es dabei nicht, weil es kein Ende gibt.
1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Läuft"
4 title: "Waschmaschine"
5 data:
6 tag: stoppuhr_test
7 live_update: true
8 chronometer: true
9 when: 0
10 when_relative: true
11 notification_icon: "mdi:washing-machine"
12 notification_icon_color: "#FF9800"Finger weg von negativen Werten
In der App gibt es das Beispiel „Auf 20 min hochzählen“ mit when: -1200. Lokal in der App zählt es von null bis 20 Minuten hoch und füllt dabei einen Balken.
Aus Home Assistant geschickt passiert etwas anderes. Ich habe when: -300 getestet: Der Timer startete bei 5:00 und zählte von dort weiter hoch, ohne Balken und ohne Ziel. Der Grund steckt im Push-Weg über Apple, der den Zielwert nicht mitnimmt. Nutze negative Werte deshalb nicht.
Relative Zeiten starten bei jedem Update neu
Das ist die Falle bei Updates. Ein relatives when wird bei jedem Empfang neu ab „jetzt“ gerechnet. Schickst du bei jedem Update when: 2700 mit, beginnt der Countdown jedes Mal wieder bei 45 Minuten.
Zwei saubere Wege:
- Beim Update die tatsächlich verbleibende Zeit schicken.
- Einen festen Endzeitpunkt als Unix-Zeitstempel schicken, mit
when_relative: false. Wie das mit einem Sensor aussieht, zeige ich beim Backofen-Timer.
Fortschritt und Balkenrichtung
Ein Balken erscheint, sobald progress und progress_max gesetzt sind und progress_max größer als null ist. Den Prozentwert rechnet die App selbst aus und begrenzt ihn auf 0 bis 100 Prozent.
Er ist aber nur zu sehen, wenn du keinen critical_text schickst. Der kurze Text hat Vorrang.
Nimm ganze Zahlen. iOS rundet Kommazahlen zwar seit App-Version 2026.8.0, Android zeigt bei Kommazahlen aber gar keinen Balken. Kommt der Wert aus einem Sensor, hängst du deshalb | int(0) an. Und schreib die Zahl nicht in Anführungszeichen: "45" als Text ergibt keinen Balken.
Balken, der leerläuft
Für Akkus passt ein Balken besser, der mit der Zeit schrumpft. Dafür gibt es progress_bar_direction: decreasing:
1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Notstrom aktiv, 35 % übrig"
4 title: "Speicher"
5 data:
6 tag: akku_test
7 live_update: true
8 critical_text: "35 %"
9 progress: 65
10 progress_max: 100
11 notification_icon: "mdi:battery-40"
12 notification_icon_color: "#FF9800"
13 progress_bar_color: "#FF9800"
14 progress_bar_direction: "decreasing"Das hat mich überrascht: decreasing dreht nicht die Laufrichtung um. Der Balken zeichnet einfach den Rest bis zum Maximum, weiterhin von links. Bei progress: 65 sind das 35 Prozent Füllung. Ein automatisch berechneter Prozentwert würde dabei weiter 65 zeigen, deshalb steht im Beispiel der passende Wert als critical_text.

Andere Werte als increasing oder decreasing ignoriert die App und nimmt die Standardrichtung. Akku-Vorlage im Generator öffnen.
Icons und Farben
Icons
notification_icon erwartet ein Material Design Icon mit Präfix, zum Beispiel mdi:washing-machine. Die Icons stecken fest in der App, Bild-URLs oder andere Icon-Sets funktionieren nicht. Ein ganz neues MDI-Icon kann deshalb fehlen, wenn deine App-Version es noch nicht mitbringt.
Bei einem unbekannten Namen zeigt die App laut Quellcode ein Ersatz-Icon. Einen Fehler bekommst du nicht.
Farben
Farben gibst du als Hex-Wert an, zum Beispiel #2196F3. Die App versteht auch CSS-Farbnamen und kurze Hex-Werte. Achtung bei achtstelligen Hex-Werten: iOS liest sie als RRGGBBAA, die Transparenz steht also am Ende.
Eine ungültige Farbe macht Dinge unsichtbar. Ich habe #GGGGGG als Iconfarbe zusammen mit einem Fantasie-Icon geschickt. Ergebnis: kein Icon. Der Balken war auch weg. Kein Fehler, nichts im Log.
Der Balken nimmt nämlich diese Farben, in dieser Reihenfolge:
progress_bar_color- sonst
notification_icon_color - sonst das Home-Assistant-Blau
#03A9F4
Eigene Kartenfarben
Mit background_color und text_color färbst du die Karte auf dem Sperrbildschirm:
1action: notify.mobile_app_DEIN_GERAET
2data:
3 message: "Kinomodus, Licht gedimmt"
4 title: "Filmabend"
5 data:
6 tag: filmabend_test
7 live_update: true
8 notification_icon: "mdi:movie-open"
9 notification_icon_color: "#FFD166"
10 background_color: "#0B1E3F"
11 text_color: "#FFD166"Setzt du nur background_color, wählt die App die Schrift automatisch schwarz oder weiß, je nach Helligkeit des Hintergrunds. Ohne beide Felder bleibt die Glas-Optik. Die Dynamic Island interessiert das alles nicht, sie bleibt dunkel.

Vibration steuern
Die offizielle Doku sagt, Updates kämen still an. Auf meinem iPhone war das nicht so. Ein Entwickler der App bestätigt das auch in einem GitHub-Issue.
| Nachricht | Vibriert? |
|---|---|
| Start | immer, silent wirkt hier nicht |
Update ohne silent | ja |
Update mit silent: true | nein |
| Beenden einer schon entfernten Activity | nein |
silent: true hat einen Haken. Solche Updates schickt Apple mit niedrigerer Priorität, iOS darf sie verzögern oder bündeln. Für einen Waschgang ist das egal. Für einen Alarm eher nicht.
Mein Muster für alles, was einen Ablauf hat:
- Start: vibriert sowieso, das passt.
- Zwischenschritte: immer
silent: true. - Fertig: ohne
silent, damit du es merkst. - Beenden: ein paar Minuten später.
Auf der Apple Watch hat silent: true laut einem geschlossenen GitHub-Issue anfangs nicht gewirkt, Nutzer bestätigen inzwischen, dass es die Vibration dort unterdrückt. Getestet habe ich die Watch nicht.
Praxis: Waschmaschine mit Sensor
Jetzt bauen wir das Ganze für echt. Die Waschmaschine hängt an einer Steckdose mit Leistungsmessung. Die Live Activity startet, wenn sie Strom zieht, meldet sich laut, wenn sie fertig ist. Danach räumt sie sich selbst weg.
Was du brauchst
- einen Leistungssensor in Watt, hier
sensor.DEINE_WASCHMASCHINE_LEISTUNG - optional einen Phasen-Sensor, der Texte wie „Spülen“ liefert, hier
sensor.DEINE_WASCHMASCHINE_PHASE. Den gibt es nur, wenn deine Maschine selbst in Home Assistant eingebunden ist. - deinen Dienst
notify.mobile_app_DEIN_GERAET
Ersetze alle drei Platzhalter durch deine eigenen IDs. Die Schwellen von 10 und 5 Watt sind nur Startwerte. Schau dir den Verlauf deines Sensors an: Im Standby muss die Maschine unter 5 Watt liegen, beim Waschen deutlich über 10.
Waschmaschinen-Vorlage im Generator öffnen
Automation 1: Start, Fertig und Aufräumen
1alias: "Waschmaschine: Live Activity"
2description: "Startet die Live Activity, meldet Fertig und beendet sie danach"
3mode: single
4max_exceeded: silent
5variables:
6 phase_entity: sensor.DEINE_WASCHMASCHINE_PHASE
7 phase_text: >-
8 {%- set t = states(phase_entity) | trim -%}
9 {%- if not has_value(phase_entity) or t == '' -%}Läuft
10 {%- elif is_number(t) or t | regex_match('^([0-9.+([{\'"-]|True|False|None|[bBrRuU]{1,2}[\'"])') -%}Phase {{ t }}
11 {%- else -%}{{ t }}
12 {%- endif -%}
13triggers:
14 - trigger: numeric_state
15 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
16 above: 10
17 for:
18 minutes: 2
19conditions: []
20actions:
21 - action: notify.mobile_app_DEIN_GERAET
22 data:
23 message: "Waschgang läuft"
24 title: "Waschmaschine"
25 data:
26 tag: waschmaschine
27 live_update: true
28 critical_text: "{{ phase_text }}"
29 notification_icon: "mdi:washing-machine"
30 notification_icon_color: "#2196F3"
31 - wait_for_trigger:
32 - trigger: numeric_state
33 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
34 below: 5
35 for:
36 minutes: 5
37 timeout:
38 hours: 8
39 continue_on_timeout: false
40 - action: notify.mobile_app_DEIN_GERAET
41 data:
42 message: "Die Wäsche kann raus"
43 title: "Waschmaschine"
44 data:
45 tag: waschmaschine
46 live_update: true
47 critical_text: "Fertig"
48 notification_icon: "mdi:check-circle"
49 notification_icon_color: "#4CAF50"
50 - delay:
51 minutes: 15
52 - action: notify.mobile_app_DEIN_GERAET
53 data:
54 message: clear_notification
55 data:
56 tag: waschmaschineSo arbeitet sie:
- Start: Die Maschine zieht zwei Minuten lang mehr als 10 Watt. Die zwei Minuten filtern kurze Spitzen heraus.
- Warten: Die Automation wartet, bis die Leistung fünf Minuten lang unter 5 Watt liegt. Während des Waschens fällt die Leistung öfter kurz ab, die fünf Minuten fangen das ab.
- Fertig: Das Update hat kein
silent, dein iPhone vibriert. Das Icon wird zum grünen Haken. - Aufräumen: Nach 15 Minuten verschwindet die Karte.
Der critical_text kommt aus der Variable phase_text. Die sorgt dafür, dass dort immer Text ankommt. Liefert dein Phasen-Sensor eine reine Zahl oder etwas wie True oder [1], das Home Assistant umwandeln würde, setzt sie „Phase“ davor. Aus 2 wird so „Phase 2“. Warum das so wichtig ist, steht unter Grenzen. Hast du keinen Phasen-Sensor, lässt du den Platzhalter einfach stehen. Dann steht rechts oben „Läuft“.
mode: single sorgt dafür, dass ein zweiter Start während eines Waschgangs ignoriert wird. Die acht Stunden Timeout sind kein Zufall: Länger lässt iOS eine Live Activity ohnehin nicht laufen.
Hinweis: Startet Home Assistant während eines Waschgangs neu, bricht die Automation ab. Die Karte bleibt dann stehen, bis du sie wegwischst oder iOS sie nach spätestens acht Stunden beendet. Neue Phasen zeigt sie dann auch nicht mehr an, weil Automation 2 nur sendet, solange Automation 1 läuft.
Automation 2: Phasen anzeigen (optional)
Hat deine Maschine einen Phasen-Sensor, aktualisiert diese zweite Automation die Karte bei jedem Phasenwechsel. Leise, damit dein iPhone nicht bei jedem Spülgang brummt.
1alias: "Waschmaschine: Live Activity aktualisieren"
2description: "Aktualisiert die laufende Live Activity leise bei jedem Phasenwechsel"
3mode: restart
4variables:
5 start_automation: automation.waschmaschine_live_activity
6 phase_entity: sensor.DEINE_WASCHMASCHINE_PHASE
7 phase_text: >-
8 {%- set t = states(phase_entity) | trim -%}
9 {%- if not has_value(phase_entity) or t == '' -%}Läuft
10 {%- elif is_number(t) or t | regex_match('^([0-9.+([{\'"-]|True|False|None|[bBrRuU]{1,2}[\'"])') -%}Phase {{ t }}
11 {%- else -%}{{ t }}
12 {%- endif -%}
13triggers:
14 - trigger: state
15 entity_id: sensor.DEINE_WASCHMASCHINE_PHASE
16 not_to:
17 - unknown
18 - unavailable
19conditions:
20 - condition: numeric_state
21 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
22 above: 5
23 - condition: template
24 value_template: "{{ state_attr(start_automation, 'current') | int(0) > 0 }}"
25actions:
26 - delay:
27 seconds: 5
28 - condition: numeric_state
29 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
30 above: 5
31 - condition: template
32 value_template: "{{ state_attr(start_automation, 'current') | int(0) > 0 }}"
33 - action: notify.mobile_app_DEIN_GERAET
34 data:
35 message: "Waschgang läuft"
36 title: "Waschmaschine"
37 data:
38 tag: waschmaschine
39 live_update: true
40 silent: true
41 critical_text: "{{ phase_text }}"
42 notification_icon: "mdi:washing-machine"
43 notification_icon_color: "#2196F3"Die Updates gehen nur raus, solange Automation 1 läuft. Ein Update ohne laufende Activity ist nämlich ein Start. Und zwar ein stiller. Wechselt die Phase in den zwei Minuten, bevor Automation 1 startet, oder nach dem Fertig, würde die Karte sonst ohne Vibration auftauchen. Das Attribut current zählt die gerade aktiven Läufe einer Automation. Ist es größer als 0, hat Automation 1 ihren Start schon geschickt.
start_automation muss deshalb die Entitäts-ID von Automation 1 sein. Home Assistant bildet sie beim ersten Speichern aus dem Namen, aus „Waschmaschine: Live Activity“ wird automation.waschmaschine_live_activity. Hast du den Namen geändert, schau nach: Einstellungen → Automationen & Szenen, Dreipunkt-Menü neben Automation 1, Einstellungen. Dort steht die Entitäts-ID. Passt sie nicht, kommen keine Phasen an. Eine Karte ohne Vibration aber auch nicht.
Beide Bedingungen prüft die Automation nach fünf Sekunden noch einmal. Wechselt die Phase in dieser Zeit erneut, fängt mode: restart von vorn an und nur die letzte Phase geht raus. Die 5 Watt sorgen dafür, dass kein Phasenwechsel mehr durchrutscht, während Automation 1 nach dem Waschgang ihre fünf Minuten abwartet.
Warum zwei Automationen statt einer? Würde eine einzige Automation auf Phase und Ende gleichzeitig warten, müsste sie nach jedem Phasenwechsel neu anfangen zu warten. Fällt die Leistung kurz vor so einem Wechsel unter 5 Watt, verpasst sie das Ende. Getrennt stören sich die beiden nicht.
Tipp: Sind die Namen deiner Phasen lang, etwa „Hauptwäsche 40 °C“, tausch die Rollen. Rechts oben steht nur eine Zeile, lange Texte werden dort verkleinert oder abgeschnitten. Setz dann
message: "{{ phase_text }}"und einen festencritical_textwie"Läuft".
Praxis: E-Auto laden und Backofen-Timer
Zwei kürzere Beispiele, die jeweils eine andere Technik zeigen.
E-Auto laden
Die Live Activity zeigt den Ladestand, solange das Auto lädt. Sie aktualisiert sich nur in 5-Prozent-Schritten. Jedes Update ist ein Push. Davon hast du nicht unendlich viele.
Du brauchst einen Sensor für den Ladezustand (binary_sensor.DEIN_AUTO_LAEDT) und einen für den Akkustand in Prozent (sensor.DEIN_AUTO_AKKU).
1alias: "E-Auto laden: Live Activity"
2description: "Zeigt den Ladestand als Live Activity, solange das Auto lädt"
3mode: queued
4max: 10
5triggers:
6 - trigger: state
7 entity_id: binary_sensor.DEIN_AUTO_LAEDT
8 to: "on"
9 id: start
10 - trigger: state
11 entity_id: sensor.DEIN_AUTO_AKKU
12 not_to:
13 - unknown
14 - unavailable
15 id: update
16 - trigger: state
17 entity_id: binary_sensor.DEIN_AUTO_LAEDT
18 from: "on"
19 to: "off"
20 id: end
21conditions: []
22actions:
23 - choose:
24 - conditions:
25 - condition: trigger
26 id:
27 - start
28 - update
29 - condition: state
30 entity_id: binary_sensor.DEIN_AUTO_LAEDT
31 state: "on"
32 - condition: template
33 value_template: "{{ has_value('sensor.DEIN_AUTO_AKKU') }}"
34 - condition: template
35 value_template: >-
36 {{ trigger.id == 'start'
37 or (trigger.from_state.state | float(0) / 5) | int(0)
38 != (trigger.to_state.state | float(0) / 5) | int(0) }}
39 sequence:
40 - action: notify.mobile_app_DEIN_GERAET
41 data:
42 message: "Auto lädt"
43 title: "E-Auto"
44 data:
45 tag: e_auto_laden
46 live_update: true
47 silent: true
48 critical_text: "{{ states('sensor.DEIN_AUTO_AKKU') | float(0) | round(0) | int(0) }} %"
49 progress: "{{ states('sensor.DEIN_AUTO_AKKU') | float(0) | round(0) | int(0) }}"
50 progress_max: 100
51 notification_icon: "mdi:ev-station"
52 notification_icon_color: "#4CAF50"
53 - conditions:
54 - condition: trigger
55 id: end
56 sequence:
57 - action: notify.mobile_app_DEIN_GERAET
58 data:
59 message: clear_notification
60 data:
61 tag: e_auto_ladenEin paar Details, die hier den Unterschied machen:
silent: truesteht auch im Start. Das stört nicht, beim Start wirktsilentnicht, das iPhone vibriert trotzdem einmal.- Beim
critical_texthängt%hinten dran. Ohne dieses Zeichen käme dort eine reine Zahl an. Das Update würde verschluckt. - Der Akkustand geht erst durch
float(0)undround(0), dann durchint(0). So wird aus78.6sauber79.
E-Auto-Vorlage im Generator öffnen
Backofen-Timer
Hat dein Backofen einen Sensor mit dem Endzeitpunkt des Programms (ein Zeitstempel-Sensor), wird daraus ein Countdown, der bei Updates nicht neu anfängt. Der Trick ist der absolute Zeitstempel mit when_relative: false.
1alias: "Backofen-Timer: Live Activity"
2description: "Zeigt die Restzeit des Backofens als Countdown"
3mode: queued
4max: 5
5triggers:
6 - trigger: state
7 entity_id: sensor.DEIN_BACKOFEN_ENDE
8 not_from:
9 - unavailable
10 not_to:
11 - unavailable
12conditions: []
13actions:
14 - if:
15 - condition: template
16 value_template: >-
17 {{ has_value('sensor.DEIN_BACKOFEN_ENDE')
18 and as_timestamp(states('sensor.DEIN_BACKOFEN_ENDE'), 0) > as_timestamp(now()) }}
19 then:
20 - action: notify.mobile_app_DEIN_GERAET
21 data:
22 message: "Backofen läuft"
23 title: "Backofen"
24 data:
25 tag: backofen
26 live_update: true
27 silent: true
28 chronometer: true
29 when: "{{ as_timestamp(states('sensor.DEIN_BACKOFEN_ENDE')) | int }}"
30 when_relative: false
31 notification_icon: "mdi:stove"
32 notification_icon_color: "#F44336"
33 else:
34 - action: notify.mobile_app_DEIN_GERAET
35 data:
36 message: clear_notification
37 data:
38 tag: backofenÄndert sich die Endzeit, weil du nachstellst, springt der Timer auf die neue Zeit. Hat der Sensor keinen gültigen Wert mehr oder liegt die Zeit in der Vergangenheit, beendet die Automation die Live Activity. Kurze unavailable-Aussetzer ignoriert der Trigger, damit die Karte nicht beendet und sofort neu gestartet wird.
Die Prüfung im if brauchst du wirklich. Viele Geräte, zum Beispiel über Home Connect, melden „läuft“, bevor ihr Endzeit-Sensor einen Wert hat. Mit einem Ersatzwert wie as_timestamp(…, 0) landet der Timer dann bei 0 und das iPhone zählt ab dem 1. Januar 1970 hoch. Auf der Karte stehen plötzlich fast 500.000 Stunden. Deshalb hat when im Beispiel absichtlich keinen Ersatzwert: Fehlt die Endzeit doch einmal, bricht Home Assistant mit einer Fehlermeldung ab.
Dass when_relative: false einen echten Zeitpunkt meint, steht so im Quellcode der App und des Push-Dienstes. Mein iPhone hat es unfreiwillig bestätigt: Ein when von 0 lief dort als Zähler ab 1970.
Backofen-Vorlage im Generator öffnen
Grenzen
Acht Stunden. Nach acht Stunden beendet iOS jede Live Activity und nimmt sie aus der Dynamic Island. Auf dem Sperrbildschirm kann sie danach noch bis zu vier Stunden stehen bleiben. Für Vorgänge, die länger dauern, ist eine Live Activity das falsche Werkzeug.
Start-Budget. iOS begrenzt, wie oft eine neue Live Activity per Push starten darf. Ist das Budget aufgebraucht, starten neue Activities kommentarlos nicht mehr. Wie groß das Budget ist, veröffentlicht Apple nicht. Laut Home-Assistant-Doku füllt es sich mit der Zeit von selbst wieder auf.
Update-Budget pro Stunde. Auch für normale Updates gibt es bei Apple ein Budget. Updates mit silent: true gehen mit niedriger Priorität raus und zählen laut Apple nicht dagegen. In der App steht beim Beispiel „Ratenbegrenzung“ außerdem, dass iOS 18 nur etwa eine Aktualisierung pro 15 Sekunden anzeigt.
500 Pushes am Tag. Über den Push-Dienst von Home Assistant darfst du pro Gerät 500 Benachrichtigungen am Tag schicken, zurückgesetzt wird um Mitternacht UTC. Die Doku sagt, Befehle wie clear_notification zählen nicht mit. Laut Quellcode zählt bei Live Activities aber jeder Push, das Beenden eingeschlossen. Pushes über Lokalen Push zählen nicht.
4 KB. Alle Daten einer Live Activity zusammen dürfen laut Apple nicht größer als 4 KB sein. Mit den Feldern aus diesem Guide bleibst du weit darunter.
Gleichen Tag nicht sofort neu starten. Siehe oben.
Templates müssen Text liefern. Das ist die fieseste Grenze. Home Assistant wandelt das Ergebnis eines Templates in den passenden Typ um. Liefert "{{ states('sensor.x') }}" die Ausgabe 42, kommt eine Zahl an, kein Text. Beim critical_text verschluckt das iPhone dann das komplette Update. Die Karte bleibt auf dem alten Stand, vibriert aber trotzdem. Ich habe genau das getestet: critical_text als Zahl 42 geschickt, das Update kam nie an.
Die Lösung: Häng an den Wert ein festes Wort oder eine Einheit an. "{{ states('sensor.x') }} %" funktioniert, "{{ states('sensor.x') | string }}" reicht nicht, weil Home Assistant das Ergebnis danach wieder in eine Zahl verwandelt.
Fehlersuche
Geh die Liste von oben nach unten durch. Die meisten Probleme sitzen bei den ersten Punkten.
- Versionen prüfen. Home Assistant mindestens 2026.7.0, Companion-App mindestens 2026.8.0, iOS mindestens 17.2.
- Live-Aktivitäten erlaubt? In der Companion-App unter Einstellungen → Companion-App → Live-Aktivitäten muss der Status auf Aktiviert stehen.
- Richtiger Dienst? Es muss
notify.mobile_app_...sein, nichtnotify.send_message. Den Namen prüfst du unter Gerätename in den Server-Einstellungen der App. - Felder korrekt?
messageist gesetzt,tagauch.live_update: truesteht ohne Anführungszeichen da. - Token synchronisiert? Tippe in der App unter Live-Aktivitäten auf Mit Home Assistant synchronisieren. Laut App meldet das laufende Activities an Home Assistant und passiert beim Öffnen der App ohnehin automatisch. Hat die App keine Verbindung zu deinem Server, zeigt sie dir eine Meldung „Live-Aktivität wird nicht aktualisiert“.
- Lokaler Push oder extern? In den Server-Einstellungen der App siehst du unter Status die Zeile Lokaler Push. Lokaler Push läuft nur, wenn dein iPhone über die interne URL verbunden ist und dein WLAN als intern eingetragen ist. Alle meine Tests liefen mit „Lokaler Push: Deaktiviert“ über den externen Weg, das funktioniert also auch.
- Update kommt nicht an, vibriert aber? Dann ist fast immer der
critical_texteine reine Zahl. Siehe Grenzen. - Icon und Balken fehlen? Prüfe
notification_icon_colorundprogress_bar_colorauf Tippfehler. Eine ungültige Farbe macht beides unsichtbar. - Updates kommen verzögert? Das kann an
silent: trueliegen. iOS darf solche Updates bündeln. - Activity verschwindet nach etwa 20 Sekunden? Du hast den
tagdirekt nach dem Beenden wiederverwendet. Nimm testweise einen neuentag. - Nach vielen Tests startet gar nichts mehr? Das Start-Budget von iOS ist aufgebraucht. Warte eine Weile und teste dann mit einem einzigen Start.
Es gibt außerdem offene Fehlermeldungen im GitHub-Projekt der iOS-App: Live Activities sollen unter iOS 27.0 nicht mehr funktionieren (#5812), der Start soll bei geschlossener App scheitern (#5766) und manchmal startet oder aktualisiert eine Activity gar nicht (#5459). Bei mir lief auf iOS 27.0 alles, was ich in diesem Guide zeige. Wenn bei dir trotz aller Punkte nichts passiert, schau dort nach.
Häufige Fragen
Brauche ich eine Integration aus HACS für Live Activities?
Nein. Live Activities sind in die offizielle Companion-App für iOS eingebaut. Du brauchst Home Assistant ab 2026.7.0, die Companion-App ab 2026.8.0 und ein iPhone mit iOS 17.2 oder neuer.
Warum funktioniert es nicht mit notify.send_message?
Die Aktion notify.send_message kennt nur Nachricht und Titel und verwirft alles unter data:. Damit fehlen tag und live_update. Nutze stattdessen den Dienst notify.mobile_app_ mit deinem Gerätenamen.
Warum vibriert mein iPhone bei jedem Update?
Updates ohne silent: true vibrieren, auch wenn die offizielle Doku etwas anderes sagt. Setz bei Zwischenschritten silent: true. Der Start vibriert immer, dort hat silent keine Wirkung.
Kann ich den Titel einer laufenden Live Activity ändern?
Ja, das habe ich auf dem iPhone getestet. Schickst du bei einem Update keinen Titel mit, springt die Karte aber auf den Titel vom Start zurück. Schick den Titel deshalb bei jedem Update mit.
Wie lange bleibt eine Live Activity sichtbar?
Höchstens acht Stunden aktiv. Danach beendet iOS sie und nimmt sie aus der Dynamic Island, auf dem Sperrbildschirm kann sie bis zu vier weitere Stunden stehen. Beendest du sie mit clear_notification, verschwindet sie sofort.
Warum wird mein Update ignoriert?
Meistens liefert ein Template beim critical_text eine reine Zahl. Home Assistant schickt das als Zahl statt als Text. Das iPhone verwirft dann das ganze Update. Häng ein Zeichen wie % oder W an.
Funktioniert das auch auf Android?
Ja, als Live Update ab Android 16. Dort ist title Pflicht. Kartenfarben, Balkenfarbe, Balkenrichtung und silent wertet Android nicht aus. Getestet habe ich nur das iPhone.
Erscheint die Live Activity auch auf der Apple Watch?
Laut Apple erscheint eine Live Activity, die auf dem iPhone startet, oben im Smart-Stapel einer gekoppelten Apple Watch. Die Home-Assistant-App bringt dafür ab iOS 18 ein eigenes kompaktes Layout mit. Auf meiner Watch habe ich das nicht getestet.
Wie viele Updates darf ich schicken?
Über den Push-Dienst von Home Assistant 500 pro Gerät und Tag, jedes Live-Activity-Update zählt mit. Dazu kommt Apples Budget pro Stunde, gegen das leise Updates mit silent: true laut Apple nicht zählen. Aktualisiere deshalb in sinnvollen Schritten, etwa alle 5 Prozent.
Weiter lesen:
