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

OFF TOPIC cd.
Podejście się zmienia, bo świat się zmienia, karmiłem danymi projekty AI od kilkunastu lat (osoby mające wgląd w statystyki odwiedzin forów technicznych wiedzą o co chodzi), więc liczę na to, że ta ciężka praca u podstaw z ludźmi się w końcu zwróci. Stosunkowo niedawno nadal zdecydowana większość podpowiedzi AI trafiała jak kulą w płot, ale teraz większość odpowiedzi jest już sensowna (a nie zmieniłem promptowania, bo jestem leśnym dziadkiem).


@Dariusz_Zajkowski

W tym logu nic interesującego nie ma, a skoro jest głucho, to nie można wykluczyć, że radio SX1276 jest wadliwe.
Można zwiększyć poziom logowania (ale wtedy równocześnie musisz przyciszyć zbędne komponenty.

@Allon

HAHA świetne oko, szkoda że foto dopiero post wyżej, bo kto by zgadł że @Dariusz_Zajkowski ma CAŁKOWICIE INNE RADIO niż to, o które pyta…

musi działać, bo drogą eliminacji potencjalnych konfliktów już z czymkolwiek (czyli zupełnie bzdurnych, ale jednak stopień skomplikowania tych MCU jest na tyle duży, że już niczego nie wykluczam) zostały mi tylko 32, 33

ale cała krew w piach, bo radio jest CAŁKIEM inne niż jakoby miało być…

Nawet na zdjęciu nie zauważyłem. Zauważyłem dopiero niżej jak podał LLCC68. No kojarzę że to czip z rodziny SX126x zapytałem się AI o pinowanie i coś mi się nie zgadzialo bo pionowo jest kompatybilny z SX1262 choć czasem może być używany (LLCC68) w jakiś tanich zamiennikach 1276, ale wymaga weryfikacji w trybie FSK ( cokolwiek to jest).

Oto wytłumaczenie AI:

  • Mechanizm: Licznik przesyła dane, błyskawicznie przełączając się między dwiema częstotliwościami (np. +50 kHz dla “1” i -50 kHz dla “0”), co czyni sygnał odpornym na zakłócenia w piwnicach czy studzienkach.
  • Parametry: Kluczowa jest precyzyjna prędkość 32,768 kbps oraz stabilna dewiacja, które muszą idealnie pasować do ustawień odbiornika, by ten “zrozumiał” nadawany szum.
  • Kodowanie: Dane są dodatkowo szyfrowane (np. Manchester), co wymusza częste zmiany częstotliwości i pozwala odbiornikowi perfekcyjnie zsynchronizować się z zegarem licznika.
  • Odczyt: Odbiornik wyłapuje te skoki częstotliwości, zamienia je z powrotem na bity i buduje z nich ramkę danych zawierającą np. aktualne zużycie wody czy gazu.
  • Weryfikacja: Na końcu każdej paczki danych leci suma kontrolna CRC – jeśli choć jeden bit “skoczył” niewłaściwie przez zakłócenia, odbiornik odrzuca cały odczyt jako niewiarygodny.

moduł zakupiony tu

https://pl.aliexpress.com/item/1005005763662120.html?spm=a2g0o.order_list.order_list_main.42.36a21c24DWH2R3&gatewayAdapt=glo2pol

[16:21:08.124][C][web_server.ota:231]: Web Server OTA
[16:21:08.133][C][api:221]: Server:
[16:21:08.133][C][api:221]:   Address: esp32-d1-mini.local:6053
[16:21:08.133][C][api:221]:   Listen backlog: 4
[16:21:08.133][C][api:221]:   Max connections: 8
[16:21:08.143][C][api:228]:   Noise encryption: YES
[16:21:08.147][C][mdns:177]: mDNS:
[16:21:08.147][C][mdns:177]:   Hostname: esp32-d1-mini
[16:22:01.869][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[16:22:01.935][D][wmbus:082][radio_recv]: Radio interrupt timeout
[16:22:05.179][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed

W tej ofercie są 4 różne płytki do wyboru, ale żadna z nich to NIE jest SX1276

aby ustalić co faktycznie masz musiałbyś zrobić czytelne zdjęcie odwrotnej strony tam gdzie jest IC radia

kolor: LLCC68 868-915MHz

Dajcie link do normalnego modułu to zaraz zakupię.

czyli prawdopodobnie odpowiednik SX1262 a więc musisz spróbować konfiguracji jak dla SX1262

pamiętaj, że to Chińczyk sprzedaje więc nigdy nie masz 100% pewności

BTW ja na twoim miejscu bym nie kupował radia osobno, tylko wsparł któregoś z polskich twórców oprogramowania kupując u niego gotowy odbiornik…


i taka mała uwaga poza wszystkim - nie montuj tego na takiej płytce jak użyłeś (masz tam mnóstwo ścieżek i metalizacji pod antenami) znacznie lepiej użyć do łączenia kliku centymetrów taśmy wielożyłowej

Dobra ale na szczęście jest wsparcie ze strony komponentu szczepana tylko że z limitem ramki.

O taki spróbuj:

spi:
  clk_pin: GPIO18
  mosi_pin: GPIO23
  miso_pin: GPIO19

wmbus_radio:
  radio_type: SX1262
  cs_pin: GPIO5
  reset_pin: GPIO14  # Sprawdź gdzie przylutowałeś RST radia
  irq_pin: GPIO26    # Pin DIO1 w SX1262 obsługuje przerwania
  busy_pin: GPIO27   # SX1262 nie ruszy bez tego pinu!
[17:14:15.402][C][time:028]: Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[17:14:15.409][C][esphome.ota:075]: Over-The-Air updates:
[17:14:15.409][C][esphome.ota:075]:   Address: esp32-d1-mini.local:3232
[17:14:15.409][C][esphome.ota:075]:   Version: 2
[17:14:15.429][C][esphome.ota:082]:   Password configured
[17:14:15.429][C][safe_mode:021]: Safe Mode:
[17:14:15.429][C][safe_mode:021]:   Successful after: 60s
[17:14:15.429][C][safe_mode:021]:   Invoke after: 10 attempts
[17:14:15.429][C][safe_mode:021]:   Duration: 300s
[17:14:15.433][C][safe_mode:038]:   Bootloader rollback: not supported
[17:14:15.463][C][web_server.ota:231]: Web Server OTA
[17:14:15.463][C][api:221]: Server:
[17:14:15.463][C][api:221]:   Address: esp32-d1-mini.local:6053
[17:14:15.463][C][api:221]:   Listen backlog: 4
[17:14:15.463][C][api:221]:   Max connections: 8
[17:14:15.464][C][api:228]:   Noise encryption: YES
[17:14:15.464][C][mdns:177]: mDNS:
[17:14:15.464][C][mdns:177]:   Hostname: esp32-d1-mini
[17:14:15.464][V][mdns:182]:   Services:
[17:14:15.483][V][mdns:184]:   - _esphomelib, _tcp, 6053
[17:14:15.483][V][mdns:187]:     TXT: friendly_name = ESP32-D1-Mini
[17:14:15.483][V][mdns:187]:     TXT: version = 2026.1.5
[17:14:15.487][V][mdns:187]:     TXT: mac = 2805a527df18
[17:14:15.487][V][mdns:187]:     TXT: platform = ESP32
[17:14:15.491][V][mdns:187]:     TXT: board = wemos_d1_mini32
[17:14:15.494][V][mdns:187]:     TXT: network = wifi
[17:14:15.510][V][mdns:187]:     TXT: api_encryption = Noise_NNpsk0_25519_ChaChaPoly_SHA256
[17:14:15.510][V][mdns:184]:   - _http, _tcp, 80
[17:14:40.732][D][sntp:100]: Synchronized time: 2026-02-18 17:14:40
[17:15:09.406][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[17:15:09.445][VV][esp32.preferences:052]: s_pending_save: key: 233825507, len: 4
[17:15:09.449][VV][component:302]: safe_mode loop disabled
[17:15:09.449][W][component:547]: safe_mode took a long time for an operation (51 ms)
[17:15:09.450][W][component:550]: Components should block for at most 30 ms
[17:15:09.633][VV][app:503]: logger loop enabled from ISR
[17:15:09.646][VV][SX1262:161][radio_recv]: Restarting RX
[17:15:09.646][VV][component:302]: logger loop disabled
[17:15:13.483][V][esp32.preferences:126]: Saving 1 items...
[17:15:13.486][VV][esp32.preferences:137]: Checking if NVS data 233825507 has changed
[17:15:13.497][V][esp32.preferences:140]: sync: key: 233825507, len: 4
[17:15:13.500][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed
[17:15:14.748][VV][api.connection:261]: Sending keepalive PING
[17:15:14.748][VV][api.service:012]: send_message ping_request: PingRequest {}
[17:15:14.759][VV][api.service:016]: on_ping_response: PingResponse {}
[17:15:54.829][VV][api.service:016]: on_ping_request: PingRequest {}
[17:15:54.832][VV][api.service:012]: send_message ping_response: PingResponse {}
[17:16:09.655][VV][app:503]: logger loop enabled from ISR
[17:16:09.660][VV][SX1262:161][radio_recv]: Restarting RX
[17:16:09.664][VV][component:302]: logger loop disabled
[17:16:34.767][VV][api.service:016]: on_ping_request: PingRequest {}
[17:16:34.768][VV][api.service:012]: send_message ping_response: PingResponse {}

Tak, to jest po to, żeby przy każdej kompilacji nie wyskakiwało ostrzeżenie bo ten pin można akurat użyć jako CS (ale na normalne logi to nie ma wpływu).
Ale w logu dalej głucho, tylko nie wiem czy minuta czekania musi wystarczyć, ale skoro masz równolegle drugie urządzenie to tam przecież widzisz kiedy idą telegramy z tego licznika.

Część zbędnych logów możesz uciszyć

logger:
  id: component_logger
  logs: 
    api.service: NONE # tu uciszam zbędny log serwisu api który zaciemnia obraz w twoich logach
  level: DEBUG # w razie konieczności można zwiększyć do VERBOSE lub VERY_VERBOSE
  baud_rate: 115200 # to ma sens 

Witam
Miałem wmbus na ttgo-lora32-v21 już od jakiegoś czasu. Jednak zobaczyłem że od kilku dni nie mam stanu odczytu z nakładek APATOR u siebie w Home Assistant. Urządzenie wmbus na ttgo działa ale odczyty mają stan nieznany. Nie wiem co mogło się zadziać. Mam ESPHome 2026.2.1
Tak wygląda mów config:

substitutions:
  name: "ttgo-lora32-v21-b09428"
  friendly_name: 'wM-Bus'
  serial_prefix: 'esp' #Don't change it.

esphome:
  name: '${name}'
  friendly_name: '${friendly_name}'
  #name_add_mac_suffix: true
  comment: Bramka urządzeń wMBus
  on_boot:
    priority: -100
    then:
#      - output.turn_off: vext_output  #załączanie zasilania OLED
      - delay: 100ms 
#      - globals.set:
#          id: izar_from_memory
#          value: 'true'
      - globals.set:
          id: apator_from_memory1
          value: 'true'
      - globals.set:
          id: apator_from_memory2
          value: 'true'
#      - globals.set:
#          id: unismart_from_memory
#          value: 'true'
  
esp32:
  board: ttgo-lora32-v21
  framework:
    type: esp-idf
    version: recommended
     
external_components:
  - source: github://SzczepanLeon/esphome-components@main
    refresh: 0d
    components:
    - socket_transmitter
    - wmbus_common
    - wmbus_radio
    - wmbus_meter
  
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  min_auth_mode: WPA2
  use_address: xxx.xxx.xxx.xxx
  fast_connect: true

    # Hotspot when can't connect to Local WiFi
  ap:
    ssid: "wmbus AP"
    password: "xxxxxxxxxXXXXXXXXX"

logger: 
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: !secret encryption_key

# Enable over-the-air updates
ota:
  platform: esphome
  password: !secret ota_password

# Serwer with a statistic data and OTA board update
web_server:
  port: 80
  version: 3
  auth:
    username: xxxx
    password: !secret web_server_password

captive_portal:

# Sets time from Homeassistant
time:
  - platform: homeassistant
    timezone: Europe/Warsaw
    id: homeassistant_time

output:
#  - platform: gpio
#    id: vext_output
#    pin: GPIO21
  - platform: gpio
    id: status_led
    pin: GPIO25

globals:
  - id: active_index
    type: int
    restore_value: no
    initial_value: '0'

##############Tutaj ustawiamy zmienne do zapisu ostatniego stanu licznika do pamięci urządzenia
#  # Izar
#  - id: saved_izar_value
#    type: float
#    restore_value: yes
#    initial_value: '0.0'
#  - id: izar_from_memory
#    type: bool
#    restore_value: yes
#    initial_value: 'true'

  # Apator 1
  - id: saved_apator_value1
    type: float
    restore_value: yes
    initial_value: '0.0'
  - id: apator_from_memory1
    type: bool
    restore_value: yes
    initial_value: 'true'

  # Apator 2
  - id: saved_apator_value2
    type: float
    restore_value: yes
    initial_value: '0.0'
  - id: apator_from_memory2
    type: bool
    restore_value: yes
    initial_value: 'true'

#  # Unismart
#  - id: saved_unismart_value
#    type: float
#    restore_value: yes
#    initial_value: '0.0'
#  - id: unismart_from_memory
#    type: bool
#    restore_value: yes
#    initial_value: 'true'

####################### Czas automatycznego przełączanie ekranu #########################
interval:
  - interval: 5s
    then:
      - lambda: |-
          id(active_index)++;
          if (id(active_index) >= 2) {   // liczba ekranów/wodomierzy
            id(active_index) = 0;
          }


binary_sensor:
#  - platform: gpio
#    pin: GPIO0
#    name: "Button Next Meter"
#    on_press:
#      then:
#        - lambda: |-
#            id(active_index) += 1;
#            if (id(active_index) >= 2) id(active_index) = 0;     //Tutaj ustawiamy ile jest liczników - w tym przypadku 3

  - platform: status
    name: Status
            
font:
  - file: 'fonts/Calibri-Regular.ttf'
    id: font1
    size: 16


i2c:          # I2C for OLED
  sda: 21
  scl: 22
  scan: true 

button:
  - platform: restart
    name: "Restart"
    id: reboot

# Sensors for ESP version and WIFI information
text_sensor:
  - platform: wifi_info
    ip_address:
      name: "IP"
      icon: mdi:ip-network
    ssid:
      name: "SSID"
      icon: mdi:wifi-star

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: GPIO23
  irq_pin: GPIO33
  on_frame:
    - then:
        - repeat:
            count: 1
            then:
              - output.turn_on: status_led
              - delay: 100ms
              - output.turn_off: status_led
              - delay: 100ms
            
wmbus_meter:
  - id: cold_water_meter
    meter_id: 0xCCCCC
    type: apator162
    key: "00000000000000000000000000000000"

  - id: warm_water_meter
    meter_id: 0xDDDDDD
    type: apator162
    key: "00000000000000000000000000000000"
    
sensor:
  - platform: wmbus_meter
    parent_id: cold_water_meter
    field: total_m3
    device_class: water
    name: Woda-cała
    accuracy_decimals: 3
    state_class: total_increasing
    unit_of_measurement: "m³"
    icon: "mdi:water"
    filters:
      offset: +1.222
    on_value:
      then:
        - lambda: |-
            if (abs(x - id(saved_apator_value1)) > 0.01f) {
              id(saved_apator_value1) = x;
            }
            id(apator_from_memory1) = false;  // ustaw na false za każdym razem, gdy jest nowa wartość
  - platform: wmbus_meter
    parent_id: cold_water_meter
    id: RSSI_licznik_woda_cala
    field: rssi_dbm
    name: RSSI licznika wody całej
    unit_of_measurement: "dBm"

  - platform: wmbus_meter
    parent_id: warm_water_meter
    field: total_m3
    device_class: water
    name: Woda ciepła
    accuracy_decimals: 3
    state_class: total_increasing
    unit_of_measurement: "m³"
    icon: "mdi:water"
    filters:
      offset: +0.137
    on_value:
      then:
        - lambda: |-
            if (abs(x - id(saved_apator_value2)) > 0.01f) {
              id(saved_apator_value2) = x;
            }
            id(apator_from_memory2) = false;  // ustaw na false za każdym razem, gdy jest nowa wartość
  - platform: wmbus_meter
    parent_id: warm_water_meter
    id: RSSI_licznik_woda_ciepla
    field: rssi_dbm
    name: RSSI licznika wody ciepłej
    unit_of_measurement: "dBm"

  - platform: wifi_signal
    name: 'WiFi Signal'
    update_interval: 60s
    accuracy_decimals: 0
  - platform: uptime
    name: 'Uptime'
    unit_of_measurement: d
    update_interval: 300s
    accuracy_decimals: 1
    filters:
      - multiply: 0.000011574
    
####################################WYŚWIETLACZ###################################################

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
#    reset_pin: GPIO16
#    rotation: 180
    address: 0x3C
    lambda: |-
      struct MeterInfo {
        const char* name;
        const char* id_str;
        Sensor* rssi;
        float* value;
        bool* from_mem;
      };
      /////////// definiowanie liczników - tutaj dodajemy kolejne linie, jeśli chcemy dodać licznik
      MeterInfo meters[] = {
        {"Meter: Apator", "0xCCCCCC", id(RSSI_licznik_woda_cala), &id(saved_apator_value1), &id(apator_from_memory1)},
        {"Meter: Apator", "0xDDDDDD", id(RSSI_licznik_woda_ciepla), &id(saved_apator_value2), &id(apator_from_memory2)},
      };


      /////////// opisy
      auto draw_counter = [&](const char* name, const char* id_str, float rssi, float stan, bool from_mem) {
        it.printf(0, 0, id(font1), "Dev: %d/2", id(active_index) + 1);
        it.printf(0, 16, id(font1), name);
        it.printf(0, 28, id(font1), "ID: %s", id_str);
        if (isnan(rssi))
          it.printf(0, 40, id(font1), "RSSI: --");
        else
          it.printf(0, 40, id(font1), "RSSI: %.0f dBm", rssi);
        if (from_mem)
          it.printf(0, 52, id(font1), "State*: %.3f m3", stan);
        else
          it.printf(0, 52, id(font1), "State: %.3f m3", stan);
      };


      // pobierz dane aktywnego licznika
      MeterInfo meter = meters[id(active_index)];
      draw_counter(meter.name, meter.id_str, meter.rssi->state, *(meter.value), *(meter.from_mem));

W logach z otwartą konsolą po jakmś czasie mam takie odczyty:

[12:07:08.808][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:07:39.389][D][packet:097]: Have data from radio (8 bytes)
[12:07:39.404][D][wmbusmeters:351]: raw packet "7D2E249835301751"
[12:08:08.862][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:08:46.118][D][packet:097]: Have data from radio (8 bytes)
[12:08:46.132][D][wmbusmeters:351]: raw packet "BD2A7E1C919E41C3"
[12:09:08.937][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:09:09.926][D][sensor:118]: 'Uptime' >> 0.0 d
[12:09:46.977][D][packet:097]: Have data from radio (8 bytes)
[12:09:47.000][D][wmbusmeters:351]: raw packet "DD261F70FCDE4FEE"
[12:10:08.992][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:10:56.154][D][packet:097]: Have data from radio (8 bytes)
[12:10:56.183][D][wmbusmeters:351]: raw packet "3065E96074680714"
[12:11:09.042][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:12:05.314][D][packet:097]: Have data from radio (8 bytes)
[12:12:05.338][D][wmbusmeters:351]: raw packet "C04E727282413643"
[12:12:09.107][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:13:05.422][D][packet:097]: Have data from radio (191 bytes)
[12:13:05.447][D][wmbusmeters:351]: raw packet "6B271C58D59A5932CD4CE596599593xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCEEC373699C536A9C3A78D4C66323669169B8F2E596A644D13985F1442CCAAE7462261CEF61FFAAF245DFA28AE528E4E800CF38B7AAEC7340945E194A18B9F3D8F1C79053F"
[12:13:05.455][D][wmbusmeters:351]: (wmbus) trimming frame A "6B271C58D59A5932CD4CE5965995937344F14E66AC596696B19B1C353356A719A94EC5B45A5596734A4EA5CC4DD343725A9C7494D64ECB170E2E967xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx23669169B8F2E596A644D13985F1442CCAAE7462261CEF61FFAAF245DFA28AE528E4E800CF38B7AAEC7340945E194A18B9F3D8F1C79053F"
[12:13:05.479][W][component:579]: wmbus_radio took a long time for an operation (59 ms)
[12:13:05.493][W][component:582]: Components should block for at most 30 ms
[12:13:09.184][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:14:09.231][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:14:09.934][D][sensor:118]: 'Uptime' >> 0.0 d
[12:14:14.241][D][packet:097]: Have data from radio (8 bytes)
[12:14:14.251][D][wmbusmeters:351]: raw packet "5B6CC790C48BA124"

Cześć, mam problem z moim readerem. nie pobiera mi danych z liczników po wgraniu nowego licznika energii. Oczywiście w między czasie wpadła aktualizacja ESPhome. Tak sie prezentuje log:

INFO ESPHome 2026.2.2
INFO Reading configuration /config/esphome/wmbus-reader-v5.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO2 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq/#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from wmbus-reader-v5.local using esphome API
INFO Successfully resolved wmbus-reader-v5.local in 0.210s
INFO Successfully connected to wmbus-reader-v5 @ 192.168.0.76 in 0.034s
INFO Successful handshake with wmbus-reader-v5 @ 192.168.0.76 in 0.101s
[21:56:52.778][I][app:215]: ESPHome version 2026.2.2 compiled on 2026-02-26 21:49:34 +0100
[21:56:52.779][I][app:217]: Project esphome.wmbus_reader version 1.0
[21:56:52.779][I][app:222]: ESP32 Chip: ESP32 rev3.1, 2 core(s)
[21:58:44.493][W][wmbus:058]: Telegram not handled by any handler
[21:58:44.494][W][wmbus:063]: Check if telegram with address 03681284 can be parsed on:
[21:58:44.494][W][wmbus:066]: https://wmbusmeters.org/analyze/1c440106841268031407a03400fbbb55ba33051abd15f602d633e43635

jeszcze mój yaml:

dashboard_import:
  package_import_url: github://MariuszWoszczynski/WMBUS-reader/WMBUS-reader-v5.yaml@main
  import_full_config: true

substitutions:
  name: "wmbus-reader-v5"
  friendly_name: "WMBUS Reader V5"

esphome:
  name: "${name}"
  friendly_name: "${friendly_name}"
  project:
    name: esphome.wmbus_reader
    version: "1.0"

esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf
    advanced:
      minimum_chip_revision: "3.1"

#####  NOTE!!! In the external_components section there is a link to always the latest version of the repository. 
#####  If there will be any changes to the software, user intervention may be required 
#####  (e.g. changing the way sensors are configured, etc.). 
#####  Therefore, it is advisable to follow the information on the site of the author of the software:
#####  https://github.com/SzczepanLeon/esphome-components

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components:
      - socket_transmitter
      - wmbus_common
      - wmbus_radio
      - wmbus_meter


      
mdns:
  disabled: false
  
time:
 - platform: sntp
   id: time_sntp


# Enable logging
logger:
  level: info

# Enable Home Assistant API
api:
  encryption:
    key: "IAHzf/W7ltjO0oJPBxXC0k7YCXPKRpLmLU4lOnizC9Q="

ota:
  - platform: esphome
    password: "2732cd0e5a1bc7beb2d19537dd821c79"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  output_power: 18dB
#  static IP configuration (instead of data from the secret file)
#  manual_ip:
#    static_ip: 192.168.10.99
#    gateway: 192.168.10.1
#    subnet: 255.255.255.0
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Wmbus-Reader-V5 Fallback Hotspot"

#your mqtt parameters
#mqtt:
#  broker: 10.10.10.10  
#  port: 1883
#  username: username 
#  password: password 

captive_portal:

web_server: 
  port: 80
  version: 3

output:
  - platform: gpio
    id: status_led
    pin: GPIO02

spi:
  clk_pin: GPIO33
  mosi_pin: GPIO32
  miso_pin: GPIO19


wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO23
  reset_pin: GPIO22
  irq_pin: GPIO21
  on_frame:
    - then:
        - logger.log:
            format: "RSSI: %ddBm T: %s (%d)"
            args: [ frame->rssi(), frame->as_hex().c_str(), frame->data().size() ]
    - then:
        - repeat:
            count: 1
            then:
              - output.turn_on: status_led
              - delay: 100ms
              - output.turn_off: status_led
              - delay: 100ms

##############################################################################################################################################################################
##############################################################################################################################################################################
# The following sensors are examples, for IZAR, APATOR, UNISMART, Heat and Electricity meters. Leave only the configuration of such meters you have, delete the other sensors. 
# If you have another meter, check its configuration on:  https://github.com/SzczepanLeon/esphome-components
##############################################################################################################################################################################
##############################################################################################################################################################################

############################# Define counters here (typ, ID, key, mode...) ###############################
wmbus_meter:
  - id: water_meter_apator_main
    meter_id: 0x01695793  ######## enter your APATOR meter ID here ###########
    type: apator162
    key: "00000000000000000000000000000000"

  - id: water_meter_apator_garden
    meter_id: 0x01542371  ######## enter your APATOR meter ID here ###########
    type: apator162
    key: "00000000000000000000000000000000"

  - id: electricity_meter_main
    meter_id: 0x31631766  ######## enter your ELECTRICITY meter ID here ###########
    type: amiplus
    key: "7bf6a0e077bbc02ee965ffaae188a356"  ######## enter your key here ###########
    mode: 
      - T1
      - C1

########################### Define sensors here #####################################
sensor:

  - platform: wmbus_meter
    parent_id: water_meter_apator_main #Water meter Apator
    field: total_m3
    device_class: water
    name: Apator water meter - state
    accuracy_decimals: 2
    state_class: total_increasing
    unit_of_measurement: "m³"
  - platform: wmbus_meter
    parent_id: water_meter_apator_main
    field: rssi_dbm
    name: Apator water meter - RSSI
    unit_of_measurement: "dBm"

  - platform: wmbus_meter
    parent_id: water_meter_apator_garden #Water meter Apator
    field: total_m3
    device_class: water
    name: Garden Apator water meter - state
    accuracy_decimals: 2
    state_class: total_increasing
    unit_of_measurement: "m³"
  - platform: wmbus_meter
    parent_id: water_meter_apator_garden
    field: rssi_dbm
    name: Garden Apator water meter - RSSI
    unit_of_measurement: "dBm"

  - platform: wmbus_meter #Electicity meter
    parent_id: electricity_meter_main
    field: current_power_consumption_kw
    name: Electricity Meter - current power
    accuracy_decimals: 0
    device_class: power
    unit_of_measurement: W
    state_class: measurement
    filters:
      - multiply: 1000
  - platform: wmbus_meter
    parent_id: electricity_meter_main
    field: total_energy_consumption_kwh
    name: Electricity Meter - energy consumption
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
  - platform: wmbus_meter
    parent_id: electricity_meter_main
    field: rssi_dbm
    name: Electricity Meter RSSI


#######################################################################################

# More info on https://github.com/SzczepanLeon/esphome-components

W yamlu masz inny ID, a w logach inny.

Tyle wiem. Ale dlaczego i skąd to i czemu nie mam pakietów z moich liczników? Tego już nie.

Dobra, namówiliście mnie na zmianę z V3 na CC1101 na V5 i migrację na SX1276.
Niestety na V4 mam problem, że przy dekodowaniu ramki ESP sie restartuje. Może przejście na V5 rowiąże ten problem…

Dzisiaj zauważyłem, że sygnał mam na poziomie -75/-80dbm, wcześniej był -45/-60dbm. I to tylko po upd?

Przeczytałem cały temat, a że w tym temacie jestem zielony jak przysłowiowy szczypiorek to mam totalny mętlik w głowie. Doradzi ktoś jaką aktualnie kupić płytkę, najchętniej all in one, żeby nic nie lutować, podpinać gpio itd. Do odczytu mam Zimna/Ciepła woda Apator 162, Ciepłomierz Qheat 5.5 i PGE Apator Otus 1.

1 polubienie

ale to właśnie w lutowaniu i podpinaniu GPIO jest najlepsza zabawa :smiley:

1 polubienie

Jest zabawa pod warunkiem, że to coś potem działa.

Lutowania to ja się nie boję, tu akurat pierwsza w pełni samodzielna realizacja 15latka. Po prostu elegancja takich rozwiązań coraz mniej mi odpowiada. CC1101 za 7zł na testy… tyle ile kosztuje tyle wart… bez ładu i składu traci odczyty, raz gubi wszystkie liczniki na raz a innym razem pojedynczo. Ale najważniejszy test, czy da się wartości moich liczników odczytać, zdał. Teraz pora na coś bardziej stabilnego.