logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

@GUTEK@ 10 Cze 2025 20:48 2274 8

TL;DR

  • Przerobione inteligentne gniazdko z ESP8266 i CC1101 jednocześnie mierzy energię oraz odbiera telegramy z radiowego wodomierza Diehl IZAR 868MHz.
  • Najpierw sprawdzono odbiór przez tuner DVB-T2 z rtl_sdr, potem przeniesiono go na moduł CC1101 w ESPHome i połączono z Home Assistant.
  • W projekcie wykorzystano ESP-12F, Wemos D1 Mini i repozytorium SzczepanLeon v3.0, a problem z odbiorem rozwiązano przez zamianę pinów GDO0 z GDO2.
  • Całość działa od około 3 tygodni, integruje się z Home Assistant i pokazuje encje energii oraz wodomierza, ale słaby sygnał gubi część telegramów.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku
    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/
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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.

    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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.
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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.
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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.
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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.
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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 led

    Obie dodatkowe płytki przykleiłem do obudowy taśmą dwustronną i całość prezentuje się tak (docelowo antenka jest wlutowana jednak na wprost):
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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:
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    Sama strona którą udostępnia ESPHome wygląda natomiast tak:
    Przekombinowane gniazdko, czyli odbiornik wodomierza w inteligentnym gniazdku

    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
    O autorze
    @GUTEK@
    Poziom 31  
    Offline 
    Specjalizuje się w: komputery
    @GUTEK@ napisał 1560 postów o ocenie 367, pomógł 163 razy. Mieszka w mieście Gliwice. Jest z nami od 2005 roku.
  • REKLAMA
  • #2 21575578
    TechEkspert
    Redaktor
    Posty: 7048
    Pomógł: 16
    Ocena: 5458
    Bardzo ciekawe, możliwość obserwacji zużycia to szansa na wprowadzenie oszczędności, gdy widać że zmiana nawyków generuje mniejsze zużycie.
    Z jednej strony to źle, że komunikaty nie są szyfrowane, z drugiej gdyby były szyfrowane to nie możliwe byłoby pobieranie danych.
    Jak wyglądał etap między odebraniem transmisji przez odbiornik DVB-T a wklejeniem danych na stronę z dekoderem?
  • REKLAMA
  • #3 21575604
    @GUTEK@
    Poziom 31  
    Posty: 1560
    Pomógł: 163
    Ocena: 367
    Niekoniecznie nie byłoby możliwości, przykładowo Tauron szyfruje komunikację wMBus jednak poprzez ich serwis e-licznik można uzyskać klucz. Mają to opisane na stronie: https://www.tauron-dystrybucja.pl/liczniki-zdalnego-odczytu/usluga-han
    Tylko jak pisałem, trzeba licznik z obsługą wMBus, nie każdy ze zdalnym odczytem to ma. Mój ma z kolei port RS485... ale pod plombą, więc się do niego nie podłączę.

    Rozumiem, że w pytaniu chodzi o sposób odbioru przez tuner telegramów?
    No więc trzeba mieć tuner zgodny z RTL-SDR, ja kupiłem kiedyś tuner DVB-T2 na chipie Realteka, nawet nie wiedząc że jest on zgodny. Jeśli więc ktoś chciałby taki odbiornik, to lepiej poszukać tunera na odpowiednik chipie, niż dedykowanego odbiornika SDR, bo te są znacznie droższe.
    Następnie trzeba zainstalować oprogramowanie rtl-sdr i rtl-wmbus. Ja użyłem do tego celu Linuxa, jednak jest to do zrobienia również pod Windowsem. Tutaj więcej o tym: https://github.com/xaelsouth/rtl-wmbus
    Następnie odpalamy w terminalu odpowiednią komendę, również na stronie wyżej i tuner powinien zacząć odbierać telegramy. Te potem można jeszcze przekierować do wmbusmeters w celu automatycznego dekodowania potrzebnych wartości, ale ja już tego nie robiłem.

    Tutaj można zobaczyć jak taki telegram wygląda: https://github.com/zibous/ha-watermeter/blob/master/docs/build-rtl-wmbus.md
    "T1;0;0;2021-06-02 08:13:00.000;83;102;FF410778;0x1944a511780741ff4418a2011800133e230256aedd5ffc73ffff<0A>"
    Składa się on z rodzaju, daty, sygnału licznika, nr seryjnego licznika i właściwej informacji którą właśnie trzeba zdekodować.
    I zdekodowany:
    telegram=|1944A511780741FF4418A2_011800133E230256AEDD5FFC73FFFF|
    
    Auto driver    : izar
    Similar driver : unknown 00/00
    Using driver   : izar 00/00
    000   : 19 length (25 bytes)
    001   : 44 dll-c (from meter SND_NR)
    002   : a511 dll-mfct (DME)
    004   : 41ff4418 dll-id (1844ff41)
    008   : 78 dll-version
    009   : 07 dll-type (Water meter)
    010   : a2 tpl-ci-field (Mfct specific)
    011 C?: 011800133E230256AEDD5FFC73FFFF mfct specific
    
    {
        "_":"telegram",
        "media":"water",
        "meter":"izar",
        "name":"",
        "id":"1844ff41",
        "last_month_total_m3":784304.845,
        "remaining_battery_life_y":12,
        "total_m3":467708.35,
        "transmit_period_s":8,
        "current_alarms":"no_alarm",
        "last_month_measure_date":"2064-05-30",
        "previous_alarms":"no_alarm",
        "timestamp":"2025-06-10T19:39:15Z"
    }


    Można też zamiast rtl-sdr użyć modułu CC1101 i ustawić go, aby odbierał wszystkie sygnały. Tu przykładowy kod: https://github.com/zibous/ha-watermeter/blob/master/esphome/wm-check-wmbus.yaml
  • #4 21575612
    TechEkspert
    Redaktor
    Posty: 7048
    Pomógł: 16
    Ocena: 5458
    Dzięki. To zadziwiające ile w pasmach ISM przenoszonych jest informacji.
    Ja tak sobie od sąsiada informacje o temperaturze na zewnątrz kiedyś pobierałem: TX205D-TH.
  • REKLAMA
  • #5 21575674
    krzbor
    Poziom 29  
    Posty: 1731
    Pomógł: 40
    Ocena: 1044
    Cztery lata temu opisałem odczyt liczników wody z użyciem Rpi Link. Może komuś się przyda.
  • REKLAMA
  • #7 21588976
    @GUTEK@
    Poziom 31  
    Posty: 1560
    Pomógł: 163
    Ocena: 367
    W podlinkowanym temacie nie widzę ani słowa o użyciu Raspberry Pi do odbioru telegramów licznika, a jedynie o wąchaniu przez HTTP właśnie takiego rozwiązania na ESPHome jak sam zrobiłem.

    To ja osobiście już bym wolał dodać do tego komponent MQTT i wysyłać do Raspberry Pi dane po tym protokole.
  • #8 21621638
    DLUGI321
    Poziom 10  
    Posty: 17
    Ocena: 3
    Witam,
    Mam takie pytanie. Pisze Pan, że numer seryjny, który nadaje wodomierz, u Pana nie zgadza się z tym, co jest na naklejce. Mam chyba podobny problem. Co prawda mam wodomierz firmy TECHEM, który jest obsługiwany przez odbiornik, widzi on inne wodomierze tej firmy, jednak nie mój. Podejrzewam, że może być taki sam problem, o którym Pan pisze. Czy dałoby radę opisać, w jaki sposób udało się ustalić prawidłowy numer wodomierza? Bo walczę już z tym od dłuższego czasu i nie mogę odczytać żadnego ze swoich wodomierzy, a z sąsiada wodomierzem nie ma najmniejszego problemu.
  • #9 21621710
    @GUTEK@
    Poziom 31  
    Posty: 1560
    Pomógł: 163
    Ocena: 367
    Tak jak pisałem, ja znalazłem swój licznik używając tunera DVB-T2 na Realteku.
    Można też użyć CC1101 tylko zmieniając w kodzie programu konfigurację, aby odbierał każdy licznik:
    wmbus:
    # log_unknown (Optional): Show telegrams from not configured meters in log. Defaults to False
    log_unknown: True
    Tak jak w tym przykładzie: https://github.com/zibous/ha-watermeter/blob/master/esphome/wm-d1mini-test.yaml
    I jak dobrze pamiętam to w temacie kolegi @krzbor, który podał wyżej było opisane jak przeliczać nr seryjny na to co jest nadawane w wmbus.
📢 Słuchaj (AI):

Podsumowanie tematu

✨ Temat dotyczy integracji zdalnego odczytu liczników energii i wody z systemem Home Assistant. Nowy licznik energii zdalnie odczytywany przez Tauron nie obsługuje wMBus, co ogranicza oficjalne możliwości integracji do serwisu e-licznik, który działa niestabilnie. Wodociągi gliwickie stosują wodomierze Diehl z nakładką radiową IZAR na częstotliwości 868 MHz. Odbiór sygnału z wodomierza można zrealizować za pomocą taniego tunera DVB-T2 na chipie Realtek, kompatybilnego z RTL-SDR, oraz oprogramowania rtl-sdr i rtl-wmbus, działającego na Linuxie lub Windows. Alternatywnie można użyć modułu CC1101 z odpowiednią konfiguracją. W dyskusji poruszono kwestie braku szyfrowania transmisji, co ułatwia odbiór danych, oraz problem z rozbieżnością numerów seryjnych wodomierzy w odbiorze. Proponowane rozwiązania obejmują wykorzystanie ESPHome z MQTT do przesyłania danych do Raspberry Pi. Wątek zawiera linki do projektów i przykładów konfiguracji odbioru telegramów wMBus oraz doświadczenia użytkowników z różnymi modelami wodomierzy i liczników.
Wygenerowane przez model językowy.
REKLAMA