Zum Hauptinhalt springen

Kommunikation über MQTT

MQTT ist das Herz unserer Anwendung. Über MQTT kommunizieren Drip Master und Feuchtigkeitssensor mit Home Assistant. Ein Verständnis von MQTT ist daher zentral.

Was ist MQTT?​

MQTT ist ein Protokoll für die Kommunikation zwischen zwei Maschinen. Beispielsweise unserem ESP-C6 (Drip Master) und Home Assistant (Raspberry Pi).

Es funktioniert über ein einfaches Publish-Subscribe-Model. Geräte publishen Nachrichten in MQTT Topics. Andere Geräte abonnieren Topics, um neue Nachrichten zu erhalten und darauf zu reagieren.

Ein besonderes Gerät ist der MQTT Broadcaster, den man sich als Server vorstellen kann, der alle Topics speichert. Er ist für die Benachrichtigung der Geräte verantwortlich ist. Das ist bei uns der auf dem Raspberry Pi laufende Mosquitto broker.

Wie nutzen wir MQTT für den Drip Master?​

Verbindungsaufbau (MQTT_EVENT_CONNECTED)​

Beim Verbindungsaufbau abonniert der Drip Master das Topic DripMaster/<MAC>/cmd und all dessen Untertopics per Wildcard DripMaster/<MAC>/cmd/#. Über diese Topics kommen Befehle von Home Assistant (z. B. Gieße Pflanze 1 mit 30ml Wasser! oder Der Tank hat eine Größe von 500ml!). Die Kommandos laufen teilweise über getrennte Topics, damit sich die Befehle bei kurzfristigen Ausfällen der Verbindung nicht überschreiben und verloren gehen.

Anschließend wird über das Topic DripMaster/<MAC>/state der Device State (siehe Device State Handler) gepublished.

Zudem published der Drip Master ein Home Assistant Discovery Topic (homeassistant/device/<MAC>/config), das die UI des Drip Masters für Home Assistant definiert. Home Assistant abonniert dieses Topic automatisch und stellt die UI daher sofort automatisch dar.

Das Home Assistant Discovery Topic referenziert das Topic DripMaster/<MAC>/state als State Topic. Damit kann auf die dort veröffentlichten Werte zugegriffen werden. Zudem definiert das Discovery Topic Kommandos, die über Nutzereingaben getriggert werden. Das genaue Kommando ist im command_template festgelegt und wird bei Eingabe an das definierte command_topic gesendet (bei uns DripMaster/<MAC>/cmd und dessen Untertopics). Somit führt zum Beispiel eine Änderung der Gießmenge in Home Assistant dazu, dass ein Kommando verschickt wird.

Um den genauen Aufbau des Discovery Topics kümmert sich der JSON Handler.

Auf Kommandos reagieren (MQTT_EVENT_DATA)​

Im MQTT Handler wird auch auf Kommandos reagiert, die von Home Assistant über DripMaster/<MAC>/cmd/ bzw. DripMaster/<MAC>/cmd/# gepublished werden. Je nach Modus werden unterschiedliche Kommandos unterstützt:

MODE_WIFI_MQTT_OFFLINE (Drip Cycle)​
  1. ESP Neustart
  2. Tank zurücksetzen
  3. Tankgröße ändern
  4. Tanking Warning Level ändern
  5. Zyklusschlafzeit ändern
  6. Gießmenge für Pflanze einstellen
MODE_WIFI_MQTT (Drip On Command)​
  1. ESP Neustart
  2. Tank zurücksetzen
  3. Tankgröße ändern
  4. Tanking Warning Level ändern
  5. Pflanze mit Menge gießen Zum Ausführen der Kommandos werden die anderen Softwaremodule (also z. B. der Drip Handler) verwendet.

Verbindungsverlust (MQTT_EVENT_DISCONNECTED)​

Verliert der MQTT Client die Verbindung, wird wiederholt versucht, die Verbindung neu einzurichten. Schlägt dies fehl, wird der ESP neu gestartet.

Wie nutzen wir MQTT für den Soil Sensor?​

Der Soil Sensor arbeitet nur indirekt über MQTT. Die Sensordaten werden per Zigbee an den Raspberry Pi geschickt. Dort verarbeitet das Addon Zigbee2MQTT die Daten und erstellt passende MQTT Topics, die dann von Home Assistant verwendet werden können.