Komponent wM-Bus do ESPHome wersja 5.x - wątek ogólny

Nie zgodzę się z Tobą w kwestii że dodatek wmbusmeters-ha-addon “nie przewiduje możliwości podania telegramów z zewnętrznego źródła,”.
Po odpowiedzi @_Szczepan którą dostałem, usiadłem do tego raz jeszcze od początku i ruszyło z oficjalnym dodatkiem wmbusmeters-ha-addon.

substitutions:
  name: wmbus-bridge-v2
  friendly_name: "wM-Bus Bridge v2"
  ha_address: "XXX.XXX.XXX.XXX"

esphome:
  name: "${name}"
  friendly_name: "${friendly_name}"
  project:
    name: wmbus.Bridge
    version: "2.0.0"

esp32:
  board: ttgo-lora32-v21
  framework:
    type: esp-idf

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    refresh: 0d
    components:
      - wmbus_radio
      - wmbus_common
      - socket_transmitter

logger:
  level: INFO
  baud_rate: 115200

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: NONE

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Warsaw

spi:
  clk_pin: GPIO5
  mosi_pin: GPIO27
  miso_pin: GPIO19

socket_transmitter:
  id: wmbus_socket
  ip_address: ${ha_address}
  port: 9022 # Port dla wmbusmeters (TCP)
  protocol: TCP

wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO18
  reset_pin: GPIO23
  irq_pin: GPIO33 
  

  on_frame:
    - lambda: |-
        // Wysyłamy każdą odebraną ramkę w formacie RTLWMBUS do skonfigurowanego gniazda
        id(wmbus_socket).send(frame->as_rtlwmbus());

Konfiguracja dodatku wmbusmeters-ha-addon:

device=rtlwmbus:CMD(/usr/bin/nc -lk 9022)
format=json
loglevel=debug
logtelegrams=true
shell=/wmbusmeters/mosquitto_pub.sh "wmbusmeters/$METER_NAME" "$METER_JSON"

Po uruchomieniu, mam dodatkowe urządzenie w MQTT :slight_smile:

Mam do rozwiązania tylko jeden problem, ale brakuje czasu.
Jeśli wysyłam za pomocą protokołu TCP, to nic innego nie może być zawarte w elemencie “on_frame” każde dodanie tam czegokolwiek powoduje że komunikacja nie rusza. Ale na tą chwilę to mi wystarczy, zresztą wszystkie informacje o odszukanych licznika trafiają i tak do logów wmbusmeters-ha-addon więc tam też można wyszukać.

3 Likes

Mi nie chciał jak podstawiałem STDIN a nie testowałem innych możliwości. Ale dzięki temu już jest wiedza że da się. Ja się uparłem na te drogę. Nie rozważałem innej koncepcji.

Jak ktoś sobie pociągnął ESPHome 2026.1.3
i w kompilacji bedzie błąd mDNS
to proszę w kodzie dopisać :

mdns:
  disabled: true

Może zasługuje to na swój wątek na forum?

Nie. To jest bug w ten wersji ESP czyli od wczoraj.

Chodzi mi o dodatek. I tam info dotyczące bugów itp. chodzi o to że jest to temat różniący się od oryginalnego.

To jest w dobrym miejscu.
Bo jeżeli ktoś będzie kompilował w tej wersji ESPHome którą podałem to dodatek który jest opisywany w tym wątku na tym się to wywróci.

Specjalny wątek dla tego konkretnego dodatku o to mi chodzi według mnie to jest dobry pomysł ponieważ wszystkie bugi itp. będą w jednym miejscu, a nie zmieszają się z tym tematem

1 Like

Po każdej aktualizacji Esphome jest coraz gorzej. Po dzisiejszej aktualizacji do 2026.1.4 przestało mi czytać licznik energii.
Ręce opadają.

Edit:
Sorry po 30 minutach odczytał licznik. Zasięg jakby słabszy (esp w tym samym miejscu co przed aktualizacją)

Edit: Zasięg gorszy o co najmniej 30%

Potwierdzam.
Też przestała czytać mi się Gama 350
Pozdrawiam

Przejdź na inne repo:

external_components:
  - source:
      type: git
      url: https://github.com/AllonGit/esphome-components
      ref: main
    components: [wmbus_common, wmbus_radio, wmbus_meter]
    refresh: 1d 

Nadal są restarty ale bynajmniej działa.
Zalecam oczywiście Clean Build

Jak ktoś chce spróbować innego podejścia bez czytania wątku bo w nim to zasygnalizowałem :
https://forum.arturhome.pl/t/alternatywa-odchudzony-komponent-esphome-wm-bus-tylko-rf-mqtt-dekodowanie-poza-esp/16371?u=krzyszof_k

Super że jest taka możliwość ale nie każdy np. używa HA.

Wiem. Zrobiłem tak aby było najprościej. Nie zadowolę wszystkich.
Nie mam możliwości technicznych aby przetestować to na innych konfiguracjach.
HA jest tylko przykładem, bo tam najczęściej ludzie tego potrzebują. Jak ktoś nie ma HA, to nadal może to odebrać dowolnym klientem MQTT i puścić do wmbusmeters / własnego parsera.

Nie wydaje mi się aby był to błąd po stronie nowego ESPHOME.
U mnie też przestało działać, a korzystam tylko z socket_transmitter.
Nowa wersja ESPHOME wyszła w podobnym czasie co @_Szczepan dodał nową wersję na git’a.
Moja konfiguracja (podawałem ją kilka postów wyżej) przestała działać, jednak wystarczyło aby pobrał projekt sprzed zmiany, czyli:

source: github://SzczepanLeon/esphome-components@f2c423647947ff0bddc4d6ad472c3e9a5f140cba

I kod ruszył z najnowszym ESPHOME:

INFO ESPHome 2026.1.4
INFO Reading configuration wmbus-org.yaml...
INFO Updating https://github.com/SzczepanLeon/esphome-components.git@f2c423647947ff0bddc4d6ad472c3e9a5f140cba
INFO Detected timezone 'Europe/Warsaw'

a probowaliscie nie zaciagac esp32 z mojegi repo?

Biorę tylko to:

external_components:
  - source: github://SzczepanLeon/esphome-components@f2c423647947ff0bddc4d6ad472c3e9a5f140cba
  # - source: github://SzczepanLeon/esphome-components@main
    refresh: 0d
    components:
      - wmbus_radio
      - wmbus_common
      - socket_transmitter

esp32 biorę z ESPHOME

A u mnie nie idzie


Install wmbus-lora.yaml
INFO ESPHome 2026.1.4
INFO Reading configuration /config/esphome/wmbus-lora.yaml...
INFO Updating https://github.com/SzczepanLeon/esphome-components.git@f2c423647947ff0bddc4d6ad472c3e9a5f140cba
ERROR Unable to import component logger:
Traceback (most recent call last):
  File "/esphome/esphome/loader.py", line 206, 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 "/esphome/esphome/components/logger/__init__.py", line 6, in <module>
    from esphome.components.esp32 import (
ImportError: cannot import name 'VARIANT_ESP32C61' from 'esphome.components.esp32' (/data/external_components/20a6a4e0/components/esp32/__init__.py)
Failed config

logger: [source /config/esphome/wmbus-lora.yaml:21]
  
  Component not found: logger.
  level: NONE
  baud_rate: 0

Pokaż kod.
Ale wydaje mi się że pobierasz całość z repo, łącznie z esp32.

Oto moj kod:

esphome:
  name: wmbus-lora
  friendly_name: WMBus Lora
  platformio_options:
    upload_speed: 921600

external_components:
  - source: github://SzczepanLeon/esphome-components@f2c423647947ff0bddc4d6ad472c3e9a5f140cba
  # - source: github://SzczepanLeon/esphome-components@main
    refresh: 0d
    components: [wmbus_common, wmbus_radio, wmbus_meter]


esp32:
  board: heltec_wifi_lora_32_V2
  flash_size: 8MB
  framework:
    type: esp-idf


logger:
  level: NONE
  baud_rate: 0


api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  platform: esphome
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Wmbus-Lora Fallback Hotspot"
    password: "i1QI0lIitl1i"

web_server:
  version: 3
  local: true

time:
  - platform: sntp
    id: sntp_time

spi:
  clk_pin:
    number: GPIO5
    ignore_strapping_warning: true
  mosi_pin: GPIO27
  miso_pin: GPIO19

wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO18
  reset_pin: GPIO14
  irq_pin: GPIO35
  

wmbus_meter:
  - id: water_meter
    meter_id: 0x0000000000000
    type: apator162
    key: "00000000000000000000000000000000"

  - id: electricity_meter
    meter_id: 0x0000000000
    type: amiplus
    key: "0000000000000000000000"
    mode: 
      - T1
      - C1

output:
  - platform: gpio
    id: vext_output
    pin: GPIO21
  - platform: gpio
    id: oled_reset
    pin: GPIO16
    inverted: True
  - platform: gpio
    id: status_led
    pin: GPIO25
      
sensor:
  - platform: wmbus_meter
    parent_id: water_meter
    field: total_m3
    device_class: water
    name: Zużycie wody
    id: woda
    accuracy_decimals: 3
    state_class: total_increasing
    unit_of_measurement: "m³"
    icon: "mdi:water"
    
  - platform: wmbus_meter
    parent_id: electricity_meter
    field: total_energy_consumption_kwh
    name: Suma konsumpcji
    id: suma_kons
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:transmission-tower-export"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: current_power_consumption_kw
    name: Aktualny pobór
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:transmission-tower"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: total_energy_production_kwh
    name: Suma produkcji
    id: suma_prod
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:transmission-tower-import"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: current_power_production_kw
    name: Aktualna produkcja
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:solar-power-variant"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: voltage_at_phase_1_v
    name: Faza V1
    id: faza1
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:lightning-bolt"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: voltage_at_phase_2_v
    name: Faza V2
    id: faza2
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:lightning-bolt"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: voltage_at_phase_3_v
    name: Faza V3
    id: faza3
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    icon: "mdi:lightning-bolt"

  - platform: wmbus_meter
    parent_id: electricity_meter
    field: rssi_dbm
    name: Licznik RSSI
    icon: "mdi:wifi"

i2c:
  sda: GPIO4
  scl: GPIO15
  scan: true

font:
  - file: "gfonts://Roboto"
    id: font_small
    size: 12
  - file: "gfonts://Roboto"
    id: font_big
    size: 16

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    id: oled
    pages:
      - id: page1
        lambda: |-
          it.printf(0, 16, id(font_small), "Faza1: %.1f V", id(faza1).state);
          it.printf(0, 28, id(font_small), "Faza2: %.1f V", id(faza2).state);
          it.printf(0, 40, id(font_small), "Faza3: %.1f V", id(faza3).state);

      - id: page2
        lambda: |-
          it.printf(0, 16, id(font_small), "Konsumpcja: %.1f kWh", id(suma_kons).state);
          it.printf(0, 28, id(font_small), "Produkcja: %.1f kWh", id(suma_prod).state);
          it.printf(0, 40, id(font_small), "Woda: %.3f m3", id(woda).state);


interval:
  - interval: 10s
    then:
      - display.page.show_next: oled

  

Na tym configu podanym przez ciebie nie kompiluje sie wogole

external_components:
  - source: github://SzczepanLeon/esphome-components@f2c423647947ff0bddc4d6ad472c3e9a5f140cba
  # - source: github://SzczepanLeon/esphome-components@main
    refresh: 0d
    components:
      - wmbus_radio
      - wmbus_common
      - socket_transmitter

Na moim kodzie działa ale są restarty losowe