Měření spotřeby vody
Pokud jste pochopili měření spotřeby elektřiny, tak měření spotřeby vody je principielně to samé. Tudíž by se o tom nemuselo ani nic moc psát. Nicméně během instalace vzniklo několik více či méně záludných problémů a tak se na to pojďme podívat.

První věcí je rozhodnutí kde spotřebu měřit. Vzhledem k tomu že platíte za všechnu vodu spotřebovanou za vodoměrem, tak mi přijde nejpraktičtější měřit vodu přímo na tomto vodoměru. Zeptal jsem se místních vodovodů a kanalizací zda jim nevadí když si na vodoměr přidělám odečítací zařízení a problém s tím neměli. Uvidíme ještě jaká bude realita až to někdo přijde skutečně odečítat.
Odečítací zařízení
Máme vodoměr Sensus 620 a je umístěný před domem v šachtě. Trocha googlení stačila k tomu zjistit, že se tento elektroměr dá osadit odečítacím zařízením (HRI) které posílá impulzy. Kupoval jsem zde: https://www.kapka-vodomery.cz/e-shop/vodomery/domovni-vodomery/sensus-system-hri
Můžete si vybrat počet impulzů, mě přišlo nejlogičtější mít jich co nejvíc, tudíž 1 impulz / L. Toto HRI má opět možnost i rozhraní modbus, já jsem zůstal konzervativně u impulzů. Jelikož se šachta nachází před domem a nebyl poblíž žádný zdroj elektřiny, myslel jsem si, že napájení celého zařízení vyřeším elegantně solárním panelem. I zde pro spojení se serverem používám wifi, jelikož jeden AP je i v suterénu a pokrytí okolo domu (a tudíž i v šachtě) je dobré.

Odečítací zařízení si můžete vyrobit i sami, na internetu se dají najít návody. Jde o to že na vodoměru je takové kovové kolečko, které se otáčí a když se vám podaří snímat jeho otočky, tak máte vyhráno. Při ceně odečítacího zařízení okolo tisícovky jsem si ale tuto práci raději ušetřil.
Propojení s arduinem
Propojení s arduinem je totožné jako u elekroměrů. Akorát jsem použil jiný rezistor (tuším že 10K). Plus HRI má jeden vodič, na který se dá přivést napájení a prodlouží se tak životnost senzoru. Výrobce udává že na zabudovanou baterii i tak vydrží okolo 10 let. S přivedeným napětím na extra vodič by měl fungovat asi ještě déle.

Protože mi odečítání ze začátku zlobilo, tak jsem přidal ještě pár LEDek na signalizaci stavu připojení k serveru apod. U elektroměrů to vůbec nebylo potřeba, tady se to kvůli „debugu“ docela hodilo. I když problém byl nakonec hlavně v napájení a ve špatném zapojení senzoru (byl prvně připojený na přímo a ne s pull up rezistorem jako na schématu).
Můj kód pro odečet vody:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
extern void sendMessage();
#define PULSEPIN D4
#define POWERLED D8
#define WIFILED D7
#define MQTTLED D6
#define OKLED D5
unsigned long pulseDuration;
unsigned int pulseCount;
volatile unsigned long reconnectDelayStart = 0;
// Update these with values suitable for your network.
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const IPAddress mqtt_server(192, 168, 0, 0);
const char* mqtt_user = "ha_mqtt";
const char* mqtt_password = "YOUR_MQTT_PASSWORD";
const String mqtt_client_name = "WemosD1Mini_SensusHRI";
const char* mqtt_topic = "sensors/hri/1";
const char* device_network_name = "WaterMeterHRISensor";
const int measurment_delay = 15; // delay in seconds
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.hostname(device_network_name);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
WiFi.printDiag(Serial);
}
void reconnect() {
if((millis() - reconnectDelayStart) >= 5000 || millis() < (reconnectDelayStart - 1000))
{
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(mqtt_client_name.c_str(), mqtt_user, mqtt_password)) {
Serial.println("connected");
sendMessage();
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
reconnectDelayStart = millis();
}
}
}
void sendMessage()
{
if(!client.connected())
{
return;
}
snprintf (msg, MSG_BUFFER_SIZE, "{\"pulses\": %d}", pulseCount);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish(mqtt_topic, msg);
pulseCount = 0;
lastMsg = millis();
}
ICACHE_RAM_ATTR void countPulse() {
pulseCount++;
}
void setup() {
Serial.begin(9600);
pinMode(POWERLED, OUTPUT);
pinMode(WIFILED, OUTPUT);
pinMode(MQTTLED, OUTPUT);
pinMode(OKLED, OUTPUT);
digitalWrite(POWERLED, HIGH);
digitalWrite(WIFILED, HIGH);
digitalWrite(MQTTLED, HIGH);
digitalWrite(OKLED, LOW);
attachInterrupt(PULSEPIN, countPulse, FALLING);
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
digitalWrite(POWERLED, HIGH);
digitalWrite(WIFILED, WiFi.status() != WL_CONNECTED);
digitalWrite(MQTTLED, !client.connected());
digitalWrite(OKLED, WiFi.status() == WL_CONNECTED && client.connected());
if (!client.connected()) {
reconnect();
}
client.loop();
if (millis() - lastMsg > (1000 * measurment_delay) || millis() < (lastMsg - 1000)) {
sendMessage();
}
}
I kód je velmi podobný tomu u elektroměrů. Pomocí attachInterrupt sledujeme změnu napětí na pinu na který je připojený senzor a počítáme impulzy. Každých 15s pak odesíláme data přes WiFi na MQTT server do zadaného topicu. Přidány jsou zmíněná LED světýlka, která signalizují:
- Napájení (červená)
- Problém s připojením k WiFi (oranžová)
- Problém s připojením k (MQTT) serveru (oranžová)
- Vše OK (zelená)
Zpracování na serveru
I na serveru je zpracování velmi obdobné. Přijatý JSON přechroupe NodeRED, pošle data do InfluxDB a zobrazí je Grafana. Navíc vodoměr je jen jeden, nemá žádné střídající se tarify apod. takže je vše o to jednoduší. Jeden impulz je jeden litr. I s cenou to je jednodušší, máte danou cenu za kubík, žádné paušály za jističe, tarify apod. Takže pak až v Grafaně si násobím naměřené litry 0.05324, což je místní cena za vodné v korunách za jeden litr (stočné neplatíme, máme ČOV).

Spotřebu vody máme po pár měsících měření lehce nadprůměrnou. Průměrná denní spotřeba vody v domácnosti v roce 2019 byla 89 litrů na člověka. Jsme tedy (při 4 členech) cca o 15% nad průměrem. Z ekologického hlediska to není úplně dobrá zpráva, ale prostě se rádi sprchujeme a děti si rády dávají vanu. Dobrou zprávou zase ale je, že víme jak se věci mají a děláme to přinejmenším vědomě. A že máme jistotu, že nám v domě, který jsme nestavěli nedochází nikde k zásadnímu úniku vody. Prostor pro optimalizaci bychom tu však jistě našli. Něco bychom teoreticky mohli do budoucna ušetřit splachováním dešťovou vodou, pokud se dokopeme k realizaci.
Komplikace při realizaci
Jednou z největších komplikací se ukázalo nakonec ono solární napájení. Pořídil jsem myslím naddimenzovaný panel i akumulátor. Vše bylo správně napojeno, baterie se dobíjela atp. Jenže zklamala příroda. Instaloval jsem to v létě uprostřed největších veder, kde slunce bylo snad i ve stínu. To že vysoký dům umístěný na jih od šachty bude krýt výhled na slunce nevypadlo jako problém. A když tak jen pár hodin denně.

S postupujícím podzimem bylo jasné, že to tak snadné nebude. Zaznamenal jsem výpadky. Nejdřív jsem se snažil o úpravy pomocí regulátorů napětí, posouváním panelu po zahradě aby na něj více svítilo slunce a podobně. Jenže pak se ukázalo, že by panel musel být nejspíš na 5m vysokém stožáru čnícím do nebe. V tu chvíli mi přišlo jednodušší vychodit oknem v suterénu 20m dvoulinky a prostě napájení dotáhnout obyčejně ze zásuvky. Posílám tam 5V a žádný pokles napětí jsem na této vzdálenosti nezměřil. Vše od té doby funguje mnohem lépe a panel si schovám na něco co skutečně nebude v dosahu elektřiny. Poučení je, že kabel je kabel a když to jde, tak je lepší ho použít. Dvoulinku jsem teda ještě na většině délky protáhl chráničkou a vložil do štěrku, protože vede přes místo, kde se zajíždí autem.
Vím že další problém nastal při instalaci HRI na vodoměr. Bojoval jsem s tím možná i hodinu nebo dvě. Nakonec to tam větším či menším násilím nějak zapadlo. Ale byl to opruz – na dně šachty a se strachem abych ten vodoměr nezničil.

A posledním drobným zádrhelem byl přístup k arduinu během testování. Software i hardware jsem upravoval několikrát. A bohužel to vždy znamenalo – jít ven, otevřít šachtu, vlézt dovnitř, rozšroubovat krabičku, udělat úpravu / nahrát software, zašroubovat, vylézt, zavřít. Mezitím ještě nejlíp jít spláchnout (aby byl odběr), zkontrolovat server, upravit a tak dokola. V létě to ještě šlo, ale na podzim, když už docela často pršelo a bylo mokro to už byla docela pruda. Takže jsem byl rád, když se vše podařilo dotáhnout do zdárného konce. Nyní vše běží už minimálně dva měsíce bez jakéhokoli výpadku. Kontroloval jsem to proti údajům na vodoměru a žádné pulzy se mi nikde neztrácejí.
Možnosti vylepšení
Arduino měří pulzy i v případě kdy vypadne server nebo wifi a odešle je při prvním možném připojení. Nebo-li, počítá impulzy do té doby než je může odeslat. V případě, že by ale došlo k výpadku proudu, tak by se modul vypnul a nic by nepočítal. V tu chvíli by varianta se solárním panelem byla elegantnější. Do budoucna by tak bylo možné rozšířit modul o záložní baterii na kterou by se přepnulo v případě výpadku proudu. Na druhou stranu se nedá očekávat, že by spotřeba vody během toho co nejde proud byla nějak signifikantní.
Další věcí jsou pak notifikace. Celý systém jsem dělal právě s myšlenkou toho, abych dostal notifikaci když je buď nárazově velký odběr vody (tzn. asi někde něco prasklo nebo děti nechaly puštěnou vodu) a nebo malý ale konstantní odběr (někde něco celou noc ukapávalo). Notifikace nakonec ještě zprovozněné nemám, ale je to velká škoda. Když jsme bydleli v bytě, tak se nám podařilo díky vadnému přívodu bojleru (a především naší chybě, kdy se nám to nechtělo řešit a mysleli jsme si že to jen trochu kape) protéct vodu za cca 20tis Kč. Ve světle toho je pak těch pár litrů za sprchy a vany nad průměrem úplně zanedbatelných. Takže zatím na to jen občas mrknu jestli není problém, ale automatické notifikace by to samozřejmě chtělo a přímo Grafana v sobě nějaký alert systém má.
Závěr
Z hlavního seriálu o měření energií to je vše. Máte-li zájem mohu rozpracovat některé podtéma konkrétněji. Nesmutněte však, časem zde nejspíš přibudou články o dalších bastlících pokusech, které se nejspíš budou věnovat hospodaření s dešťovou vodou. Ale na to si musíte počkat do jara až nebude mrznout.
3 thoughts on “Měření spotřeby vody”
Za me je to slusnej uvod, prave si pohravam s tim, ze bych zacal sledovat (plyn, vodu, el) hlavne z duvodu optimalizace a taky dat pro pripadnou instalaci solarnich panelu. Takze diky za Vas cas a zkusim se do toho vrhnout. Jsem sice programator, takze aplikace nebudou problem, ale s bastlenim sem zkoncil u krystalky, takze bud musim najit kamarada (bratra jako vy nemam) a nebo pocitat s tim ze ne vsechno vyjde napoprve 🙂 Diky moc a uz se tesim, jak se do toho pustim
Mám dobré zkušenosti s Adafruit Feathers, které lze programovat v CircuitPythonu (odnož Pythonu pro mikrokontroléry). Navíc některé z nich umožňují tzv. web workflow, tedy přístup k seriové konzoli (kde lze ladit kód a interagovat s Python REPL) a flash paměti (kde jsou uložené zdrojáky a případná data) přes webový prohlížeč – není nutné nikam chodit, tedy pokud se nastaví pevná IP adresa.
Nové sketche není potřeba nahrávat přes port, s OTA je jde nahrávat i přes WIFI. Co se týče záložního zdroje napájení, Olimex vyrábí šikovné Arduino s integrovanou podporou pro LiPo baterie, které i prodávají, nejlevnější za stovku vydrží tak hodinu možná dvě bez proudu pak se automaticky zase dobije. Jelikož už je to ESP32, je malinko dražší než Wemos D1 Mini.
https://www.olimex.com/Products/IoT/ESP32/ESP32-DevKit-LiPo/open-source-hardware