Witam,
ostatnio Tauron wymienił u mnie licznik energii. Jak się okazało nowy posiada zdalny odczyt. W związku z tym zainteresowałem się tematem integracji odczytu wartości licznika z Home Assistant. Niestety jak się okazało, model który zamontowano u mnie nie posiada obsługi wMBus. Pozostała więc jedynie nieoficjalna integracja obsługująca serwis e-licznik od Taurona... który delikatnie mówiąc działa mocno średnio.
Skoro jednak już mam odczyt energii to pomyślałem też o wodomierzu. Tym bardziej, że wodociągi gliwickie od lat montują wodomierze z nakładkami radiowymi. Aktualnie są to marki Diehl z nakładką IZAR pracującą na częstotliwości 868MHz. Poczytałem jak wygląda odbiór sygnału z takiego wodomierza i okazało się to całkiem proste. Na początek, aby sprawdzić czy licznik cokolwiek nadaje użyłem tunera DVB-T2 na USB, który kupiłem dość dawno gdy zmieniany był standard telewizji naziemnej. Po jego podłączeniu i kawałku wygiętej z drutu anteny uruchomiłem program rtl_sdr, który niemal od razu odebrał komunikaty nadawane przez nakładkę wodomierza... mojego oraz wszystkich sąsiadów. Komunikaty te, zwane telegramami mogą, a w zasadzie to nawet powinny! być szyfrowane kluczem AES. Niestety jak to zwykle bywa, wodociągi tego szyfrowania nie włączyły.
Zatem można taki telegram odczytać bez problemów za pomocą oprogramowania wmbusmeters lub wklejając go na stronie https://wmbusmeters.org/
No dobrze, ale szkoda mi było użyć tunera, którego czasem używam do odbierania danych z licznika. W dodatku z tego co czytałem, ciągły nasłuch przez tuner dość mocno obciąża komputer.
Poszukałem więc innych rozwiązań. Znalazłem moduł CC1101, który też się do tego celu nadaje. Początkowo chciałem go podłączyć pod Raspberry Pi Zero, które żyje sobie u mnie i w sumie to po przejściu na HA nudzi się. Jednak, żadnych gotowych rozwiązań nie znalazłem, a nie za bardzo miałem ochotę i umiejętności, aby kombinować jak to uruchomić.
Za to jest pełno gotowców użycia takiego modułu z oprogramowaniem ESPHome oraz układami z serii ESP. Zarówno popularnego ESP8266 jak i nowszego ESP32. Wprawdzie do tego celu zalecany jest ESP32 z racji większej wydajności, jednak ja posiadałem kilka modułów ESP-12F opartych na tym starszym ESP8266.
Na początek polutowałem razem moduł CC1101 z Wemos D1 Mini, który z racji wbudowanego konwertera TTL i portu USB jest łatwy w programowaniu, a zatem i testowaniu kodu.
Posiłkowałem się przy tym repozytorium SzczepanLeon w wersji 3.0 (nowsze wersje obsługują już tylko ESP32): https://github.com/SzczepanLeon/esphome-components/tree/version_3
Znalazłem nawet inne repozytorium z przykładowym kodem, które korzysta z biblioteki od SzczepanLeon, wystarczyło w nim jednie podać dane mojej sieci WiFi oraz numer seryjny nakładki wodomierza: https://github.com/zibous/ha-watermeter
Tu dodam tylko, że numer seryjny który nadaje wodomierz - w formie szesnastkowej, nijak nie zgadza z tym co jest na jego naklejce. Próbowałem przeliczać wszystko co jest tam nadrukowane i nic się nie zgadzało. Na szczęście poprawny numer znałem z odbiorów na tunerze.
Początkowo moduł nie chciał nic odbierać. Ustawiłem logi w tryb DEBUG, tak aby uzyskać jak najwięcej informacji. Wynikało z nich, że oprogramowanie widzi moduł radiowy i komunikuje się z nim (wyświetlanie w logach wersji modułu). W końcu znalazłem podobny problem na jakimś forum i tam poradzono, aby zamienić w programie konfigurację pinów GDO0 z GDO2. To pomogło, w logach pojawił się odebrany telegram! Pozostało dopieścić pod siebie ten kod i gotowe.
Tylko... do takiego ESP trzeba obudowę, trzeba to zasilić, a po za tym mógłby robić coś więcej niż tylko odbierać telegram z licznika co jakiś czas. Wymyśliłem zatem, aby upakować to wszystko w tzw. inteligentnym gniazdku.
To do dzieła...
Swego czasu kupiłem gniazdka w innej obudowie, większej, niż te popularne z Ali: https://pl.aliexpress.com/item/1005006117762417.html
W środku jest to samo, jedynie przycisk i ledy na kabelkach, zatem miejsca tam sporo.
Pierwszą rzeczą jaką zrobiłem po otwarciu obudowy była wymiana kondensatora po stronie niskiego napięcia 470uF/10V, bo ten który był z racji wymiarów i zwiększonego poboru prądu po moich przeróbkach długo by nie wytrzymał.TUTAJ PRZYKŁAD
Udało mi się tam upchać trochę większy i co ważniejsze polimerowy, wylutowany z jakiejś płyty głównej.
Drugą rzeczą było wylutowanie oryginalnego modułu opartego o układ Beken i zastąpieniem go ESP8266. Wprawdzie są gotowe moduły z ESP-02s, z takim samym układem wyjść. Jednak ich ilość była niewystarczająca. Samo gniazdko wykorzystuje 6 pinów (3x układ BL0937, po jednym przekaźnik, przycisk, led), do tego moduł CC1101 to kolejne 6 pinów. Za mało.
Pozostało więc użycie modułu ESP-12F, który pierwotnie chciałem użyć do budowy tego odbiornika. Na początek zaprogramowałem go podstawową wersją ESPHome, tak aby mieć możliwość aktualizacji poprzez OTA.
Następnie za pomocą kynaru (prawdziwego! z teflonową izolacją!) polutowałem go do płytki gniazdka. Ma on w zasadzie wystarczającą ilość wyjść. Piszę w zasadzie, ponieważ są one dość uciążliwe w użyciu. Wystarczy popatrzeć na notę katalogową, aby przekonać się, że ten pin musi być w stanie niskim podczas startu, tamten wysokim, jeszcze innego nie można użyć bo korzysta z niego wewnętrzna pamięć. Jednak udało mi się tak dobrać kolejność, aby wszystko pasowało.
Pozostało poszukać jakąś konfigurację takiego gniazdka pod ESPHome, na szczęście jest tego pełno: https://devices.esphome.io/type/plug. Po ustawieniu odpowiednich pinów i wgraniu oprogramowania, gniazdko od razu zaczęło działać poprawnie, jedynie była wymagana kalibracja wskazań układu BL0937 od monitoringu napięcia i prądu.
Następnie dolutowałem CC1101 do ESP-12F. Tu już wykorzystałem tą samą kolejność pinów co przy próbach z Wemos D1 Mini. A po doklejeniu jednego kodu do drugiego miałem w programie zarówno obsługę gniazdka, wraz z wskazaniami energii oraz odebrane wartości z wodomierza.
Kolejność użytych pinów zatem jest taka:
GPIO13 - CC1101 mosi_pin
GPIO12 - CC1101 miso_pin
GPIO14 - CC1101 clk_pin
GPIO15 - CC1101 cs_pin
GPIO16 - CC1101 gdo2_pin
GPIO10 - CC1101 gdo0_pin
GPIO05 - BL0937 cf_pin
GPIO03 - BL0937 cf1_pin
GPIO00 - BL0937 sel_pin
GPIO01 - przycisk
GPIO04 - przekaźnik
GPIO02 - status ledObie dodatkowe płytki przykleiłem do obudowy taśmą dwustronną i całość prezentuje się tak (docelowo antenka jest wlutowana jednak na wprost):
ESPHome integruje się bez problemów po własnym protokole z Home Assistant, więc po dodaniu takiego tworu miałem od razu odpowiednie encje:
Sama strona którą udostępnia ESPHome wygląda natomiast tak:
Gniazdko żyje już sobie około 3 tygodnie. Na razie sklejone jest jedynie taśmą. Wygląda, że wszystko działa poprawnie. Jedynie w miedzy czasie robiłem małe poprawki w programie. Puki co jedynym minusem jest słaby sygnał w miejscu jego użycia, przez co nie każdy telegram licznika jest odbierany.
Fajne? Ranking DIY