Skip to content

Instantly share code, notes, and snippets.

@tubalainen
Created September 12, 2020 06:51
Show Gist options
  • Save tubalainen/e6799418b9faab321bab3f4af797fcab to your computer and use it in GitHub Desktop.
Save tubalainen/e6799418b9faab321bab3f4af797fcab to your computer and use it in GitHub Desktop.
bevattningssystem
### 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