Automatisches Gartenbewässerungssystem für Home Assistant, ESP8266 und MiFlora



Vor einiger Zeit hatte meine Familie ein Haus mit einem kleinen Garten an einem sehr warmen und trockenen Ort, und wir standen vor dem Problem der regelmäßigen Bewässerung.

Ich wollte, dass das Bewässerungssystem automatisch ist, während ich es auswählte, musste ich die folgenden Bedingungen berücksichtigen:

  • sehr teures Wasser, das auf alle verfügbaren Arten gespart werden muss
  • Verschiedene Pflanzen im Garten für den Feuchtigkeitsbedarf, von Sukkulenten bis zu feuchtigkeitsliebenden
  • die Notwendigkeit einer vollständig autonomen Bewässerung während der Abwesenheit von Personen im Haus, vorzugsweise mit der Möglichkeit der Fernsteuerung
  • trockenes Klima, das Bewässerungsfehler nicht verzeiht

Nachdem wir die vorgefertigten Lösungen evaluiert hatten, die in lokalen DIY-Netzwerken und bei Amazon gefunden wurden, und Bewertungen über ihre Zuverlässigkeit gelesen hatten (normalerweise nicht die höchste), beschlossen wir, etwas selbst zu tun.

Haftungsausschluss: Der Autor ist kein IT-Spezialist und erhebt keinen Anspruch auf Fachkenntnisse des Themas. Der Grad der Projektdurchführung ist ein Hobby. Der Autor ist sich seines Kenntnisstands in Programmierung und Elektronik bewusst und wird Vorschläge zur Verbesserung und Optimierung der verwendeten Lösungen sehr schätzen.

Schaltplan


Der Garten wurde in 4 Bewässerungszonen unterteilt, von denen jede mit einem individuellen Bodenfeuchtesensor ausgestattet ist und nach einem individuellen Zeitplan und einer anderen Wassermenge bewässert werden kann.
Auf dem Boden werden PND-Rohre für die Tropfbewässerung mit Perforation verlegt, die mit Rohren verbunden sind, die in der Wassersammeleinheit zusammenlaufen, und über die elektromagnetischen Ventile mit der Wasserversorgung verbunden sind. Die Ventile werden über Relais gesteuert, die an den ESP8266 (Sonoff 4Ch) angeschlossen sind.

Die Bewässerung erfolgt nachts durch Zeitschaltuhren, um die Menge an Wasser zu erhöhen, die vom Boden aufgenommen wird und von der Sonne nicht verdunstet wird.

Zum geplanten Bewässerungszeitpunkt wird die Einhaltung mehrerer Bedingungen überprüft:

  • Bodenfeuchtigkeit unter einem vorgegebenen Wert
  • Für die nächsten 2 Tage wird kein ausreichend großer Niederschlag vorhergesagt
  • Die für diese Leitung festgelegte Wassergrenze für die Bewässerung wird nicht überschritten

Gebrauchte Ausrüstung


Raspberry Pie mit installiertem HassIO (bereits vorhanden)

ESP32 DevKit , einer ESPHome-Firmware, die als Bluetooth-Gateway für MiFlora fungiert und Daten von kabelgebundenen Feuchtigkeitssensoren empfängt. Befindet sich im Garten.

Verkabelte Feuchtigkeitssensoren Kapazitiver Bodenfeuchtesensor v1.2 , der die Luftfeuchtigkeit in den Bewässerungszonen misst, die dem ESP32-Installationsort am nächsten liegen. MiFlora-

Sensoren sind über BLE mit dem ESP32 verbunden, der die Feuchtigkeit in entfernten Bewässerungszonen misst.

SONOFF 4Ch , mit ESPHome vernäht, befindet sich in der Wasseransaugeinheit, wo Rohre aus allen Bewässerungszonen kommen.

4 Normalerweise geschlossene Magnetventile für 220 V.befindet sich im Wasserstand und ist mit dem Sonoff 4Ch verbunden. Öffnen Sie die Wasserversorgung zur Bewässerung. Ein normalerweise geschlossenes Modell wurde so gewählt, dass die Wahrscheinlichkeit eines „Überflutens“ bei einem Ausfall der Elektrik und Elektronik minimal war und die Anzahl der erforderlichen Relaisausgänge minimiert wurde.

Ein gepulster Wasserzähler am Eingang zum Bewässerungssystem in der Wasseransaugeinheit und angeschlossen an den Sonoff 4ch. Erlaubt die vollständige Übertragung von Wasserflussdaten an Home Asssistant und die Implementierung der Bewässerungsfunktion mit einer bestimmten Menge. Es stellte sich als sehr erfolgreich heraus, dass bei dieser Version von sonoff die Kontakte für die Firmware bereits verlötet waren und es sogar einen freien GPIO02 gab - ein Impulszähler wurde daran gehängt.


Es sieht aus wie ein Kollektor mit installierten Ventilen und einem Wasserzähler. Der Controller (sonoff 4Ch) ist nicht in den Rahmen eingedrungen, er ist in einem Abstand von einem halben Meter in der IP65-Abschirmung installiert

ESPHome- und Home Assistant-Einstellungen


Sonoff 4ch
ESPHome , :

switch:
  - platform: gpio
    name: "   1"
    pin: GPIO12
    id: sw1
    icon: mdi:water
  - platform: gpio
    name: "   2"
    pin: GPIO5
    id: sw2
    icon: mdi:water
  - platform: gpio
    name: "   3"
    pin: GPIO4
    id: sw3
    icon: mdi:water
  - platform: gpio
    name: "   4"
    pin: GPIO15
    id: sw4
    icon: mdi:water
binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: button
    pin:
      number: GPIO2
      mode: INPUT_PULLUP


Kapazitiver Bodenfeuchtesensor v1.2
ESPHome:

sensor:
  - platform: adc
    pin: GPIO34
    filters:
      - lambda: |-
          if (x > 3.22) {
            return 0;
          } else if (x < 1.65) {
            return 100;
          } else {
            return (3.22-x) / (3.22-1.65) * 100.0;
          }
    name: "   1  "
    update_interval: 60s
    attenuation: 11db
    unit_of_measurement: "%"
    accuracy_decimals: 0
    icon: mdi:water-percent

(ADC)
, ( 3.22 ) (1,65 ). log' ESPHome HassIO .



ESP32 Home Assistant ,

Pulswasserzähler
«», ( ). — , , ( — 3 10 ).
, GND GPIO .

ESPHome :

binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: counter
    pin:
      number: GPIO2
      mode: INPUT_PULLUP

Home Assistant :

(counter),
(, «» ). — counter, ESPHome, sensor, counter ( ).

2 — , «». , , .

( automations.yaml )
- alias:     
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  action:
  - data:
      entity_id:
      - counter.my_water_counter
    service: counter.increment
- alias:    1 
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  condition:
    - condition: state
      entity_id: switch.sistema_poliva_liniia_1
      state: 'on'
  action:
  - data:
      entity_id:
      - counter.my_water_line1, counter.my_water_line1t
    service: counter.increment    


configuration.yaml +

sensor:
  - platform: template
    sensors:
      water_counter:    
        unit_of_measurement: 'M3'
        value_template: "{{ (states('counter.my_water_counter')| float)/1000 }}"    
counter:
  my_water_counter:
    initial: 2.667
    step: 10
  my_water_line1:
    name: " 1     ()"
    initial: 0
    step: 10
  my_water_line1t:
    name: " 1   ()"
    initial: 0
    step: 10



MiFlora Sensor
MiFlora ESPHome , esphome.io
Home Assistant — , , «» . — , .

Virtueller Niederschlagssensor
— . , .

darksky. , Apple « ». API , , , , HA . darksky, , .

2 :

configuration.yaml sensors.yaml

sensor:
  - platform: darksky
    api_key: xxxx_your_API_key_xxxx
    forecast:
      - 1
      - 2
    monitored_conditions:
      - precip_intensity

HA : sensor.dark_sky_precip_intensity_1d sensor.dark_sky_precip_intensity_2d, .

template-sensor:

configuration.yaml sensors.yaml

sensor:
  - platform: template
    sensors:
       rain2days:    
        unit_of_measurement: 'mm'
        value_template: "{{ (((states('sensor.dark_sky_precip_intensity_2d')| float)+(states('sensor.dark_sky_precip_intensity_1d')| float))*24)| round(3) }}"    

HA sensor.rain2days 2 .
, Darksky ,


Nachdem alle Daten gesammelt wurden, können Sie direkt mit dem Gießen fortfahren.

So sehe ich einen Teil der Benutzeroberfläche aus einer der Zonen im Home Assistant:



Hier können Sie die Wassermenge für die Bewässerung einstellen (mit einem Schieberegler) und die Werte der Hauptsensoren und -zähler anzeigen. Ich habe die Schnittstelle für eine der Leitungen angegeben, im Übrigen ist alles gleich, nur bei Leitungen mit kabelgebundenen Datensensoren ist es etwas weniger.

In der Benutzeroberfläche sehen Sie ein „überflüssiges“ Detail - den Hilfssensor „Die Norm wurde erreicht“. Es musste eingeführt werden, weil Ich konnte keine Bedingung erhalten: Vorlage zum Arbeiten, um die Automatisierung zu stoppen, wenn die Norm für die Wassermenge erreicht wurde, und als Ergebnis überprüft die Automatisierung nur den Wert dieses Sensors. Ich bin sicher, dass dieser Teil der Automatisierung einfacher und eleganter gestaltet werden kann, aber mein Niveau hat dafür nicht gereicht.

Unten ist der Code für den resultierenden "Krücken" -Schablonensensor:

Bewässerungssensor (innerhalb der Konfiguration.yaml oder einer separaten Datei)
  - platform: template
    sensors:
      line4_status:
        friendly_name: " 4 -  "
        value_template: >-
          {% if states('counter.my_water_line4t')|float > states('input_number.slider4')|float %}
            yes
          {% elif states('counter.my_water_line4t')|float == states('input_number.slider4')|float  %}
            yes
          {% else %}
            no
          {% endif %}


Die Automatisierung zum Bewässern sieht letztendlich so aus:

Beginnen Sie mit dem Gießen (in automations.yaml oder einer separaten Datei)
- alias:   4   23.01
  trigger:
    platform: time
    at: "23:01:00"
  condition:
   condition: and
   conditions:
#    
    - condition: numeric_state
      entity_id: sensor.rainfor2days
      below: 5
#      
    - condition: numeric_state
      entity_id: sensor.miflora_1_moisture
      below: 50
# ,       
    - condition: state
      entity_id: 'sensor.line4_status'
      state: 'no'
  action:
   - service: switch.turn_on
     entity_id: switch.sistema_poliva_liniia_4


Die Bewässerung beginnt am späten Abend, wobei jede Linie in einem eigenen Zeitintervall beginnt. Durch die Trennung nach Startzeit können Sie einen Einlasswasserzähler verwenden, um Daten auf 4 Leitungen zu erhalten.

Beim Start werden drei Bedingungen überprüft:

  • Wird die Grenze für die Wassermenge für heute nicht überschritten (wenn beispielsweise die manuelle Bewässerung aktiviert wurde)?
  • Überschreitet die Luftfeuchtigkeit 50% (nach Beobachtungen unter unseren Bedingungen hat frisch verschütteter Boden einen Feuchtigkeitsgehalt von nicht mehr als 60%)
  • Ein Niederschlag von mehr als 5 mm wird in den nächsten zwei Tagen nicht erwartet.

Die nächste Automatisierung ist das Deaktivieren der Bewässerung:

Deaktivieren der Bewässerung (in automations.yaml oder einer separaten Datei)
- alias:   4 
  trigger:
#      
  - entity_id: sensor.line4_status
    platform: state
    to: 'yes'
    for: 
      seconds: 5    
#   
  - platform: time
    at: "23:59:00"
#     
  - platform: numeric_state
    entity_id: sensor.miflora_1_moisture
    above: 65
#       
  - platform: state
    entity_id: switch.sistema_poliva_liniia_4
    to: 'on'
    for: 
      minutes: 60
  action:
   - service: switch.turn_off
     entity_id: switch.sistema_poliva_liniia_4


In der Automatisierung wurden bis zu 4 Varianten von Auslösern verwendet, in den meisten Fällen wird sie jedoch vom ersten ausgelöst - einem „Krückensensor“, der den Grenzwertüberschuss durch die Wassermenge überwacht. Der Rest der Auslöser erfolgt aus Sicherheitsgründen weitgehend.

Nun, die letzte Automatisierung im Zusammenhang mit dem Problem ist das Zurücksetzen des Tageszählers

Nullstellen des Tageszählers (in automations.yaml oder einer separaten Datei)

- alias:    4 
  trigger:
  - platform: time
    at: "00:00:01"
  action:
  - service: counter.reset
    entity_id: counter.my_water_line4t


Projektökonomie


Die Kosten für den Steuerungsteil des Bewässerungssystems waren wie folgt:

(Raspberry PIE mit HassIO an Bord und ein WLAN-Router mit einer Beschichtung im Garten waren bereits vor Projektbeginn, ich berücksichtige sie nicht)

UNIPUMP BCX-15 1/2 "Magnetventil (normalerweise geschlossen) 4 * 20 Euro
Sonoff 4CH 17 Euro Pulsmesser
Pulsar 8 Euro
ESP32 DevKitC 3,5 Euro
Kapazitiver Bodenfeuchtesensor v1.2 2 * 0,67 Euro
MiFlora-Sensoren 2 * 16 Euro Schutzvorrichtungen
, Kollektor, Drähte, Armaturen insgesamt ca. 50 Euro

GESAMT: ca. 190 Euro

Die Zeit, die für die Einrichtung der Sensoren und des MK aufgewendet wird, beträgt mehrere Stunden zwischen 15 und 15 Uhr. Die meiste Zeit wurde jedoch für die „Erfindung von Fahrrädern“ und „Krücken“ aufgewendet. Im Allgemeinen gibt es nicht viel Arbeit. Die physische Montage des Systems dauerte ca. 2 Abende.
Im Allgemeinen werden Wassereinsparungen von etwa 20-50% im Vergleich zum „albernen“ Zeitgebersystem erwartet, und bei lokalen Wasserpreisen sollte sich das System in ein oder zwei Jahreszeiten auszahlen.

Mängel und Pläne für eine Überarbeitung


Als Ergebnis des Projekts wurden einige Nuancen und Möglichkeiten zur weiteren Verbesserung aufgezeigt.

Insbesondere würde ich 220-V-Magnetventile durch ein 24-V-Modell ersetzen - diese Spannung ist Standard für Bewässerungssysteme. In diesem Fall müssten Sie dem System einen 24-V-Transformator hinzufügen und den Sonoff 4Ch gegen einen trockenen Kontakt austauschen (z. B. Sonoff 4CH Pro oder etwas Selbstmontiertes). Die Ventile selbst sind billiger (ab 8 Euro) und verringern die Wahrscheinlichkeit eines Stromschlags.

Es stellte sich auch heraus, dass für die Arbeit mit Kunststoffrohrleitungen der Druck aus der Wasserversorgung zu hoch ist und die Armaturen während des Bewässerungszyklus undicht werden können. In meinem Fall ist dies nicht kritisch, alle Armaturen befinden sich über dem Bewässerungsboden, aber auf gute Weise müssen Sie am Einlass ein Reduzierstück hinzufügen, um den Druck zu senken.

Ich war immer noch ein wenig verärgert über die Unmöglichkeit, die Menge an Wasser für die Bewässerung in Mengen von weniger als 10 Litern zu berücksichtigen - dieses Volumen ist die messbare Mindestmenge für einen solchen Zähler. Dieses Problem kann gelöst werden, indem der Zähler zerlegt und die Räder ausgetauscht werden. Bis dahin haben die Hände ihn jedoch nicht erreicht.

All Articles