community italiana di domotica personale
 
Contabilizzare i consumi d’acqua e rilevare perdite con la domotica Home Assistant (via flussostato ed ESPHome)

Contabilizzare i consumi d’acqua e rilevare perdite con la domotica Home Assistant (via flussostato ed ESPHome)

SCOPI DEL PROGETTO:
  • Contabilizzare i consumi d’acqua tramite la lettura di un flussostato via firmware ESPHome, integrando poi il tutto sulle dashboard Home Assistant
  • Livello di difficoltà: medio
  • Costo: basso
CONCETTI AFFRONTATI:
  • Assemblaggio hardware
  • Configurazione e installazione firmware
  • Configurazione integrazione Home Assistant
COMPONENTI SOFTWARE UTILIZZATE:
COMPONENTI FISICI UTILIZZATI:
Progetto indicato per utenti con installazione:
Ambiente Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In presenza di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat.
Revisione progetto: 1.1

contatore acqua

Abstract

Tra le funzionalità più apprezzate di Home Assistant, il più diffuso tra gli HUB personali gratuiti open-source per la propria domotica, è certamente il pannello energia, un vero e proprio cruscotto in grado di “contabilizzare” i consumi di energia elettrica (tenendo anche in considerazioni eventuali produzioni fotovoltaiche o di altro tipo), nonché quelli di gas e acqua.

Un esempio di come funziona e appare il pannello energia è disponibile qui.

Si tratta per lo più di integrare sul proprio HUB la maggioranza (se non tutte) delle letture relative ai vari consumi (e alla produzione, nel caso della generazione in proprio): nel caso dell’energia elettrica, è sufficiente integrare almeno la lettura a monte dell’impianto (come per esempio tramite l’ottimo Shelly EM) nonché, per i dettagli relativi agli elettrodomestici, utilizzare prese intelligenti in grado di misurare potenza ed energia (vedi guida); per il gas, invece, abbiamo già proposto un progetto per domotizzare le letture a partire da un contatore predisposto.

Ma quanto all’acqua?

Il presente progetto è volto a descrivere una possibile tecnica utile a integrare facilmente, su Home Assistant, le letture dei consumi di acqua, sia in termini di litri al minuto istantanei che di m³ cumulati, unità utile per appunto sfruttare le funzionalità di contabilizzazione del pannello energia di Home Assistant.

N.b. Il progetto indirizza la questione: starà poi all’utente pensare di applicarlo per misurare i consumi di tutto l’impianto, di singole utenze (bagni? irrigazione di giardini? altro?) o… entrambe le cose. Inoltre, introdurre un sensore a monte dell’impianto, inoltre, può essere utile come vedremo per identificare eventuali perdite.

Si parte

Assunti

NodeMCU ESP32
un NodeMCU ESP32.

Si assume, per la realizzazione del presente progetto, di possedere un NodeMCU basato su ESP32 (si consiglia di valutare anche questo modello, particolarmente prestante dal punto di visto ricezione Bluetooth, un domani lo si volesse usare – anche – come BRIDGE/Gateway Bluetooth) e di avere a disposizione la suite di tool relativa al firmware ESPHome (installata in una delle modalità previste su un host di appoggio). Il progetto è comunque attuabile anche con altre board analoghe a NodeMCU.

Si assume inoltre di avere a disposizione un cavo USB/Micro-USB per collegare il NodeMCU da riprogrammare al computer ospitante i tool ESPHome, come spiegato in dettaglio dopo (a meno che il NodeMCU non ospiti già ESPHome a bordo – in tal caso non serve, in quanto la riprogrammazione avverrà in modalità OTA via Wi-Fi).

Infine, si dà ovviamente per scontato di avere già a disposizione una propria istanza di Home Assistant in una qualsiasi delle modalità operative.

Spiegazione del progetto, per punti

Il progetto sostanzialmente prevede, in ordine, di:

  1. scegliere il dispositivo per la misurazione (noi proporremo l’uso di un misuratore a turbina, ma si potranno anche liberamente utilizzare delle eventuali alternative);
  2. configurare il firmware ESPHome e installarlo su NodeMCU;
  3. assemblare temporaneamente il NodeMCU con il dispositivo di lettura;
  4. misurare e calibrare le letture del dispositivo;
  5. provvede all’installazione del dispositivo di misurazione sull’impianto;
  6. integrare il tutto con Home Assistant;
  7. aggiungere le letture al pannello energia e definire, volendo, un’automazione per gestire eventuali rilevazioni di perdite.

I passi verranno descritti sequenzialmente e nel dettaglio, quindi si consiglia di leggere con attenzione tutta la sequenza.

Scelta del dispositivo di misurazione

A differenza di un flussometro (che per lo più fornisce visivamente la lettura istantanea di una lettura), un flussostato è un oggetto in grado di misurare la quantità di passaggio di un fluido – in questo caso liquido – tramite impulsi. Ne esistono tantissimi modelli e tipologie: noi ipotizzeremo l’installazione di un semplicissimo flussostato a turbina funzionante tramite l’effetto Hall, come il seguente:

Flussostato
il flussostato “tipo” utilizzato in questo progetto.

il quale presenta tre contatti: due (poli + e -, rispettivamente i fili rosso e nero) dedicati all’alimentazione tramite corrente continua a basso voltaggio (dai 3 ai 18 volt, ma il valore può variare in base al modello) e uno il quale fornisce un impulso analogico (filo giallo, nell’esempio) prodotto ogni qual volta la turbina, attraversata dall’acqua, ruota.

La turbina è contenuta all’interno del corpo del flussostato:

Flussometro - Dettaglio turbina
dettaglio della turbina interna.

e, appunto, ruota al passaggio dell’acqua, fornendo in uscita sul polo dedicato gli impulsi di misurazione, i quali corrisponderanno, come vedremo, a un tot di litri/minuto.

N.b. Dato che si ipotizza di misurare i consumi di un impianto, si suppone di installare tale misuratore subito a valle del contatore d’acqua, a monte dell’intero impianto domestico; l’utente sceglierà il flussostato appropriato in base al proprio impianto e alla portata/calibro dei tubi sui quali attestarlo. Si consiglia vivamente di contattare il proprio idraulico di fiducia; il sensore utilizzato in questo progetto è questo, da 1/2 pollice (uno degli standard più diffusi).

Configurare il firmware ESPHome

ESPHome è un firmware “modulare” che consente, appunto, di installare sui dispositivi target (in questo caso un NodeMCU) le componenti software utili agli scopi prefissi e “assemblate” in un unico compilato.

N.b. Se non si conosce questo firmware è necessario dare una veloce lettura alla scheda ad esso dedicata; diversamente non si comprenderanno gli aspetti che verranno spiegati in seguito e, fatalmente, si fallirà.

Nel caso di questo specifico progetto il componente utile allo scopo è ESP32 Pulse Counter, il quale consentirà, nel nostro caso, la gestione degli impulsi provenienti dal flussostato.

Andremo quindi a definire una prima configurazione di questo tipo:

esphome:
  name: esphome-lab
  platform: ESP32
  board: nodemcu-32s
  
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption: 
    key: "metterequidentrounachiavepersonalequalunque" #la chiave per integrare il NodeMCU su Home Assistant

ota:
  password: "miapawword" #la password per gli aggiornamenti OTA

wifi:
  ssid: "PROPRIO_SSID_WIFI" #il nome della propria wi-fi
  password: "PROPRIA_PASSWORD_WIFI" #la password wi-fi

captive_portal:

web_server:
  port: 80
  auth:
    username: admin
    password: "miapassword" #la password per accedere, eventualmente al web server su NodeMCU

sensor:
  - platform: pulse_counter
    state_class: measurement
    name: "Acqua litri/min"
    id: waterlmin
    pin: GPIO13
    update_interval: 60s
    filters:
    - lambda: return (x); 
    unit_of_measurement: "l/min" 

i campi da personalizzare sono tutti quelli in grassetto, ma nello specifico ci interessa la voce pin:, tramite la quale impostazione inchiederemo al nostro NodeMCU a quale pin sia collegato il polo proveniente dal flussostato, il quale fornirà gli impulsi che ci interessano. Nel nostro caso indichiamo GPIO13 (in base ai cablaggi che proporremo a seguire), ma si tratta di una scelta arbitraria, personalizzabile appunto dall’utente.

N.b. La configurazione è adeguata al NodeMCU che abbiamo indicato in testa. Diversamente, anche la prima parte della configurazione (esphome:) andrà a sua volta personalizzata di conseguenza, in base alla board in uso.

Installazione su NodeMCU

A questo punto si è pronti per la compilazione e la successiva installazione sul NodeMCU.
Le tecniche per farlo sono le più disparate – tutto dipende ovviamente da dove si ha installato e in che modalità la suite ESPHome.

CON NODEMCU VERGINE

Se il NodeMCU è vergine, l’unica possibilità di installare il compilato ESPHome è utilizzando cavo USB/Micro-USB a collegare il computer che monta ESPHome e NodeMCU. Collegare i due tramite il cavo e poi premere sul tasto BOOT/FLASH: questo imposterà il NodeMCU in modalità di riprogrammazione.

A questo punto eseguire la compilazione del firmware seguendo una delle guide dedicate al tema in base alla propria modalità d’uso di ESPHome e alla propria installazione.

CON NODEMCU GIÀ DOTATO DI ESPHOME

In caso NodeMCU sia già dotato di firmware ESPHome, la quale precedente compilazione prevedesse il codice:

ota:
  password: "password_ota"

e  avesse lo stesso “name“, allora non sarà necessario il cavo, ma basterà avviare la compilazione del firmware provvedendo all’accensione del NodeMCU il quale, entrando nella stessa rete LAN (tramite Wi-Fi) del computer sul quale viene eseguito ESPHome, verrà aggiornato.

Primo assemblaggio

A differenza di altri progetti in cui per lo più l’assemblaggio della board di controllo e del sensore (o quel che è) viene effettuata verso la fine, in questo caso dobbiamo provvedere da subito perché, come capiremo, l’intero dispositivo assemblato “ci serve subito” allo scopo di effettuare una prima calibrazione del dispositivo di misurazione. Non solo: la calibrazione, de facto, seve a verificare che funzioni tutti, prima di metter mano all’impianto idraulico.

Materiale necessario:

Tramite la basetta e i Dupont, assemblare quanto segue:

Flussostato e NodeMCU ESP32
lo schema di connessione.

Misurare per la calibrare

ATTENZIONE: Il seguente passaggio è particolarmente importante.

Al termine dell’assemblaggio (quindi con il tutto alimentato a 5v tramite alimentatore), collegarsi via browser all’indirizzo IP che NodeMCU avrà assunto collegandosi al proprio Wi-Fi. Sicuramente, nella sezione log apparirà qualcosa di ciclico, per esempio:

[00:00:00][D][pulse_counter]: 'Acqua litri/min': Retrieved counter: 0.00000 pulses/min
[00:00:00][D][sensor:127]: 'Acqua litri/min': Sending state 0.00000 l/min with 2 decimals of accuracy
[00:00:30][D][pulse_counter]: 'Acqua litri/min': Retrieved counter: 0.00000 pulses/min
[00:00:30][D][sensor:127]: 'Acqua litri/min': Sending state 0.00000 l/min with 2 decimals of accuracy

con nuove letture ogni 30 secondi, perché nella configurazione abbiamo impostato (volutamente) update_interval:30. In pratica, ogni trenta secondi il NodeMCU invia “l’ultima lettura di impulsi rilevati in ingresso” nel periodo di riferimento.

Per verificare preliminarmente che tutto funzioni, è sufficiente soffiare – non troppo forte! – all’interno del flussometro (attenzione all’orientamento: c’è è un bocca di entrata e una d’uscita). Se tutto funziona, nel log di NodeMCU appariranno i primi valori letti dal flussometro.

Utilizzeremo questo meccanismo per calibrare il dispositivo di misura. In realtà, più che di “calibrazione” dovremo parlare di “misurazione”, ovvero capire a quanti “impulsi” corrisponda il passaggio di una data quantità di acqua. La calibrazione, infatti, è quella relativa alla sonda lambda definita nel codice ESPHome, alla voce lambda: return (x). Ma ci arriviamo.

Per misurare è quindi necessario, tra una lettura e l’altra, far passare un certo quantitativo d’acqua all’interno del flussometro.
Farlo è facile, magari facendosi aiutare.

Basta dotarsi di un recipiente graduato (o comunque adatto allo scopo) da posizionare sotto il rubinetto: appoggiare in modo saldo il flussometro alla bocca del rubinetto (attenzione all’orientamento), attendere una lettura da parte di NodeMCU (di modo che subito dopo ne parta un’altra), solo a questo punto aprire il rubinetto (non è necessaria troppa pressione, ma conta che l’acqua passi solo attraverso il flussometro) e riempire il recipiente per un litro (il più possibile precisamente), poi chiudere l’acqua.

N.b. Fare attenzione, ovviamente, che non finisca acqua sui contatti del NodeMCU e/o sulle uscite dei tre poli del flussostato, men che meno sul trasformatore. L’elettricità non è un gioco, specie in vicinanza dell’acqua.

Flussometro su rubinetto

Terminato ciò (sicuramente il tutto averrà entro 30 secondi), attendere la lettura nel log di NodeMCU.
Quando arriverà, alla voce:

'Acqua litri/min': Sending state X.XXXXX l/min with 2 decimals of accuracy

X.XXXXX sarà il valore che stiamo cercando e che ci serve. Signfica che il passaggio di un litro d’acqua corrisponde a X “impulsi”.

Ripetere l’operazione qualche volta: il valore dovrebbe essere all’incirca sempre lo stesso. Più accurati si è, più precisa verrà poi la misurazione finale – si consiglia, magari, di effettuare più letture per poi mettere in media il valore.

Nel nostro caso (useremo la misura solo come esempio), il valore di calibrazione per l’esemplare di flussometro che abbiamo usato per la realizzazone del progetto è risultato essere 1816. Ogni dispositivo di misurazione ha il proprio valore di riferimento.

Vetrina - Offerte del giorno

Modifica della configurazione ESPHome

A questo punto siamo pronti a impostare la configurazione definitiva da installare su NodeMCU.
Impostare come segue:

esphome:
  name: esphome-lab
  platform: ESP32
  board: nodemcu-32s
  
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption: 
    key: "metterequidentrounachiavepersonalequalunque" #la chiave per integrare il NodeMCU su Home Assistant

ota:
  password: "miapawword" #la password per gli aggiornamenti OTA

wifi:
  ssid: "PROPRIO_SSID_WIFI" #il nome della propria wi-fi
  password: "PROPRIA_PASSWORD_WIFI" #la password wi-fi

captive_portal:

web_server:
  port: 80
  auth:
    username: admin
    password: "miapassword" #la password per accedere, eventualmente al web server su NodeMCU

sensor:
  - platform: pulse_counter
    state_class: measurement
    name: "Acqua litri/min"
    id: waterlmin
    pin: GPIO13
    update_interval: 5s
    filters:
    - lambda: return (x / VALORE_DI_CALIBRAZIONE); 
    unit_of_measurement: "l/min" 

  - platform: integration
    device_class: water
    state_class: total_increasing
    name: “Acqua m³"
    id: waterm3
    unit_of_measurement: "m³"
    accuracy_decimals: 7
    sensor: waterlmin
    time_unit: min
    icon: "mdi:water"
    filters:
      - lambda: return (x / 1000);

Le porzioni in grassetto sono quelle variate o aggiunte ex-novo.

La voce “lambda: return (x / VALORE_DI_CALIBRAZIONE)” varia, perché si aggiunge il valore di calibrazione appena calcolato quale divisore del valore rilevato in ingresso, proveniente dal flussometro: il valore andrà indicato al posto della stringa VALORE_DI_CALIBRAZIONE.

La nuova porzione in fondo, invece, è realtiva a un nuovo sensore di integrazione che useremo per calcolare, a partire dai litri/minuto ora ricavati, il numero di m³ di acqua consumati – che poi è il nostro obiettivo ultimo.

A questo punto, salvare la configurazione e aggiornarla sul NodeMCU via OTA.

Una volta ripartito, il NodeMCU fornirà sia il numero istantaneo di acqua in transito (misurata ogni cinque secondi) sia il numero crescente di m³ di acqua consumati (ogni minuto, di più non serve).

Montaggio finale

A questo punto non serve altro che montare il flussometro subito a valle del contatore, o comunque all’ingresso dell’impianto idrico domestico (oppure dove si è pianificato di installarlo). Questo ovviamente esula dalle nostre competenze: fare riferimento al proprio idraulico di fiducia per provvedere al montaggio, sicuro, del misuratore.

Nell’attesa, montare con migliore accuratezza il dispositivo finale di misurazione, magari all’interno di una scatola apposita.

Integrazione con Home Assistant

Con NodeMCU acceso e funzionante, provvedere all’integrazione delle sue funzionalità sul proprio HUB personale. Dato che stiamo ragionando su Home Assistant, la guida è la seguente:

Integrare componenti ESPHome a Home Assistant (via API)

Una volta effettuata l’integrazione, al di là dei servizi precedentemente elencati si otterranno entità analoghe alle seguenti:

Home Assistant - ESPHome ESP32 - Contabilizzazione Acqua
rappresentazione grafica delle entità.

vale a dire due entità sensore in grado di fornire le misure che siamo riusciti a ottenere tramite questo progetto.

Uso

La creazione dei due sensori di cui sopra apre a diversi possibili usi.

Pannello energia

Siamo pronti a indicare a Home Assistat che il sensore di consumo in metri cubi venga utilizzato per contabilizzare i consumi d’acqua. Recarsi dunque presso la voce “Impostazioni” > “Plance” > “Energia” di Home Assistant, oppure direttamente usando il link che segue:

Open your Home Assistant instance and show your service developer tools.

dove è possibile indicare la configurazione che ci serve.


Alla voce “Consumo d’acqua“:

Home Assistant - Place - Consumo d'acqua

cliccare su “AGGIUNGI FONTE D’ACQUA“, per selezionare poi il sensore appena creato:

Home Assistant - Place - Consumo d'acqua - Aggiunta sensore

e voilà!
Da qui in poi i consumi d’acqua saranno censiti presso il pannello “Energia” insieme (eventualmente) a quelli di energia elettrica e gas. Volendo, è persino possibile indicare un costo a metro cubo, così da consentire al pannello “Energia” di fornire anche il conto economico in relazione ai consumi.

Un esempio di come funziona e appare il pannello energia è disponibile qui.

Rilevazione perdite

Un aspetto laterale ma sicuramente interessante è la possibilità di utilizzare il sensore di erogazione acqua litri/minuto come elemento utile alla rilevazione di eventuali perdite sull’impianto. Saremo tutti d’accordo, infatti, che in un dato momento di quiete (diciamo, in assenza degli inquilini), il valore di litri/minuto in erogazione debba essere necessariamente 0, in quanto tutti i rubinetti sono chiusi (sì, ci sono dei distinguo: ci arriviamo).

Ipotizziamo quindi di esserci dotati di diversi “Device Tracker” tramite app mobile Home Assistant Companion e che si sia creata un’entità di tipo “Group” la quale rappresenti il nucleo familiare. Ipotizziamo che la famiglia sia rappresentata dalle seguenti entità “Device Tracker”:

  • device_tracker.marco
  • device_tracker.daniela

Creare un gruppo “famiglia” è facile, basta aggiungere in configurazione (oppure via interfaccia grafica, tramite gli “helper”):

group:
  famiglia:
    entities:
      - device_tracker.marco
      - device.tracker.daniela
      - device.tracker.giorgia

il che genererà l’entità “group.famiglia“.

I gruppi di “Device Tracker” posseggono due possibili stati “home” e “not_home“. Lo stato diventa “home” quando anche uno solo dei device tracker è a casa, mentre diventa “not_home” quando tutti sono fuori casa. Altrimenti, lo stato può anche prendere il nome di una zona specifica, se definita in configurazione.

N.b. Maggiori informazioni sul tema “Device Tracker” sono disponibili qui.

Ipotizziamo anche di aver integrato nella domotica una valvola che intercetti, a monte dell’impianto, l’erogazione di acqua, così come illustrato anche in questo FOCUS:

Come domotizzare (e automatizzare) l’erogazione di gas e/o acqua

Immagineremo che tale valvola sia integrata su Home Assistant con un’entità di tipo “Switch” chiamata switch.water: con lo stato ON, l’acqua sarà erogata, con OFF, no.


Bene: possiamo dunque scrivere un’automazione d’esempio che, quando la quantità di litri/minuto è maggiore di 0 e se gli inquilini sono assenti, provveda a chiudere l’acqua e notificare lo stato d’emergenza:

automation:
  - alias: "gestione_perdite"
    initial_state: true
    trigger:
      - platform: numeric_state
        entity_id: sensor.acqua_litri_min
        above: 0
    condition:
      - condition: state
        entity_id: group.family
        state: 'not_home'
    action:
      - service: switch.turn_off
        entity_id: switch.water
      - service: notify.mobile_app_kcs_iphone_12_pro
        data:
          title: Domotica
          message: "Attenzione! Rilevata perdita d'acqua!"

Naturalmente questo è solo un esempio: ci potrebbero infatti essere diversi motivi per cui il sensore di acqua litri/minuto segni un valore maggiore di zero: un irrigatore in esercizio, una lavatrice o una lavastoviglie che stiano operando e così via. Se banalmente avessi integrato lo stato operativo degli elettrodomestici, potrei condizionare la mia automazione in funzione del fatto che essi siano operativi o meno.

Va da sé che non serva altro che personalizzare il blocco condition (ma anche gli altri, liberamente) per personalizzare al meglio questo tipo di rilevazione, le azioni da intraprendere e le leve logiche per evitare falsi positivi.

Come sempre, il limite è la fantasia.


Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Se ti sei perso, a tua disposizione c'è la mappa.