Odczyt licznika prądu PGE przez Wm-bus - Gama 350 Typ G35

Czy mógłbyś podesłać cały konfig?

A i jeszcze z tego co kojarze to czasem trzeba zrobić swapping (odwrócenie bajtami), ale przy sterowniku amiplus chyba się normalnie wpisuje.

@alb3rt czy też mógłbyś przedstawić swoją konfiguracje może coś masz źle.

1 polubienie
## ------------------ ##
##        Main        ##
## ------------------ ##
esphome:
  name: wmbus
  friendly_name: wmbus
  project:
    name: btm.Licznik ENERGII
    version: "1.0"
  platformio_options:
    upload_speed: 921600
  on_boot:
    priority: -100
    then:
      - output.turn_on: vext_output
      - delay: 2s
      - display.page.show: page_main
###
esp32:
  board: esp32dev
  framework:
    type: esp-idf
###
external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [wmbus_common, wmbus_radio, wmbus_meter]
    refresh: 0d 
###
logger:
  level: DEBUG
###
api:
  encryption:
    key: "VJqtYynsnrTMXYeDFVPgrR9RpRfNY/pOcSZwXXXXXXX"
###
ota:
  - platform: esphome
    password: "76097aae53563d37XXXXXXX"
###
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "wmb"
    password: "123456789"
## ------------------ ##
##      Display       ##
## ------------------ ##
light:
  - platform: binary
    output: led_output
    id: led_light
    restore_mode: ALWAYS_OFF
###
output:
  - platform: gpio
    id: vext_output
    pin: GPIO21
###
  - platform: gpio
    id: led_output
    pin: GPIO25
###
globals:
  - id: current_page
    type: int
    restore_value: false
    initial_value: '0'
###
  - id: page_count
    type: int
    restore_value: false
    initial_value: '4'
###
  - id: auto_page_change
    type: bool
    restore_value: true
    initial_value: 'true'
###
  - id: wmbus_frames_received
    type: int
    restore_value: false
    initial_value: '0'
###
  - id: last_frame_time
    type: uint32_t
    restore_value: false
    initial_value: '0'
###
interval:
  - interval: 10s
    then:
      - if:
          condition:
            and:
              - lambda: 'return id(auto_page_change);'
              - switch.is_on: oled_switch
          then:
            - lambda: |
                id(current_page) = (id(current_page) + 1) % id(page_count);
            - display.page.show: !lambda |
                switch (id(current_page)) {
                  case 0: return id(page_main);
                  case 1: return id(page_system);
                  default: return id(page_main);
                }
###
switch:
  - platform: template
    name: "Display"
    id: oled_switch
    optimistic: true
    restore_mode: RESTORE_DEFAULT_ON
    turn_on_action:
      - output.turn_on: vext_output
    turn_off_action:
      - output.turn_off: vext_output
###
  - platform: template
    name: "Auto Change"
    id: auto_page_switch
    optimistic: true
    restore_mode: RESTORE_DEFAULT_ON
    turn_on_action:
      - globals.set:
          id: auto_page_change
          value: 'true'
    turn_off_action:
      - globals.set:
          id: auto_page_change
          value: 'false'
###
time:
  - platform: homeassistant
    id: esptime
    timezone: Europe/Warsaw
###
debug:
  update_interval: 5s
###
i2c:
  sda: 4
  scl: 15
  scan: True
###
spi:
  clk_pin:
    number: GPIO5
    ignore_strapping_warning: true
  mosi_pin: GPIO27
  miso_pin: GPIO19
###
font:
  - file: "fonts/arial.ttf"
    id: font_main1
    size: 12
    glyphs: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:°%.-³ĄĆĘŁŃÓŚŹŻąćęłńóśźż"
  - file: "fonts/arial.ttf"
    id: font_main
    size: 16
    glyphs: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:°%.-³ĄĆĘŁŃÓŚŹŻąćęłńóśźż"
  - file: "fonts/arial.ttf"
    id: font_main2
    size: 18
    glyphs: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:°%.-³ĄĆĘŁŃÓŚŹŻąćęłńóśźż"
  - file: "fonts/arial.ttf"
    id: font_data
    size: 20
    glyphs: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:°%.-³ĄĆĘŁŃÓŚŹŻąćęłńóśźż"
#
captive_portal:
## ------------------ ##
##       WmBus        ##
## ------------------ ##
wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO18
  reset_pin: GPIO14
  irq_pin: GPIO35
###
wmbus_meter:
  - id: gama350
    meter_id: 0x30375779
    type: amiplus
    key: "21610568013764554039961156XXXXXX"
    mode: 
      - T1
###
sensor:

## ------------------ ##
##      amiplus       ##
## ------------------ ##
# --- Napięcie (V) ---
  - platform: wmbus_meter
    parent_id: gama350
    field: "voltage_at_phase_1_v"
    name: "Napięcie L1"
    unit_of_measurement: "V"
    accuracy_decimals: 0
    device_class: voltage
    state_class: measurement
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "voltage_at_phase_2_v"
    name: "Napięcie L2"
    unit_of_measurement: "V"
    accuracy_decimals: 0
    device_class: voltage
    state_class: measurement
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "voltage_at_phase_3_v"
    name: "Napięcie L3"
    unit_of_measurement: "V"
    accuracy_decimals: 0
    device_class: voltage
    state_class: measurement
###
# --- Moc Chwilowa (kW) --- #
  - platform: wmbus_meter
    parent_id: gama350
    field: "current_power_consumption_kw"
    name: "Pobór mocy chwilowej"
    unit_of_measurement: "kW"
    accuracy_decimals: 3
    device_class: power
    state_class: measurement
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "current_power_production_kw"
    name: "Produkcja mocy chwilowej"
    unit_of_measurement: "kW"
    accuracy_decimals: 3
    device_class: power
    state_class: measurement
###
# --- Energia Całkowita POBRANA (kWh) --- #
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_consumption_tariff_1_kwh"
    name: "Energia pobrana T1"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing 
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_consumption_tariff_2_kwh"
    name: "Energia pobrana T2"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_consumption_tariff_3_kwh"
    name: "Energia pobrana T3"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
###
# --- Energia Całkowita ODDANA (kWh) --- #
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_production_tariff_1_kwh"
    name: "Energia wysłana T1"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_production_tariff_2_kwh"
    name: "Energia wysłana T2"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
###
  - platform: wmbus_meter
    parent_id: gama350
    field: "total_energy_production_tariff_3_kwh"
    name: "Energia wysłana T3"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
###
  - platform: wmbus_meter
    parent_id: gama350
    field: rssi_dbm
    name: Electricity Meter RSSI
## ------------------ ##
##   end  amiplus     ##
## ------------------ ##
###
  - platform: wifi_signal
    name: "Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"
###
  - platform: copy
    source_id: wifi_signal_db
    name: "Signal"
    id: wifi_signal_percent
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    icon: "mdi:wifi"
    unit_of_measurement: "%"
    entity_category: "diagnostic"
    device_class: ""
###
  - platform: internal_temperature
    name: "CPU Temperature"
    id: cpu_temp
###
  - platform: template
    name: "Free Heap"
    id: free_heap
    lambda: 'return heap_caps_get_free_size(MALLOC_CAP_INTERNAL);'
    unit_of_measurement: "B"
    entity_category: "diagnostic"
    update_interval: 30s
    filters:
      - lambda: return x / 1024.0;
    accuracy_decimals: 1

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: 16
    address: 0x3C
    pages:
      - id: page_main
        lambda: |-
          if (!id(oled_switch).state) return;
          it.strftime(11, 5, id(font_data), "%d-%m-%Y", id(esptime).now());
          it.strftime(28, 35, id(font_main2), "%H:%M:%S", id(esptime).now());

    

      - id: page_system
        lambda: |-
          if (!id(oled_switch).state) return;
          it.print(0, 0, id(font_main1), "SYSTEM");
          it.printf(0, 12, id(font_main1), "WiFi: %.0f%%", id(wifi_signal_percent).state);
          it.printf(0, 24, id(font_main1), "CPU: %.1f°", id(cpu_temp).state);
          it.printf(0, 36, id(font_main1), "RAM: %.1fKB", id(free_heap).state);
###
text_sensor:
### electricity_meter ###
  - platform: wmbus_meter
    parent_id: gama350
    field: timestamp
    name: Electricity Meter timestamp
###
  - platform: wmbus_meter
    parent_id: gama350
    field: timestamp_zulu
    name: Electricity Meter timestamp zulu
###
  - platform: wmbus_meter
    parent_id: gama350
    field: current_alarms
    name: Electricity Meter alarms
###
  - platform: wifi_info
    ip_address:
      name: IP
      icon: "mdi:ip-network"
      id: ip_addr
    ssid:
      name: SSID
      icon: "mdi:access-point-network"
###
  - platform: version
    name: Version
    hide_timestamp: true
    disabled_by_default: false
    icon: mdi:new-box
    entity_category: "diagnostic"
###
  - platform: uptime
    name: Uptime
    id: uptime_sensor
    format:
      separator: " "
      days: "d"
      hours: "h"
      minutes: "m"
      expand: true
###
  - platform: template
    name: "Current Time"
    id: current_time
    update_interval: 10s
    lambda: return  id(esptime).now().strftime("%H:%M");
    entity_category: "diagnostic"
    icon: "mdi:clock"
###
  - platform: debug
    reset_reason:
      name: "Reset Reason"
###
button:
  - platform: restart
    name: Restart
    entity_category: "config"
###
web_server: 
  port: 80
  version: 3

A to spróbuj wpisać klucz w konfiguracji od tyłu ale parami (bajtami). Jeśli Twój klucz to 21 61 05 68..., wpisz go jako: key: "XX...56 11 96 39 40 55 64 37 01 68 05 61 21" (oczywiście bez spacji).

Ja używam starej wersji

  • source: github://SzczepanLeon/esphome-components@version_4
    i na ESPHome 25.6.3 - na nowszych wersjach się nie kompiluje.
    A zobacz czy 32 zera nie zadziałąją. Miałem tak kiedyś przy zmianie. PGE uruchomiło komunikację ale nie wygenerowali klucza i działało na 32 zerach.

Ręce opadają.
Niestety, ale nadal wszystko wskazuje na to że otrzymałem zły klucz.
Instalowałem wersję 4, robiłem różne kombinacje z kluczem i nic.

Mam taką płytkę jeśli to pomoże.

Próbowałeś dekodować ramkę pod tym adresem:

https://wmbusmeters.org/analyze/

Przynajmniej sprawdzisz poprawność ID licznika i klucza. A potem możesz dalej szukać czy to problem po stronie konfiga.

Auto driver    : not found!
Similar driver : unknown 00/00
Using driver   : unknown 00/00
000   : be length (190 bytes)
001   : 44 dll-c (from meter SND_NR)
002   : ed14 dll-mfct (EGM)
004   : 79573730 dll-id (30375779)
008   : 01 dll-version
009   : 02 dll-type (Electricity meter)
010   : 7a tpl-ci-field (EN 13757-3 Application Layer (short tplh))
011   : 7c tpl-acc-field
012   : 00 tpl-sts-field (OK)
013   : b005 tpl-cfg 05b0 (AES_CBC_IV nb=11 cntn=0 ra=0 hc=0 )
015   : 5525 decrypt check bytes (ERROR should be 2f2f)
017 CE: 0230DADAD10C481D8E9D039FB30AFEAA3F2CE054920C50B2F2EA97419ED402C550BDFBFCCE7065EA5BB30562A15136D9DF60624F1EA4533717279737A50B4C67289419025A676D84EAEFA2B8B5BB0C6FB0A74168C0D5A321377A3CC9F64FF76482C22B4724351EE248E68EEFF523BDDDCAA9E56E7AB56926319C77E20C2E135DDEA557EF462CA1588B41EFF133960FBEC86C9A952174B3D0EBD9C8D28C7C4AC2095A6BF7FE5B0099825D90C72F15 failed decryption. Wrong key?

{
    "_":"telegram",
    "media":"electricity",
    "meter":"unknown",
    "name":"",
    "id":"30375779",
    "timestamp":"1970-01-01T00:00:00Z"

Spróbuj w tym wypadku konwertera Twojego klucza z ASCII na HEX i ponownie przetestuj ramkę.

Czytałeś poprzednie posty?

ACSII dla jednego znaku ma 1 bajt czyli przy tym liczniku to 16 znaków(16bajtów) bo tyle ma ramka klucz ma 32 znaki czy możesz mi powiedzieć jak ma to się zgadzać?

1 polubienie

OK wszystko jasne. Sorry :wink:
Musieli chyba coś jednak pomylić z kluczem. U mnie PGE przy okazji uruchamiania wmbusa (nie włączyli przy instalacji licznika) wystawiło papierowe potwierdzenie wraz z Hex-em (choć wcześniej niektórzy pisali, że dostawali ascii).

Odpowiedz z PGE.

Odpowiadając

  • co jaki czas licznik wysyła telegramy – cały czas na żądanie

  • w jakich godzinach to wykonuje – całą dobę na żądanie

  • dla pewności -czy wysyła to na częstotliwości 868 MHz - tak

  • czy na liczniku powinna być zapalona jakaś dioda LED czy też symbol na wyświetlaczu świadcząca o włączeniu M-Bus - poniżej wskaźnik na wyświetlaczu

Do urządzenia niezbędne jest wprowadzenie podanego hasła bez tego nie rozkoduje się danych. Proszę zwrócić uwagę na format hasła, podane jest w wielkości heksadecymalnej nie szesnastkowej.

Taką odpowiedź otrzymałem z PGE po odblokowaniu protokołu Wm-bus.
Odsłuchuję częstotliwość CC1101 widzę i dekoduje telegramy z nakładki Izar, le z licznika Gamma 350 zupełna cisza. Cy ten licznik może wysyłać telegramy tylko na żądanie jak pisze PGE.

Możliwe, że jest np. w trybie T2, być może powinieneś poprosić dostawcę o wysyłanie w trybie T1.

cześć wszystkim, w związku z tym że mimo wielu prób i rekonfiguracji, testów z chatami AI, nie udało mi się uruchomić tego na esp32-s3 (44 piny) z modułem SX1276. Może ktoś kto uruchomił taki zestaw podzieli się jego konfiguracją z działającą “pinologią”. Chaty wysiadają i za każdym razem podpowiadają inną konfigurację w której zaprzeczają twierdzeniom z tej poprzedniej. Za wszelkie merytoryczne odpowiedzi z góry dziękuję.

Musisz wskazać jaką masz wersje płytki , link do aukcji. One się różnią minimalnie.

tam masz przykład (projekt jest wprawdzie trochę inny, ale generalne zasady te same)

Płytki mam różne, wszystkie esp32-s3 44 pin, N16R8, P2N8

Z linku powyżej:

esphome:
  platformio_options:
    upload_speed: 921600

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

logger:
  level: debug
  baud_rate: 115200

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

i2c:
  frequency: 800kHz
  scan: False
  sda: GPIO4
  scl:
    number: GPIO15
    ignore_strapping_warning: true

display:
  - platform: ssd1306_i2c
    model: SSD1306 128x64
    address: 0x3C
    auto_clear_enabled: True
    contrast: 50%
    reset_pin:
      number: GPIO16
    update_interval: never

output:
  - platform: gpio
    id: vext_output
    pin: GPIO21
    inverted: True

light:
  - platform: status_led
    id: wmbus_gateway_status_led
    pin: GPIO25

binary_sensor:
  - platform: gpio
    id: ext_button
    pin:
      number: GPIO0
      ignore_strapping_warning: true
      mode: input
      inverted: True

dla pozostałych szablon które wymieniłeś :

substitutions:
  spi_sck: GPIO12
  spi_mosi: GPIO11
  spi_miso: GPIO13

  sx_cs:  GPIO10
  sx_rst: GPIO9
  sx_irq: GPIO8    # DIO0 / IRQ z SX1272

spi:
  id: spi_bus
  clk_pin: ${spi_sck}
  mosi_pin: ${spi_mosi}
  miso_pin: ${spi_miso}

wmbus_radio:
  - id: lora
    radio_type: SX1276
    spi_id: spi_bus
    cs_pin: ${lora_cs}
    reset_pin: ${lora_rst}
    irq_pin:
      number: ${lora_dio0}
      mode: INPUT_PULLUP

dla

definicja płytki

esp32:
  board: esp32-s3-devkitc-1
  flash_size: 16MB 
  framework:
    type: esp-idf 

psram:
  mode: octal 
  speed: 80MHz