SlimmeLezer P1 olvasó összekötése ADA P1 Bridge-el (>1.5.4v) – útmutató

Ez a leírás azoknak szól, akiknek már van egy működő SlimmeLezer (ESPHome‑os P1/DSMR olvasójuk), és szeretnék az ADA P1 Bridge‑et úgy használni, hogy az ne a saját P1 portjáról, hanem a SlimmeLezer által hálózaton publikált nyers telegramból dolgozzon.


A cél egyszerű:

  • SlimmeLezer olvas a villanyóráról.

  • HTTP‑n kiadja a nyers DSMR telegramot.

  • ADA P1 Bridge (min 1.5.5 verzió) ezt az URL‑t pollolja, és ugyanúgy feldolgozza (JSON, rules, MQTT), mintha a saját P1‑jén jött volna.

Ha ezt végigcsinálod, kapsz egy stabil, „P1‑port nélküli” ADA Bridge‑et, ami tök jól működik akkor is, ha a mérő mellett csak egy SlimmeLezer fér el.


1) Mire lesz szükséged?

Hardver / hálózat:

  1. Egy már működő SlimmeLezer ESPHome firmware‑rel (tipikusan ESP8266 D1 Mini).

  2. Egy ADA P1 Bridge, beállítva Wi‑Fi‑re.

  3. Ugyanazon a helyi hálón legyenek (ugyanaz a router / Wi‑Fi, ne vendégháló, ne külön VLAN).

Szoftver:

  1. ESPHome (Home Assistant ESPHome addon vagy standalone).

  2. A SlimmeLezer YAML konfigurációja.


2) SlimmeLezer teljes példa YAML (copy‑paste alap)

Ha még nincs SlimmeLezered, vagy a mostanit szeretnéd egységesíteni, ez egy jól bevált teljes config. Ezt tedd be az ESPHome‑ba egy új eszközhöz, majd a saját értékeidhez igazítsd (PIN, board, szenzorok).

Fontos: a secrets.yaml fájlra is szükség lesz (az alján mutatom).

substitutions:
  device_name: slimmelezer
  device_description: "DIY P1 module to read your smart meter"

esphome:
  name: ${device_name}
  comment: "${device_description}"
  name_add_mac_suffix: false
  project:
    name: zuidwijk.slimmelezer
    version: "1.0"
  on_boot:
    then:
      - if:
          condition:
            lambda: return id(has_key);
          then:
            - lambda: |-
                std::string key(id(stored_decryption_key), 32);
                id(dsmr_instance).set_decryption_key(key);
          else:
            - logger.log:
                level: info
                format: "Not using decryption key. If you need to set a key use Home Assistant service 'ESPHome: ${device_name}_set_dsmr_key'"

esp8266:
  board: d1_mini
  restore_from_flash: true

wifi:
  networks:
    - ssid: !secret wifi_ssid
      password: !secret wifi_password
  ap:
    ssid: ${device_name}
    ap_timeout: 15s

captive_portal:

logger:
  baud_rate: 0

api:
  services:
    - service: set_dsmr_key
      variables:
        private_key: string
      then:
        - logger.log:
            format: "Setting private key %s. Set to empty string to disable"
            args: [private_key.c_str()]
        - globals.set:
            id: has_key
            value: !lambda "return private_key.length() == 32;"
        - lambda: |-
            if (private_key.length() == 32)
              private_key.copy(id(stored_decryption_key), 32);
            id(dsmr_instance).set_decryption_key(private_key);

ota:
  - platform: esphome

web_server:
  port: 80
  version: 3

uart:
  id: p1_uart
  baud_rate: 115200
  rx_pin: D7
  rx_buffer_size: 4000

globals:
  - id: has_key
    type: bool
    restore_value: yes
    initial_value: "false"
  - id: stored_decryption_key
    type: char[32]
    restore_value: yes

dsmr:
  id: dsmr_instance
  uart_id: p1_uart
  max_telegram_length: 4000

sensor:
  - platform: dsmr
    energy_delivered_lux:
      name: "Energy Consumed Luxembourg"
      state_class: total_increasing
    energy_delivered_tariff1:
      name: "Energy Consumed Tariff 1"
      state_class: total_increasing
    energy_delivered_tariff2:
      name: "Energy Consumed Tariff 2"
      state_class: total_increasing
    energy_returned_lux:
      name: "Energy Produced Luxembourg"
      state_class: total_increasing
    energy_returned_tariff1:
      name: "Energy Produced Tariff 1"
      state_class: total_increasing
    energy_returned_tariff2:
      name: "Energy Produced Tariff 2"
      state_class: total_increasing
    power_delivered:
      name: "Power Consumed"
      accuracy_decimals: 3
    power_returned:
      name: "Power Produced"
      accuracy_decimals: 3
    electricity_failures:
      name: "Electricity Failures"
      icon: mdi:alert
    electricity_long_failures:
      name: "Long Electricity Failures"
      icon: mdi:alert
    voltage_l1:
      name: "Voltage Phase 1"
    voltage_l2:
      name: "Voltage Phase 2"
    voltage_l3:
      name: "Voltage Phase 3"
    current_l1:
      name: "Current Phase 1"
    current_l2:
      name: "Current Phase 2"
    current_l3:
      name: "Current Phase 3"
    power_delivered_l1:
      name: "Power Consumed Phase 1"
      accuracy_decimals: 3
    power_delivered_l2:
      name: "Power Consumed Phase 2"
      accuracy_decimals: 3
    power_delivered_l3:
      name: "Power Consumed Phase 3"
      accuracy_decimals: 3
    power_returned_l1:
      name: "Power Produced Phase 1"
      accuracy_decimals: 3
    power_returned_l2:
      name: "Power Produced Phase 2"
      accuracy_decimals: 3
    power_returned_l3:
      name: "Power Produced Phase 3"
      accuracy_decimals: 3
    gas_delivered:
      name: "Gas Consumed"
      state_class: total_increasing
    gas_delivered_be:
      name: "Gas Consumed Belgium"
      state_class: total_increasing

  - platform: uptime
    name: "SlimmeLezer Uptime"
  - platform: wifi_signal
    name: "SlimmeLezer Wi‑Fi Signal"
    update_interval: 60s

text_sensor:
  - platform: dsmr
    identification:
      name: "DSMR Identification"
    p1_version:
      name: "DSMR Version"
    p1_version_be:
      name: "DSMR Version Belgium"
    telegram:
      id: telegram_raw
      name: "Raw DSMR Telegram"

  - platform: wifi_info
    ip_address:
      name: "SlimmeLezer IP Address"
    ssid:
      name: "SlimmeLezer Wi‑Fi SSID"
    bssid:
      name: "SlimmeLezer Wi‑Fi BSSID"

  - platform: version
    name: "ESPHome Version"
    hide_timestamp: true

2/A) secrets.yaml

A fenti config akkor fog fordulni, ha van mellette egy secrets.yaml. Minimum ez kell bele:

wifi_ssid: "A_TE_WIFI_HALOZATOD"
wifi_password: "A_TE_WIFI_JELSZAVAD"

Ha a P1 portod titkosított (Belgium, Luxemburg, néhány holland mérő), akkor a kulcsot nem ide írod, hanem Home Assistantben a szolgáltatással adod meg:

  • ESPHome: slimmelezer_set_dsmr_key

  • private_key: "32 karakteres kulcs"


3) A nyers telegram végpont (URL) ellenőrzése

Miután a SlimmeLezer online, a web_server automatikusan kirakja a text_sensorok értékeit.

Fontos kompatibilitási megjegyzés: az ADA P1 Bridge nem csak a „sima” szöveges DSMR telegramot tudja megenni, hanem azt is, ha a végpont JSON‑ba csomagolva adja vissza, és abban egy value kulcs alatt van a telegram (pl. {"value":"/…!XXXX"}). Ilyenkor a Bridge automatikusan a value mező tartalmát bontja ki és dolgozza fel. SlimmeLezer esetén ez általában plain text, de ha valami proxy / HA‑s szenzor miatt mégis JSON jönne, ezzel sem lesz gond.

A telegram_raw szenzor URL‑je így néz ki:

http://<slimmelezer_ip>/text_sensor/raw_dsmr_telegram

Példa:

http://192.168.31.149/text_sensor/raw_dsmr_telegram

Mit kell látnod? Egy komplett DSMR telegramot, ami:

  • / jellel kezdődik

  • több OBIS sort tartalmaz (1-0:1.8.0(...), 1-0:32.7.0(...) stb.)

  • !XXXX résszel végződik (CRC)

Ha ezt látod, akkor jöhet a Bridge.


4) ADA P1 Bridge átkapcsolása URL‑es telegram módra

Az ADA P1 Bridge firmware‑ben van erre egy direkt végpont.

4/A) URL mentése és tesztelése egyben

POST kérés a Bridge felé:

curl -X POST "http://okosvillanyora.local:8989/tg/test" \
  -H "Content-Type: application/json" \
  -d '{"url":"http://192.168.31.149/text_sensor/raw_dsmr_telegram"}'

Várható válaszok:

  • {"ok":true,...} → az URL mentve, a Bridge átállt URL módra.

  • {"ok":false,"msg":"..."} → hibát talált (lásd hibakeresés lent).

A Bridge elmenti az URL‑t a belső tárhelyre (LittleFS‑be), szóval újraindítás után is így indul.

4/B) Státusz ellenőrzése

GET http://okosvillanyora.local:8989/tg/status

Itt látod többek közt:

  • using_url: true/false

  • url_set: true/false

  • url_masked (maszkolva, biztonságosan)


5) Innentől hogyan működik a rendszer?

  • A SlimmeLezer olvassa a villanyórát P1‑en.

  • A Bridge 10 másodpercenként lekéri a telegramot a megadott URL‑ről.

  • A Bridge ugyanúgy feldolgozza, mintha direktben soros P1‑ről jött volna:

    • JSON generálás

    • szabályok futtatása (rules)

    • MQTT publikálás

    • webes API‑k


6) Hibakeresés (ha valami nem megy elsőre)

1) ADA azt írja: „nem tűnik telegramnak”

  • Nyisd meg böngészőben a SlimmeLezer URL‑t.

  • Ha nem komplett telegram jön, akkor nem a telegram_raw text_sensort hívod.

2) Titkosított telegram (BE/LU)

  • Add meg a DSMR kulcsot a HA service‑szel (set_dsmr_key).

  • Kulcs nélkül a telegram olvashatatlan lesz, az ADA eldobja.

3) Csonka telegram / néha jó, néha rossz

  • A SlimmeLezerben legyen nagy buffer:

uart:
  rx_buffer_size: 4000

dsmr:
  max_telegram_length: 4000

4) IP cím változik

  • A routerben érdemes fix IP‑t adni a SlimmeLezernek.

  • Ha már változott, elég újra meghívni a /tg/test‑et az új címmel.

5) A Bridge és a SlimmeLezer nem látják egymást

  • Ne vendéghálón legyenek.

  • Ne legyen köztük hálózati szeparáció (VLAN).

  • Próbáld meg pingelni a SlimmeLezer IP‑jét a hálóról.

Hozzászólások

Még nincs hozzászólás, légy te az első!