Komponent do ESPHome umożliwiający odczyt mierników wM-Bus i transmisję wyniku do HA

wmbus jest komponentem do ESPHome umożliwiającym odczyt radiowych wodomierzy wM-Bus oraz bezpośrednią integrację z Home Assistant (wodomierz “widoczny” jako sensor). Obecnie wspierane są wodomierze/gazomierze z nakładkami Bmeters, IZAR 868 R4, AT-WMBUS-16-2, AT-WMBUS-08, AT-WMBUS-G-01, Maddalena RadioEVO, Ultrimis, Hydrocal M3, Techem MK Radio 3. Do uruchomienia wymagany jest moduł CC1101 oraz ESP32 lub ESP8266.

Minimalna konfiguracja:

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    refresh: 12h
    components: [ wmbus ]

wmbus:

sensor:
  - platform: wmbus
    name: "My water from Apator"
    meter_id: 0x24202020
    type: apator162
    key: "00000000000000000000000000000000"
  - platform: wmbus
    name: "My Water from Izar"
    meter_id: 306029916
    type: izar
    accuracy_decimals: 2

Coś nie działa? Podeślij DEBUG logi (jako tekst a nie obrazek) razem z numerem wersji, którą masz.
obraz
Nie odpisuję na wpisy bez tych informacji – nie dorobiłem się jeszcze szklanej kuli :wink: .

Coś działa i jesteś zadowolony? Możesz postawić “kawę”.

2 Likes

Testuje…
Mam NodeMCU V3 podłączone zgodnie ze schematem:

plik konfiguracyjny yaml:

esphome:
  name: apator
  comment: Maszynownia - licznik wody

esp8266:
  board: nodemcuv2

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus ]

# Enable logging
logger: 
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "***************************************************************"

ota:
  password: "*******************************************"

# Serwer with a statistic data and OTA board update
web_server:
  port: 80
  version: 2
  auth:
    username: !secret maszynownia_auth_u
    password: !secret maszynownia_auth_p

# WiFi Local Area Network (HA)
wifi:
  ssid: !secret maszynownia_wifi_ssid
  password: !secret maszynownia_wifi_p

  # Hotspot when can't connect to Local WiFi
  ap:
    ssid: "Apator AP"
    password: !secret maszynownia_ap_p

captive_portal:

# int ApatorID = 0x4829838;

wmbus:
  mosi_pin: GPIO13
  miso_pin: GPIO12
  clk_pin:  GPIO14
  cs_pin:   GPIO2
  gdo0_pin: GPIO5
  gdo2_pin: GPIO4

sensor:
  - platform: wmbus
    name: "Wodomierz"
    meter_id: 0x4829838
    type: apator162

no i porażka :frowning:
SUKCES, wodomierz obudził się o 07:46

logi:

INFO Reading configuration /config/esphome/apator.yaml...
INFO Starting log output from apator.local using esphome API
INFO Successfully connected to apator.local
[01:44:41][I][app:102]: ESPHome version 2022.12.3 compiled on Dec 28 2022, 01:27:32
[01:44:41][C][wifi:504]: WiFi:
[01:44:41][C][wifi:362]:   Local MAC: C4:5B:BE:4A:58:93
[01:44:41][C][wifi:363]:   SSID: [redacted]
[01:44:41][C][wifi:364]:   IP Address: 192.168.**.***
[01:44:41][C][wifi:365]:   BSSID: [redacted]
[01:44:41][C][wifi:367]:   Hostname: 'apator'
[01:44:41][C][wifi:369]:   Signal strength: -46 dB ▂▄▆█
[01:44:41][C][wifi:373]:   Channel: 1
[01:44:41][C][wifi:374]:   Subnet: 255.255.255.0
[01:44:41][C][wifi:375]:   Gateway: 192.168.**.*
[01:44:41][C][wifi:376]:   DNS1: 192.168.**.*
[01:44:41][C][wifi:377]:   DNS2: 192.168.*.*
[01:44:41][C][logger:293]: Logger:
[01:44:41][C][logger:294]:   Level: DEBUG
[01:44:41][C][logger:295]:   Log Baud Rate: 115200
[01:44:42][C][logger:296]:   Hardware UART: UART0
[01:44:42][C][wmbus_sensor:015]: wM-Bus Sensor 'Wodomierz'
[01:44:42][C][wmbus_sensor:015]:   Device Class: 'water'
[01:44:42][C][wmbus_sensor:015]:   State Class: 'total_increasing'
[01:44:42][C][wmbus_sensor:015]:   Unit of Measurement: 'm³'
[01:44:42][C][wmbus_sensor:015]:   Accuracy Decimals: 3
[01:44:42][C][wmbus_sensor:015]:   Icon: 'mdi:water'
[01:44:42][C][wmbus_sensor:016]:   Type: apator162
[01:44:42][C][wmbus_sensor:017]:   ID: 75667512 [0x04829838]
[01:44:42][C][captive_portal:088]: Captive Portal:
[01:44:42][C][web_server:125]: Web Server:
[01:44:42][C][web_server:126]:   Address: apator.local:80
[01:44:42][C][mdns:103]: mDNS:
[01:44:42][C][mdns:104]:   Hostname: apator
[01:44:42][C][ota:093]: Over-The-Air Updates:
[01:44:42][C][ota:094]:   Address: apator.local:8266
[01:44:42][C][ota:097]:   Using Password.
[01:44:42][C][api:138]: API Server:
[01:44:42][C][api:139]:   Address: apator.local:6053
[01:44:42][C][api:141]:   Using noise encryption: YES
[01:44:42][C][wmbus:059]: wM-Bus:
[01:44:42][C][wmbus:060]:   CC1101 SPI bus:
[01:44:42][C][wmbus:061]:     MOSI Pin: GPIO13
[01:44:42][C][wmbus:062]:     MISO Pin: GPIO12
[01:44:42][C][wmbus:063]:     CLK Pin:  GPIO14
[01:44:42][C][wmbus:064]:     CS Pin:   GPIO2
[01:44:42][C][wmbus:065]:     GDO0 Pin: GPIO5
[01:44:42][C][wmbus:066]:     GDO2 Pin: GPIO4
[01:44:42][C][wmbus:067]:   Available drivers:
[01:44:42][C][wmbus:069]:     Name: apator162
[01:44:42][C][wmbus:069]:     Name: izar
[01:44:46][I][ota:113]: Boot seems successful, resetting boot loop counter.

i nic… puściłem trochę wody, żeby wodomierz się ruszył, ale cały czas encja jest jako “nieznana”.
image

Ktoś ma jakieś pomysły, może robię coś nie tak…

update:
jak się zaloguje na NodeMCU, jest to samo:

update2:
wodomierz obudził się o godzinie 7:44
image

1 Like

Mój id nakładki izar zawiera litery przez co wywala błąd bo zmienną jest intiger. Coś źle robię czy założenie było że id to cyfry?

Podaj jako HEX. Czyli przed numerkiem daj 0x
Jak niezałapie to nie definiuj żadnego sensora tylko czekaj w logu tego ESPHome (Info) aż odbierze telegram i wyświetli ID.

Czyli wszystko działa tak jak powinno? Odczyt jest prawidłowy?

TAK :slight_smile: Wodomierz się obudził, a odczyt jest prawidłowy. Będę obserwował jak ze stabilnością przez najbliższe kilka dni.

Logi:

Time	level	Tag	Message
08:48:10	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:48:10	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:48:34	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A220030854133DC99D973E9DAAEC7BC95B2358F4F92B87EC0BC36B64E04282F7E75399F0E3D85EC1C4F18732B99C8910E6B39482B (63)
08:48:34	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:48:34	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:50:47	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A25003085F8880B0E125A393B282E5F0E60C4698757F67B558E6339EB07283140C1FD5D08171DF2CD7176191D40BA7CB626F4E851 (63)
08:50:47	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:50:47	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:51:18	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A260030853F362FA7634BA15F06F706B6F042FA0FD5B1812CA199BA0A6C972B037764C743F30D9BD6480F55523DE756729DBA0393 (63)
08:51:18	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:51:18	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:52:41	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A280030851B0C39260B1953AAF558F141BB6D9520593838B977EEBE150FB1EC3CC88FF0C00287ABE227C77E40C5ECE3A02C19F143 (63)
08:52:41	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:52:41	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:53:19	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A29003085F55FA1D11D8C2D39BA0B3B963FB9D2E4F1D264129DEA33958B8C36F3827E09E2D7456802D951B7B2A6A9377383AE7358 (63)
08:53:19	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:53:19	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:54:09	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A2A003085A5A3B37B08464255FEA4BD2F68280F520F5372F41960608A6D9F7EF4095D31E56C4B4FAAD0C34EAB4C22F5FB4461A1BE (63)
08:54:09	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:54:09	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:55:28	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A2C0030853C8A3F706D747CE63495D7E112788E642C1E65C6CCDD027E4A09BBDF6263DEBE71A2E3464E1D402361B8110CED0A27E8 (63)
08:55:28	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:55:28	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:55:57	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A2D003085D6705C2CF5BDBC8110DD4C72A3F677F00F81722258D612F6FB715E170257DD6D1BED17E467DC0B7B9C784917636B628D (63)
08:55:57	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:55:57	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:57:18	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A2F0030853C21A623D5353A2E46DAE39E3300509734CAFDB3FF5F2049E53A37D4E3D0901575429AB0F15A88D5B5B72B6475F150BA (63)
08:57:18	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:57:18	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:58:12	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A300030851FB2148D85FE47BA877DE0E933D1C4EBA8F9C46B831756CBDD7E3BBF07E2F5D22572DF945B7C0B342AF449E6B8B0A389 (63)
08:58:12	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:58:12	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:58:43	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A3100308558D0410EC6F955A9F4E768CC7249647222C0EB20080976033991FCD62528B79359F4037713B26935E000240A297F24F1 (63)
08:58:43	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:58:43	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:59:14	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A3200308519C5A2818326DECE8A4545DC06AC5B3951871B88350D4447F98A5EAC2745513EDCEBA19291A3EBDC08686586BDBD3505 (63)
08:59:14	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:59:14	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
08:59:59	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A33003085C18C29928C1E99117FC980C7BA164579A0A1D75557BB69901502E21BC0FAF1AA22562A72B3E830C559482D757DED17EF (63)
08:59:59	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
08:59:59	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
09:00:36	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A3400308581F05EF8DB6E046550E35E1E6378B5F70196CE208C2AF4EC9297E15563A4D25BF4293E51E92C4F7E61791157D66854B2 (63)
09:00:36	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
09:00:36	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95200 m³ with 3 decimals of accuracy
09:01:29	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A35003085611BDDDDE46D39F34D011EB2B76E8D58E27CEC1E7536027E2511CC4DAE8F22D05B811DE31BCFF119B19E7AE42AE815D4 (63)
09:01:29	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
09:01:29	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95300 m³ with 3 decimals of accuracy
09:01:57	[I]	[wmbus:035]	
Telegram from ID [0x04829838]: 3E4401063898820405077A360030853AD6D79A46C7BB65453668C36213FE3854C3041CE8A307EAA63AFF197E01682318A241B9E02AC0C346957BAC170AF504 (63)
09:01:57	[D]	[wmbus:042]	
Using driver 'apator162' for ID [0x04829838]
09:01:57	[D]	[sensor:126]	
'Wodomierz': Sending state 5.95300 m³ with 3 decimals of accuracy

@_Szczepan czy do tego repo nie potrzeba już wmbusmerers?

Dokładnie tak. Nie potrzeba go (chyba że masz coś aktualnie niewspieranego). Wgrywasz na ESP i konfigurujesz ile sensorów chcesz. Konfiguracja tak jak zwykłego sensora w ESPHome. Domyślnie tworzy zliczając m3. Nie powinno też być pików dla Apatora.

Jak chcecie wsparcie innych nakładek/wodomierzy to wystarczy dodac jeden plik z odpowiednią logiką mapującą odpowiednie pole w telegramie na interesujące dane.

1 Like

Działa super na Apator-16-2, sprawdziłem do tego tworzy odrazu sensor widoczny w panelu Energia. Trzeba tylko przedefiniować piny CC1101 jeśli ktoś wcześniej używał repozytorium @Mariusz_Woszczyński

No i o to chodziło :slight_smile:
Mam oba, ale ja nie potrafilem ogarnąć kodów żeby działał jednocześnie apator i izar :slight_smile:

Przesiadaj się na mój komponent, będziesz miał oba. A niedługo jeszcze apator8 i unismart.

1 Like

No teraz to już nie mam wyjścia:)
Cały czas mi zależało, żeby odczyty ogarnąć bez wmbusmerers.
Na razie jestem na wyjeździe, rzuce okiem jak wrócę do domu. Powiedz mi jak przesyłasz ID licznika? Bo w przypadku normalnego sensora byl problem z dluzszym ID, dlatego ja przeszedłem na text sensor.

Dobrze że nie zdążyłem apatora sprzedać :joy:
Goooooood jooooob

Po stronie ESPHome parsowane jako hex_int a po stronie C++ uint32_t.

To powinno być ok.
A czy jest opcja nie wpisania ID? W sensie żeby czytał wszystko co jest w zasięgu?
W Apatorze ID jest nadrukowane, ale ID Izara musiałem sam zidentyfikować po swoim zużyciu

@Mariusz_Woszczyński @_Szczepan
Dyskusję o nowym rozwiązaniu, które ma własny dedykowany wątek proponuję właśnie w nim prowadzić. (dlatego przeniosłem Wasze ostatnie posty z “wątku tasiemca”, który omawia różne niezupełnie powiązane rozwiązania…)

@_Szczepan
Jeśli mi pomożesz to i ten drugi wątek można nieco poczyścić aby stał się bardziej jednoznaczny.

Co do kwestii umiejscowienia, wstępnie przenoszę wątek (oba wątki) do Urządzeń ID (póki co nie mamy dedykowanego działu na ESP, ale chyba czas najwyższy o tym pomyśleć).
Dlaczego nie Dodatki? bo Dodatek to jest w HA taka “zarezerwowana” nazwa na kontenery dostępne w standardowym Sklepie (w każdej instalacji HA z Supervisorem).

PS widziałem, że zapowiadałeś obsługę Apatora-08 więc jak tylko przyjdzie sprzęt z ChRL to sobie polutuję odbiornik do testów.

Obecnie każdy trace typu:
[06:30:56][I][wmbus:038]: Telegram from ID [0x00B8DC58]: 1944304C58DCB8008800A26109001329409F32CACC3453B4E9B4 (26)

Jest wyświetlany w momencie odbioru telegramu, niezależnie czy sensor jest zdefiniowany w yaml’u.

Zostawił bym tak jak jest (ten wątek stworzyłem w momencie publikacji komponentu wmbus), wcześniejsze wpisy w sąsiednim wątku dotyczyły mojego pierwszego komponentu wmbusgw.
A dalsze dzielenie/czyszczenie z innych naleciałości to może być droga przez mękę.

1 Like

@szopen, próbowałem przez święta podzielic tamten wątek oddzielnie na Izara, Apatora i repo @_Szczepan. Z grubsza da się to zrobić, ale żeby wszystko bylo zrozumiałe to jest sporo postów do podzielenia, albo nawet trzeba by je zawrzeć w obu tematach. W zwiazku z nowym rozwiązaniem @_Szczepan, rowniez myślę, ze tamten wątek można zostawić w spokoju, bo pewnie tu przeniesie się dyskusja.

Ten fakt niestety determinuje konieczność pozostawienia “jak jest”.
Na przyszłość proponuję tworzyć tyle oddzielnych wątków ile jest potrzebne, bo naprawdę nie wszystko da się elegancko podzielić moderacyjnie…

Komponent wmbus od @_Szczepan w moim przypadku działa idealnie.
Obydwa liczniki są teraz odczytywane prawidłowo. Teraz zostawiam kilka dni na testach i jak nie będzie problemów to przechodzę z wmbusmeters na ESP8266 + CC1101.

1 Like

Cześć.
Prośba o pomoc: mam cały czas problem z bootloopem.
Próbowałem wcześniejszych rozwiązań innych osób, teraz próbuję tą, która mi najbardziej odpowiada czyli ESPhome + CC1101. I cały czas mam problem z bootloopem.

Próbowałem połączyć CC1101 z esp32S2 mini, esp8266 D1 mini, nodeMCU v3 i wszędzie to samo.
Poprawiałem luty na CC1101, sprawdzałem poprawność podłączeń.

Same moduły esp działają mi poprawnie, mam szablon w ESPhome który wgrywam na wszystkie esp. Usuwałem też co się da z mojego szablonu szukając problemu.

Dodając:

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus ]
logger:
  level: DEBUG

jest ok,

ale po dodaniu:

wmbus:
  mosi_pin: GPIO13
  miso_pin: GPIO12
  clk_pin:  GPIO14
  cs_pin:   GPIO2
  gdo0_pin: GPIO5
  gdo2_pin: GPIO4

zaczynają się bootloopy, nawet bez podłączonego CC1101.

[C][api:025]: Setting up Home Assistant API server...

CC1101 version: 0
CC1101 initialized
[I][app:062]: setup() finished successfully!

czasem jest CC1101 version:255 i też bootloop.

Z dziwnych rzeczy: przy cs_pin: GPIO2 czyli D4, cały czas świeci niebieska dioda na esp, zmieniłem na próbe na D8, przestała świecić, ale bootloopy zostają.

A CC1101 masz sprawny? Zachowanie wskazuje albo na niewłaściwe podłączenie CC1101 albo na uszkodzony CC1101.