Salve,
Nuovo progetto appena ultimato, quindi mi è sembrato opportuno condividerlo con tutti voi:
Automazione chiusura Valvola Principale Acqua + sensori di allagamento.
Questo progetto nasce, come sempre mi capita, per ovviare a problemi che ho avuto in passato, nelle fattispecie due volte mi si è allagato il piano inferiore di casa (flessibile rotto e cassetta scarico WC rotta); sfiga ha voluto che in entrambi i casi fossi fuori per qualche gg di vacanza quindi gli allagamenti hanno fatto i loro bei danni!
Il progetto si compone di un modulo che ho montato all’esterno (in una zona protetta dalla pioggia, dove ho l’ingresso principale dell’acqua con relativi contatore e valvola manuale) il quale è controllato da un Wemos (firmware ESPEasy, spiegherò più avanti il perché) al quale è collegata una elettrovalvola CR-02 (3 fili); visto che quest’ultima funziona a 12V nella scatola ho inserito un trasformatore 230VAC/12VDC dal quale ho ricavato i 5V per il wemos con uno step down; completano il circuito 2 relè che controllano rispettivamente l’apertura e la chiusura della valvola, due LED di indicazione stato (verde = aperta, rosso = chiusa) ed un pulsante di commutazione manuale (toggle).
In casa ho 4 sensori di allagamento Xiaomi Zigbee (uno per ogni bagno + uno per la cucina); teoricamente dovrei metterne uno anche in lavanderia ma essendo questa esterna in caso di perdita l’acqua defluirebbe in terrazza dove ci sono abbondanti chiusini di scarico; nulla mi vieta ovviamente di aggiungere sensori all’occorrenza.
Foto del modulo montato:

In Home Assistant ho i sensori di allagamento (ne vedete solo due in quanto gli altri sono effettivamente in viaggio e non mi sono ancora stati consegnati) ed uno status della valvola (che viene comunicato dal modulo stesso via MQTT) che mi indica se è Aperta o Chiusa oppure se è in fase di chiusura o apertura (la valvola ci mette circa 4 secondi per passare da completamente aperta a completamente chiusa o viceversa).

Schema della valvola CR-02 utilizzata; ho preferito l’uso di due relè, uno per ogni stato, così da poter tenere la bobina dell’elettrovalvola senza tensione nel normale stato di idle, e di metterla sotto tensione solo il tempo strettamente necessario per aprire o chiudere la valvola:

L’automazione è stata realizzata in NodeRed ed è abbastanza banale, appena uno dei sensori riporta lo stato “WET” (il che indica che rileva dell’acqua) la valvola viene immediatamente chiusa ed al solito un alert viene inviato con il servizio di notifica telegram; ho previsto anche un annuncio “Audio” tramite servizio TTS su tutti i GH di casa. Ho deciso di non inibire l’allarme audio in base all’orario in quanto la zona notte di casa è due piani più in alto, quindi se c’è un evento di allagamento voglio intervenire al più presto.

Infine perché ESPEasy e non Tasmota; io uso entrambi i firmware, mentre tasmota è più immediato e diretto per funzioni semplici (accendi, spegni, leggi sensore, etc.) non trovo per nulla comodo il suo sistema di programmazione; viceversa ESPEasy è più complesso come firmware ma mi consente di scrivere script e/o automazioni che vengono eseguite in locale usando un linguaggio abbastanza comprensibile con il suo editor interno; certo non posso aspettarmi i livello di sofisticatezza dello YAML ma per programmazioni anche mediamente complesse che vanno eseguite pure in mancanza di Home Assistant è secondo me molto comodo; qui in basso lo script utilizzato da questo modulo che gestisce il pulsante ed i due LED di status in locale e risponde a due eventi MQTT ("ApriValvola" e "ChiudiValvola"); inoltre in caso di riavvio (es. mancanza corrente) chiude la valvola come ulteriore sicurezza:
On System#Boot do
gpio,13,1
gpio,15,1
event,ChiudiValvola
endon
On Pulsante#Status=1 do
If [Status#Valvola]=0
event,ApriValvola
else
event,ChiudiValvola
endif
EndOn
//-----------------------------------------------------------------------
//---- procedura apertura valvolva ----------------------------
//-----------------------------------------------------------------------
on ApriValvola do
gpio,15,1 // spegni relé chiusura
gpio,13,0 // accendi relé apertura
publish /%sysname%/StatusValvola,In Apertura...
timerSet,1,10
endon
on Rules#Timer=1 do
gpio,13,1 // spegni relé apertura
taskvalueset 2,1,1
publish /%sysname%/StatusValvola,APERTA
gpio,5,1
gpio,4,0
endon
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//---- procedura chiusura valvolva ----------------------------
//-----------------------------------------------------------------------
on ChiudiValvola do
gpio,13,1 // spegni relé apertura
gpio,15,0 // accendi relé chiusura
publish /%sysname%/StatusValvola,In Chiusura...
timerSet,2,10
endon
on Rules#Timer=2 do
gpio,15,1 // spegni relé chiusura
taskvalueset 2,1,0
publish /%sysname%/StatusValvola,CHIUSA
gpio,4,1
gpio,5,0
endon
//-----------------------------------------------------------------------
Il progetto è funzionale ma aperto a miglioramenti:
Ripetizione delle notifiche (sia Telegram che TTS) ogni XX minuti finchè la situazione non è risolta
Integrazione di altri sensori di allagamento (in arrivo nei prossimi giorni)
Pulsante "virtuale" in casa per poter commutare la valvola senza dover andare fuori fino alla nicchia dove sta il contatore e la valvola
Collegamento alle automazioni di irrigazione del giardino in modo da aprire l'acqua durante l'irrigazione schedulata e chiuderla subito dopo nel caso in casa non ci sia nessuno per lungo tempo (vacanza=ON)