Komponent wM-Bus do ESPHome (SzczepanLeon) wersja 4.x - wątek ogólny

doczytaj do końca, piszę zawsze na raty, bo nigdy nie wiem kiedy będę miał czas dokończyć…

przepraszam nie widzialem tego po kodzie :smiley: przerobilem na ten Twoj schemat zobaczymy

no i wszystko pięknie działało a przed chwilą ni z gruszki ni z pietruszki:

W przeszłości generowaliśmy statystyki dla ‘ESPHome Piwnica CC1101 wodomierz domowy’ (sensor.esp32_er_cc1101_wodomierz_domowy), ale w związku z tym, że nie ma już klasy stanu nie możemy śledzić długoterminowych statystyk tej encji.

Statystyki nie mogą być generowane, dopóki ta encja nie ma obsługiwanej klasy stanu.

Czy chcesz trwale usunąć długoterminowe statystyki sensor.esp32_er_cc1101_wodomierz_domowy z Twojej bazy danych?
"
co z tym moge zrobić?

doszedłem do tego, przy typie combinacje wszystko jest przenoszone z encji pierwszej, prócz typu stanu bo mo ze być różny, dlatego ustawiłego go ręcznie i jest ok

Pokaż YAML, poczekaj na autora…

@Jabol Nie wiem, u mnie działa.

Proszę o Wasze wsparcie, bo nie wiem co może być nie tak. Niby prosta sprawa - licznik wody Bmeter. Telegram odczytuje, parsuje, ale wywala błąd jak poniżej w logu.

{
“_”:“telegram”,
“media”:“warm water”,
“meter”:“iwmtx5”,
“name”:“”,
“id”:“23391061”,
“total_m3”:40.682,
“meter_datetime”:“2025-05-05 17:18:01”,
“status”:“OK”,
“timestamp”:“2025-05-05T16:16:15Z”
}

# licznik ciepła woda
  - platform: wmbus
    meter_id: 0x23391061 
    type: iwmtx5
    key: "00000000000000000000000000000000"
    sensors:
      - name: "Woda ciepła siła sygnału"
        field: "rssi"
        accuracy_decimals: 0
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
      - name: "Woda ciepła zużycie"
        field: "total"
        accuracy_decimals: 3
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
        icon: "mdi:water"

A bez klucza próbowałeś?

właśnie spróbowałem i zadziałało :slight_smile: dzięki @_Szczepan

1 polubienie

Wszystko w logu było :slight_smile:

niby tak, ale jeszcze nie wiem jak to interpretować :wink: A w jaki sposób odczytać field “meter_datetime” ewentualnie “timestamp”? W sensorze trzeba użyć odpowiedniej device_class/state_class? Bo też kombinuję jak dodać to jako encję.

Cześć, Mam problem z odczytem licznika wody z nakładką flowisplus, Wyglada na to ze kompilacja przechodzi bez problemu, mam informacje o odczycie ramki , ( zajecie) ale nie ma zawartości telegramu. Czy ktoś bardziej doświadczony mógłby zerknąć na konfigurację ?. z góry dziękuję za pomoc.

esphome:
  name: water
  friendly_name: water

esp32:
  board: esp32dev
  framework:
    type: arduino
    
external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus ]

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "vil0jQ/2OuCEPSgPSXKa5ZgIUXhQ3ejZO5dMP36GXR8="

ota:
  - platform: esphome
    password: "c87805c760761ab23e6bf3c086616f2b"

wifi:
  ssid: said
  password: pass
  manual_ip:
    static_ip: 192.168.100.77
    gateway: 192.168.100.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Wather Fallback Hotspot"
    password: "qFNlIdHDjerQ"

captive_portal:

web_server:
  port: 80

time:
  - platform: sntp
    id: my_time

wmbus:
  # mosi_pin: GPIO23
  # miso_pin: GPIO19
  # clk_pin:  GPIO18
  # cs_pin:   GPIO5
  # gdo0_pin: GPIO4
  # gdo2_pin: GPIO2
  
  mosi_pin: GPIO13
  miso_pin: GPIO5
  clk_pin:  GPIO2
  cs_pin:   GPIO14
  gdo0_pin: GPIO15
  gdo2_pin: GPIO16
  all_drivers: true
  log_all: true
  sync_mode: True

  mqtt:
    broker: 10.0.0.88
    username: mqttUser
    password: mqttPass

  clients:
    - name: "wmbusmeters"
      ip_address: "10.0.0.22"
      port: 7227
      
sensor:
# add driver to compile list (will be available for autodetect), don't create sensor
  - platform: wmbus
    type: flowisplus

  - platform: wmbus
    meter_id: 0x00000000
    type: flowisplus      # Zastąp odpowiednim typem, jeśli znany
    key: "00000000000000000000000000000000"  # Jeśli wodomierz jest zaszyfrowany
    sensors:
      - name: "Flowis+ Water Consumption"
        field: "volume"
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
      - name: "Flowis+ RSSI"
        field: "rssi"
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
  - platform: wmbus
    meter_id: 0x01234567
    type: apator162
    key: "00000000000000000000000000000000"
    sensors:
      - name: "my hot water RSSi"
        field: "rssi"
        accuracy_decimals: 0
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
      - name: "my hot water"
        field: "total"
        accuracy_decimals: 3
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
        icon: "mdi:water"

A czytałeś ten YAML?
Przecież to jest żywcem jakiś przykład, a nie faktyczna konfiguracja.

Jeśli nie korzystasz z tych sekcji to je wywal

  mqtt:
    broker: 10.0.0.88
    username: mqttUser
    password: mqttPass

  clients:
    - name: "wmbusmeters"
      ip_address: "10.0.0.22"
      port: 7227

wywal też to (przywrócisz tylko potrzebny fragment jak już będziesz znał ID swojego licznika)
to jest szczególnie ważne bo w logach musisz złapać ID swojego licznika

  - platform: wmbus
    meter_id: 0x00000000
    type: flowisplus      # Zastąp odpowiednim typem, jeśli znany
    key: "00000000000000000000000000000000"  # Jeśli wodomierz jest zaszyfrowany
    sensors:
      - name: "Flowis+ Water Consumption"
        field: "volume"
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
      - name: "Flowis+ RSSI"
        field: "rssi"
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
  - platform: wmbus
    meter_id: 0x01234567
    type: apator162
    key: "00000000000000000000000000000000"
    sensors:
      - name: "my hot water RSSi"
        field: "rssi"
        accuracy_decimals: 0
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
      - name: "my hot water"
        field: "total"
        accuracy_decimals: 3
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
        icon: "mdi:water"

zastanawiam się też czy istotnie potrzebujesz używać statycznego IP (wtedy autodiscovery nie działa, ale to jakby kwestia poboczna, bo to zależy czy wiesz co robisz czy nie, ale chyba nie wiesz i wtedy zazwyczaj optymalniejszy jest adres przydzielany z DHCP)

  manual_ip:
    static_ip: 192.168.100.77
    gateway: 192.168.100.1
    subnet: 255.255.255.0

Dzięki @szopen za pomoc, udało się uzyskać ramkę :slight_smile: ale nawet gdy się umie czytać to trudno ją zinterpretować
[17:59:24][VV][api.service:037]: send_ping_request: PingRequest {}
[17:59:24][VV][api.service:706]: on_ping_response: PingResponse {}
[17:59:39][V][rxLoop:167]: Have 326 bytes from CC1101 Rx, RSSI: -96 dBm LQI: 255
[17:59:39][V][rxLoop:172]: Synchronus mode enabled.
[17:59:39][D][mbus:035]: Received T1 A frame
[17:59:39][V][mbus:041]: Frame: 8F22F441B3F0D52A071000006E874029C19044E84D04F004403205E83902E018B181843A841C00602E08071E0140C70310470042BD816521DFFF7FECFBFFFFFFFBBD9DF421AF1FA209350310F5BA4DB98F27BFF0F1A60AEBA4DF8177D3F69F5B7409EF4A5BFFFFF7FFFF77FFFF5FDD8B1C96151FE7CFF4F0FDBE7CCAC5B374D4CF19FF73E7D04BE82A7F1FA1A48BF76B9BFD89396EE758E9F2C7BF3FFFFBBF08D99BA75DE8924DBB6BDBB35A37EBFED5E50CF7EBB7F1F7C8FFFEF9EDBF9DBCD7EEBC5E87EDFBE7D1 [RAW]
[17:59:39][V][mbus:043]: 0B274896B64CD68706E3EEBEF1FEDDF6C6F2FF6FFABF5ECD9A3FF39E77F07F3CEFDB7EF4AD7BF5B05C3C8B8B6B7BB5D3164CD3B6A91CEBFE332F1ED7FFFDED7D7B76F0FFD6FEBBECEFFFDDB554B73DEF62EC77D16FFC39E776FE35DF3CCBEF9E983B44CD9360E452D09F7DFDE5EDFF7BBC1AE6DFFD473EFE56F7DBED6FFA (326) [RAW]
[17:59:39][V][3of6:083]: Decode 3 out of 6 failed…
[17:59:39][W][component:239]: Component wmbus took a long time for an operation (114 ms).
[17:59:39][W][component:240]: Components should block for at most 30 ms.
[18:00:04][VV][api.service:697]: on_ping_request: PingRequest {}
[18:00:04][VV][api.service:043]: send_ping_response: PingResponse {}

Niestety https://wmbusmeters.org/ nie umie tego zinterpretować, czy koś może zna desctription key bo może to jest zakodowane? a może to coś jeszcze innego?
doradźcie gdzie szukać, dzięki

Złap jakąś inną ramkę, bo ta jest błędna

[18:10:17][D][mbus:035]: Received T1 A frame
[18:10:17][V][mbus:046]: Frame: 68D959C790307058656DC23A41BEBC89E9A86AAE5F0169C6220001B442036005083001304610704301C031C0900CE0802F306D7AF6040003B7FBF6FFEDFBDFFFED6F53DF4336798AFE1AD4E976BD77FCD62019EA939FEFCFFBEF26F46AF9F47CB64FBFF3BF92D97FFFFBFEFFFEFFF6FD1DAC7FEFD2114326BDB869CFFFE2B9DBF5D6F5D6F4DD3A5B738F1BDFDFEDDF7DF3CFD930A63EBEFEB4FB7F70FC7CDB0F1DFFFD3E77F27DBD (168) [RAW]

[19:25:51][D][mbus:035]: Received T1 A frame
[19:25:51][V][mbus:041]: Frame: B1A96654F42861C4600282E85600B3020237C0900630A70E722809600601804027174127061E1CA38678083F309815404800C00371D612C7DFBF7FCFFF7EFFBFDEFA088A4CB5EA45FF50BCFF6CE519088519529A24CE0EFF7AE1C9E007C14A8F7B168E2CCB16FAAB5FFFFEFFFFFFD7FEFE1B90E5F45ECFF24FC2952EBF37E91C3E7ABCC24954FD012F4A36EEAB897FB665E6EBE9515DDF7BAB2FFFBFF7FDFB67DFFDA7ECC68AEE17BFD3B3CBE4766ABB6D63713F886F53909CFB5E8FC5EBAFF895EF543292EF8D4F [RAW]
[19:25:51][V][mbus:043]: D7A7BDE77FBC97FFFD39746BA2D3C97331D23E9F58A92DAFDEBAF5FE7FFF (230) [RAW]

Co tak oszczędnie, złap jakąś, która daje się dekodować na https://wmbusmeters.org/

jeśli sobie ustawisz

logger:
  level: VERY_VERBOSE

to po poprawnym telegramie będziesz miał
Decode 3 out of 6 OK..
i tylko taki jest warty publikacji

ale nawet nie musisz mieć takiego wysokiego poziomu logowania, bo przy poziomie DEBUG nie będziesz oglądał tego całego śmietnika

Problem w tym, że wszystkie są takie same :frowning: żadnej nie moge zdekodować, zrobiłem co radziłeś w poprzednim poscie ale nie mam ramki z której mogę cokolwiek odczytać

Nie wiem gdzie mieszkasz, ale u mnie na przeciętnym blokowisku niepoprawnych telegramów mam zdecydowaną większość i to jest sytuacja normalna przy tłoku w eterze, ale tych poprawnych i tak jest wystarczająco dużo by czytać własne liczniki.

Nie wiem jak wygląda sytuacja jeśli chodzi o Flowis+ (bo nikt się nie chwalił nigdzie, że czyta takie właśnie nakładki/liczniki), jak kiedyś sugerowałem zbudowanie bazy liczników wraz z metodami ich odczytu, to zostało to zignorowane przez zdecydowaną większość użytkowników forum.

Telegramy T1 RAW nawet nie wklejaj nigdzie dalej. Dopiero te co przejdą 3z6 i CRC sa warte uwagi. Dla C1 nie masz 3z6 wiec tylko CRC Ciebie obchodzi.

1 polubienie

po aktualizacji ESPHOME 2025.5.0 wysypały się liczniki i zgłaszany jest błąd. (HA 2025.5.2)

[INFO ESPHome 2025.5.0
INFO Reading configuration /config/esphome/water-meter.yaml...
ERROR Unable to import component wmbus:
Traceback (most recent call last):
  File "/esphome/esphome/loader.py", line 185, in _lookup_module
    module = importlib.import_module(f"esphome.components.{domain}")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/data/external_components/4ac8ef87/components/wmbus/__init__.py", line 4, in <module>
    from esphome.log import Fore, color
ImportError: cannot import name 'Fore' from 'esphome.log' (/esphome/esphome/log.py). Did you mean: 'core'?
Failed config

wmbus: [source /config/esphome/water-meter.yaml:51]
  
  Component not found: wmbus.
  mosi_pin: GPIO23
  miso_pin: GPIO19
  clk_pin: GPIO18
  cs_pin: GPIO15
  gdo0_pin: GPIO4
  gdo2_pin: GPIO27
  led_blink_time: 1s
  frequency: 868.95
  all_drivers: False
  sync_mode: True
  log_all: True

plik water-meter.yaml

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

wmbus:
  mosi_pin: GPIO23
  miso_pin: GPIO19
  clk_pin:  GPIO18
  cs_pin:   GPIO15
  gdo0_pin: GPIO4
  gdo2_pin: GPIO27
  led_blink_time: "1s"
  frequency: 868.950
  all_drivers: false
  sync_mode: True
  log_all: True

sensor:
  - platform: wmbus
    meter_id: 0x215f29ab
    type: izar
    sensors:
      - name: "my water RSSi"
        field: "rssi"
        accuracy_decimals: 0
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
      - name: "my water"
        field: "total"
        accuracy_decimals: 3
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
        icon: "mdi:water"