Created
September 12, 2020 06:51
-
-
Save tubalainen/e6799418b9faab321bab3f4af797fcab to your computer and use it in GitHub Desktop.
bevattningssystem
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### ESPHome koden för mina fyra reläer. Baserat på en Wimos D1 Mini (ESP8266) | |
esphome: | |
name: bevattningskontroller_01 | |
platform: ESP8266 | |
board: d1_mini | |
wifi: | |
ssid: 'ssid' | |
password: 'hemligt' | |
ap: | |
ssid: "bvattnctrl Fallback Hotspot" | |
# password: "rCdopOHEnjsj" | |
captive_portal: | |
# Enable logging | |
logger: | |
# Enable Home Assistant API | |
api: | |
ota: | |
web_server: | |
port: 80 | |
time: | |
# - platform: homeassistant | |
# id: time | |
- platform: sntp | |
id: time_ntp | |
timezone: Europe/Stockholm | |
servers: 192.168.1.10 | |
switch: | |
- platform: gpio | |
name: "Zone1 Valve" | |
pin: | |
number: D1 | |
mode: OUTPUT | |
inverted: True | |
id: relay_1 | |
- platform: gpio | |
name: "Zone2 Valve" | |
pin: | |
number: D2 | |
mode: OUTPUT | |
inverted: True | |
id: relay_2 | |
- platform: gpio | |
name: "Zone3 Valve" | |
pin: | |
number: D3 | |
mode: OUTPUT | |
inverted: True | |
id: relay_3 | |
- platform: gpio | |
name: "Zone4 Valve" | |
pin: | |
number: D0 | |
mode: OUTPUT | |
inverted: True | |
id: relay_4 | |
sensor: | |
- platform: wifi_signal | |
name: "Bevattningskontroller framsidan wifi signal" | |
update_interval: 60s | |
#################################################################################### | |
#### | |
#### Detta är ett "package" för bevattning där hänsyn tas till min robotgräsklippare "Helga". Placera filen i /config/packages | |
#### Om "Helga" är ute och klipper så triggas reläet "switch.helga_regnrela" och "Helga" skickas hem | |
#### Om "Helga" redan är hemma så startas bevattningen | |
#### Helga är en stendum "Worx landroid wg790e" som har fått en ESP8266 inopererad (wifi microcontroller) som kortsluter regnsensorn för att låta helga köra hem "switch.helga_regnrela" | |
#### | |
#### Bevattningen består av tre zoner (och tre ventiler/reläer), switch.zone1_valve, switch.zone2_valve, switch.zone3_valve | |
#### Bevattningskontrollern består också en ESP8266 (en Wimos D1 Mini närmare bestämt) och fyra reläer som skickar 24 VDC till de olika ventilerna som styr respektive zon (solinoier) | |
#### Till 230 VAC inkommande ström till bevattningskontrollern sitter en Shelly 1 som är ett ESP8266 wifi-relä. Det finns också en knapp för manuell "Override" av systemet vid kontrollboxen | |
#### Använder mig också av en IKEA Trådfri fjärrkontroll för att starta bevattning av de olika zonerna manuellt. | |
#### Jag kan styra ventilerna individuellt genom att direkt kontrollera varje relä, jag har byggt in några automationer som automatiskt stänger av efter 60 minuter | |
#### | |
#### -- Flödesbeskrivning/Automationen -- | |
#### 1. Knapp för att starta trycks in (IKEAs fjärrkontroll) eller input_boolean.starta_bevattning triggas | |
#### 2a. Om Helga inte är hemma, skicka hem henne till laddstationen och vänta tills hon faktiskt är hemma (binary_sensor.helga_laddar), aktivera isåfall input_boolean.helga_regn | |
#### 2b. Om helga redan är hemma, aktivera isåfall input_boolean.helga_regn | |
#### 3. input_boolean.helga_regn är triggad och då sätter vi switch.helga_regnrela till on och startar bevattningsscriptet, men bara om helga är hemma! (binary_sensor.helga_laddar = on) | |
#### 4. script.starta_bevattningssekvens körs och en delay mellan varje byte av zon styr hur länge varje zon får köras (input_number) | |
#### 5. bevattningen avslutas med scriptet script.stoppa_all_bevattning | |
#### | |
#### -- Lite referenser -- | |
#### Kod för microcontrollerna ESP8266 sköts av ESPHOME: http://www.esphome.io | |
#### Allt binds ihop av Home Assistant: http://www.home-assistant.io | |
#### Pluginnet deconz, för att stödja zigbee (och IKEAs fjärrkontroller): https://www.dresden-elektronik.de/funktechnik/products/software/pc/deconz/ | |
#### Deconz kräver en sändare/mottagare. Jag använder mig av conbee: https://www.kjell.com/se/produkter/el-verktyg/smarta-hem/zigbee/conbee-ii-zigbee-controller-for-usb-p51419 | |
#### | |
#### -- Tillkortakommanden -- | |
#### Det finns ingen automatik som på ett givet klockslag startar bevattningen, den måste triggas manuellt | |
#### Tar inte heller hänsyn till regn eller väderfaktorer i denna lösningen, jag vill gärna stödbevattna när det faktiskt regnar | |
#### Inte hunnit/orkat göra någon snygg grafisk presentation av lösningen i Lovelace .... | |
#### | |
# Snyggar till utseendet lite | |
homeassistant: | |
customize: | |
switch.on_off_shelly10: | |
friendly_name: Brytare - Bevattningskontroller framsida | |
switch.zone1_valve: | |
icon: mdi:water-pump | |
switch.zone2_valve: | |
icon: mdi:water-pump | |
switch.zone3_valve: | |
icon: mdi:water-pump | |
switch.zone4_valve: | |
icon: mdi:water-pump | |
# Här skapas de olika input_numbers för respektive zons körtider | |
input_number: | |
zone1_time: | |
name: Körtid Zon 1 i minuter | |
min: 0 | |
max: 59 | |
step: 1 | |
icon: mdi:camera-timer | |
zone2_time: | |
name: Körtid Zon 2 i minuter | |
min: 0 | |
max: 59 | |
step: 1 | |
icon: mdi:camera-timer | |
zone3_time: | |
name: Körtid Zon 3 i minuter | |
min: 0 | |
max: 59 | |
step: 1 | |
icon: mdi:camera-timer | |
# Här skapas två fakeswitchar som används för automationerna | |
input_boolean: | |
starta_bevattningssekvens: | |
name: Starta Bevattningssekvens | |
initial: off | |
icon: mdi:water-pump | |
helga_regn: | |
name: Helga regnsensor | |
initial: off | |
icon: mdi:weather-rainy | |
stoppa_bevattningen: | |
name: Stoppa bevattningen | |
initial: off | |
icon: mdi:stop-circle-outline | |
# Här börjar scripen som triggas från autmationerna längre ned | |
script: | |
starta_zon1: | |
alias: Starta bevattning zon1 script | |
sequence: | |
- data: | |
entity_id: | |
- switch.zone1_valve | |
- switch.zone2_valve | |
- switch.zone3_valve | |
service: switch.turn_off | |
- data: | |
entity_id: switch.zone1_valve | |
service: switch.turn_on | |
starta_zon2: | |
alias: Starta bevattning zon2 script | |
sequence: | |
- data: | |
entity_id: | |
- switch.zone1_valve | |
- switch.zone2_valve | |
- switch.zone3_valve | |
service: switch.turn_off | |
- data: | |
entity_id: switch.zone2_valve | |
service: switch.turn_on | |
starta_zon3: | |
alias: Starta bevattning zon3 script | |
sequence: | |
- data: | |
entity_id: | |
- switch.zone1_valve | |
- switch.zone2_valve | |
- switch.zone3_valve | |
service: switch.turn_off | |
- data: | |
entity_id: switch.zone3_valve | |
service: switch.turn_on | |
# Huvudscriptet - Här tuggar jag igenom respektive zon enligt med en delay mellan varje enligt input_numers för respektive zon | |
starta_bevattningssekvens: | |
alias: Starta bevattningssekvens | |
sequence: | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Bevattningssekvens startad! | |
service: tts.google_translate_say | |
# - delay: '00:00:10' | |
- data: | |
entity_id: script.starta_zon1 | |
service: script.turn_on | |
- delay: "00:{{ states('input_number.zone1_time')|int }}:00" | |
- data: | |
entity_id: script.starta_zon2 | |
service: script.turn_on | |
- delay: "00:{{ states('input_number.zone2_time')|int }}:00" | |
- data: | |
entity_id: script.starta_zon3 | |
service: script.turn_on | |
- delay: "00:{{ states('input_number.zone3_time')|int }}:00" | |
- data: | |
entity_id: script.stoppa_all_bevattning | |
service: script.turn_on | |
# Stoppa all bevattning -- Slå av ALLT | |
stoppa_all_bevattning: | |
alias: Stoppa all bevattning | |
sequence: | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Bevattningssekvensen avslutas! | |
service: tts.google_translate_say | |
- data: | |
entity_id: | |
- script.starta_zon1 | |
- script.starta_zon2 | |
- script.starta_zon3 | |
- script.starta_bevattningssekvens | |
service: homeassistant.turn_off | |
- data: | |
entity_id: | |
- switch.zone1_valve | |
- switch.zone2_valve | |
- switch.zone3_valve | |
- switch.helga_regnrela | |
service: switch.turn_off | |
# - delay: '00:00:05' | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Släpper ut Helga på grönbete igen! | |
service: tts.google_translate_say | |
- data: | |
entity_id: switch.helga_regnrela | |
service: switch.turn_off | |
- data: | |
entity_id: | |
- input_boolean.starta_bevattningssekvens | |
- input_boolean.helga_regn | |
- input_boolean.stoppa_bevattningen | |
service: input_boolean.turn_off | |
# Nedan följer alla automationer | |
automation: | |
## Starta bevattningssekvensen | |
- id: 'bevattningsautomatik' | |
alias: Bevattning starta sekvens | |
initial_state: 'on' | |
trigger: | |
# - entity_id: input_boolean.starta_bevattningssekvens | |
# platform: state | |
# to: 'on' | |
- entity_id: input_boolean.helga_regn | |
platform: state | |
to: 'on' | |
condition: | |
- condition: state | |
entity_id: binary_sensor.helga_laddar | |
state: "on" | |
# - condition: template | |
# value_template: "{{ not is_state('switch.helga_regnrela', 'unavailable') }}" | |
action: | |
- data: | |
entity_id: script.starta_bevattningssekvens ## Hoppar till scriptdelen och kör "starta_bevattningssekvens" scriptet | |
service: script.turn_on | |
# Stoppa all bevattning | |
- id: 'bevattningsautomatik_stopp' | |
alias: Stoppa bevattning | |
initial_state: 'on' | |
trigger: | |
- event_data: | |
id: remote_bevattning | |
event: 3002 | |
platform: event | |
event_type: deconz_event | |
- platform: time | |
at: '22:00:00' | |
- entity_id: input_boolean.stoppa_bevattningen | |
platform: state | |
to: 'on' | |
condition: | |
condition: or | |
conditions: | |
- condition: state | |
entity_id: switch.zone1_valve | |
state: "on" | |
- condition: state | |
entity_id: switch.zone2_valve | |
state: "on" | |
- condition: state | |
entity_id: switch.zone3_valve | |
state: "on" | |
- condition: state | |
entity_id: input_boolean.starta_bevattningssekvens | |
state: "on" | |
action: | |
- data: | |
entity_id: script.stoppa_all_bevattning | |
service: script.turn_on | |
# Skicka hem Helga om helga klipper | |
- id: 'skicka_hem_helga' | |
alias: 'Helga hem bevattning startar' | |
initial_state: 'on' | |
trigger: | |
- entity_id: input_boolean.starta_bevattningssekvens | |
platform: state | |
to: 'on' | |
- event_data: | |
id: remote_bevattning | |
event: 1001 | |
platform: event | |
event_type: deconz_event | |
condition: | |
- condition: state | |
entity_id: binary_sensor.helga_laddar | |
state: "off" | |
action: | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
volume_level: '0.5' | |
service: media_player.volume_set | |
- delay: 00:00:01 | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Helga är ute och klipper, skickar hem henne till sitt hus! | |
service: tts.google_translate_say | |
- data: | |
entity_id: switch.helga_regnrela | |
service: switch.turn_on | |
- wait_template: "{{ is_state('binary_sensor.helga_laddar', 'on') }}" # Väntar tills helga är hemma innan vi forsätter | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Nu är Helga hemma i sitt hus, betvattningen kan börja! | |
service: tts.google_translate_say | |
- delay: 00:00:10 | |
- data: | |
entity_id: input_boolean.helga_regn | |
service: input_boolean.turn_on | |
# Helga var redan hemma, så nu kör vi igång bevattningen! | |
- id: 'helga_hemma_starta_bevattning' | |
alias: 'Helga redan hemma bevattning startar' | |
initial_state: 'on' | |
trigger: | |
- entity_id: input_boolean.starta_bevattningssekvens | |
platform: state | |
to: 'on' | |
- event_data: | |
id: remote_bevattning | |
event: 1001 | |
platform: event | |
event_type: deconz_event | |
condition: | |
- condition: state | |
entity_id: binary_sensor.helga_laddar | |
state: "on" | |
action: | |
# - data: | |
# entity_id: media_player.gh_mini_vardagsrum | |
# volume_level: '0.4' | |
# service: media_player.volume_set | |
# - delay: 00:00:01 | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Helga är redan hemma i sitt hus, nu är vi redo för bevattning! | |
service: tts.google_translate_say | |
- delay: 00:00:07 | |
- data: | |
entity_id: switch.helga_regnrela | |
service: switch.turn_on | |
- data: | |
entity_id: input_boolean.helga_regn # Detta triggar nästa automation "Bevattning starta sekvens" | |
service: input_boolean.turn_on | |
# Får inte tag på Helga, något gick fel, starta inte! | |
- id: 'helga_inte_online' | |
alias: 'Helga är inte online bevattning avbryts' | |
initial_state: 'on' | |
trigger: | |
- entity_id: input_boolean.starta_bevattningssekvens | |
platform: state | |
to: 'on' | |
- event_data: | |
id: remote_bevattning | |
event: 1001 | |
platform: event | |
event_type: deconz_event | |
condition: | |
condition: or | |
conditions: | |
- condition: state | |
entity_id: binary_sensor.helga_laddar # Helga måste inte vara hemma, hon kan få köra på baksidan för att Zon 1 och 2 ska få köras | |
state: "unavailable" | |
- condition: state | |
entity_id: switch.helga_regnrela # Helga måste inte vara hemma, hon kan få köra på baksidan för att Zon 1 och 2 ska få köras | |
state: "unavailable" | |
action: | |
# - data: | |
# entity_id: media_player.gh_mini_vardagsrum | |
# volume_level: '0.4' | |
# service: media_player.volume_set | |
- data: | |
entity_id: media_player.gh_mini_vardagsrum | |
message: Det sket sig, någon av Helgas sensorer eller reläer är inte tillgängliga. Det blir ingen bevattning! | |
service: tts.google_translate_say | |
- data: | |
entity_id: switch.helga_regnrela | |
service: switch.turn_off | |
- data: | |
entity_id: | |
- input_boolean.starta_bevattningssekvens | |
- input_boolean.helga_regn | |
- input_boolean.stoppa_bevattningen | |
service: input_boolean.turn_off | |
# Starta zon1 via fjärrkontroll | |
- id: 'bevattningsautomatik_zon1' | |
alias: Starta bevattning zon1 via knapp | |
initial_state: 'on' | |
trigger: | |
- event_data: | |
id: remote_bevattning | |
event: 4002 | |
platform: event | |
event_type: deconz_event | |
condition: | |
condition: or | |
conditions: | |
- condition: state | |
entity_id: binary_sensor.framsidebrytare # Om zonen för framsidan är avslagen så får vi bevattna zon 1 och 2 | |
state: "on" | |
- condition: state | |
entity_id: binary_sensor.helga_laddar # Helga måste inte vara hemma, hon kan få köra på baksidan för att Zon 1 och 2 ska få köras | |
state: "on" | |
action: | |
- data: | |
entity_id: switch.zone1_valve | |
service: switch.toggle | |
# Starta zon2 via fjärrkontroll | |
- id: 'bevattningsautomatik_zon2' | |
alias: Starta bevattning zon2 via knapp | |
initial_state: 'on' | |
trigger: | |
- event_data: | |
id: remote_bevattning | |
event: 2002 | |
platform: event | |
event_type: deconz_event | |
condition: | |
condition: or | |
conditions: | |
- condition: state | |
entity_id: binary_sensor.framsidebrytare # Om zonen för framsidan är avslagen så får vi bevattna zon 1 och 2 | |
state: "on" | |
- condition: state | |
entity_id: binary_sensor.helga_laddar # Helga måste inte vara hemma, hon kan få köra på baksidan för att Zon 1 och 2 ska få köras | |
state: "on" | |
action: | |
- data: | |
entity_id: switch.zone2_valve | |
service: switch.toggle | |
# Starta zon3 via fjärrkontroll | |
- id: 'bevattningsautomatik_zon3' | |
alias: Starta bevattning zon3 via knapp | |
initial_state: 'on' | |
trigger: | |
- event_data: | |
id: remote_bevattning | |
event: 5002 | |
platform: event | |
event_type: deconz_event | |
condition: | |
- condition: state | |
entity_id: binary_sensor.helga_laddar # Helga MÅSTE vara hemma, annars får inte zon3 startas | |
state: "on" | |
action: | |
- data: | |
entity_id: switch.zone3_valve | |
service: switch.toggle | |
### Säkerhetskontrollen, ingen ventil får någonsin vara igång mer än max 60 minuter ### | |
- id: 'safety_irrigation_off_zone1' | |
alias: Timer irrigation off Zone 1 | |
trigger: | |
- entity_id: switch.zone1_valve | |
for: | |
# seconds: 2 | |
minutes: 60 | |
platform: state | |
to: 'on' | |
condition: [] | |
action: | |
- data: | |
entity_id: switch.zone1_valve | |
service: switch.turn_off | |
- id: 'safety_irrigation_off_zone2' | |
alias: Timer irrigation off Zone 2 | |
trigger: | |
- entity_id: switch.zone2_valve | |
for: | |
# seconds: 2 | |
minutes: 60 | |
platform: state | |
to: 'on' | |
condition: [] | |
action: | |
- data: | |
entity_id: switch.zone2_valve | |
service: switch.turn_off | |
- id: 'safety_irrigation_off_zone3' | |
alias: Timer irrigation off Zone 3 | |
trigger: | |
- entity_id: switch.zone3_valve | |
for: | |
# seconds: 2 | |
minutes: 60 | |
platform: state | |
to: 'on' | |
condition: [] | |
action: | |
- data: | |
entity_id: switch.zone3_valve | |
service: switch.turn_off |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment