Smart Home lokal · Teil 1 von 8

Warum bei uns alles lokal läuft

Home Assistant, Zigbee2MQTT und ein eigener MQTT-Broker teilen sich einen Heimserver mit einem Kamerasystem. Wie wir beides getrennt halten, Alexa ohne Abo anbinden und wo trotzdem eine Cloud im Spiel ist.

Bevor unsere neue Home-Assistant-Installation auch nur ein Thermostat kannte, musste sie etwas versuchen, das ihr nicht gelingen durfte: den MQTT-Broker unseres Kamerasystems erreichen. Am 28. August 2026, gleich nach dem ersten Start, versuchte Claude aus dem Home-Assistant-Container heraus eine Verbindung zu diesem Broker und zur Schnittstelle des Kamerasystems. Beides lief ins Leere. FRITZ!Box und Hue-Bridge waren dagegen erreichbar. Erst danach kam das erste Gerät dazu.

Zuerst die Regeln, nach denen dieses Haus gebaut ist.

Vier Grundsätze

Lokal statt Cloud. Die erste Design-Spezifikation legt fest: kein Zugriff von außen, keine Abhängigkeit von einem Cloud-Dienst. „Fällt das Internet aus, muss das Haus weiter bedienbar sein.“ Das reicht bis in Kleinigkeiten. Die WLAN-Lichterkette von Tuya hing am Tag ihrer Einrichtung zuerst an der eingebauten, cloudgebundenen Tuya-Integration und lief noch am selben Tag lokal über tuya-local. Der Dreame-Saugroboter brauchte die Hersteller-Cloud einmal, um an seinen Token zu kommen. Dass die Integration danach trotzdem prefer_cloud: True gesetzt hatte, fiel erst auf, als das Heimschicken an einer Cloud-Störung scheiterte. Seit dem 31.08. läuft auch er im Heimnetz.

Keine laufenden Kosten. Wir haben kein Abo, weder für die Sprachsteuerung noch für den Zugriff von unterwegs. Das hat einen Preis: Anwesenheit erkennt das Haus nur über das WLAN. Die App mit GPS wäre genauer, bräuchte aber einen offenen Port, ein Abo bei Nabu Casa oder ein Dauer-VPN auf beiden Telefonen.

Isolation vor Bequemlichkeit. Home Assistant läuft in einem eigenen Docker-Bridge-Netz. Die Geräteerkennung per mDNS funktioniert dort nur eingeschränkt, also tragen wir Geräte per Adresse ein. Die mitgelieferte Integration fritz verlangt beim Einrichten das Recht „FRITZ!Box Einstellungen“, nur um den Modellnamen des Routers abzufragen, und hätte für alle 137 Geräte der FRITZ!Box einen Tracker angelegt. Gebraucht werden zwei. Stattdessen liest ein kleiner eigener Dienst nur die Geräteliste. Und die Kameras bleiben bewusst aus Home Assistant heraus.

Messen statt Vermuten. Eine Integration gilt erst als angebunden, wenn sie nachweislich tut, was sie soll. Für die FRITZ!DECT-Thermostate hieß das: den Wintergarten über Home Assistant von 17,0 auf 17,5 °C stellen, an der FRITZ!Box gegenprüfen, zurückstellen. „Eine Heizungssteuerung, die nur anzeigt, wäre wertlos.“ Seit Home Assistant nach einem Kernel-Update am 28.08. nicht von allein wieder hochkam, prüft ein Wächter alle fünf Minuten per HTTP, ob die Oberfläche antwortet, nicht nur, ob der Container läuft (mehr in Teil 7).

Der Aufbau

Alles läuft in einem Docker-Compose-Stack mit sechs Diensten:

Dienst Netz Aufgabe
Home Assistant eigenes Bridge-Netz die Zentrale
Mosquitto Bridge-Netz, kein veröffentlichter Port eigener Broker, nur stackintern
Zigbee2MQTT Bridge-Netz Zigbee über einen Sonoff Dongle Plus MG24
Anwesenheitsdienst Bridge-Netz liest die Geräteliste der FRITZ!Box, meldet über MQTT
Matter-Server Host-Netz bindet Matter-Geräte an Home Assistant
Matter-Brücke Host-Netz reicht Home-Assistant-Geräte an Alexa weiter

Die Oberflächen sind nur aus dem Heimnetz erreichbar, im Router ist kein Port offen. Angebunden ist, Stand Ende September:

Familie Weg Geräte
FRITZ!DECT FRITZ!Box 4 Heizkörperregler (1 AVM FRITZ!Smart Thermo 301, 3 Comet DECT von Eurotronic), 1 Steckdose
Sonoff Zigbee2MQTT 2 Heizkörperventile TRVZB, 7 Temperatur- und Feuchtefühler, 2 Steckdosen S60ZBTPF
IKEA Zigbee2MQTT 3 Bewegungsmelder, 1 Funkschalter RODRET, 3 LED-Treiber
Philips Hue Zigbee2MQTT 10 Lampen, von der alten Bridge umgezogen
weitere Zigbee-Geräte Zigbee2MQTT 1 OSRAM-Lampe, 2 Bodenfeuchtesensoren
WLAN, lokal Integrationen im Heimnetz WiZ-Lampe, LG-Fernseher, Dreame-Saugroboter, Tuya-Lichterkette
Matter Matter-Server Govee-TV-Hintergrundlicht
WLAN über Hersteller-Cloud VeSync 2 Levoit-Luftreiniger

Die alte Hue-Bridge 1.0, seit Jahren ohne Sicherheitsupdates, kam nie in Home Assistant. Geplant war, sie übergangsweise einzubinden. Wir haben widersprochen: Beim späteren Umzug hätten sich alle Entitätskennungen geändert, jede Automation wäre gebrochen. Der Plan wurde geändert. Den Umzug der Lampen erzählt Teil 5.

Getrennt vom Kamerasystem

Auf demselben Server läuft ein eigenständiges Kamerasystem. Beide Stacks haben eigene Verzeichnisse, eigene Git-Repositories, eigene Docker-Netze und eigene MQTT-Broker. Diese Trennung war von Anfang an die oberste Anforderung.

Warum nicht den vorhandenen Broker mitbenutzen? Über ihn werden die Kameras geschaltet. Wer dort senden darf, kann eine Kamera einschalten, während jemand zu Hause ist. Ein Smart-Home-System mit Dutzenden Geräten und Community-Integrationen hat eine ungleich größere Angriffsfläche als ein abgeschottetes Kamerasystem. Ein gemeinsamer Nachrichtenkanal würde diese Angriffsfläche direkt mit den Kameras verbinden. Der zweite Broker kostet dagegen rund 10 MB Arbeitsspeicher.

Der Nachweis vom 28.08., gemessen aus dem Home-Assistant-Container:

Prüfung Ergebnis
gemeinsame Docker-Netze keine
Broker des Kamerasystems nicht erreichbar
Schnittstelle des Kamerasystems nicht erreichbar
FRITZ!Box (Gegenprobe) erreichbar
Hue-Bridge (Gegenprobe) erreichbar
Kamerasystem unbeeinträchtigt

Die Gegenprobe gehört dazu, denn eine Trennung, die alles abschneidet, wäre wertlos. Unser Statusskript wiederholt die Broker-Prüfung bei jedem Aufruf, zuletzt am 27.09. mit demselben Ergebnis.

Zwei Container laufen trotzdem im Host-Netz, der Matter-Server und die Matter-Brücke für Alexa. Matter beruht auf mDNS und UDP-Multicast, und beides verlässt ein Bridge-Netz nicht. Home Assistant, Broker und Zigbee2MQTT bleiben im Bridge-Netz. Ein eigenes Bridge-Netz schützt Container voreinander, nicht vor dem Host. Wer einen Dienst ins Host-Netz legt, prüft deshalb vorher, was der Host alles erreicht.

Im Host-Netz greift außerdem ufw, im Bridge-Netz nicht. Die Brücke brauchte deshalb eigene Freigaben, getrennt für IPv4 und IPv6. Diese und andere Netzfallen stehen in Teil 7.

Alexa ohne Abo: eine Matter-Brücke

Die naheliegenden Wege zu Alexa waren ein Cloud-Abo oder Zugriff von außen. Beides wollten wir nicht. Stattdessen läuft Home-Assistant-Matter-Hub als Matter-Brücke im Heimnetz. Alexa koppelt sie wie ein Matter-Gerät und sieht dahinter die freigegebenen Entitäten.

Freigegeben sind die Domänen light, climate und fan und einzelne Entitäten wie Fernseher und Saugroboter. Die Domäne switch pauschal hätte 14 Entitäten gebracht, davon genau ein echter Schalter; der Rest waren Konfigurationsschalter wie „Luftreiniger Display“. Sensoren bleiben draußen, bis auf zwei Gießmelder, die als Kontaktsensor eine Alexa-Routine auslösen. switch.zigbee2mqtt_bridge_permit_join steht ausdrücklich auf der Ausschlussliste, damit keine spätere Erweiterung das Zigbee-Netz per Zuruf für fremde Geräte öffnet.

Die Grenzen dieses Wegs, soweit belegt:

Grenze Beleg Umgang
Alexa kennt keine Matter-Videoplayer Gerätesuche fand den Fernseher nicht; die Brücke bietet 36 Gerätetypen zur Übersteuerung, keinen Medienspieler Fernseher als Steckdose, damit „alle Lichter aus“ ihn nicht mitschaltet; nur Ein und Aus
Alexa koppelt nur auf Port 5540 zuverlässig Die zweite Brücke auf 5541 verlor wiederholt ihre Abonnements, die auf 5540 lief tadellos Saugroboter am 31.08. auf die Hausbrücke verlegt
Routinen kennen keine Saugmodi Routinen-Baukasten bietet nur Ein/Aus, Helligkeit, Temperatur und Ähnliches zusätzlicher Schalter für Sprache und Routinen
Neue Kennung, neues Gerät Umbenennen erzeugt einen neuen Endpunkt, die alte Kachel bleibt tot stehen erst benennen, dann freigeben

Lokal ist dabei die Verbindung zwischen Home Assistant und Alexa: kein weiterer Cloud-Dienst, kein offener Port. Alexa selbst bleibt ein Cloud-Dienst. Wie sehr das zählt, zeigte der Küchenentfeuchter: Am 20.09. sollte er über Alexa und die Cloud einer WLAN-Steckdose geschaltet werden. Fiele ein Glied dieser Kette aus, würde nichts schalten, und Home Assistant merkte es nicht. Wir haben das am selben Tag zurückgenommen, heute schaltet eine Zigbee-Steckdose (Teil 6).

Wo doch eine Cloud im Spiel ist

„Alles lokal“ stimmt nicht ganz. Die Ausnahmen:

Was Wofür, und was ein Ausfall bedeutet
Alexa Sprachbefehle und Routinen; ohne Internet keine Sprachsteuerung
Levoit-Luftreiniger über VeSync; ohne Internet keine Steuerung. Zum Monatswechsel war der Zugang 36 Stunden tot, während Home Assistant die Integration als geladen zeigte (Teil 6)
Wettervorhersage von Met.no Außentemperatur als Vorhersage; fällt sie aus, wird der Sensor unavailable
Sicherung verschlüsselt auf OneDrive, siehe unten

Die tägliche Sicherung

Die Sicherung stand im ersten Plan als Aufgabe 5 und blieb beim Sprung in die Zigbee-Arbeit liegen. Nachgeholt wurde sie am 29.08., als schon sechs Zigbee-Geräte angelernt waren. Das wog schwer: Im Verzeichnis von Zigbee2MQTT steht der Netzwerkschlüssel. Geht er verloren, muss jedes Gerät neu angelernt werden, jede Hue-Lampe mit Touchlink-Reset direkt an der Lampe.

Seitdem packt sichere-konfiguration.sh täglich per cron ein Archiv: .env, docker-compose.yml, die Konfiguration von Home Assistant samt Zusatzintegrationen, das Zigbee2MQTT-Verzeichnis, die Broker-Konfiguration, Dokumentation und Git-Repository. Nicht enthalten sind die Verlaufsdatenbank, Protokolle und die Daten des Brokers.

Ziel Aufbewahrung
zweite Platte im Server die letzten 14 Stände
OneDrive, verschlüsselt mit rclone crypt 180 Tage

Die Verschlüsselung ist Pflicht: Im Archiv stehen alle Zugangsdaten aus der .env und die Schlüssel der lokal angebundenen Geräte. Hier gibt es eine bewusste Ausnahme von der Trennung: Die Sicherung nutzt denselben verschlüsselten Zugang wie das Kamerasystem, mit eigenem Ordner. Das betrifft nur die Sicherung, nicht den Betrieb, und erspart ein zweites Passwort.

Die Wiederherstellung haben wir am 29.08. aus der Cloud geprobt, nicht von der lokalen Platte: Geräte, Netzwerkschlüssel, Zusatzintegration des Saugroboters und Git-Historie waren da. Bis zum 27.09. zählt das Protokoll 29 Läufe mit je 28 bis 29 MB, alle übertragen, kein Fehler. Das Statusskript warnt, wenn der jüngste Stand älter als 30 Stunden ist.

Wie wir arbeiten

Jeder größere Schritt beginnt mit einer Design-Spezifikation und einem Umsetzungsplan. Die ersten Commits:

Datum Commit
28.08. Design-Spec Schritt 1: Zentrale und erste Geräte
28.08. Umsetzungsplan Schritt 1 in sechs Aufgaben
28.08. feat: Home Assistant im isolierten Stack, Trennung nachgewiesen
28.08. feat: FRITZ!DECT angebunden, Schreiben nachgewiesen
28.08. Design-Spec Schritt 2: Zigbee in Betrieb nehmen
28.08. Umsetzungsplan Schritt 2 in vier Aufgaben

Die Spezifikation beschreibt Ziel, Umfang, Architektur, Risiken und woran der Erfolg gemessen wird. Ihr Status: „Entwurf zur Freigabe“. Der Plan zerlegt sie in Aufgaben mit Prüfschritten. Die Heizung bekam am 31.08. eine eigene Spezifikation und einen Plan in sieben Aufgaben.

Jede Änderung ist mit Datum und Begründung festgehalten: 138 Commits bis zum 27.09., 15 Dokumentationsdateien mit knapp 5 900 Zeilen. Was sich als falsch herausstellt, bleibt sichtbar. Ein Abschnitt beginnt mit „Zurückgenommen am selben Tag“, ein anderer mit „Kehrtwende“, weil eine Recherche vom Vormittag falsch war.

Geändert wird erst, wenn wir zugestimmt haben. Das Nutzungsprofil der Räume haben wir bestätigt, bevor es in die Heizungsspezifikation einging. Ein Schalter für den Saugroboter wurde auf unseren Wunsch zurückgebaut, weil wir erst selbst die Alexa-App durchsehen wollten. Noch am selben Tag kam er zurück, laut Commit „diesmal aus belegtem Grund“.

Die Arbeit am Server hat Claude erledigt: Protokolle lesen, messen, Konfiguration schreiben, dokumentieren, committen. Wir haben entschieden und oft widersprochen. Wie das im Alltag aussieht und wo es schiefging, erzählt Teil 8.

Wie es weitergeht

Teil 2 verfolgt ein kaltes Büro bis zu drei Ursachen. Teil 3 zeigt, wie zwei Ventilsysteme im selben Haus zusammenfinden, Teil 4, warum der Heizplan nicht der Heizbeginn ist. Teil 5 geht durch den Zigbee-Alltag nach dem Koppeln, Teil 6 durch Taupunkt, Entfeuchter und Luftreiniger. Teil 7 sammelt die Fallen in Docker, Netzwerk und Home Assistant, Teil 8 das, was nicht geklappt hat.

Was wir mitnehmen

  • Die Trennung zuerst nachweisen, vor dem ersten Gerät, und immer mit Gegenprobe.
  • Ein eigenes Bridge-Netz schützt Container voreinander, nicht vor dem Host. Wer einen Dienst ins Host-Netz legt, prüft vorher, was der Host alles erreicht.
  • Ein zweiter MQTT-Broker kostet rund 10 MB Arbeitsspeicher. Ein gemeinsamer wäre ein Schaltweg vom Smart Home zu den Kameras.
  • Eine Matter-Brücke bringt Alexa ohne Abo ins Haus, aber nur mit dem, was Alexa als Matter-Gerätetyp kennt. Kennungen festlegen, bevor sie an die Brücke gehen: Umbenennen ist in Home Assistant billig und in Alexa teuer.
  • Der Zigbee-Netzwerkschlüssel ist das wertvollste Stück der Sicherung. Die Wiederherstellung aus der Cloud proben, nicht nur sichern.
  • Cloud-Ausnahmen aufschreiben statt wegreden. Dann weiß man, was bei einem Internetausfall stillsteht.