Slimmelezer.yaml for ISKRA AM550 - dsmr data received, but just the start

Hi,

I am owning an Slimmelezer+ , connected to the (brand new) ISKRA AM550 over P1 port , using the following slimmelezer.yaml:

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

esphome:
  name: slimmelezer
  name_add_mac_suffix: False
  project:
    name: zuidwijk.slimmelezer
    version: "2.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  
  
wifi:
  networks:
    - ssid: "*****"
      password: "*****"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ${device_name}
    
  # Powersaving for brownout due to 250mA restriction P1
  output_power: 14dB

captive_portal:

# Enable logging
logger:
  # Serial logging is disabled by setting the logger baud rate to 0.
  # Otherwise the logger will occupy the hardware UART, making it unavailable
  # for receiving smart meter data on pin D7 (GPIO13).
  baud_rate: 0
  level: VERY_VERBOSE
  #  logs: 
#    component: ERROR

# Enable Home Assistant API
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
  password: ""

dashboard_import:
  package_import_url: github://zuidwijk/dsmr/slimmelezer.yaml@main
  import_full_config: true
  
web_server:
  port: 80

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

  
uart:
  baud_rate: 115200
  rx_pin: GPIO13 #D7
  rx_buffer_size: 2048
  data_bits: 7
  parity: NONE 
  stop_bits: 1  

dsmr:
  id: dsmr_instance
  max_telegram_length: 1700
  #request_pin: D5
  #request_interval: 15s
  receive_timeout: 2s
  crc_check: False
  # For Luxembourg users set here your decryption key
  #decryption_key: !secret decryption_key // enable this when using decryption for Luxembourg; key like '00112233445566778899AABBCCDDEEFF'

debug:
  update_interval: 5s  # More frequent debug updates
  
sensor:
  - platform: dsmr
    energy_delivered_lux:
      name: "Energy Consumed Luxembourg"
    energy_delivered_tariff1:
      name: "Energy Consumed Tariff 1"
    energy_delivered_tariff2:
      name: "Energy Consumed Tariff 2"
    energy_returned_lux:
      name: "Energy Produced Luxembourg"
    energy_returned_tariff1:
      name: "Energy Produced Tariff 1"
    energy_returned_tariff2:
      name: "Energy Produced Tariff 2"
    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"
    gas_delivered_be:
      name: "Gas Consumed Belgium"
  - 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"
#    timestamp:
#      name: "Timestamp"
  - 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

after running “esphome logs slimmelezer.yaml” i get:

[23:08:39][D][debug:035]: ESPHome version 2025.2.2
[23:08:39][D][debug:039]: Free Heap Size: 7720 bytes
[23:08:39][D][debug:041]: Flash Chip: Size=4096kB Speed=40MHz Mode=DOUT
[23:08:39][D][debug:050]: Chip ID: 0x000AECEB
[23:08:39][D][debug:051]: SDK Version: 2.2.2-dev(38a443e)
[23:08:39][D][debug:052]: Core Version: 3.1.2
[23:08:39][D][debug:053]: Boot Version=31 Mode=1
[23:08:39][D][debug:054]: CPU Frequency: 80
[23:08:39][D][debug:055]: Flash Chip ID=0x0016405E
[23:08:39][D][debug:056]: Reset Reason: Software/System restart
[23:08:39][D][debug:057]: Reset Info: Software/System restart
[23:08:39][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=268339 (now=269339)
[23:08:40][VV][scheduler:225]: Running timeout 'heap' with interval=1000 last_execution=268992 (now=269996)
[23:08:42][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=271047 (now=272047)
[23:08:43][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=272339 (now=273342)
[23:08:44][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=273047 (now=274049)
[23:08:44][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=273228 (now=274228)
[23:08:45][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=274339 (now=275341)
[23:08:46][V][dsmr:142]: Header of telegram found
[23:08:46][V][dsmr:176]: Footer of telegram found
[23:08:46][V][dsmr:257]: Trying to parse telegram
[23:08:46][V][dsmr:118]: Stop reading data from P1 port
[23:08:46][E][dsmr:266]: /ISK9\2M551T-200
 ^
Invalid identification string
[23:08:46][V][dsmr:105]: Start reading data from P1 port
[23:08:46][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=275047 (now=276047)
[23:08:46][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=275228 (now=276228)
[23:08:46][VV][scheduler:225]: Running interval 'update' with interval=1000 last_execution=275339 (now=276339)
[23:08:47][VV][scheduler:225]: Running interval 'update' with interval=5000 last_execution=271916 (now=276916)

A have also tried 9600, also 8N1, but nothing works.

I hva also installed Home Assistant (docker) on my WinPC, added the slimmelezer device using local IP but no electricity data is shown, only diagnostic data:

# Diagnostic
ESPHome Version 2025.2.2
IP Address 192.168.*****
Uptime 104 s
Wi-Fi BSSID 10:A3:B8:******
Wi-Fi Signal -75 dBm
Wi-Fi SSID *****

Any advice on how to change the yaml file so that the whole package would be captured. It looks like the slimmelezer is sending dsmr data.

Thanks

The DSMR component cannot handle this meter.

From what I remember from the DSMR specification, the fifth character of the identification string should be a “5”, but with your meter it’s a “9”. I don’t know why that is, but that’s the cause of your problem.

Robert, thank you. So since there is no way my ISKRA meter will be upgraded by my electric company (lol) I would have to find a way to somehow set the Slimmelezer+ to be able to read and decode the data.

The thing is that if I put ESP-link on my Slimmelezer+ I get all these data over the web UI (192.168.x.x):

So there is a way of getting the right data from my ISKRA 550 over P1, but the question is how?

It does look like normal P1 telegram data (although it seems to be missing a checksum right at the end).

To get it working (with ESPHome at least) the underlying DSMR library needs to be updated to support these meters. I’ve read up on this some more and the “9” indicates that the meter supports a baudrate of (up to?) 115200, whereas the regular “5” means 9600baud.

Hi Robert,

Yes, there is no checksum at the end. The electro comapny said it cannot be done. So without CRC.

The meter works ok with 115200 7N1 as shown on the Microcontroller console.
Sadly, I have no clue (not enough experince) to know how to update the DSMR library.

I have just bought another P1 meter from Homewizard and again, it connects OK to Wifi, it sends WiFi status on Andorid app, but no Power Data.

Looks like I will have to give up.