Farm Flows

Ich habe die bereits im ersten Artikel benannten (Flows vom 10.3.25) für Node Red nochmal überarbeitet. Ich will es nochmal mit der Steuerung der Farm von Home Assistant via MQTT probieren, und weg von der lokalen Benutzerschnittstelle. Meine Funktionskette sieht, grob gesehen, so aus:

Home Assistant -> MQTT-Broker -> Node Red

Das schwächste Glied dieser Kette ist die WLAN-Verbindung in die Garage. Die Steuerbefehle werden von Home Assistant via MQTT erzeugt. Sämtliche Automationen und Einstellungen laufen in Home Assistant ab. Node Red am Ende der Kette schaltet entsprechend die zuständigen Relais für Ventile und die Pumpe. Node Red meldet diese Schaltzustände über ein eigenes MQTT-Topic zurück an Home Assistant. Ich zäume das Pferd einmal von hinten auf, und fange mit den Flows auf Node Red an.

Konfigurationsflow

Der Konfigurationsflows dienst dazu, die Bewässerungszeit für die weitere Verarbeitung zwischenzuspeichern.

Konfigurationsflow

Die Bewässerungszeit wird unter dem Topic farm/giessen/zeit von Home Assistant alle 30 Sekunden publiziert. Bitte nicht wundern über den Topic, aber ich mag hier keine irgendwie gearteten Sonderzeichen. Das verspricht meistens Ärger.

Der Function-Node multipliziert die eingehende Payload mit 1000, da die weiteren Bewässerungsflows Delay-Nodes verwenden. Diese arbeiten mit Verzögerungszeiten in Millisekunden.

Der anschließenden Change-Node speichert diese Bewässerungszeit in der globalen Variabel global.giesszeit.

Bewässerungsflow

Nun zum Herzstück, dem Bewässerungsflow. Ein für mich wichtiger Node ist der Inject-Node. Er sendet, sobald irgendwelche Flows deployt werden, oder der Raspberry Pi neu gestartet wird, erstmal ein pauschales Off an Ventile und die Pumpe um alles definiert auszuschalten.

flow1

Der obere Change Node macht eine Payload-Wandlung. Die GPIO-Pins der Raspberry Pi benötigen für ein ausgeschaltetes Relais die Payload true, für ein eingeschaltetes Relais false. Das ist für die Übersicht, was im Flow für Messages herumflitzen nicht hilfreich. Daher werden:

  • on für den eingeschalteten Zustand (GPIO = false)
  • off für den ausgeschalteten Zustand (GPIO = true)

in allen Flows, in Home Assistant und via MQTT verwendet. Der on2false/off2true-Change Node ist also mein Übersetzer-Node. Der MQTT-in-Node wird vom Topic farm/reihe1/cmd mit on oder off beschickt. Die Payload wir weiter an den zweiten Change-Node geschickt.

Dieser Change-Node macht zwei Dinge. Er nimmt den Inhalt der Variable global.giesszeit aus dem Konfigurationsflow, die die Bewässerungszeit beinhaltet und schreibt sie in msg.delay. Dann setzt der Node die msg.payload auf off. Der folgende Delay-Node verzögert die Weiterleitung der Payload um die in msg.delay eingestellte Zeit. Der Node wird damit zu meinem zeitgesteuerten Ausschalter. Der aktuelle Schaltstatus wird über den Topic farm/reihe1/state zurück an Home Assistant gemeldet.

Für die Steuerung der GPIO habe node-red-node-pi-gpio installiert.

Der Link-out-Node oben rechts gibt die Schalt-Message an den Pumpenflow weiter.

Pumpenflow

fow2

Links oben kommt zuerst der Link-in-Node mit der Schalt-Message aus dem Bewässerungsflow. Die Payload der Message hat schon das richtige Format false oder true und wird direkt an die GPIO-Pin der Pumpe gegeben. Gleichzeitig geht die Message an meinen schon oben beschriebenen on2false/off2true-Change Node. Damit die Status-Rückmeldungen via MQTT auch schön werden. Der Topic farm/pumpe/state meldet dann den Pumpenstatus an Home Assistant.

Soweit erstmal zu den Node Red Flows auf Seite der Erdbeerfarm. Im nächsten Artikel gibt es dann Informationen zur Steuerung in Home Assistant.