Farm @ Home Assistant

Dieser Artikel beschreibt die Steuerung der Erdbeerfarm mit Home Assistant. Die andere Seite, also die mit den Node Red Flows, läuft bisher ohne Probleme. Die folgenden MQTT-Topic werden von Node Red auf der Farmseite publiziert, bzw. erwarten Steuerbefehle:

  • farm/giessen/zeit - Legt die Pumpdauer für die Bewässerung fest
  • farm/reihe1/cmd - Befehlstopic für Node Red
  • farm/reihe1/state - meldet den Status von Node Red zurück an Home Assistant

Für die Reihe 2 bis 4 gibt es entsprechende cmd- und state-Topics.

MQTT Konfiguration

Die gesamte yaml-Konfiguration für die Erdbeerfarm ist ein eine seperate Datei ausgelagert und über ein Package eingebunden. Ich liste hier immer nur die Topic für die Reihe 1 auf. Die Topics für die Reihen 2 bis 4 sind entsprechend.

 1mqtt:
 2  sensor:
 3    - name: "Erdbeerfarm Reihe 1 Status"
 4      state_topic: "farm/reihe1/state"
 5      icon: "mdi:sprinkler"
 6
 7    - name: "Erdbeerfarm Pumpe Status"
 8      state_topic: "farm/pumpe/state"
 9      icon: "mdi:water-pump"
10
11    - name: "Erdbeerfarm Pumpzeit"
12      state_topic: "farm/giessen/state"
13      icon: "mdi:water-pump"
14
15 switch:
16    - name: "Erdbeerfarm Reihe 1 cmd"
17      command_topic: "farm/reihe1/cmd"
18      state_topic: "farm/reihe1/state"
19      payload_on: "on"
20      payload_off: "off"
21      state_on: "on"
22      state_off: "off"
23      retain: true

Die beiden Topics farm/pumpe/state und farm/giessen/state werden von Node Red erzeugt. Sie liefern den Status der Pumpe (ein- oder ausgeschaltet) und die Gießzeit zurück an Home Assistant. Home Assistant zeigt diese Informationen zur Kontrolle auf dem Dashboard an.

Die MQTT-Switche sind mit der Payload on bzw. off konfiguriert. Außerdem wird der Schaltbefehlt mit dem Retain Flag publiziert.

Control Panel

Für die Bewässerungszeit gibt es einen Helfer bewässerungszeit, der die Pumpenlaufzeit regelt. Der Helfer wird über eine Automation alle 30 Sekunden auf den MQTT-Topic farm/giessen/zeit publiziert.

Farm Control

Die extra Anzeige der Pumpzeit, dient mir nur zur Kontrolle, ob der Wert in Node Red angekommen ist. Ich hatte dazu in den Konfigurationsflow (siehe Artikel) ein MQTT-Send-Node mit dem Topic farm/giessen/stateangehängt. Die Bewässerungszeit dreht quasi eine komplette Runde zur Erdbeerfarm und wieder zurück zu Home Assistant. Diese Kontrollfunktion ist nur vorrübergehend und daher nicht weiter im Konfigurationsflow dokumentiert.

Gieß-o-matic

Home Assistant triggert durch eine Automation die selbstständige Bewässerung jeder Reihe gemäß der eingestellten Bewässerungszeit. Ich bewässere entweder frühmorgens um 06:00 Uhr oder abends um 18:00 Uhr.

Farm Automation

Für die Gieß-o-matic gibt es zwei Automationen und ein Script. Die Auslöse-Automation ist recht einfach:

06:00 / 18:00 Automation

 1alias: Erdbeerfarm gießen 06:00
 2description: ""
 3mode: single
 4triggers:
 5  - at: "06:00:00"
 6    trigger: time
 7conditions: []
 8actions:
 9  - data: {}
10    action: script.erdbeeren_alle_reihen_giesen

Die 18:00 Uhr Automation ist bis auf die Uhrzeit identisch.

Reihen Script

Das folgende Script löst für jede Reihe, die gegossen werden soll, den Einschalter aus.

 1alias: farm alle reihen giessen
 2sequence:
 3  - metadata: {}
 4    data: {}
 5    target:
 6      entity_id: switch.erdbeerfarm_reihe_1_cmd
 7    action: switch.turn_on
 8  - delay:
 9      hours: 0
10      minutes: 2
11      seconds: 0
12      milliseconds: 0
13  - metadata: {}
14    data: {}
15    target:
16      entity_id: switch.erdbeerfarm_reihe_2_cmd
17    action: switch.turn_on
18  - delay:
19      hours: 0
20      minutes: 2
21      seconds: 0
22      milliseconds: 0
23  - metadata: {}
24    data: {}
25    target:
26      entity_id: switch.erdbeerfarm_reihe_3_cmd
27    action: switch.turn_on
28  - delay:
29      hours: 0
30      minutes: 2
31      seconds: 0
32      milliseconds: 0
33  - metadata: {}
34    data: {}
35    target:
36      entity_id: switch.erdbeerfarm_reihe_4_cmd
37    action: switch.turn_on
38description: ""
39icon: mdi:fruit-cherries

Das Script pausiert zwischen den einzelnen Reihen für zwei Minuten. Das ist meine Sicherheitszeitspanne, die größer ist das die maximal einstellbare Gießzeit. Ich will damit sicherstellen, dass der Bewässerungsvorgang für eine Reihe abgeschlossen ist, bevor der für die nächste Reihe startet.

Ich habe jetzt eine Woche getestet und bisher traten keine Fehler beim Ablauf auf. Weitere Infos folgen…….