Zum Inhalt springen
Alles Automatisch
Guide

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.

Einsteiger36 Min. LesezeitAktualisiert am

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“.

Live Activity auf dem Sperrbildschirm und in der Dynamic Island
Oben die aufgeklappte Dynamic Island, darunter zwei Karten auf dem Sperrbildschirm

Der Weg zur ersten eigenen Live Activity hat drei Etappen:

  1. In der App einschalten und kurz prüfen, ob alles erlaubt ist.
  2. Eine Test-Live-Activity direkt aus Home Assistant schicken. Das dauert zwei Minuten.
  3. 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

WasMindestensBei mir getestet
Home Assistant2026.7.02026.9.2
Companion-App (iOS)2026.8.02026.9.1
iOS17.227.0
GerätiPhoneiPhone 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

  1. Öffne in der Companion-App die Einstellungen und tippe auf Companion-App.
  2. Im Abschnitt Bleibe auf dem Laufenden tippst du auf Live-Aktivitäten.
  3. 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.

Live-Aktivitäten in den Einstellungen der Companion-App
Beide Zeilen unter Status müssen auf Aktiviert stehen
Beispiele für Live-Aktivitäten in der Companion-App
Unter Beispiele startest du fertige Live Activities per Tipp

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.

Gerätename in den Server-Einstellungen der Companion-App
Erst auf den Server tippen, dann steht unter Details 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_message funktioniert hier nicht. Sie verwirft das innere data: komplett und damit alles, was eine Live Activity ausmacht. Nimm immer notify.mobile_app_DEIN_GERAET.

Schritt 2: Die Aktion in Home Assistant ausführen

  1. Öffne in Home Assistant Einstellungen → Werkzeuge → Aktionen, am schnellsten über diesen My-Home-Assistant-Link.
  2. Wechsle in den YAML-Modus.
  3. Füge das YAML unten ein und ersetze DEIN_GERAET durch deinen Gerätenamen aus Schritt 1.
  4. Tippe auf Aktion ausführen.

Dein iPhone vibriert und die Karte ist da.

yaml
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"
Werkzeuge, Aktionen im YAML-Modus mit einer Test-Live-Activity für den Geschirrspüler
So sieht das in Werkzeuge → Aktionen aus, hier mit meinem Geschirrspüler statt der Waschmaschine
FeldWas es macht
messageText unter dem Titel. Pflicht, ohne message lehnt Home Assistant die Aktion ab.
titleDie fette Überschrift.
tagName dieser einen Live Activity. Alles mit demselben tag landet auf derselben Karte. Buchstaben, Ziffern, - und _, höchstens 64 Zeichen.
live_update: trueMacht aus der Benachrichtigung eine Live Activity. Ohne Anführungszeichen, es muss ein echtes true sein.
critical_textDer kurze Status rechts oben.
progress, progress_maxZeichnen den Balken.
notification_icon, notification_icon_colorIcon 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_notification lä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:

yaml
1notify:
2  - platform: group
3    name: alle_iphones
4    services:
5      - action: mobile_app_DEIN_GERAET
6      - action: mobile_app_DEIN_ZWEITES_GERAET

Anders 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.

FeldSperrbildschirmIsland kompaktIsland erweitert
titleja, 1 Zeileneinja, 1 Zeile
messageja, 2 Zeilen, außer ein Timer läuftneinja, 1 Zeile
critical_textrechts obenrechts, wenn kein Timer läuftrechts, wenn kein Timer läuft
Prozentrechts oben, wenn kein critical_textrechts, als letzte Wahlrechts, als letzte Wahl
Timerstatt messagerechts, Vorrangrechts, Vorrang
Balkenjaneinja
IconKachel linkslinksKachel links

In der minimalen Ansicht siehst du nur das Icon.

Sperrbildschirm

Aufbau einer Live Activity auf dem Sperrbildschirm
Tipp auf die Punkte, dann siehst du, welches Feld wohin gehört
  • Icon-Kachel links: nur wenn du notification_icon setzt. Sonst fehlt die Kachel ganz.
  • Titel: eine Zeile.
  • Zweite Zeile: die message mit bis zu zwei Zeilen. Läuft ein Timer, steht dort stattdessen der Timer.
  • Rechts oben: critical_text. Fehlt der, steht dort der Prozentwert aus progress und progress_max.
  • Unten: der Fortschrittsbalken, wenn progress und progress_max gesetzt 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.

Mehrere Live Activities gestapelt auf dem Sperrbildschirm
Vier Activities der App unter einer gemeinsamen Überschrift

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.

Dynamic Island kompakt mit Status und mit Timer
Kompakt: rechts der kurze Status oder der Timer
Dynamic Island minimal mit zwei gleichzeitigen Aktivitäten
Minimal: nur das Icon, daneben eine Bildschirmaufnahme

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.

Dynamic Island erweitert mit Timer und Balken
Erweitert: Titel und Nachricht links, Timer rechts, darunter der Balken

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:

yaml
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: true macht das Update lautlos. Ohne vibriert das iPhone, mehr dazu unter Vibration steuern.

Beenden

Zum Beenden schickst du clear_notification mit demselben tag:

yaml
action: notify.mobile_app_DEIN_GERAET
data:
  message: clear_notification
  data:
    tag: waschmaschine_test

Die 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:

yaml
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.

Countdown und Stoppuhr als Live Activity
Oben ein Countdown mit Balken, unten eine Stoppuhr ab Start ohne Balken

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.

yaml
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:

yaml
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 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.

Akku-Live-Activity mit abnehmendem Balken
Dieselbe Akku-Activity auf dem Sperrbildschirm und in der aufgeklappten Island

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:

  1. progress_bar_color
  2. sonst notification_icon_color
  3. sonst das Home-Assistant-Blau #03A9F4

Eigene Kartenfarben

Mit background_color und text_color färbst du die Karte auf dem Sperrbildschirm:

yaml
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.

Glas-Karte und Karte mit eigenen Farben im Vergleich
Oben die Glas-Karte ohne eigene Farben, darunter eine Karte mit eigener Hintergrund- und Schriftfarbe

Vibration steuern

NachrichtVibriert?
Startimmer, silent wirkt hier nicht
Update ohne silentja
Update mit silent: truenein
Beenden einer schon entfernten Activitynein

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_text schreibt, 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

yaml
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: waschmaschine

So 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.

yaml
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 festen critical_text wie "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

yaml
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_laden

Automation 2: Ladestand leise aktualisieren

yaml
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 unknown schickt sie immer, auch wenn er noch im ersten Schritt liegt. Jedes Update ist ein Push, davon hast du nicht unendlich viele. start_automation prüfst du wie bei der Waschmaschine.
  • Beim critical_text hängt % hinten dran. Ohne käme dort eine reine Zahl an und das Update würde verschluckt.
  • Der Akkustand geht erst durch float(0) und round(0), dann durch int(0). So wird aus 78.6 sauber 79.
  • mode: single statt restart. Springt dein Ladesensor kurz auf unavailable und wieder auf on, würde restart von 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 zweite wait_for_trigger, wie bei der Waschmaschine.
  • Das Ende ist jeder Zustand außer on, eine Minute lang. Mit from: "on" käme das Ende nie an, wenn der Sensor zwischendurch unavailable meldet und danach erst off. 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.

yaml
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 nach unavailable erscheint, 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.

  1. Versionen prüfen. Home Assistant mindestens 2026.7.0, Companion-App mindestens 2026.8.0, iOS mindestens 17.2.
  2. Live-Aktivitäten erlaubt? In der Companion-App unter Einstellungen → Companion-App → Live-Aktivitäten muss der Status auf Aktiviert stehen.
  3. Richtiger Dienst? Es muss notify.mobile_app_... sein, nicht notify.send_message. Den Namen prüfst du unter Gerätename in den Server-Einstellungen der App.
  4. Felder korrekt? message und tag sind gesetzt, live_update: true steht ohne Anführungszeichen da.
  5. 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“.
  6. 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.
  7. Update kommt nicht an, vibriert aber? Dann ist fast immer der critical_text eine reine Zahl, siehe Grenzen.
  8. Icon und Balken fehlen? Prüfe notification_icon_color und progress_bar_color auf Tippfehler. Eine ungültige Farbe macht beides unsichtbar.
  9. Updates kommen verzögert? Das kann an silent: true liegen, iOS darf solche Updates bündeln.
  10. Activity verschwindet nach etwa 20 Sekunden? Du hast den tag direkt nach dem Beenden wiederverwendet. Nimm testweise einen neuen.
  11. 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: