Ultimate Reader czytnik wM-Bus - nowa konstrukcja opracowana przez @_Szczepan (SzczepanLeon)

To są całkiem słuszne założenia producenta, tylko nie realizowane masowo w praktyce (byłoby to choćby ekologiczne, bo z ekonomią to bywa różnie - podejrzewam, że wymiana liczników z pozostawieniem nakładek by była nieopłacalna ze względu na zwiększone koszty wymiany = konieczność zatrudnienia techników, którzy to ogarniają zamiast zwykłych hydraulików, którzy zwykle nie mają pojęcia co montują itd. - wszyscy dostawcy komunalni o jakich słyszałem wymieniają liczniki razem z nakładkami).

Natomiast kwestia o której wspominałem dotyczy dopuszczalnej zajętości pasma przez pojedynczą nakładkę, która jest uregulowana prawnie, lokalne przepisy muszą być zgodne (i w PL są) z tym (oraz nowszymi wydaniami)

mam na myśli w szczególności paragrafy 7.2.3 i 7.10.3

Liczniki wody (tzn. ich nakładki) raczej nie mają co nadawać, by się zbliżyć do tych ograniczeń (0.1% zajętości kanału w czasie trwania każdej godziny) chociaż zastanawiające jest ile razy większy jest telegram długi od krótkiego, ale przykładowo jeśli chodzi o liczniki energii elektrycznej to tam właśnie ograniczenia wynikają wprost z przepisów dotyczących wykorzystania eteru (w zależności od ilości przesyłanych danych jest ograniczona częstość nadawania telegramów = interwał między nimi jest ograniczony od dołu, tym bardziej im większe telegramy).

Zakładając OMS to na jednym polu zaoszczędzisz 2-3 bajty. Sumarycznie strzelał bym że krótki telegram to 33-50% długiego. Wszystko i tak zależy od danej ramki T1
Obok tego masz jeszcze ramki C1, które z definicji zajmują mniej miejsca na radiu - tu już łatwiej oszacować zysk.

edit 06.2025
Dla odważnych firmware SUPLA

można kompilowac albo gotową binarkę wgrać np Tasmota flasherem

1 Like

Czy z Ultimate Reader z softem w wersji 5 odczytam wodomierz z Flowis+?

Jak nadaje on na 868MHz wM-Bus w modzie T1/C1 to bez problemu.

edit:
Oto najnowszy YAML do UltimateReader’a

Jaka wersja LORA siedzi w UltimateReader?
T3S3 ?
Nie działa mi wogóle OLED i nie mam pojęcia o co biega.
Patrzę na pinologię i niby jest ok.

Z pinami mam w konfiguracji tylko takie rzezczy:

spi:
  clk_pin:
    number: GPIO5
  mosi_pin: GPIO6
  miso_pin:
    number: GPIO3
    ignore_strapping_warning: true

wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO7
  reset_pin: GPIO8
  irq_pin: GPIO33
  
output:
  - platform: gpio
    id: status_led
    pin:
      number: GPIO37

Szczepan mam radio od Ciebie ultimatereader jak dodać do niego wczytanie wszystkich driverów ? Nie mogę dokopać się do tego.
W starym opartym na CC miałem kofig do licznika impulsów w nowym przenoszę z tym samym driverem w teorii. Gdy wyłączę w starym wszystkie drivery i zostawię tylko watertecha to nie widać odczytów.
Ale jak włącze wszystkie to wtedy łapie ramkę i liczy.

watertech [0x00002266] RSSI: -57dBm T: 2944791A6622000003037ACA0000202F2F041332050000844013000000002F2020202020202020202020 (42) T1 A

Przez brak przecinków nie rozumiem jaki masz problem.

btw
w najnowszym ESPHome pewnie nie zmieścisz wszystkich driverów w pamięci.

1 Like

Cholerka. Rekompiluję na very_verbose i dam znać jak ta ramka wygląda w sensie log
Ciekawie bo esp32_d1_mini zmieściłem wszystkie - wywaliłem web-a i wlazło

to pewnie na styk jak niepotrzebne komponenty sa wyłączone

taki log mam

4:26:57.489][D][wmbus:114]: Have data from radio (72 bytes)
[14:26:57.508][I][wmbus:053]: Have data (42 bytes) [RSSI: -40, mode: T1 A]
[14:26:57.508][W][main:078]: Meter ID: 0x00002266
[14:26:57.508][W][main:081]: Frame: https://wmbusmeters.org/analyze/2944791a6622000003037aed0000202f2f041332050000844013000000002f2020202020202020202020
[14:26:57.509][I][wmbus:059]: Telegram handled by 0 handlers
[14:26:57.510][V][wmbus:103][radio_recv]: Queue items: 1
[14:26:57.513][V][wmbus:104][radio_recv]: Queue send success
[14:26:57.516][V][wmbus:082][radio_recv]: Failed to read preamble

Konfig

  - id: gas
    meter_id: 0x00002266 
    type: watertech

  - platform: wmbus_meter
    id: gas_lastmth
    parent_id: gas
    field: "total"
    name: gas
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "gas"
    state_class: "total_increasing"
    icon: "mdi:gas"

Bo pole nie nazywa sie total ale total_m3

Też testowałem nic z tego :frowning:

Jeszcze pytanie czy można przejść na wersję 4 Twojego komponentu przy ultimatereader ? Jakaś szybka instrukcja coś jeśli to możliwe ?

Na wersję 4 się nie da.

To już sam nie wiem co jest grane. na ESP32 CC1101 ładnie czyta licznik ale jak zmigruję na ultimate reader to niestety nie czyta. kombinowałem z driverami watertech-a, ultraheat, z fieldami total i total_m3 i dupa ramkę odbiera ale nie parsuje jej. Ciekawie że izary latają pięknie z eleganckim zasięgiem.

A testowałeś czy działąją inne ?

  • platform: wmbus_meter
    parent_id: water_meter_izar
    field: rssi_dbm
    name: Izar water meter - RSSI
    unit_of_measurement: “dBm”
    device_class: signal_strength
    icon: “mdi:wifi”

  • platform: debug
    free:
    name: “Heap Free”
    loop_time:
    name: “Loop Time”

W sumei ta linijka jest ciekawa:

[14:26:57.509][I][wmbus:059]: Telegram handled by 0 handlers

U mnie jak nie obsługuje to jest
Telegram not handled by any handler

A jak obsługuje to
Telegram handled by 1 handlers

Tak - domyślna wersja UR to v4

poprosty wgrywasz innego YAMLa
oba YAMLE sa na githubie

to cos zle robisz, musisz calego YAMLa i loga zawsze załączać tutaj

jakie numerki maja te izary?

Podpowiecie co jest nie tak.

packages:
  hal: github://wM-Bus/UltimateReader/packages/lilygo_t3_s3_hal.yaml@IoTLabs
  wmbus_gateway: github://wM-Bus/UltimateReader/packages/wmbus_gateway.yaml@IoTLabs

esphome:
  name: ultimatereader
  friendly_name: Ultimate Reader
  name_add_mac_suffix: false
  comment: Ultimate Reader
  project:
    name: wmbus.UltimateReader
    version: ${wmbus_gateway_version}

improv_serial:

esp32_improv:
  authorizer: none

logger:
  level: DEBUG
  logs:
    status_led: INFO
    binary_sensor: INFO
    light: INFO
  baud_rate: 115200

ota:
  - platform: esphome

api:
  encryption:
    key: "F6qk6W6X9P5nA4Dg0b3e9O4uLqf4uM5K2pH7tH1V7jA="

dashboard_import:
  package_import_url: github://wM-Bus/UltimateReader/blueprints/UltimateReader.yaml@IoTLabs
  import_full_config: true

wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO7
  reset_pin: GPIO8
  irq_pin: GPIO33
  on_frame:
    - then:
        - logger.log:
            level: WARN
            format: "Meter ID: 0x%s"
            args: ["frame->meter_id().c_str()"]
        - logger.log:
            level: WARN
            format: "Frame: https://wmbusmeters.org/analyze/%s"
            args: ["frame->as_hex().c_str()"]


spi:
  clk_pin:
    number: GPIO5
  mosi_pin: GPIO6
  miso_pin:
    number: GPIO3
    ignore_strapping_warning: true




wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
wmbus_meter:
  - id: woda_apator162
    meter_id: 0x02095578
    type: apator162
    key: "00000000000000000000000000000000"
    
sensor:
  - platform: wmbus_meter
    id: total_water_sensor
    field: total_m3
    parent_id: woda_apator162
    name: Water Consumption
    state_class: total_increasing
    device_class: water
  - platform: wmbus_meter
    id: water_meter_rssi
    field: rssi_dbm
    parent_id: woda_apator162
    name: RSSI
    device_class: signal_strength
    state_class: measurement

taki mam log

[I][wmbus:053]: Have data (111 bytes) [RSSI: -31, mode: T1 A]
[10:34:16.673][W][main:078]: Meter ID: 0x02257250
[10:34:16.673][W][main:081]: Frame: WMBusmeters Analyze Telegram
[10:34:16.673][I][wmbus:059]: Telegram handled by 0 handlers

Log_ultima.zip (394,0 KB)
Tu taj log - izar działa ok męczę się z gazem próbowałem różnych driverów.

#substitutions:
#  name: "ultimatereader-5a0eb0"
#  friendly_name: "Ultimate Reader"
esphome:
  name: ultimatereader-5a0eb0
  friendly_name: Ultimate Reader 5a0eb0
  name_add_mac_suffix: false
  comment: Ultimate Reader
  project:
    name: wmbus.UltimateReader
    version: ${wmbus_gateway_version}

packages:
  hal: github://wM-Bus/UltimateReader/packages/lilygo_t3_s3_hal.yaml@IoTLabs
  wmbus_gateway: github://wM-Bus/UltimateReader/packages/wmbus_gateway.yaml@IoTLabs


wifi:
  ssid: "jakies wifi"
  password: "jakies_haslo"
  reboot_timeout: 1min
  fast_connect: True
  manual_ip:
    static_ip: 192.168.10.66
    gateway: 192.168.10.1
    subnet: 255.255.255.0
    dns1: 8.8.8.8
#  ap:
#    ssid: IoTLabs wM-Bus Gateway
#improv_serial:

#esp32_improv:
#  authorizer: none

logger:
  level: VERY_VERBOSE
  logs:
    status_led: INFO
    binary_sensor: INFO
    light: INFO
  baud_rate: 115200

ota:
  - platform: esphome

api:

#dashboard_import:
#  package_import_url: github://wM-Bus/UltimateReader/blueprints/UltimateReader.yaml@IoTLabs
#  import_full_config: true

wmbus_radio:
  on_frame:
    - then:
        - logger.log:
            level: WARN
            format: "Meter ID: 0x%s"
            args: ["frame->meter_id().c_str()"]
        - logger.log:
            level: WARN
            format: "Frame: https://wmbusmeters.org/analyze/%s"
            args: ["frame->as_hex().c_str()"]
wmbus_common:
  drivers: all
wmbus_meter:

  - id: gas
    meter_id: 0x00002266 
    type: ultraheat

  - id: przod
    meter_id: 61220D7A
    type: izar

  - id: my_meter
    meter_id: 2132BA02
    type: izar

sensor:


  - platform: wmbus_meter
    id: water_meter_rssi
    field: rssi_dbm
    parent_id: my_meter
    name: RSSI
    device_class: signal_strength
    state_class: measurement
  - platform: wmbus_meter
    parent_id: my_meter
    field: "total_m3"
    name: Tył Woda narastająco
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "water"
    state_class: "total_increasing"
    icon: "mdi:water"
    filters:
      - offset: -287.204 
  - platform: wmbus_meter
    id: water_meter_lastmth
    parent_id: my_meter
    field: "last_month_total_m3"
    name: Tył Poprzedni miesiac
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "water"
    state_class: "total_increasing"
    icon: "mdi:water"
    filters:
      - offset: -287.204 
##############################################################    Przód ###############################

#    key: 00112233445566778899aabbccddeeff # Optional, if your meter is encrypted. May be specified as ASCII or HEX string.
    # mode: C1 # or T1 if you want to filter specific modes. When not specified, all modes are accepted.
    # on_telegram:
    # Sending telegram to MQTT topic as JSON. MQTT component must be configured in your config.
    #   - then: 
    #       - wmbus_meter.send_telegram_with_mqtt:
    #           topic: some_topic
    # Sending telegram to HTTP endpoint as JSON.
    #   - then:
    #       - http_request.post:
    #           url: http://example.com/api
    #           headers:
    #             Content-Type: application/json
    #           body: !lambda |-
    #             return meter.as_json();

  - platform: wmbus_meter
    id: Przod_water_meter_rssi
    field: rssi_dbm
    parent_id: przod
    name: Przod_RSSI
    device_class: signal_strength
    state_class: measurement
  - platform: wmbus_meter
    parent_id: przod
    field: "total_m3"
    name: Przód Woda narastająco
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "water"
    state_class: "total_increasing"
    icon: "mdi:water"
    filters:
      - offset: -310.5 
  - platform: wmbus_meter
    id: Przod_water_meter_lastmth
    parent_id: przod
    field: "last_month_total_m3"
    name: Przod_Poprzedni miesiac
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "water"
    state_class: "total_increasing"
    icon: "mdi:water"
    filters:
      - offset: -400 

#========================================== Gaz =============
  - platform: wmbus_meter
    id: gas_lastmth
    parent_id: gas
    field: "total_m3"
    name: gas
    accuracy_decimals: 2
    unit_of_measurement: "m³"
    device_class: "gas"
    state_class: "total_increasing"
    icon: "mdi:gas"




#wmbus_gateway:
  # If you want to set specific pages on the display, you may use the following config.
  # By default, all defined sensor are displayed.
  # pages:
  #   - total_water_sensor
  #   - water_meter_rssi

Spróbowane fieldy total_m3 i total, testowany volume_m3 i volume. Testowane dwa drivery ultraheat i watertech
Wyłączyłem kilka paczek żeby oszczędzić miejsce i dać możliwość wszystkich driverów.

a jak wklejasz tą ramkę do wmbusmasters to co mówi ?