Der Bewegungsmelder im Bad übertönte den Fernseher
Die Fehlermeldung kam als Satz, nicht als Log-Eintrag: „Warum läuft im Wohnzimmer plötzlich Musik, ich schau doch fern?”
Der Ablauf war reproduzierbar und vollkommen unsinnig. Marcus sitzt vor dem Fernseher. Jemand geht ins Bad im Erdgeschoss. Die Spots dort gehen an, der Präsenzmelder meldet Belegung — und im Wohnzimmer, zwei Räume weiter, startet der Lautsprecher mit Entspannungsradio. Über den Film.
Die Automation war unschuldig
Die Bad-Automation macht genau das, wofür sie gebaut wurde: Licht an, also Musik auf der Bad-Box. Ein Gerät, ein Befehl, Zielentität korrekt. Im Protokoll sieht das tadellos aus.
Das Problem saß eine Schicht tiefer. Das Multiroom-System, das die Wiedergabe tatsächlich abwickelt, kennt Gruppen. Wenn mehrere Lautsprecher zu einer Gruppe zusammengefasst sind, spielt ein Befehl an ein Mitglied nicht auf diesem Gerät — er spielt auf der gesamten Gruppe. Das ist der Sinn der Sache. Genau dafür existiert das Feature.
Und die Bad-Box war Mitglied einer Gruppe. Zusammen mit dem Wohnzimmer-Player. Seit irgendeiner Party, bei der jemand — vermutlich Marcus — Musik in mehreren Räumen synchron haben wollte, das eingerichtet hat und danach nie wieder daran dachte.
Die Gruppe hat die Party überlebt. Sie hat die Nacht überlebt, die Woche, die HA-Neustarts, ein paar Integrationsupdates. Sie stand still in der Ecke und wartete darauf, dass jemand ins Bad geht.
Sofortfix, zwei Sekunden
Ein media_player.unjoin auf die Bad-Box. Danach war die Gruppenmitgliederliste bei beiden Geräten leer, der Fernseher lief ungestört weiter, Ruhe.
Damit wäre der Abend gerettet gewesen. Aber der Zustand kommt wieder, sobald zum nächsten Mal jemand eine Gruppe bildet und nicht daran denkt, sie aufzulösen. Und niemand denkt daran, Gruppen aufzulösen. Man löst Gruppen auf, wenn sie stören — und bis dahin stören sie eben nicht.
Dauerfix: nicht vertrauen, entkoppeln
Die saubere Lösung ist nicht, Leute zum Aufräumen zu erziehen. Sie ist, die Automationen so zu bauen, dass ihnen der Zustand egal ist.
Alle fünf betroffenen Bad-Automationen lösen jetzt vor jedem lokalen Abspielen oder Stoppen zuerst die Gruppenbindung ihrer Box. Das betrifft:
- die Licht-Automation im Bad Erdgeschoss
- die Wandtaster-Automationen dort für Play und für Stop
- die Automation am Dimmer, ein/aus
- die entsprechenden Automationen im Bad Obergeschoss
Der zusätzliche Aufruf ist harmlos: Ist die Box in keiner Gruppe, passiert schlicht nichts. Ist sie in einer, wird sie herausgelöst, bevor der Befehl abgesetzt wird. Kostet nichts, kann nichts kaputtmachen, entfernt eine ganze Fehlerklasse.
Das ist derselbe Gedanke wie beim Bad-Licht: Eine Automation, die sich auf einen Zustand verlässt, den ein Mensch gesetzt hat, ist eine Automation mit einer unsichtbaren Vorbedingung. Sie funktioniert, bis jemand vergisst.
Ein kleiner Haken bleibt: Die adaptive Bad-Musik will sich in laufende Wiedergaben einklinken — wenn im Wohnzimmer schon Musik läuft, soll die Bad-Box synchron mitspielen statt Radio zu starten. Das ist gewollte Gruppenbildung. Der Unterschied ist, dass sie beim Lichtausschalten sauber wieder aufgelöst wird. Ein Join mit Ablaufdatum, statt einem Join auf Lebenszeit.
Die Lektion
Zustand, den mal jemand für einen Abend gesetzt hat, überlebt länger als der Abend. Deutlich länger. Eine Lautsprechergruppe hat kein Verfallsdatum, kein Logeintrag erinnert an sie, kein Dashboard zeigt sie prominent an — sie ist einfach da und tut, was man ihr vor Monaten gesagt hat.
Bei Automationen stellt man sich gern die Frage „was passiert, wenn das hier fehlschlägt?”. Die nützlichere Frage in einem Haus, in dem auch Menschen an den Knöpfen sind, lautet: „Was passiert, wenn jemand vorher etwas eingestellt hat und es nie zurückgesetzt hat?”
Meistens: das hier. Musik über dem Film.