Home assistant, grafana, influxdb - integracja z elektronicznymi wodomierzami w celu automatycznego odczytu

Home assistant, grafana, influxdb - integracja z elektronicznymi wodomierzami w celu automatycznego odczytu

hejto.pl
Cześć, jak powiedziałem tak zrobię i urozmaicę trochę hejto, zwłaszcza iż jeden z moich wpisów na temat homeassistant spadł z rowerka na wykopie dziwnym trafem, w takim razie przekopiuje tutaj mój poradnik odnośnie łapania danych z wodomierzy.
UWAGA!
Wszelkie podane poniżej wskazówki zostały napisane tylko i wyłącznie w celach edukacyjnych, ja to robiłem na swoim prywatnym wodomierzu z nakładką apator, z ustawionym fabrycznie hasłem. Przypominam wszystkim chętnym że zgodnie z kodeksem karnym:
Art. 267. §1. Kto bez uprawnienia uzyskuje dostęp do informacji dla niego nieprzeznaczonej, otwierając zamknięte
pismo, podłączając się do sieci telekomunikacyjnej lub przełamując albo omijając elektroniczne, magnetyczne, informatyczne lub inne szczególne jej zabezpieczenie, podlega grzywnie, karze ograniczenia wolności albo pozbawienia wolności do lat 2.
Inna sprawa czy np. złapanie transmisji z danymi ze swojego wodomierza, "zabezpieczonych" ogólnodostępnym, niezmienionym fabrycznym kluczem podchodzi pod ten paragraf, to sprawa dla prawników, ja nim nie jestem, dlatego oczywiście zamówiłem sobie taki wodomierz w sklepie z wodomierzami i testowałem na nim właśnie( ͡° ͜ʖ ͡°)
HARDWARE:
-Raspberry PI 4, około 300zł - na OrangePi Lite np. średnio działa home assistant, domoticz jakoś ledwo dawał radę.
LUB:
-Terminal, około 200-250zł, tutaj sprawa dowolna co kupicie, wedle waszego uznania, ja mam Fujitsu Futuro S620 4 rdzeniowy i jestem zadowolony
-Dongiel RTL2832u, około 100zł - popularny "pendrive" do odtwarzania telewizji, przydaje się do różnych rzeczy, można nim łapać np. transmisje z ISS, zdjęcia satelitarne od NASA, transmisje samolotowe(flightradar w twoim domu).
I to w sumie tyle.
SOFTWARE
Robicie wszystko zgodnie z instrukcjami dostępnymi na stronie home assistanta, nie będe się tu rozwodził
-System pod Serwer, Home Assistant w dockerze - problemy są z aktualizacjami, ja będę doinstalowywał Watchtower do dockera aby sprawdzał czy nie ma aktualizacji, a gdy jest to aktualizował i resetował supervisora, inaczej przy nowej wersji wyjawi się monit o niezdrowym systemie i nie zainstalujecie dodatków. Ja mam Ubuntu Server i w dockerze zainstalowanego Home Assistanta Supervised.
UWAGA, od czasu pisania tamtego poradnika(2021r jakoś), zmieniłem pod koniec 2022r. ułożenie terminala - teraz mam proxmoxa a w nim VM home assistanta - wszystko hula pięknie, w dodatku ustawiłem cloudflareda i mam podpiętego HA pod zewnętrzną domene.
LUB:
-Home Assistant OS - nie wiem czy tu robić poradnik, jak zrobicie zgodnie ze strona to będzie działać. Z tego co wiem najlepiej jest zainstalować od podstaw link na x86 , w przypadku malinki tu macie link na raspberrypi
Jak już zainstalowaliście, macie home assistant to wchodzicie w ustawienia -> dodatki i ściągacie:
- Studio Code Server - do edycji plików tekstowych
- Wmbusmeters (W-MBus to MQTT) - odczytuje protokół WMbus i przekazuje dane dalej do MQTT
- Mosquitto broker - klient protokołu MQTT, przeznaczonego do komunikacji pomiędzy urządzeniami smarthome
- InfluxDB - baza danych, opcjonalnie można zainstalować MariaDB, nie wnikałem ale podobno podmienia podstawową bazę danych Home Assistant
- Grafana - wykresy robią brrrr
Konfiguracja
1. Wchodzicie w Wmbusmeters -> Konfiguracja
Powinniście mieć jak na obrazku poniżej , w polu conf* wklejacie to:

loglevel=normaldevice=auto:c1,t1logtelegrams=trueformat=jsonlogfile=/config/wmbusmeters/wmbusmeters.logmeterfiles=/config/wmbusmeters/logs/meterreadings/meterfilesaction=overwriteshell=/wmbusmeters/mosquittopub.sh wmbusmeters/$METERNAME "$METERJSON"<br /> ```<br /> W razie problemów czy pytań o poszczególne pola konfiguracji github zawsze pomocny, można też przez SSH sobie ściągnąć wmbusmeters i testować czy cokolwiek wam dongiel łapie, instrukcje macie na github: [https://github.com/weetmuts/wmbusmeters](https://github.com/weetmuts/wmbusmeters)<br /> poniżej macie pole meters, tam wpisujecie po szablonie, zreszta wszystko jest podane na tacy w dodatku, protip w przypadku apatora trzeba dac "0" przed nr nakladki czasem<br /> ```<br /> name=twojanazwa driver=auto id=numernakladki key=kluczszyfrujacy<br /> ```<br /> Otiweracie MQTT-> Konfiguracja<br /> W polach Logins takie samo jak ustawiliscie w wmbusmeters, np.:<br /> username: xyz<br /> password:123456<br /> Otwieracie Studio Code Server, jak wszystko zrobiliscie dobrze to powinien wam sie pokazac folder "wmbusmeters", mozecie sobie kliknac i popatrzec po logach czy dongiel zbiera jakiekolwiek telegramy, a moze nie spieprzyliscie i wasz prywatny czujnik juz sobie smiga i sle dane jak szalony.<br /> Po sprawdzeniu przechodzicie do pliku configuration.yaml tam wklejacie dla czujnika:<br /> NAZWA\_WODOMIERZA = Nazwa czujnika jaka dales w wmbusmeters konfiguracja\_<br /> ```<br /> \- platform: mqtt<br /> statetopic: "wmbusmeters/NAZWAWODOMIERZA"<br /> jsonattributestopic: "wmbusmeters/NAZWAWODOMIERZA"<br /> unitofmeasurement: "m3"<br /> valuetemplate: "{{ valuejson.totalm3 | round(3) }}"<br /> name: przyjaznanazwajabedzieszwidzial<br /> icon: "mdi:gauge"<br /> ```<br /> _Mozecie tez poprobowac i unit\_of\_measurement: "m3" - zmienic na litry_<br /> \_value\_template: "{{ value\_json.total\_m3 | round(3) }}" - a tu zmienic o tak: value\_template: "{{ value\_json.total\_m3 | float \* 1000 | round(2) }}" i bedziecie mieli w litrach<br /> z protipów jest jeszcze [Utility Meter](https://www.home-assistant.io/integrations/utility_meter/) ale mi sie srednio udało z nim podziałać, można tam niby cykle miesieczne ustawiac zeby pokazywało itp. Ja sobie to postanowiłem zrobić za pomocą bazy danych<br /> Konfiguracja bazy danych:<br /> Jeszcze w tym configuration.yaml dajecie:<br /> ```<br /> influxdb:<br /> database: homeassistant<br /> username: homeassistant<br /> password: wylosujsehaslo<br /> max\_retries: 3<br /> default\\measurement: state<br /> ```<br /> i bedzie wam zapisywalo do bazy danych "homeassistant" dla uzytkownika "homeassistant" z haslem "wylosujsehaslo"<br /> ![](https://cdn.hejto.pl/uploads/posts/images/1200x900/60e06d31dc932dd6a1f2a94da76972c1.png)<br /> 1.O twieracie influxdb->2. influxdb admin(korona) macie taki niebieski przycisk "create datanbase" - tworzycie baze danych homeassistant<br /> 3\. Przechodzicie w zakladke Users i klikacie przycisk 4. create user, tam dajecie te nazwe uzytkownika np. homeassistant i haslo co se wylosowaliscie z tego configuration.yaml influxdb:<br /> Grafana:<br /> Wchodzicie w grafane, klikacie po lewej stronie na zebatke, tam add data source, wybieracie influxdb, musicie uzupelnic url z adresemip:8086 waszego serwerka, na samym dole wpisac pola uzytkownikow, baze danych jak ustawialiscie w influxdb, HTTP Metod zmieniacie na GET, zapisujecie i to wszystko<br /> Resetujecie teraz home assistant os(ustawienia->sprzet->uruchom ponownie), jak sie uruchomi to mozecie sobie w grafanie dodawac wykresiki.<br /> Protip: jak chcecie przelozyc wykres z grafany na pulpit homeassistant(strona web po prostu)to w embed to dodajcie &kiosk=1&refresh=10s na przykład i szukajcie tam from= to=, pozmieniajcie to wedle uznania zgodnie z [ta strona](https://grafana.com/docs/grafana/latest/dashboards/time-range-controls/) inaczej wasz wykres stanie w miejscu xd

Komentarze (7)

malix

@hejto z jakiegoś powodu mi nie chce zrobić kodu z m.in. tej części: - platform: mqtt

statetopic: "wmbusmeters/NAZWAWODOMIERZA"

jsonattributestopic: "wmbusmeters/NAZWAWODOMIERZA"

unitofmeasurement: "m3"

valuetemplate: "{{ valuejson.totalm3 | round(3) }}"

name: przyjaznanazwajabedzieszwidzial

icon: "mdi:gauge"

malix

a w edytorze wszystko git

7de88142-9565-4868-8b04-7b7815fb3f24
Diablo

@malix tak na szybko


  • domyślnie wodomierze (a przynajmniej moje apator-08) nadają w godzinach dziennych (około 8-18) więc należy wziąć na to poprawkę konfigurując wieczorem i dziwiąc się dlaczego nie działa

  • numer nakładki jest zazwyczaj na nakładce w formie 6-cyfrowej liczby dziesiętnej. Aby go użyć w wmbus trzeba go skonwertować do apisu szesnastkowego - np. https://www.rapidtables.com/convert/number/decimal-to-hex.html

  • dane są wysyłane co jakiś czas (u mnie około 5 minut), więc uzbroić się w cierpliwość

  • wysyłany jest tylko stan licznika, i może się lekko wachać (nie wiem z czego to wynika, po prostu przy zakręconej wodzie potrafi w kolejnych następujących po sobie wynikach o kilka tysięcznych to w jedną, to w drugą stronę)


  • bardzo podobnie można odcztywać liczniki taurona - w strefie klienta można aktywować wm-bus i dostaje się numer oraz klucz deszyfrujący. Dane są wysyłane co minutę, całą dobę i zawierają stan licznika oraz aktualny pobór prądu. Bardzo wygodne
23145196-074a-4f1d-9456-fd512c56aeda
mcy

@Diablo @malix to ja trochę rozruszam temat. Mając taki wodomierz https://bmeters.pl/pl/gsd8/599/ można do niego zakupić jakaś nakładke, np apator-08 i to ruszy?

Z HA już korzystam ponad rok, właśnie knuje jak tu najlepiej zrobić zdalny odczyt wodomierza jak i licznika na prąd.

Niestety też jest lekki problem z odległością. RPi z HomeAssistantem mam na strychu, wodomierz jest w korytarzu dwie kondygnacje niżej (poziom 0), a licznik energii na zewnątrz.

Jakaś idea?

malix

@Diablo "nadają w godzinach dziennych (około 8-18) więc należy wziąć na to poprawkę konfigurując wieczorem i dziwiąc się dlaczego nie działa" Tak tak, ale to zależy od wodomierza, moje działają całą dobę ale właśnie po 18 mocno spada częstotliwość wysyłki ramek. "wysyłany jest tylko stan licznika, i może się lekko wachać" - u siebie nie zauważyłem tego problemu, ale zapewne co licznik to może być inaczej

malix

@mcy Ciężko stwierdzić, najlepiej byłoby dać nakładkę od producenta wodomierza. Np. Apator 16 mierzy transoptorem, a inny już model indukcją, dlatego mogą być różnice w kompatybilności. Co do komunikacji zawsze można by po prostu najbliżej tych dwóch liczników postawić kolejną malinkę/orangepi tylko łapiącą dane i przesyłającą wyżej.

mcy

@malix poszukam czegoś. Stawianie kolejnego serwera (rpi/orangepi) tylko dla potrzeby odczytu danych z dwóch czujników to overkill totalny. To już prędzej powinno coś się udać z esp32 wyczarować.

Zaloguj się aby komentować