Vor kurzem wurden „Sprinkler“ für ESPHome vorgestellt, also genau für die Bedürfnisse ausgerichtet, die man an eine moderne und vor allem smartes Bewässerungssystem hat. ESPHome 2022.8.0 - 17th August 2022 — ESPHome
Das Besondere daran ist, dass man alles über einen günstigen ESP32 Mikrocontroller betreibt.
Funktionsweise
Das ESPHome Bewässerungssystem hat die gleichen (wenn nicht sogar) noch mehr Funktionen wie die namhaften Hersteller. Es ist also eine gute Alternative zu Bewässerungscomputern von Rain Bird, Hunter und Gardena sowie Bewamat von BTW.
Hauptventil und Pumpen
Neben den normalen Wasser-Ventilen kann auch zusätzlich Pumpen integriert werden. So können Sie zum Beispiel auch das Wasser aus Ihrer Zisterne, dem Tiefenbrunnen sowie dem normalen Brunnen pumpen.
Pause und Wiederaufnahme
Auch das Pausieren eines aktiven Zyklus ist möglich, wenn zum Beispiel der Tiefenbrunnen sich erst mal wieder befüllen muss, nachdem er leergepumpt wurde.
Wiederholung von Bewässerung Zyklen
Ein Besserungszyklus kann öfter wiederholt werden. Ideal für heiße Tage, an dem der Garten etwas mehr Wasser benötigt.
Mehrere Bewässerungs-Zonen auf einem ESP
Es können mehrere Bewässerungs-Zonen über einen ESP Mikrocontroller realisiert werden. Man kann zum Beispiel eine Zone als Rasen definieren und eine andere als Blumenbeet. Diese beiden Zonen können dann individuell angesprochen werden.
Ventilsteuerung
Es kann eingestellt werden, ob und wie lange sich beim Einschalten des nächsten Ventils eine Überlappung oder eine Pause eingelegt werden soll.
Pausen-Dauer
So kann zum einen sichergestellt werden, dass das vorherige Ventil auch vollständig geschlossen wurde, bevor das nächste Ventil öffnet und auch genügend Druck zur Verfügung steht.
Überlappungs-Dauer
Diese soll Wasserschläge verhindern, die oft nach dem Ausschalten der Pumpe vorkommt.
Integration in Home Assistant
Natürlich ist die Integration in Home Assistant problemlos möglich, denn ESPHome gehört zu https://www.nabucasa.com/ (der kommerziellen Seite von Home Assistant)
Add-on
Das dazugehörige Add-on ist in wenigen Schritten installiert und danach sofort einsatzbereit. Hier ist eine ausführliche Anleitung zu finden. Getting Started with ESPHome and Home Assistant — ESPHome
Hier können Sie direkt ESPHome installieren:
Erstes ESP Board vorbereiten
Nachdem das Add-on installiert ist, können Sie sofort loslegen und Ihr erstes Board programmieren. Der Installer führt Sie durch die einzelnen Schritte.
Beispiel
Auf der Seite von ESPHome sind unterschiedliche Beispiele aufgeführt, die Sie einfach kopieren können.
Ich habe mir aus den unterschiedlichen Beispielen eine eigene Konfiguration zusammengebaut:
Zwei Pumpen, 5 Ventile, einstellbare Zeiten der einzelnen Ventile mit Überlappungs-Dauer sowie einigen API Services z.B. zur Steuerung von mehreren Zyklen.
Zudem noch die Möglichkeiten, zum nächsten oder vorherigem Ventil zu springen, die Bewässerung zu pausieren und wieder aufzunehmen sowie die Bewässerung „rückwärts“ ablaufen zu lassen:
Hier ist der Code für ESPHome
esphome:
name: bewaesserung
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "6zeG5VCmbWhPbYATSekLlTWG4qSR79dXoBTz0vnM4Ck="
services:
- service: set_multiplier
variables:
multiplier: float
then:
- sprinkler.set_multiplier:
id: lawn_sprinkler_ctrlr
multiplier: !lambda 'return multiplier;'
- service: start_full_cycle
then:
- sprinkler.start_full_cycle: lawn_sprinkler_ctrlr
- service: start_single_valve
variables:
valve: int
then:
- sprinkler.start_single_valve:
id: lawn_sprinkler_ctrlr
valve_number: !lambda 'return valve;'
- service: next_valve
then:
- sprinkler.next_valve: lawn_sprinkler_ctrlr
- service: previous_valve
then:
- sprinkler.previous_valve: lawn_sprinkler_ctrlr
- service: shutdown
then:
- sprinkler.shutdown: lawn_sprinkler_ctrlr
- service: pause
then:
- sprinkler.pause: lawn_sprinkler_ctrlr
- service: resume
then:
- sprinkler.resume: lawn_sprinkler_ctrlr
- service: resume_or_full_cycle
then:
- sprinkler.resume_or_start_full_cycle: lawn_sprinkler_ctrlr
- service: repeat_2
then:
- sprinkler.set_repeat:
id: lawn_sprinkler_ctrlr
repeat: 2 # would run three cycles
- service: repeat_3
then:
- sprinkler.set_repeat:
id: lawn_sprinkler_ctrlr
repeat: 3 # would run three cycles
ota:
password: "f5cf82418b6ce5a6d35c7224ff844fba"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Bewaesserung Fallback Hotspot"
password: "SmartLiving.Rocks"
captive_portal:
sprinkler:
- id: lawn_sprinkler_ctrlr
main_switch: "Lawn Sprinklers"
auto_advance_switch: "Lawn Sprinklers Auto Advance"
reverse_switch: "Lawn Sprinklers Reverse"
valve_overlap: 1s
valves:
- valve_switch: "Front Lawn"
enable_switch: "Enable Front Lawn"
pump_switch_id: sprinkler_pump_sw0
run_duration: 3s
valve_switch_id: lawn_sprinkler_valve_sw0
- valve_switch: "Side Lawn"
enable_switch: "Enable Side Lawn"
pump_switch_id: sprinkler_pump_sw0
run_duration: 3s
valve_switch_id: lawn_sprinkler_valve_sw1
- valve_switch: "Back Lawn"
enable_switch: "Enable Back Lawn"
pump_switch_id: sprinkler_pump_sw1
run_duration: 3s
valve_switch_id: lawn_sprinkler_valve_sw2
- valve_switch: "Front Garden"
enable_switch: "Enable Front Garden"
pump_switch_id: sprinkler_pump_sw0
run_duration: 9s
valve_switch_id: garden_sprinkler_valve_sw0
- valve_switch: "Back Garden"
enable_switch: "Enable Back Garden"
pump_switch_id: sprinkler_pump_sw1
run_duration: 9s
valve_switch_id: garden_sprinkler_valve_sw1
switch:
- platform: gpio
id: sprinkler_pump_sw0
pin: 12
- platform: gpio
id: sprinkler_pump_sw1
pin: 13
- platform: gpio
id: lawn_sprinkler_valve_sw0
pin: 0
- platform: gpio
id: lawn_sprinkler_valve_sw1
pin: 2
- platform: gpio
id: lawn_sprinkler_valve_sw2
pin: 4
- platform: gpio
id: garden_sprinkler_valve_sw0
pin: 14
- platform: gpio
id: garden_sprinkler_valve_sw1
pin: 15
# Example configuration to set multiplier via number
number:
- platform: template
id: sprinkler_ctrlr_multiplier
name: "Sprinkler Controller Multiplier"
min_value: 0.1
max_value: 10.0
step: 0.1
lambda: "return id(lawn_sprinkler_ctrlr).multiplier();"
set_action:
- sprinkler.set_multiplier:
id: lawn_sprinkler_ctrlr
multiplier: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration
name: "Sprinkler Controller Duration"
min_value: 1
max_value: 500
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(0);"
# lambda: "return id(lawn_sprinkler_ctrlr).duration(0);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 0
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration_v_1
name: "Sprinkler Controller Duration of Valve 1"
min_value: 1
max_value: 300
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(0);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 0
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration_v_2
name: "Sprinkler Controller Duration of Valve 2"
min_value: 1
max_value: 300
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(1);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 1
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration_v_3
name: "Sprinkler Controller Duration of Valve 3"
min_value: 1
max_value: 300
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(2);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 2
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration_v_4
name: "Sprinkler Controller Duration of Valve 4"
min_value: 1
max_value: 300
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(3);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 3
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_duration_v_5
name: "Sprinkler Controller Duration of Valve 5"
min_value: 1
max_value: 300
step: 1
lambda: "return id(lawn_sprinkler_ctrlr).valve_run_duration(4);"
set_action:
- sprinkler.set_valve_run_duration:
id: lawn_sprinkler_ctrlr
valve_number: 4
run_duration: !lambda 'return x;'
- platform: template
id: sprinkler_ctrlr_repeat_cycles
name: "Sprinkler Repeat Cycles"
min_value: 0
max_value: 300
step: 1
mode: box
lambda: "return id(lawn_sprinkler_ctrlr).repeat();"
set_action:
- sprinkler.set_repeat:
id: lawn_sprinkler_ctrlr
repeat: !lambda 'return x;'
Hier ist der Code für das Home Assistant Dashboard
type: vertical-stack
cards:
- type: entities
entities:
- entity: number.sprinkler_controller_duration
icon: mdi:sprinkler
- entity: number.sprinkler_controller_duration_of_valve_1
name: Valve 1
icon: mdi:sprinkler
- entity: number.sprinkler_controller_duration_of_valve_2
name: Valve 2
icon: mdi:sprinkler
- entity: number.sprinkler_controller_duration_of_valve_3
name: Valve 3
icon: mdi:sprinkler
- entity: number.sprinkler_controller_duration_of_valve_4
name: Valve 4
icon: mdi:sprinkler
- entity: number.sprinkler_controller_duration_of_valve_5
name: Valve 5
icon: mdi:sprinkler
- entity: number.sprinkler_repeat_cycles
icon: mdi:sprinkler
title: Bewässerungs Bereich Lawn
show_header_toggle: false
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: switch.lawn_sprinklers
name: Main Lawn
icon: mdi:sprinkler
- type: button
tap_action:
action: toggle
entity: switch.front_lawn
icon: mdi:sprinkler
- type: button
tap_action:
action: toggle
entity: switch.side_lawn
icon: mdi:sprinkler
- type: button
tap_action:
action: toggle
entity: switch.back_lawn
icon: mdi:sprinkler
- type: button
tap_action:
action: toggle
entity: switch.front_garden
icon: mdi:sprinkler
- type: button
tap_action:
action: toggle
entity: switch.back_garden
icon: mdi:sprinkler
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_start_full_cycle
data: {}
target: {}
icon: mdi:play
name: Start
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_pause
data: {}
target: {}
icon: mdi:pause-box-outline
name: Pause
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_previous_valve
data: {}
target: {}
icon: mdi:skip-previous
name: Previous
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_next_valve
data: {}
target: {}
entity: ''
icon: mdi:skip-next
name: Next
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_shutdown
data: {}
target: {}
icon: mdi:stop
name: Stop
show_state: true
- show_name: true
show_icon: true
type: button
name: Reverse
tap_action:
action: toggle
entity: switch.lawn_sprinklers_reverse
icon: mdi:keyboard-tab-reverse
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_start_full_cycle
data: {}
target: {}
icon: mdi:refresh-auto
name: Full Circle
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_repeat_2
data: {}
target: {}
entity: ''
icon: mdi:numeric-2-circle-outline
name: Repeat 2
- show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: esphome.bewaesserung_set_multiplier
data: {}
target: {}
icon: mdi:numeric-3-box-outline
name: Repeat 3
show_state: true
Wie geht es weiter?
Ich bin so begeistert von dem System, dass ich als Nächstes mich an die Integration eines Displays kümmern werde. Hierüber kann man die Zeiten entsprechend anpassen und sehen, welcher Bereich und welches Ventil gerade aktiv sind.
Display
Pflanzen-Sensoren
Über spezielle Sensoren bekommt man auch Informationen wie der Zustand der Pflanzen ist. Auch hierfür gibt es aus dem Hause ESPHome entsprechende Lösung SMT100 Soil Moisture Sensor — ESPHome. Die Temperatur und die Feuchtigkeit des Bodens werden ermittelt - andere Sensoren können zudem auch noch die Sonneneinstrahlung und den Nährstoffgehalt ermitteln. (MiFlora Sensor)
Vollautomatische, sensorgesteuerte Bewässerung
Ist das System ausgestattet, mit den oben genannten Sensoren kann man das Bewässerungssystem bedarfsgerecht und individuelle für jede Pflanze steuern. Es können zum Beispiel die Zeit, wie lange das Ventil geöffnet bleiben soll, von dem Sensor angepasst werden. Auch die Wettervorhersage entweder aus dem Internet oder einer eigenen Wetterstation sind so möglich.
Spezielle Programme
Einpflanzen
Ähnlich wie bei der Waschmaschine kann man auch unterschiedliche „Programme“ definieren. Zum Beispiel benötigen Pflanzen, wenn sie frisch eingepflanzt wurden, öfter Wasser. So kann man entsprechend ein Programm Einpflanzen erstellen.
Nutzpflanzen
Auch Nutzpflanzen haben von der Saat bis zur Ernte unterschiedliche Phasen. Eine Pflanze durchläuft in der Vegetationsphase alljährlich verschiedene Entwicklungsstadien - sogenannte phänologische Phasen:
-
Knospenaustrieb
-
Blattentfaltung
-
Blüte
-
Reife Früchte
-
Farbige Blätter
-
Gefallene Blätter
In jeder dieser Phasen können auch Düngerzeiten definiert werden, um den Ertrag zu erhöhen. Auch hierfür können entsprechende Programme definiert werden.