statistiche web gratis
-Irrigazione giardino con Home Assistant e Tasmota (ESP8285 + modulo 4 Relè + MQTT)

Irrigazione giardino con Home Assistant e Tasmota (ESP8285 + modulo 4 Relè + MQTT)

Possiamo automatizzare l’irrigazione del giardino con Home Assistant, per fare questo abbiamo bisogno di un controller ESP8285 (anche un NodeMCU va bene) ed un modulo relè a 4 canali da 5Volt che abbia i fotoaccoppiatori e l’alimentazione dei relè separabile.

il controller ESP e la scheda 4 relè puo essere alimentata da un carica batterie per cellulari direttamente dalla porta USB presente sul modulo.

Colleghiamo le due schede.

Bisogna fare attenzione all’alimentazione, in quanto il controller con i GPIO lavorano 3,3V mentre i relè lavorano a 5V, questo è molto importante per non danneggiare il chip ESP.
Separiamo l’alimentazione dei relè dai foto-accoppiatori aprendo il jumper JD-VCC.

Collegamenti:

dal pin Vin del controller ESP escono 5V prelevati direttamente dalla USB che utilizzeremo per alimentare i relè, mentre dal pin 3,3V prenderemo l’alimentazione per i fotoaccoppiatori cosi avremo separato i 5V con i 3,3V.

Di seguito i collegamenti delle schede:

E qui i collegamenti tra elettrovalvole e alimentazione a 24V AC (corrente alternata)

Per prima cosa se non li abbiamo, scarichiamo ed installiamo i driver del chip USB to Serial presente sul controller utilizzando il seguente link https://sparks.gogo.co.nz/ch340.html
Carichiamo il firmware Tasmota sull’ESP con ATOM più PlatfomIO utilizzando la porta USB, nessuna scheda programmatore serve in questo caso perchè l’ESP ha gia il chip ch340 che fa da usb a seriale.

Una volta partito, configuriamo il Tasmota come al solito (Wi-Fi, nome, friendly name, IP statico e quant’altro) di seguito alcuni screenshot di configurazione tipo.

ora andiamo a configurare i GPIO come da immagine sotto e testiamo se i relè si attivano e disattivano con i tasti toggle

Integrazione in Home-Assistant:

Per l’integrazione in Home Assistant dovremmo aver prima configurato MQTT vedi questo articolo

Poi dovremmo creare alcuni componenti, automazioni e script nel file configuration.yaml

 

Creiamo degli inputboolean per i giorni della settimana.

Ora servono degli input number slider per definire i tempi delle zone:

Creaiamo due input time per 2 partenze giornaliere che se messi allo stesso valore avremo una perteza giornaliera soltanto:

A questo punto mancano le automazioni per i giorni della settimana ed uno script per i tempi delle zone e per la partenza manuale.
di seguito le automations, una per ogni giorno della settimana queste non fanno altro che far partire la zona 1 se le condizioni di orario e giorno della settimana sono valide.
L’ultima automazione intercetta se la zona 1 è accesa e fa partire lo script che per i tempi delle zone, vedi script sotto:

Qui lo script che resetta se stesso alla partenza per azzerare eventuali conteggi e poi in sequenza spenge e accende in successione le varie zone secondo i tempi impostati sugli input number slider:

Il seguente script serve per interrompere, a bisogno, l’irrigazione in corso, magari per una partenza fatta partire manualmente per errore, in ogni caso una volta attivato, va ad interrompere l’esecuzione dello script “timer_off” che gestisce la sequenza delle zone descritto precedentemente.

Ora che abbiamo tutto possiamo creare un pannello Lovelace dedicato, di seguito un esempio:

About the Author:

9 Comments

  1. Manuel Bianchi 24 Giugno 2019 at 12:37

    Salve..
    Volevo chiedere se si può aggiungere altre zone?
    Sicuramente ci vorranno altri relè, ma sul ESP8285 fino a quante zone posso controllare??

    • peppebytes 24 Giugno 2019 at 18:13

      Credo che almeno 8 zone si può fare usando tutti i gpio disponibili, compresi rx tx per la programmazione, ricordati se usi anche quelli, di disabilitare il serial logging

  2. Claudio 23 Febbraio 2020 at 0:05

    Ciao
    sto utilizzando i tuoi consigli per ricreare un sistema di irrigazione attraverso Home Assistant ma avrei bisogno di avviare ogni zona con il suo timer. cosa devo modificare?
    grazie
    Claudio

    • peppebytes 23 Febbraio 2020 at 12:34

      Purtroppo questa configurazione è scritta per fare partire le zone in sequenza, per quello che vuoi fare tu, andrebbe riscritto quasi da capo.

  3. andrew 17 Aprile 2020 at 0:21

    Ciao, mi sto impratichendo con i comandi di Hassio. Ho uno switch sonoff che ho denominato ‘Zona 1’ ed ho provato la tua config, ma non riesco a far partire lautomazione . dove sbaglio? grazie per i suggerimenti
    questo è il package che ho copiato ed adattato…

    input_boolean:
    # irrigazione Giorni della settimana
    monday:
    name: Lun

    tuesday:
    name: Mar

    wednesday:
    name: Mer

    thursday:
    name: Gio

    friday:
    name: Ven

    saturday:
    name: Sab

    sunday:
    name: Dom

    ################################################
    # input Number – Slider per durata irrigazione #
    ################################################
    input_number:
    # Tempo zona 1
    slider_zona_1:
    name: “Zona 1”
    icon: mdi:clock-end
    min: 1
    max: 30
    step: 1

    # Tempo zona 2
    slider_zona_2:
    name: “Zona 2”
    icon: mdi:clock-end
    min: 1
    max: 30
    step: 1

    # Tempo zona 3
    slider_zona_3:
    name: “Zona 3”
    icon: mdi:clock-end
    min: 1
    max: 30
    step: 1

    # Tempo zona 4
    slider_zona_4:
    name: “Zona 4”
    icon: mdi:clock-end
    min: 1
    max: 30
    step: 1

    input_datetime:
    # Orario partenza irrigazione A
    time_start_irrigazione:
    name: Orario Irrigazione
    has_date: false
    has_time: true

    # Orario partenza irrigazione B
    time_start_irrigazione2:
    name: Orario Irrigazione 2
    has_date: false
    has_time: true

    ########################
    # Irrigazione Giardino #
    ########################
    automation:
    # Automazione Irrigazione Lunedi
    – id : ‘irrigazione_lun’
    alias: ‘Irrigazione Lunedi’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.monday
    state: ‘on’
    – condition: time
    weekday: mon
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Martedi
    – id : ‘irrigazione_mar’
    alias: ‘Irrigazione Martedi’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.tuesday
    state: ‘on’
    – condition: time
    weekday: tue
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Mercoledi
    – id : ‘irrigazione_mer’
    alias: ‘Irrigazione Mercoledi’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.wednesday
    state: ‘on’
    – condition: time
    weekday: wed
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Giovedi
    – id : ‘irrigazione_gio’
    alias: ‘Irrigazione Giovedi’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.thruesday
    state: ‘on’
    – condition: time
    weekday: thu
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Venerdi
    – id : ‘irrigazione_ven’
    alias: ‘Irrigazione Venerdi’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.friday
    state: ‘on’
    – condition: time
    weekday: fri
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Sabato
    – id : ‘irrigazione_sab’
    alias: ‘Irrigazione Sabato’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.saturday
    state: ‘on’
    – condition: time
    weekday: sat
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Automazione Irrigazione Domenica
    – id : ‘irrigazione_dom’
    alias: ‘Irrigazione Domenica’
    trigger:
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    – platform: template
    value_template: “{{ states(‘sensor.time’) == (states.input_datetime.time_start_irrigazione2.attributes.timestamp | int | timestamp_custom(‘%H:%M’, False)) }}”
    condition:
    – condition: state
    entity_id: input_boolean.sunday
    state: ‘on’
    – condition: time
    weekday: sun
    action:
    – service: homeassistant.turn_on
    data:
    entity_id: switch.zona_1

    # Intercetto la partenza dell’irrigazione e lancio lo script sequenziale.
    – id: ‘timer_off_zona’
    alias: Timer off Irrigazione
    trigger:
    – entity_id: switch.zona_1
    platform: state
    to: ‘on’
    action:
    service: homeassistant.turn_on
    entity_id: script.timed_zone

    ######################
    # Script Irrigazione #
    ######################

    script:

    timed_zone:
    alias: “Set Garden Timer”
    sequence:
    # Cancel ev. old timers
    – service: script.turn_off
    data:
    entity_id: script.timer_off
    # Set new timer
    – service: script.turn_on
    data:
    entity_id: script.timer_off
    timer_off:
    alias: “Turn Off Irrigazione”
    sequence:
    – delay: ’00:{{ states.input_number.slider_zona_1.state | int }}:00′
    – service: switch.turn_off
    entity_id: switch.zona_1
    – service: switch.turn_on
    entity_id: switch.zona_2
    – delay: ’00:{{ states.input_number.slider_zona_2.state | int }}:00′
    – service: switch.turn_off
    entity_id: switch.zona_2
    – service: switch.turn_on
    entity_id: switch.zona_3
    – delay: ’00:{{ states.input_number.slider_zona_3.state | int }}:00′
    – service: switch.turn_off
    entity_id: switch.zona_3
    – service: switch.turn_on
    entity_id: switch.zona_4
    – delay: ’00:{{ states.input_number.slider_zona_4.state | int }}:00′
    – service: switch.turn_off
    entity_id: switch.zona_4
    stop_irrigazione:
    alias: “Ferma Irrigazione”
    sequence:
    – service: script.turn_off
    data:
    entity_id: script.timer_off
    – service: switch.turn_off
    entity_id: switch.zona_1
    – service: switch.turn_off
    entity_id: switch.zona_2
    – service: switch.turn_off
    entity_id: switch.zona_3
    – service: switch.turn_off
    entity_id: switch.zona_4

    switch:

    – platform: mqtt
    name: “Zona 1”
    command_topic: “cmnd/orto/power”
    state_topic: “stat/orto/POWER”
    qos: 1
    payload_on: “ON”
    payload_off: “OFF”

    • peppebytes 17 Aprile 2020 at 9:29

      Ciao, con i termini sembra scritta correttamente, purtroppo sul post non vengono bene gli spazi e l’indentazione dello yaml, non saprei ricontrolla bene gli spazi e sopratutto i template tra le parantesi graffe, se non parte il problema potrebbe essere dentro la parte automation.
      Se fai partire lo script timed_off, dopo il tempo zona 1, la sequenza continua?
      Se accendi a mano la zona 1, lo script poi fa la sequenza?
      é molto articolato come sistema, cerca di isolare dove sta il problema, utilizzando i vari pezzi a mano.
      puoi anche provare a triggerare l’automazione dei vari giorni a mano e ricorda che gli input_boolean dei giorni devo essere accesi altrimenti non parte.

  4. andrew 17 Aprile 2020 at 22:36

    Ciao, ti ringrazio e ti faccio sapere.. aggiungo altre switch zone e provo.. Grazie ancora

  5. andrew 19 Aprile 2020 at 11:38

    Trovato! Semplicemente non avevo dichiarato in configuration.yaml il sensor date_time
    – platform: time_date
    display_options:
    – ‘time’
    – ‘date’
    – ‘date_time’
    – ‘time_date’

    grazie! e’ stata una bella palestra… alla prossima e buona domenica

    • peppebytes 21 Aprile 2020 at 9:32

      ottimo, ed è corretto, non ti dava errore perchè quel sensore poi è utilizzato dentro i template quindi non vengono verificati dal controllo di configurazione.

Leave A Comment