Kuidas sain maja veearvesti näidud Home Assistanti
Kamstrup Multical 21 veearvesti näidud ja arvesti enda lekkehäire Home Assistanti ilma veefirma portaalita. Vaja on ESP32 plaati ja odavat 868 MHz raadiomoodulit.
20. oktoober 2026 · 6 min lugemist · Kõik postitused

Mu maja veearvesti on Kamstrup Multical 21. Selle saab nutikaks teha ilma veefirma portaalita, sest arvesti saadab oma näite niikuinii iga 16 sekundi järel raadio teel (wM-Bus, 868 MHz). Signaal on krüpteeritud, aga kui sul on arvesti võti, saad selle ise lahti lugeda.
Selleks piisab ESP32 plaadist, odavast raadiomoodulist ja olemasolevast avatud lähtekoodiga projektist. Nüüd näen Home Assistantis veekulu, vee temperatuuri ja arvesti enda häireid, näiteks leket.
Mida vaja on
- ESP32 arendusplaat. Mul on tavaline ESP32 DevKit. Sobib ka ESP8266 (näiteks D1 mini).
- CC1101 raadiomoodul 868 MHz sagedusele. Vaata ostes, et see oleks just 868 MHz versioon. 433 MHz moodulid näevad samasugused välja, aga nendega see ei tööta.
- Mõned juhtmed.
- Arvesti seerianumber. 8-kohaline number, mis on kirjas arvesti ekraani kohal.
- Arvesti AES-võti. Küsi seda oma vee-ettevõttelt. Võti on 16 baiti ehk 32 heksadetsimaalmärki. Mõni ettevõte saadab selle KEM-failina, mille võib lahti pakkida kem-decryptor.py skriptiga.
- Home Assistant koos Mosquitto MQTT brokeriga.
Ühendamine
CC1101 käib ESP32 külge SPI kaudu:
CC1101 toide peab tulema 3,3 V pealt, mitte 5 V pealt.
Kood
Aluseks on chester4444 projekt esp-multical21. See võtab CC1101-ga vastu Multical 21 raadiokaadrid, kontrollib nende CRC-d, dekrüpteerib need AES-128-CTR-iga ja saadab näidud MQTT kaudu edasi.
Oma muudetud versiooni ma üles ei pannud, sest see on tehtud minu plaadi ja võrgu järgi. Minu jaoks töötas kõige paremini nii, et kloonisin repo, avasin selle VS Code’is PlatformIO-ga ja lasin AI-assistendil seda oma seadistusele sobivaks kohandada. Kui sinu plaat või moodul on teine, kohandab ta koodi just selle järgi.
Selle juhisega võid alustada:
Mul on <plaadi mudel, nt ESP32 DevKit> ja CC1101 868 MHz moodul ning
Kamstrup Multical 21 veearvesti. Kloonisin repo
https://github.com/chester4444/esp-multical21 ja kasutan PlatformIO-d.
Aita see tööle saada:
- paranda platformio.ini nii, et Crypto teek tuleb PlatformIO registrist
(rweather/Crypto) ja ehitatakse ainult minu plaadi keskkond;
- paranda kompileerimisvead, kui neid on;
- täida include/config.h minu arvesti seerianumbri, AES-võtme, WiFi ja
MQTT andmetega (küsi need minult);
- kui mul on ainult üks arvesti, tee nii, et ülejäänud arvestite kohad
ei sega;
- lisa Home Assistanti MQTT Discovery, et sensorid tekiksid ise
(veekulu device_class water ja state_class total_increasing, et see
sobiks Energy paneelile).
Sammhaaval:
- Klooni repo ja ava see VS Code’is PlatformIO-ga.
- Anna AI-assistendile ülaltoodud juhis. Ta küsib sinult arvesti seerianumbrit, AES-võtit ning WiFi ja MQTT andmeid. MQTT kasutaja tee enne valmis, vaata allpool „Home Assistanti poolel“ samme 1 ja 2.
- Ühenda ESP32 USB-ga ja lae püsivara üles.
- Ava seeriamonitor kiirusega 115200. Kui kõik töötab, on seal rida
CC1101 initialized successfullyja umbes 16 sekundi pärastFrame received for meter 0koostotal: … m³reaga.
Edaspidi saab püsivara uuendada ka üle WiFi, sest kood toetab OTA-d. PlatformIO-s käib see käsuga pio run -t upload --upload-port <ESP IP-aadress>.
Kui PlatformIO pole sulle tuttav, saab sama teha ka Arduino IDE-ga. Arduino IDE eeldab teistsugust kaustastruktuuri: üks kaust, mille nimi on sama mis .ino failil, ja selle kõrval kõik .cpp ja .h failid. Teegid (Crypto ja PubSubClient) paigaldad Library Manageri kaudu. Ütle AI-assistendile, et kasutad Arduino IDE-d, siis teeb ta selle ümberkorralduse ise. Üle WiFi uuendamiseks ilmub ESP Arduino IDE-s võrgupordina Tools → Port alla.
Millega ma kokku jooksin
Neid asju originaalrepo README ei maini.
Projekt ei kompileerunud. platformio.ini viitas Crypto teegile autori enda D-kettal. Lisaks puudus ühes päisefailis #include <functional>, mida ESP32 kompilaator nõuab.
Raadio ei käivitunud, kuigi logi ütles, et käivitus. Seeriamonitoris oli selline jada:
CC1101 version: 0x04
Failed to initialize CC1101 - check wiring
CC1101 initialized successfully
Juhtmetes polnud viga. Kood lubab ainult CC1101 kiibiversiooni 0x14, aga paljudes odavates moodulites on vanem versioon 0x04. See töötab täpselt sama hästi. Kui versiooniks on 0x00 või 0xff, on SPI ühendus tõesti katki. Kui 0x04, lisa see koodis lubatud versioonide hulka.
MQTT ütles not authorised. Home Assistanti Mosquitto app ei luba anonüümset ühendust, ESP vajab MQTT kasutajat (vaata allpool „Home Assistanti poolel“ sammu 2). Mosquitto logist on hästi näha, kes ja millise kasutajaga ühendust proovib.
Seeriamonitoris on read nagu 87 (should be 0x54). Need on mõne teise 868 MHz seadme kaadrid ja neid võib eirata. Sinu arvesti kaadrid on need, kus järgmisena tuleb Frame received for meter 0 ja total: … m³.
Home Assistanti poolel
1. Mosquitto broker. Kui sul seda veel pole, paigalda see: Settings → Apps → Mosquitto broker → Install, siis Start. Home Assistant leiab brokeri ise üles ja pakub lisada MQTT integratsiooni. Kinnita see Settings → Devices & services all.
2. MQTT kasutaja. Mosquitto ei luba ühenduda ilma kasutajata. Mul oli Mosquitto seadetes (Configuration → Logins) kasutaja juba olemas ja kasutasin seda. Kui sul seda pole, loo ESP jaoks eraldi kasutaja: Settings → People → Users → Add user, näiteks veearvesti. Kasutaja nimi ja parool lähevad config.h-sse WiFi andmete kõrvale.
3. Kontrolli, kas andmed jõuavad kohale. Mine Settings → Devices & services → MQTT → Configure → Listen to a topic, kirjuta teemaks watermeter/# ja vajuta Start listening. Minuti jooksul peaksid nägema teemasid nagu watermeter/0/total. Pane need täpselt kirja, sest sõltuvalt config.h seadetest võivad need sinul natuke teistsugused olla.
4. Sensorid. Siin on kaks võimalust.
Kui lasid püsivarale MQTT Discovery lisada, nagu ülaltoodud AI-juhises, ei pea sa midagi tegema. Seade Veearvesti tekib ise: Settings → Devices & services → MQTT → Devices.
Kui Discoveryt pole, kirjuta sensorid käsitsi configuration.yaml-i (näiteks File editori abil). Kui sinu teemad on teised, muuda state_topic ja availability_topic read:
mqtt:
sensor:
- name: "Veekulu"
unique_id: multical21_veekulu
state_topic: "watermeter/0/total"
unit_of_measurement: "m³"
device_class: water
state_class: total_increasing
availability_topic: "watermeter/online"
payload_available: "True"
payload_not_available: "False"
- name: "Seis kuu alguses"
unique_id: multical21_seis_kuu_alguses
state_topic: "watermeter/0/target"
unit_of_measurement: "m³"
device_class: water
state_class: total
- name: "Vee temperatuur"
unique_id: multical21_vee_temperatuur
state_topic: "watermeter/0/flowtemp"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
- name: "Ümbritsev temperatuur"
unique_id: multical21_umbritsev_temperatuur
state_topic: "watermeter/0/ambienttemp"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
- name: "Infokood"
unique_id: multical21_infokood
state_topic: "watermeter/0/infocode"
entity_category: diagnostic
Pärast salvestamist mine Tools → YAML ja vajuta Manually configured MQTT entities. Kui seda valikut pole, taaskäivita Home Assistant.
Mida Home Assistant näeb

Kokku on viis sensorit:
| Sensor | Mis see on |
|---|---|
| Veekulu | Arvesti koguseis m³ |
| Seis kuu alguses | Arvesti seis jooksva kuu 1. kuupäeval |
| Vee temperatuur | Torus oleva vee temperatuur |
| Ümbritsev temperatuur | Temperatuur arvesti ümber |
| Infokood | Arvesti häired: leke, toru purunemine, kuivus, tagasivool, manipuleerimine |
Veekulu saad lisada Energy paneelile (Settings → Dashboards → Energy → Water consumption). Siis näed päeva-, kuu- ja aastakulu graafikuid, nagu elektri puhul.
Infokood on minu meelest kõige kasulikum. Multical 21 tuvastab ise lekke ja toru purunemise ning nüüd näen seda Home Assistantis. Järgmisena teen automatiseeringu, mis saadab telefoni teate, kui infokood ei ole 00.