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 steckt sie zusätzlich 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 eine ganz normale Benachrichtigung mit zwei zusätzlichen Feldern. In der deutschen App heißt die Funktion „Live-Aktivitäten“.

Der Weg zur ersten eigenen Live Activity hat drei Etappen:
- In der App einschalten und kurz prüfen, ob alles erlaubt ist.
- Eine Test-Live-Activity direkt aus Home Assistant schicken. Das dauert zwei Minuten.
- Mit einer Automation an einen Sensor hängen, damit sie von selbst startet und endet.
Hinweis: Keine Lust auf YAML von Hand? Im Live Activity Generator baust du deine Live Activity per Klick zusammen, siehst sie sofort in der Vorschau und richtest sie unter Dauerhaft einrichten als Blueprint ein. YAML zum Kopieren gibt es dort auch.
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 |
Die App muss mindestens 2026.8.0 sein. In 2026.7 steckte der Code schon, starten ließen sich Live Activities dort aber nur in TestFlight-Builds. 2026.8.0 vom 30. August 2026 war die erste Version im App Store.
So prüfst du deine Versionen:
- Home Assistant: In der Companion-App unter Einstellungen → Companion-App im Bereich Server auf deinen Server tippen. Unter Status steht die Version.
- Companion-App: Unter Einstellungen → Companion-App ganz unten auf Über tippen, dort steht zum Beispiel „Home Assistant Companion 2026.9.1“.
- iOS: In den iPhone-Einstellungen unter Allgemein → Info.
Beim Start tauschen App und Home Assistant einen Token aus. Ohne Verbindung zu deinem Server klappt das nicht und die Live Activity kommt nicht an. Willst du unterwegs Updates sehen, brauchst du einen funktionierenden Fernzugriff.
Ein iPhone ohne Dynamic Island, zum Beispiel das iPhone 16e, zeigt die Live Activity nur auf dem Sperrbildschirm. Welche Modelle eine Island haben und wie es auf iPad, Android und Mac aussieht, steht weiter unten.
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, sind 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 lässt du an: Laut App darf Home Assistant Live Activities damit bis zu einmal pro Sekunde aktualisieren. Apple selbst nennt keine Zahl.
Unter Beispiele liegen fertige Live Activities. Tippst du bei einem auf Start, erscheint es sofort auf deinem iPhone, das YAML steht jeweils dabei. Die Beispiele laufen laut App lokal auf dem Gerät. Sie zeigen, wie eine Karte aussieht, beweisen aber nicht, dass der Weg von Home Assistant zu deinem iPhone funktioniert. Das testest du im nächsten Kapitel.


Wichtig: Inhalte von Live-Aktivitäten sind auf dem Sperrbildschirm und in der Dynamic Island auch ohne Face ID oder Touch ID sichtbar. Darauf weist die App selbst hin. „Alarmanlage unscharf“ gehört also 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.
In der Companion-App tippst du unter Einstellungen → Companion-App im Bereich Server auf deinen Server (meiner heißt „Zuhause“). Unter Details steht der Gerätename.

Aus dem Namen wird der Dienst: klein geschrieben, Leerzeichen und Sonderzeichen werden zu Unterstrichen. Mein iPhone heißt „Jakku“, der Dienst also notify.mobile_app_jakku. In Home Assistant findest du den Namen bei der Integration Mobile App, am schnellsten über diesen My-Home-Assistant-Link.
Hinweis: Die neuere Aktion
notify.send_messagefunktioniert hier nicht. Sie verwirft das inneredata:komplett und damit 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, am schnellsten ü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.
Dein iPhone vibriert und die Karte ist da.
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"
| Feld | Was es macht |
|---|---|
message | Text unter dem Titel. Pflicht, ohne message lehnt Home Assistant die Aktion ab. |
title | Die fette Überschrift. |
tag | Name dieser einen Live Activity. Alles mit demselben tag landet auf derselben Karte. Buchstaben, Ziffern, - und _, höchstens 64 Zeichen. |
live_update: true | Macht aus der Benachrichtigung eine Live Activity. Ohne Anführungszeichen, es muss ein echtes true sein. |
critical_text | Der kurze Status rechts oben. |
progress, progress_max | Zeichnen den Balken. |
notification_icon, notification_icon_color | Icon und Farbe. |
Schritt 3: Aufräumen und weitermachen
Die Testkarte wischst du auf dem Sperrbildschirm nach links weg oder du schickst den Befehl aus Beenden.
Tipp: Starte beim Testen nicht zwanzigmal hintereinander neu. iOS hat ein Budget dafür, wie oft eine Live Activity per Push starten darf. Ist es aufgebraucht, starten neue Activities einfach nicht mehr, ohne Fehlermeldung. Mehr dazu unter Grenzen.
Wie geht es weiter? Die Waschmaschine gibt es als fertige Vorlage mit allen Schritten vom Einweichen bis Fertig: im Live Activity Generator öffnen. Soll die Karte von selbst kommen, spring direkt zur Automation mit Sensor.
Mehrere iPhones
Die Waschmaschine ist fertig und nur einer von euch bekommt es mit? Im Live Activity Generator holst du mit Weiteres iPhone ein zweites dazu, mit einem weiteren Klick ein drittes. Bei drei ist Schluss. Jedes iPhone bekommt seine eigene Karte.
Der tag bleibt für alle derselbe. Home Assistant merkt sich jede Live Activity pro iPhone und tag, zwei Handys mit demselben tag kommen sich also nicht in die Quere. Auch das Tageslimit teilen sie sich nicht: Die 500 Pushes aus Grenzen gelten pro Gerät. Ein zweites iPhone kostet das erste nichts.
Wo du die iPhones angibst, hängt vom Weg im Generator ab. Unter Dauerhaft einrichten legst du beim Blueprint nur fest, wie viele es sind. Welche genau, wählst du beim Import in Home Assistant aus. Bekommst du zwei Blueprints, einen für Start und Ende und einen für die Zwischenstände, fragen beide nach allen iPhones. Du wählst jedes also zweimal aus. Klappst du dort Lieber YAML selbst einfügen auf, trägst du für jedes iPhone den Gerätenamen ein. Bei Ausprobieren gibt es nur ein iPhone, das ist ein einzelner Testaufruf.
Ein falscher iPhone-Name hält die ganze Automation an, auch für die anderen iPhones: Home Assistant bricht beim ersten Push an ein unbekanntes Gerät ab. Probier deshalb jeden Namen einmal über Ausprobieren aus, bevor du die Automation speicherst. Mit dem Blueprint kann das nicht passieren, dort wählst du die Geräte aus einer Liste.
Nur, wenn du zu Hause bist
Unterwegs brauchst du keine Karte für eine Waschmaschine, die du eh nicht ausräumen kannst. Deshalb steht im Generator unter jedem iPhone Nur senden, wenn zu Hause. Unter Lieber YAML selbst einfügen trägst du dort eine Person aus Home Assistant ein, etwa person.daniel. Bleibt das Feld leer, geht immer alles raus. Beim Blueprint schaltest du es pro iPhone ein und wählst die Person beim Import aus, dort ist sie dann Pflicht.
Was dann passiert:
- Du bist nicht zu Hause. Keine Karte, keine Vibration.
- Du kommst während des Programms nach Hause. Die Karte kommt mit dem nächsten Push an dein iPhone. Schickt deine Automation Aktualisierungen, ist sie mit der nächsten da, gleich mit dem aktuellen Stand und ohne Vibration. Das habe ich auf meinem iPhone getestet, einmal mit der App im Hintergrund und einmal mit beendeter App. Schickt sie keine, wie die Waschmaschine an der Steckdose, kommt die Karte erst mit der Fertig-Meldung. Die vibriert.
- Du fährst los, während es läuft. Deine Karte bekommt keine neuen Pushes mehr und zeigt den letzten Stand. Ein Countdown zählt nach seinem Ende weiter hoch. Am Ende verschwindet die Karte trotzdem sauber. Das Beenden mit
clear_notificationläuft genau deshalb ohne Bedingung und geht an jedes iPhone. Sonst bliebe die Karte hängen, bis du sie wegwischst. - Du hast die App ganz beendet. Dann kommt die Karte beim Heimkommen laut Quellcode der App nicht in jedem Fall, auch wenn es bei meinem Test geklappt hat.
Geprüft wird, ob die Person den Zustand home hat. Nicht, ob sie not_home ist. Das hat einen Grund: Steht jemand in einer anderen Zone, trägt die Person deren Namen als Zustand, also zum Beispiel „Arbeit“. Dann ist sie weder home noch not_home und eine Prüfung auf „nicht not_home“ würde ihr die Karte ins Büro schicken. Kennt Home Assistant den Ort gerade gar nicht, geht ebenfalls nichts raus.
Für Fortgeschrittene: Statt einer Aktion pro iPhone geht auch eine Notify-Gruppe in YAML. Sie reicht dasselbe data: an jedes Handy weiter, also auch alles für die Live Activity:
1notify:
2 - platform: group
3 name: alle_iphones
4 services:
5 - action: mobile_app_DEIN_GERAET
6 - action: mobile_app_DEIN_ZWEITES_GERAETAnders als sonst steht bei action: nur mobile_app_DEIN_GERAET ohne notify. davor, mit dem Präfix lehnt Home Assistant die Konfiguration ab. Das gehört in die configuration.yaml, danach startest du Home Assistant neu und schickst alles an notify.alle_iphones. Eine Bedingung pro Person kennt die Gruppe nicht, die Karte geht immer an alle. Die Gruppe, die du als Helfer in der Oberfläche anlegst, taugt dafür nicht: Sie läuft über notify.send_message und verwirft das innere data:.
Was wird wo angezeigt?
Dieselbe Live Activity sieht an vier Stellen unterschiedlich aus. Das hat mich am Anfang am meisten verwirrt. Die Tabelle ist die Kurzfassung, darunter kommt jede Ansicht mit Bild.
| 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.
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.
Ohne eigene Farben hat die Karte einen durchscheinenden Glas-Hintergrund, durch den dein Hintergrundbild schimmert. Der schwarze Standard aus der offiziellen Doku 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 ist die Pille, die du im normalen Betrieb siehst. Links steht das Icon in deiner Iconfarbe. Rechts hat ein laufender Timer Vorrang, ohne Timer kommt critical_text, ohne den der Prozentwert. Einen Balken gibt es hier nicht.
Minimal wird die Island, wenn gleichzeitig eine zweite Live Activity läuft, zum Beispiel eine Bildschirmaufnahme. Home Assistant behält seine Pille, zeigt dort aber nur noch das Icon. Kein Text, kein Timer.


Erweitert klappt die Island auf, wenn du lange auf sie drückst. Links sitzt die Icon-Kachel, daneben Titel und message in einer Zeile. Rechts steht wieder der Timer, sonst critical_text, sonst Prozent. Darunter liegt der Balken.
Anders als auf dem Sperrbildschirm bleibt die message hier neben dem Timer stehen. 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.

Starten, aktualisieren, beenden
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 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 Regeln, alle auf dem iPhone getestet:
- Schick den Titel bei jedem Update mit. Ein neuer Titel benennt die Karte sofort um, auch wenn die Doku sagt, er bleibe fest. Fehlt der Titel, springt die Karte auf den Titel vom Start zurück, nicht auf den zuletzt geschickten.
- Schick auch alle anderen Felder mit, also Icon und Farbe. So machen es die Beispiele in der App, dann bleibt die Karte, wie sie ist.
silent: truemacht das Update lautlos. Ohne vibriert das iPhone, mehr dazu unter Vibration steuern.
Beenden
Zum Beenden schickst du 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: Für eine schon weggewischte Activity passierte nichts und das iPhone vibrierte auch nicht.
Denselben Tag-Namen 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 lief etwa 20 Sekunden und verschwand dann von selbst. Mit einem neuen tag blieb sie stehen.
Wie lange man warten muss, lässt sich aus diesem einen Test nicht ablesen. 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 nur für das Update, mit dem sie kommt. Ein Update ohne url setzt das Antippen wieder auf die Startseite deines Servers zurück. 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 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. Ist die Zeit um, zählt der Timer laut Quellcode der App einfach wieder hoch. Beende die Activity deshalb selbst, sobald der Countdown 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
Das App-Beispiel „Auf 20 min hochzählen“ nutzt when: -1200 und zählt lokal in der App von null bis 20 Minuten hoch, mit Balken. Aus Home Assistant geschickt passiert etwas anderes: Mein Test mit when: -300 startete bei 5:00 und zählte von dort weiter hoch, ohne Balken und ohne Ziel. Der Push-Weg über Apple nimmt den Zielwert nicht mit. Nutze negative Werte deshalb nicht.
Relative Zeiten starten bei jedem Update neu
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, zeigt der 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. Zu sehen ist er aber nur ohne critical_text, 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 | 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: decreasingDas hat mich überrascht: decreasing dreht nicht die Laufrichtung um. Der Balken zeichnet den Rest bis zum Maximum, weiterhin von links. Bei progress: 65 sind das 35 Prozent Füllung. Der automatische Prozentwert würde dabei weiter 65 zeigen, deshalb steht der passende Wert im Beispiel 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 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 und kein Balken. 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. Ohne beide Felder bleibt die Glas-Optik. Die Dynamic Island bleibt in jedem Fall dunkel.

Vibration steuern
| Nachricht | Vibriert? |
|---|---|
| Start | immer, silent wirkt hier nicht |
Update ohne silent | ja |
Update mit silent: true | nein |
| Beenden einer schon entfernten Activity | nein |
Die offizielle Doku sagt, Updates kämen still an. Auf meinem iPhone war das nicht so. Ein Entwickler der App bestätigt das in einem GitHub-Issue.
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 mit einem Ablauf:
- 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
Die Waschmaschine hängt an einer Steckdose mit Leistungsmessung. Die Live Activity startet, wenn sie Strom zieht. Ist die Wäsche fertig, meldet sie sich laut und räumt sich danach 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 Startwerte. Schau dir den Verlauf deines Sensors an: Im Standby muss die Maschine unter 5 Watt liegen, beim Waschen deutlich über 10.
Wichtig: Was ein Template in
critical_textschreibt, muss Text bleiben. Kommt dort eine reine Zahl an, verschluckt das iPhone das ganze Update. Die Automationen hier sind darauf gebaut, die Erklärung steht unter Grenzen.
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
7triggers:
8 - trigger: numeric_state
9 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
10 above: 10
11 for:
12 minutes: 2
13conditions: []
14actions:
15 - repeat:
16 sequence:
17 - variables:
18 phase_text: >-
19 {%- set t = states(phase_entity) | trim -%}
20 {%- if not has_value(phase_entity) or t == '' -%}Läuft
21 {%- elif is_number(t) or t | regex_match('^([0-9.+([{\'"-]|True|False|None|[bBrRuU]{1,2}[\'"])') -%}Phase {{ t }}
22 {%- else -%}{{ t }}
23 {%- endif -%}
24 - action: notify.mobile_app_DEIN_GERAET
25 data:
26 message: Waschgang läuft
27 title: Waschmaschine
28 data:
29 tag: waschmaschine
30 live_update: true
31 critical_text: "{{ phase_text }}"
32 notification_icon: mdi:washing-machine
33 notification_icon_color: "#2196F3"
34 - wait_for_trigger:
35 - trigger: numeric_state
36 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
37 below: 5
38 for:
39 minutes: 5
40 timeout:
41 hours: 8
42 continue_on_timeout: false
43 - action: notify.mobile_app_DEIN_GERAET
44 data:
45 message: Die Wäsche kann raus
46 title: Waschmaschine
47 data:
48 tag: waschmaschine
49 live_update: true
50 critical_text: Fertig
51 notification_icon: mdi:check-circle
52 notification_icon_color: "#4CAF50"
53 - wait_for_trigger:
54 - trigger: numeric_state
55 entity_id: sensor.DEINE_WASCHMASCHINE_LEISTUNG
56 above: 10
57 for:
58 minutes: 2
59 timeout:
60 minutes: 15
61 continue_on_timeout: true
62 until:
63 - condition: template
64 value_template: "{{ wait.trigger is none }}"
65 - action: notify.mobile_app_DEIN_GERAET
66 data:
67 message: clear_notification
68 data:
69 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. Beim Waschen 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. Startet vorher schon der nächste Waschgang, bleibt sie stehen und alles beginnt von vorn.
Rechts oben steht, was die Variable phase_text liefert. Ohne Phasen-Sensor lässt du den Platzhalter einfach stehen, dann steht dort „Läuft“. Liefert dein Sensor eine reine Zahl oder etwas wie True, setzt die Variable „Phase“ davor. Aus 2 wird so „Phase 2“ und das Update bleibt Text.
mode: single ignoriert einen zweiten Start während eines Waschgangs. Deshalb wartet die Automation die 15 Minuten nicht mit delay ab, sondern mit wait_for_trigger auf einen neuen Start. Mit delay bekäme ein Waschgang, der in dieser Zeit beginnt, gar keine Karte. Die acht Stunden Timeout passen zu iOS: Länger läuft eine Live Activity ohnehin nicht.
Hinweis: Startet Home Assistant während eines Waschgangs neu, bricht diese Automation ab. Die Karte bleibt dann stehen, bis du sie wegwischst oder iOS sie nach spätestens acht Stunden beendet. Neue Schritte zeigt sie dann auch nicht mehr an. Der Live Activity Generator baut dafür zwei zusätzliche Auslöser ein: Nach einem Neustart wartet die Automation, bis dein Sensor wieder einen Wert hat. Läuft das Gerät noch, macht sie leise weiter. War es in der Zeit fertig, räumt sie die hängende Karte selbst weg.
Dasselbe gilt, wenn du die Automation im Editor änderst und speicherst: Home Assistant ersetzt sie dann und der laufende Durchlauf endet. Speicherst du dagegen, ohne an ihr etwas zu ändern, läuft er weiter.
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"Eine Sache musst du prüfen: start_automation muss 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.
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".
Warum die zwei Automationen so gebaut sind
Updates nur, solange Automation 1 läuft. Ein Update ohne laufende Activity ist ein Start. Und zwar ein stiller. Wechselt die Phase in den zwei Minuten vor dem Start 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. Stimmt die Entitäts-ID nicht, erscheint deshalb auch keine Karte ohne Vibration.
Fünf Sekunden warten. 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.
Über 5 Watt. Diese Bedingung sorgt dafür, dass kein Phasenwechsel mehr durchrutscht, während Automation 1 nach dem Waschgang ihre fünf Minuten abwartet.
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.
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. Endet das Laden, meldet sie sich laut. 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). Aufgebaut ist es wie bei der Waschmaschine: eine Automation für Start, Ende und Aufräumen, eine zweite für leise Updates.
Automation 1: Start, Ende und Aufräumen
1alias: "E-Auto laden: Live Activity"
2description: Zeigt den Ladestand als Live Activity, solange das Auto lädt
3mode: single
4max_exceeded: silent
5variables:
6 level_entity: sensor.DEIN_AUTO_AKKU
7triggers:
8 - trigger: state
9 entity_id: binary_sensor.DEIN_AUTO_LAEDT
10 to: "on"
11conditions: []
12actions:
13 - repeat:
14 sequence:
15 - if:
16 - condition: template
17 value_template: "{{ has_value(level_entity) }}"
18 then:
19 - action: notify.mobile_app_DEIN_GERAET
20 data:
21 message: Auto lädt
22 title: E-Auto
23 data:
24 tag: e_auto_laden
25 live_update: true
26 critical_text: "{{ states(level_entity) | float(0) | round(0) | int(0) }} %"
27 progress: "{{ states(level_entity) | float(0) | round(0) | int(0) }}"
28 progress_max: 100
29 notification_icon: mdi:ev-station
30 notification_icon_color: "#4CAF50"
31 else:
32 - action: notify.mobile_app_DEIN_GERAET
33 data:
34 message: Auto lädt
35 title: E-Auto
36 data:
37 tag: e_auto_laden
38 live_update: true
39 notification_icon: mdi:ev-station
40 notification_icon_color: "#4CAF50"
41 - wait_for_trigger:
42 - trigger: state
43 entity_id: binary_sensor.DEIN_AUTO_LAEDT
44 not_to:
45 - "on"
46 - unknown
47 - unavailable
48 for:
49 minutes: 1
50 timeout:
51 hours: 8
52 continue_on_timeout: true
53 - if:
54 - condition: template
55 value_template: "{{ wait.trigger is none }}"
56 then:
57 - action: notify.mobile_app_DEIN_GERAET
58 data:
59 message: clear_notification
60 data:
61 tag: e_auto_laden
62 - stop: Kein Ende innerhalb von 8 Stunden
63 - if:
64 - condition: template
65 value_template: "{{ has_value(level_entity) }}"
66 then:
67 - action: notify.mobile_app_DEIN_GERAET
68 data:
69 message: Laden beendet
70 title: E-Auto
71 data:
72 tag: e_auto_laden
73 live_update: true
74 critical_text: "{{ states(level_entity) | float(0) | round(0) | int(0) }} %"
75 progress: "{{ states(level_entity) | float(0) | round(0) | int(0) }}"
76 progress_max: 100
77 notification_icon: mdi:check-circle
78 notification_icon_color: "#4CAF50"
79 else:
80 - action: notify.mobile_app_DEIN_GERAET
81 data:
82 message: Laden beendet
83 title: E-Auto
84 data:
85 tag: e_auto_laden
86 live_update: true
87 notification_icon: mdi:check-circle
88 notification_icon_color: "#4CAF50"
89 - wait_for_trigger:
90 - trigger: state
91 entity_id: binary_sensor.DEIN_AUTO_LAEDT
92 to: "on"
93 timeout:
94 minutes: 15
95 continue_on_timeout: true
96 until:
97 - condition: template
98 value_template: "{{ wait.trigger is none }}"
99 - action: notify.mobile_app_DEIN_GERAET
100 data:
101 message: clear_notification
102 data:
103 tag: e_auto_ladenAutomation 2: Ladestand leise aktualisieren
1alias: "E-Auto laden: Live Activity aktualisieren"
2description: Aktualisiert den Ladestand der laufenden Live Activity leise, solange das Auto lädt
3mode: restart
4variables:
5 start_automation: automation.e_auto_laden_live_activity
6 level_entity: sensor.DEIN_AUTO_AKKU
7 progress_step: 5
8triggers:
9 - trigger: state
10 entity_id: sensor.DEIN_AUTO_AKKU
11 not_to:
12 - unknown
13 - unavailable
14conditions:
15 - condition: state
16 entity_id: binary_sensor.DEIN_AUTO_LAEDT
17 state: "on"
18 - condition: template
19 value_template: "{{ state_attr(start_automation, 'current') | int(0) > 0 }}"
20 - condition: template
21 value_template: "{{ (trigger.from_state is none or trigger.from_state.state in ['unknown', 'unavailable'] or ((trigger.from_state.state | float(0)) / progress_step) | int(0) != ((trigger.to_state.state | float(0)) / progress_step) | int(0)) }}"
22actions:
23 - delay:
24 seconds: 5
25 - condition: state
26 entity_id: binary_sensor.DEIN_AUTO_LAEDT
27 state: "on"
28 - condition: template
29 value_template: "{{ state_attr(start_automation, 'current') | int(0) > 0 }}"
30 - if:
31 - condition: template
32 value_template: "{{ has_value(level_entity) }}"
33 then:
34 - action: notify.mobile_app_DEIN_GERAET
35 data:
36 message: Auto lädt
37 title: E-Auto
38 data:
39 tag: e_auto_laden
40 live_update: true
41 silent: true
42 critical_text: "{{ states(level_entity) | float(0) | round(0) | int(0) }} %"
43 progress: "{{ states(level_entity) | float(0) | round(0) | int(0) }}"
44 progress_max: 100
45 notification_icon: mdi:ev-station
46 notification_icon_color: "#4CAF50"
47 else:
48 - action: notify.mobile_app_DEIN_GERAET
49 data:
50 message: Auto lädt
51 title: E-Auto
52 data:
53 tag: e_auto_laden
54 live_update: true
55 silent: true
56 notification_icon: mdi:ev-station
57 notification_icon_color: "#4CAF50"Die Details, die hier den Unterschied machen:
- Der Start geht immer raus und vibriert. Viele Autos melden „lädt“, bevor der Akkustand wieder da ist. Dann startet die Karte erst einmal ohne Balken, das nächste Update bringt den Wert nach. Automation 2 schickt nie den ersten Push. Sie wartet, bis Automation 1 läuft und ihren Start verschickt hat. Sonst könnte ein leises Update die Karte anlegen und dein iPhone bliebe still.
- Updates nur in 5-Prozent-Schritten und nur, solange Automation 1 läuft. Den ersten Wert nach
unknownschickt sie immer, auch wenn er noch im ersten Schritt liegt. Jedes Update ist ein Push, davon hast du nicht unendlich viele.start_automationprüfst du wie bei der Waschmaschine. - Beim
critical_texthängt%hinten dran. Ohne käme dort eine reine Zahl an und das Update würde verschluckt. - Der Akkustand geht erst durch
float(0)undround(0), dann durchint(0). So wird aus78.6sauber79. mode: singlestattrestart. Springt dein Ladesensor kurz aufunavailableund wieder aufon, würderestartvon vorn anfangen und dein iPhone vibriert mitten im Laden ein zweites Mal. Einen neuen Ladevorgang in den 15 Minuten nach dem Ende verpasst sie trotzdem nicht: Darauf wartet das zweitewait_for_trigger, wie bei der Waschmaschine.- Das Ende ist jeder Zustand außer
on, eine Minute lang. Mitfrom: "on"käme das Ende nie an, wenn der Sensor zwischendurchunavailablemeldet und danach erstoff. Die Minute schluckt kurze Aussetzer der Wallbox. - Zum Schluss steht der echte Akkustand da, nicht „Voll“. Ziehst du bei 60 % den Stecker, ist das Laden auch beendet.
- Kommt nach acht Stunden kein Ende, räumt sie die Karte weg und hört auf. Länger zeigt iOS eine Live Activity ohnehin nicht.
Startet Home Assistant während des Ladens neu, gilt derselbe Hinweis wie bei der Waschmaschine. Der Generator baut auch hier die zwei zusätzlichen Auslöser ein.
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_to:
9 - unavailable
10conditions: []
11actions:
12 - if:
13 - condition: template
14 value_template: >-
15 {{ has_value('sensor.DEIN_BACKOFEN_ENDE')
16 and as_timestamp(states('sensor.DEIN_BACKOFEN_ENDE'), 0) > as_timestamp(now()) }}
17 then:
18 - if:
19 - condition: template
20 value_template: >-
21 {{ trigger.from_state is not none
22 and trigger.from_state.state not in ['unknown', 'unavailable']
23 and as_timestamp(trigger.from_state.state, 0) > as_timestamp(now()) }}
24 then:
25 - action: notify.mobile_app_DEIN_GERAET
26 data:
27 message: Backofen läuft
28 title: Backofen
29 data:
30 tag: backofen
31 live_update: true
32 silent: true
33 chronometer: true
34 when: "{{ as_timestamp(states('sensor.DEIN_BACKOFEN_ENDE')) | int }}"
35 when_relative: false
36 notification_icon: mdi:stove
37 notification_icon_color: "#F44336"
38 else:
39 - action: notify.mobile_app_DEIN_GERAET
40 data:
41 message: Backofen läuft
42 title: Backofen
43 data:
44 tag: backofen
45 live_update: true
46 chronometer: true
47 when: "{{ as_timestamp(states('sensor.DEIN_BACKOFEN_ENDE')) | int }}"
48 when_relative: false
49 notification_icon: mdi:stove
50 notification_icon_color: "#F44336"
51 else:
52 - action: notify.mobile_app_DEIN_GERAET
53 data:
54 message: clear_notification
55 data:
56 tag: backofen- Start: Hatte der Sensor vorher keine gültige Endzeit, startet die Karte mit Vibration. Erst wenn schon ein Countdown läuft, geht das Update leise raus.
- Nachstellen: Ändert sich die Endzeit, springt der Timer auf die neue Zeit.
- Ende: Hat der Sensor keinen gültigen Wert mehr oder liegt die Zeit in der Vergangenheit, beendet die Automation die Live Activity.
- Aussetzer: Wird der Sensor
unavailable, reagiert der Trigger nicht, die Karte bleibt stehen. Kommt der Wert zurück, schickt die Automation ihn mit Vibration. Ein Programm, dessen Endzeit direkt nachunavailableerscheint, bekommt so trotzdem seine Karte.
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
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. Genau das habe ich getestet, critical_text als Zahl 42 kam nie an. Die Lösung: Häng 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.
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 längere Vorgänge 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ß es 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 hat Apple ein Budget. Updates mit silent: true gehen mit niedriger Priorität raus und zählen laut Apple nicht dagegen. Laut dem App-Beispiel „Ratenbegrenzung“ zeigt iOS 18 außerdem nur etwa eine Aktualisierung pro 15 Sekunden an.
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. Laut Doku zählen Befehle wie clear_notification 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.
Denselben Tag-Namen nicht sofort neu starten. Siehe oben.
iPhone, iPad, Android und Mac
Dynamic Island: Laut Apple haben sie das iPhone 14 Pro und 14 Pro Max, alle iPhone 15 und 16, das iPhone 17, 17 Pro und 17 Pro Max, das iPhone Air sowie das iPhone 18 Pro und 18 Pro Max. Nicht dabei sind iPhone 16e und iPhone 17e, auch wenn die Home-Assistant-Doku „alle iPhone 15 und neuer“ schreibt. Dort siehst du die Live Activity nur auf dem Sperrbildschirm.
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 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-16-Gerät hatte ich nicht, dieser Guide zeigt deshalb nur das iPhone.
Mac: Mit macOS Tahoe 26 zeigt der Mac die Live Activities deines iPhones in der Menüleiste, wenn beide per iPhone-Synchronisierung verbunden sind. Starten kann die Mac-App selbst keine.
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?
messageundtagsind gesetzt,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. Ohne Verbindung zu deinem Server zeigt die App die Meldung „Live-Aktivität wird nicht aktualisiert“.
- Lokaler Push oder extern? In den Server-Einstellungen der App steht unter Status die Zeile Lokaler Push. Er läuft nur, wenn dein iPhone über die interne URL verbunden 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 neuen. - Nach vielen Tests startet gar nichts mehr? Das Start-Budget von iOS ist aufgebraucht. Warte eine Weile und teste dann mit einem einzigen Start.
Im GitHub-Projekt der iOS-App gibt es außerdem offene Fehlermeldungen: 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 dieser Guide zeigt. Passiert bei dir trotz aller Punkte nichts, 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 und das iPhone verwirft 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:
