Integration of an Eltako Modbus Electric Meter

I was a little surprised that nobody tried to integrate a dsz15dzmod-3x80a via modbus directly into Homeassistant

So i tried it and failed - but probably you could help me here:
in linux i can read each of the entities via mbpoll like this:

mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 99 -c 2 /dev/ttyUSB1

This is the modbus documentation of the electric meter:

but in homeassistant i accordingly created a modbus.yaml but the readings don’t work there - here my testing config:

- name: eltako
  type: serial
  method: rtu
  port: /dev/ttyUSB1
  #port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5069RR4-if00-port0
  baudrate: 9600
  stopbits: 1
  bytesize: 8
  parity: N
  timeout: 5
  sensors:
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 1 -c 2 /dev/ttyUSB1
    - name: "Spannung L1-N"
      unit_of_measurement: "V"
      slave: 1
      address: 0
      input_type: holding
      # liest zwei Register aus:
      data_type: int16
#      count: 2
      scale: 0.1

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 3 -c 2 /dev/ttyUSB1
    - name: "Spannung L2-N"
      unit_of_measurement: "V"
      slave: 1
      address: 2
      input_type: holding
      data_type: int32
      scale: 0.1

    # mpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 5 -c 2 /dev/ttyUSB1
    - name: "Spannung L3-N"
      unit_of_measurement: "V"
      slave: 1
      address: 4
      input_type: holding
      data_type: int64
      scale: 0.1

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 7 -c 2 /dev/ttyUSB1
    - name: "Strom L1"
      unit_of_measurement: "A"
      slave: 1
      address: 6
      input_type: holding
      data_type: float16
      scale: 0.001

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 9 -c 2 /dev/ttyUSB1
    - name: "Strom L2"
      unit_of_measurement: "A"
      slave: 1
      address: 8
      input_type: holding
      data_type: float32
      scale: 0.001

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 11 -c 2 /dev/ttyUSB1
    - name: "Strom L3"
      unit_of_measurement: "A"
      slave: 1
      address: 10
      input_type: holding
      data_type: float64
      scale: 0.001

    # L1 active power
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 13 -c 2 /dev/ttyUSB1
    - name: "L1 Active Power"
      unit_of_measurement: "kW"
      slave: 1
      address: 12
      input_type: holding
      data_type: uint16
      scale: 0.001

    # L2 active power
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 15 -c 2 /dev/ttyUSB1
    - name: "L2 Active Power"
      unit_of_measurement: "kW"
      slave: 1
      address: 14
      input_type: holding
      data_type: uint32
      scale: 0.001

    # L3 active power
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 17 -c 2 /dev/ttyUSB1
    - name: "L3 Active Power"
      unit_of_measurement: "kW"
      slave: 1
      address: 16
      input_type: holding
      data_type: uint64
      scale: 0.001

    # L1 power factor
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 31 -c 2 /dev/ttyUSB1
    - name: "L1 Power Factor"
      unit_of_measurement: ""
      slave: 1
      address: 30
      input_type: holding
      data_type: int16
#      scale: 0.001

    # L2 power factor
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 33 -c 2 /dev/ttyUSB1
    - name: "L2 Power Factor"
      unit_of_measurement: ""
      slave: 1
      address: 32
      input_type: holding
      data_type: int32

    # L3 power factor
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 35 -c 2 /dev/ttyUSB1
    - name: "L3 Power Factor"
      unit_of_measurement: ""
      slave: 1
      address: 34
      input_type: holding
      data_type: int64

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 53 -c 2 /dev/ttyUSB1
    - name: "Total active power"
      unit_of_measurement: "kW"
      slave: 1
      address: 52
      input_type: holding
      data_type: int32
      scale: 1

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 63 -c 2 /dev/ttyUSB1
    - name: "Total Power Factor"
      unit_of_measurement: ""
      slave: 1
      address: 62
      input_type: holding
      data_type: int32
      scale: 1

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 73 -c 2 /dev/ttyUSB1
    - name: "Gesamtbezogene Wirkenergie"
      unit_of_measurement: "kWh"
      slave: 1
      address: 72
      input_type: holding
      data_type: float32
      # count: 2
      scale: 0.001

      # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 75 -c 2 /dev/ttyUSB1
    - name: "Gesamteingespeiste Wirkenergie"
      unit_of_measurement: "kWh"
      slave: 1
      address: 74
      input_type: holding
      data_type: string
      count: 2
      scale: 0.001

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 97 -c 2 /dev/ttyUSB1
    - name: "Teilbezogene Wirkenergie"
      unit_of_measurement: "kWh"
      slave: 1
      address: 96
      input_type: holding
      data_type: float32

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 99 -c 2 /dev/ttyUSB1
    - name: "Teileingespeiste Wirkenergie"
      unit_of_measurement: "kWh"
      slave: 1
      address: 98
      input_type: holding
      data_type: float32
      scale: 0.001

but none of the data_types produces working entries:

what can i do?

My HAOS Instance:

Home Assistant
Core 2024.11.3
Supervisor 2024.11.4
Operating System 13.2
Frontend 20241106.2

The FTDI in HAOS:

in the Error log are repeated error-entries

2024-12-04 11:51:23.280 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 6 -> pymodbus returned isError True
2024-12-04 11:51:23.526 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 12 -> pymodbus returned isError True
2024-12-04 11:51:23.726 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 30 -> pymodbus returned isError True
2024-12-04 11:51:38.267 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 6 -> pymodbus returned isError True
2024-12-04 11:51:38.465 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 12 -> pymodbus returned isError True
2024-12-04 11:51:38.709 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 30 -> pymodbus returned isError True
2024-12-04 11:51:53.260 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 6 -> pymodbus returned isError True
2024-12-04 11:51:53.435 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 12 -> pymodbus returned isError True
2024-12-04 11:51:53.644 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 30 -> pymodbus returned isError True
2024-12-04 11:52:08.232 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 6 -> pymodbus returned isError True
2024-12-04 11:52:08.442 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 12 -> pymodbus returned isError True
2024-12-04 11:52:08.688 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 30 -> pymodbus returned isError True
2024-12-04 11:52:23.375 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 6 -> pymodbus returned isError True
2024-12-04 11:52:23.624 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 12 -> pymodbus returned isError True
2024-12-04 11:52:23.867 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: eltako: Error: device: 1 address: 30 -> pymodbus returned isError True

For easier debugging i reduced the config to one value:

- name: eltako
  type: serial
  method: rtu
  port: /dev/ttyUSB1
  #port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5069RR4-if00-port0
  baudrate: 9600
  stopbits: 1
  bytesize: 8
  parity: N
  timeout: 5
  sensors:
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 1 -c 2 /dev/ttyUSB0
    - name: "Spannung L1-N"
      unit_of_measurement: "V"
      slave: 1
      address: 0
      input_type: holding
      data_type: int32  # Korrekt für 4-Byte-Integer
      scale: 0.1

in the debug logs than appears this:

2024-12-04 14:56:21.298 DEBUG (SyncWorker_4) [pymodbus.logging] Current transaction state - TRANSACTION_COMPLETE
2024-12-04 14:56:21.298 DEBUG (SyncWorker_4) [pymodbus.logging] Running transaction 228
2024-12-04 14:56:21.298 DEBUG (SyncWorker_4) [pymodbus.logging] SEND: 0x0 0xe4 0x0 0x0 0x0 0x6 0x2 0x3 0x40 0x69 0x0 0x3c
2024-12-04 14:56:21.298 DEBUG (SyncWorker_4) [pymodbus.logging] New Transaction state "SENDING"
2024-12-04 14:56:21.301 DEBUG (SyncWorker_4) [pymodbus.logging] Changing transaction state from "SENDING" to "WAITING FOR REPLY"
2024-12-04 14:56:21.575 DEBUG (SyncWorker_4) [pymodbus.logging] Changing transaction state from "WAITING FOR REPLY" to "PROCESSING REPLY"
2024-12-04 14:56:21.575 DEBUG (SyncWorker_4) [pymodbus.logging] RECV: 0x0 0xe4 0x0 0x0 0x0 0x7b 0x2 0x3 0x78 0xc 0x1c 0x0 0x4a 0x0 0x0 0x0 0x0 0x0 0xe5 0x0 0xe6 0x3 0xe8 0x0 0x0 0x8 0xd 0x0 0x1e 0x0 0x3d 0x1b 0x86 0x0 0x23 0x0 0xf6 0xff 0xff 0xff 0xff 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x9 0xf 0x0 0x0 0x0 0x0 0x0 0xa2 0x9 0x9 0x0 0xe7 0x9 0x12 0x1 0xa4 0x0 0x1 0x0 0x1 0xff 0xff 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0xfa 0x0 0x1e 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-04 14:56:21.575 DEBUG (SyncWorker_4) [pymodbus.logging] Processing: 0x0 0xe4 0x0 0x0 0x0 0x7b 0x2 0x3 0x78 0xc 0x1c 0x0 0x4a 0x0 0x0 0x0 0x0 0x0 0xe5 0x0 0xe6 0x3 0xe8 0x0 0x0 0x8 0xd 0x0 0x1e 0x0 0x3d 0x1b 0x86 0x0 0x23 0x0 0xf6 0xff 0xff 0xff 0xff 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x9 0xf 0x0 0x0 0x0 0x0 0x0 0xa2 0x9 0x9 0x0 0xe7 0x9 0x12 0x1 0xa4 0x0 0x1 0x0 0x1 0xff 0xff 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0xfa 0x0 0x1e 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-04 14:56:21.575 DEBUG (SyncWorker_4) [pymodbus.logging] Factory Response[ReadHoldingRegistersResponse': 3]
2024-12-04 14:56:21.575 DEBUG (SyncWorker_4) [pymodbus.logging] Adding transaction 228
2024-12-04 14:56:21.576 DEBUG (SyncWorker_4) [pymodbus.logging] Very short frame (NO MBAP):  wait for more data
2024-12-04 14:56:21.576 DEBUG (SyncWorker_4) [pymodbus.logging] Getting transaction 228
2024-12-04 14:56:21.576 DEBUG (SyncWorker_4) [pymodbus.logging] Changing transaction state from "PROCESSING REPLY" to "TRANSACTION_COMPLETE"
2024-12-04 14:56:21.576 DEBUG (SyncWorker_4) [pymodbus.logging] [3100, 74, 0, 0, 229, 230, 1000, 0, 2061, 30, 61, 7046, 35, 246, 65535, 65535, 0, 65535, 65535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2319, 0, 0, 162, 2313, 231, 2322, 420, 1, 1, 65535, 1, 0, 0, 0, 0, 0, 0, 0, 506, 30, 0, 0, 0]
2024-12-04 14:56:21.577 DEBUG (SyncWorker_42) [pymodbus.logging] Current transaction state - TRANSACTION_COMPLETE
2024-12-04 14:56:21.577 DEBUG (SyncWorker_42) [pymodbus.logging] Running transaction 229
2024-12-04 14:56:21.577 DEBUG (SyncWorker_42) [pymodbus.logging] SEND: 0x0 0xe5 0x0 0x0 0x0 0x6 0x2 0x3 0x40 0xbf 0x0 0x58
2024-12-04 14:56:21.577 DEBUG (SyncWorker_42) [pymodbus.logging] New Transaction state "SENDING"
2024-12-04 14:56:21.577 DEBUG (SyncWorker_42) [pymodbus.logging] Changing transaction state from "SENDING" to "WAITING FOR REPLY"

as the value is allways “0” in Homeassistant - there seems to be something wrong with the interpreted HEX-values or it conversion?
grafik

Cause this is a wall of text meanwhile - here the short summary question:
if i can Read a Modbus Smartmeter entry with this command:

sudo mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 1 -c 2 /dev/ttyUSB0

and get this output:

mbpoll 1.0-0 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.

Protocol configuration: Modbus RTU
Slave configuration...: address = [1]
                        start reference = 1, count = 2
Communication.........: /dev/ttyUSB0,       9600-8N1 
                        t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave 1... Ctrl-C to stop)
[1]: 	0x0000
[2]: 	0x59BC
-- Polling slave 1... Ctrl-C to stop)
[1]: 	0x0000
[2]: 	0x59BC
-- Polling slave 1... Ctrl-C to stop)
[1]: 	0x0000
[2]: 	0x59AC
-- Polling slave 1... Ctrl-C to stop)
[1]: 	0x0000
[2]: 	0x59AC
^C--- /dev/ttyUSB0 poll statistics ---
4 frames transmitted, 4 received, 0 errors, 0.0% frame loss

everything was closed.
Have a nice day !

the output value 59AC is transformed into decimal 22956 which corresponds to the 229,56V

why is this translated to homeassistant modbus config like this not working?

- name: eltako
  type: serial
  method: rtu
  #port: /dev/ttyUSB1
  port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5069RR4-if00-port0
  baudrate: 9600
  stopbits: 1
  bytesize: 8
  parity: N
  sensors:
    - name: "Spannung L1-N"
      unit_of_measurement: "V"
      slave: 1
      address: 0
      input_type: holding
      data_type: int32
      scale: 0.01

i only get this in the logs:

2024-12-05 17:33:50.580 DEBUG (MainThread) [pymodbus.logging] Adding transaction 0
2024-12-05 17:33:50.580 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer - 
2024-12-05 17:33:50.580 DEBUG (MainThread) [pymodbus.logging] send: 0x1 0x3 0x0 0x0 0x0 0x2 0xc4 0xb
2024-12-05 17:33:50.606 DEBUG (MainThread) [pymodbus.logging] recv: 0x1 old_data:  addr=None
2024-12-05 17:33:50.607 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1
2024-12-05 17:33:50.607 DEBUG (MainThread) [pymodbus.logging] recv: 0x3 old_data:  addr=None
2024-12-05 17:33:50.608 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3
2024-12-05 17:33:50.609 DEBUG (MainThread) [pymodbus.logging] recv: 0x4 old_data:  addr=None
2024-12-05 17:33:50.609 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4
2024-12-05 17:33:50.610 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.610 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0
2024-12-05 17:33:50.610 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.611 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.611 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0
2024-12-05 17:33:50.611 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.612 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.612 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0
2024-12-05 17:33:50.612 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.613 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.613 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0
2024-12-05 17:33:50.613 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.614 DEBUG (MainThread) [pymodbus.logging] recv: 0xfa old_data:  addr=None
2024-12-05 17:33:50.614 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0 0xfa
2024-12-05 17:33:50.614 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] recv: 0x33 old_data:  addr=None
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0 0xfa 0x33
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] Getting Frame - 0x3 0x4 0x0 0x0 0x0 0x0
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] Factory Response[ReadHoldingRegistersResponse': 3]
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] Frame advanced, resetting header!!
2024-12-05 17:33:50.615 DEBUG (MainThread) [pymodbus.logging] Getting transaction 0
2024-12-05 17:33:50.646 DEBUG (MainThread) [pymodbus.logging] Adding transaction 0
2024-12-05 17:33:50.646 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer - 
2024-12-05 17:33:50.646 DEBUG (MainThread) [pymodbus.logging] send: 0x1 0x3 0x0 0x2 0x0 0x2 0x65 0xcb
2024-12-05 17:33:50.666 DEBUG (MainThread) [pymodbus.logging] recv: 0x1 old_data:  addr=None
2024-12-05 17:33:50.666 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1
2024-12-05 17:33:50.667 DEBUG (MainThread) [pymodbus.logging] recv: 0x3 old_data:  addr=None
2024-12-05 17:33:50.667 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3
2024-12-05 17:33:50.668 DEBUG (MainThread) [pymodbus.logging] recv: 0x4 old_data:  addr=None
2024-12-05 17:33:50.668 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4
2024-12-05 17:33:50.669 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.669 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0
2024-12-05 17:33:50.669 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.670 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.670 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0
2024-12-05 17:33:50.670 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.671 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.671 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0
2024-12-05 17:33:50.671 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.672 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 old_data:  addr=None
2024-12-05 17:33:50.672 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0
2024-12-05 17:33:50.672 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.673 DEBUG (MainThread) [pymodbus.logging] recv: 0xfa old_data:  addr=None
2024-12-05 17:33:50.673 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0 0xfa
2024-12-05 17:33:50.673 DEBUG (MainThread) [pymodbus.logging] Frame - not ready
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] recv: 0x33 old_data:  addr=None
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x3 0x4 0x0 0x0 0x0 0x0 0xfa 0x33
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] Getting Frame - 0x3 0x4 0x0 0x0 0x0 0x0
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] Factory Response[ReadHoldingRegistersResponse': 3]
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] Frame advanced, resetting header!!
2024-12-05 17:33:50.674 DEBUG (MainThread) [pymodbus.logging] Getting transaction 0
2024-12-05 17:33:55.254 DEBUG (SyncWorker_5) [pymodbus.logging] Current transaction state - TRANSACTION_COMPLETE
2024-12-05 17:33:55.254 DEBUG (SyncWorker_5) [pymodbus.logging] Running transaction 14
2024-12-05 17:33:55.254 DEBUG (SyncWorker_5) [pymodbus.logging] SEND: 0x0 0xe 0x0 0x0 0x0 0x6 0x2 0x3 0x40 0x69 0x0 0x3c
2024-12-05 17:33:55.254 DEBUG (SyncWorker_5) [pymodbus.logging] New Transaction state "SENDING"
2024-12-05 17:33:55.255 DEBUG (SyncWorker_5) [pymodbus.logging] Changing transaction state from "SENDING" to "WAITING FOR REPLY"
2024-12-05 17:33:55.754 DEBUG (SyncWorker_5) [pymodbus.logging] Changing transaction state from "WAITING FOR REPLY" to "PROCESSING REPLY"
2024-12-05 17:33:55.754 DEBUG (SyncWorker_5) [pymodbus.logging] RECV: 0x0 0xe 0x0 0x0 0x0 0x7b 0x2 0x3 0x78 0xc 0x6 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xdc 0x0 0x0 0x0 0x0 0x1 0x7d 0x0 0x0 0x0 0x0 0x1 0xee 0x0 0x0 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x8 0xfb 0x0 0x0 0x0 0x0 0x0 0xb0 0x8 0xfd 0x1 0x54 0x9 0x5 0x2 0xf 0x0 0x0 0x0 0x0 0xff 0xff 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x3 0xb5 0x3 0xb5 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-05 17:33:55.754 DEBUG (SyncWorker_5) [pymodbus.logging] Processing: 0x0 0xe 0x0 0x0 0x0 0x7b 0x2 0x3 0x78 0xc 0x6 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xdc 0x0 0x0 0x0 0x0 0x1 0x7d 0x0 0x0 0x0 0x0 0x1 0xee 0x0 0x0 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0xff 0xff 0xff 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x8 0xfb 0x0 0x0 0x0 0x0 0x0 0xb0 0x8 0xfd 0x1 0x54 0x9 0x5 0x2 0xf 0x0 0x0 0x0 0x0 0xff 0xff 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x3 0xb5 0x3 0xb5 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-05 17:33:55.754 DEBUG (SyncWorker_5) [pymodbus.logging] Factory Response[ReadHoldingRegistersResponse': 3]
2024-12-05 17:33:55.755 DEBUG (SyncWorker_5) [pymodbus.logging] Adding transaction 14
2024-12-05 17:33:55.755 DEBUG (SyncWorker_5) [pymodbus.logging] Very short frame (NO MBAP):  wait for more data
2024-12-05 17:33:55.755 DEBUG (SyncWorker_5) [pymodbus.logging] Getting transaction 14
2024-12-05 17:33:55.755 DEBUG (SyncWorker_5) [pymodbus.logging] Changing transaction state from "PROCESSING REPLY" to "TRANSACTION_COMPLETE"
2024-12-05 17:33:55.755 DEBUG (SyncWorker_5) [pymodbus.logging] [3078, 0, 0, 0, 0, 220, 0, 0, 381, 0, 0, 494, 0, 0, 65535, 65535, 0, 65535, 65535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2299, 0, 0, 176, 2301, 340, 2309, 527, 0, 0, 65535, 1, 0, 0, 0, 0, 0, 0, 0, 949, 949, 0, 0, 0]
2024-12-05 17:33:55.757 DEBUG (SyncWorker_0) [pymodbus.logging] Current transaction state - TRANSACTION_COMPLETE
2024-12-05 17:33:55.757 DEBUG (SyncWorker_0) [pymodbus.logging] Running transaction 15
2024-12-05 17:33:55.757 DEBUG (SyncWorker_0) [pymodbus.logging] SEND: 0x0 0xf 0x0 0x0 0x0 0x6 0x2 0x3 0x40 0xbf 0x0 0x58
2024-12-05 17:33:55.757 DEBUG (SyncWorker_0) [pymodbus.logging] New Transaction state "SENDING"
2024-12-05 17:33:55.757 DEBUG (SyncWorker_0) [pymodbus.logging] Changing transaction state from "SENDING" to "WAITING FOR REPLY"
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Changing transaction state from "WAITING FOR REPLY" to "PROCESSING REPLY"
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] RECV: 0x0 0xf 0x0 0x0 0x0 0xb3 0x2 0x3 0xb0 0x0 0x0 0x1 0xc3 0x0 0x0 0xb 0xc5 0x0 0xe 0xae 0xe5 0x0 0xe 0xae 0xe5 0x0 0x0 0x0 0x5a 0x0 0x0 0x5 0xe8 0x0 0x2 0xbd 0x46 0x0 0x2 0xbd 0x46 0x0 0x0 0x0 0x55 0x0 0x0 0x5 0x72 0x0 0x2 0x77 0xfe 0x0 0x2 0x77 0xfe 0x0 0x0 0x2 0x5d 0x0 0x0 0x10 0xe 0x0 0xe 0x8b 0x94 0x0 0xe 0x8b 0x94 0x0 0x0 0x7 0x30 0x0 0x0 0x26 0xaf 0x0 0x6 0x5c 0x16 0x0 0x6 0x5c 0x16 0x0 0x0 0x0 0x1 0x0 0x0 0x0 0x7 0x0 0x0 0x2 0x4 0x0 0x0 0x2 0x4 0x0 0x0 0x0 0x26 0x0 0x0 0x1 0x56 0x0 0x3 0xa7 0xe8 0x0 0x3 0xa7 0xe8 0x0 0x0 0x2 0x21 0x0 0x0 0x7 0x9f 0x0 0x0 0x5e 0x2f 0x0 0x0 0x5e 0x2f 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Processing: 0x0 0xf 0x0 0x0 0x0 0xb3 0x2 0x3 0xb0 0x0 0x0 0x1 0xc3 0x0 0x0 0xb 0xc5 0x0 0xe 0xae 0xe5 0x0 0xe 0xae 0xe5 0x0 0x0 0x0 0x5a 0x0 0x0 0x5 0xe8 0x0 0x2 0xbd 0x46 0x0 0x2 0xbd 0x46 0x0 0x0 0x0 0x55 0x0 0x0 0x5 0x72 0x0 0x2 0x77 0xfe 0x0 0x2 0x77 0xfe 0x0 0x0 0x2 0x5d 0x0 0x0 0x10 0xe 0x0 0xe 0x8b 0x94 0x0 0xe 0x8b 0x94 0x0 0x0 0x7 0x30 0x0 0x0 0x26 0xaf 0x0 0x6 0x5c 0x16 0x0 0x6 0x5c 0x16 0x0 0x0 0x0 0x1 0x0 0x0 0x0 0x7 0x0 0x0 0x2 0x4 0x0 0x0 0x2 0x4 0x0 0x0 0x0 0x26 0x0 0x0 0x1 0x56 0x0 0x3 0xa7 0xe8 0x0 0x3 0xa7 0xe8 0x0 0x0 0x2 0x21 0x0 0x0 0x7 0x9f 0x0 0x0 0x5e 0x2f 0x0 0x0 0x5e 0x2f 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Factory Response[ReadHoldingRegistersResponse': 3]
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Adding transaction 15
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Very short frame (NO MBAP):  wait for more data
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Getting transaction 15
2024-12-05 17:33:56.555 DEBUG (SyncWorker_0) [pymodbus.logging] Changing transaction state from "PROCESSING REPLY" to "TRANSACTION_COMPLETE"
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] [0, 451, 0, 3013, 14, 44773, 14, 44773, 0, 90, 0, 1512, 2, 48454, 2, 48454, 0, 85, 0, 1394, 2, 30718, 2, 30718, 0, 605, 0, 4110, 14, 35732, 14, 35732, 0, 1840, 0, 9903, 6, 23574, 6, 23574, 0, 1, 0, 7, 0, 516, 0, 516, 0, 38, 0, 342, 3, 42984, 3, 42984, 0, 545, 0, 1951, 0, 24111, 0, 24111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x01\xc3']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x0b\xc5']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x0e', b'\xae\xe5']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x0e', b'\xae\xe5']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x00Z']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x05\xe8']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x02', b'\xbdF']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x02', b'\xbdF']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x00U']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x00', b'\x05r']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x02', b'w\xfe']
2024-12-05 17:33:56.556 DEBUG (SyncWorker_0) [pymodbus.logging] handle: [b'\x00\x02', b'w\xfe']

So - to solve the problem I opened myself:
The documentation was a bit confusing and here is a working Eltako two-directional counter configuration for Homeassistant:

I still have to check whether the scaling is all right - but here it is for the general public so that no one like me has to start from scratch:

- name: "Stromzähler OG"
  type: serial
  method: rtu
  #port: /dev/ttyUSB1
  port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5069RR4-if00-port0
  baudrate: 9600
  stopbits: 1
  bytesize: 8
  parity: N
#  timeout: 5
  sensors:
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 1 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 3 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 5 -c 2 /dev/ttyUSB0
    - name: "Spannung L-N"
      unit_of_measurement: "V"
      slave: 1
      slave_count: 2
      address: 0
      input_type: input
      data_type: uint32
      scale: 0.01

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 7 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 9 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 11 -c 2 /dev/ttyUSB0
    - name: "Strom L"
      unit_of_measurement: "A"
      slave: 1
      slave_count: 2 # add 2 additional following devices L1-L3
      address: 6 # mbpoll address -1
      input_type: input
      data_type: uint32

    # L1 active power
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 13 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 15 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 17 -c 2 /dev/ttyUSB0
    - name: "Active Power L"
      unit_of_measurement: "kW"
      slave: 1
      slave_count: 2
      address: 12
      input_type: input
      data_type: uint32
      #scale: 0.001

    # L1 power factor
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 31 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 33 -c 2 /dev/ttyUSB0
    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 35 -c 2 /dev/ttyUSB0
    - name: "Power Factor L"
      unit_of_measurement: "W"
      slave: 1
      slave_count: 2
      address: 30
      input_type: input
      data_type: uint32
      #scale: 0.01

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 53 -c 2 /dev/ttyUSB0
    - name: "Total active power"
      unit_of_measurement: "kW"
      slave: 1
      address: 52
      input_type: input
      data_type: uint32
      #scale: 1

    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 63 -c 2 /dev/ttyUSB0
    - name: Gesamt-Leistungsfaktor #"Total Power Factor"
      #unit_of_measurement: ""
      slave: 1
      address: 62
      input_type: input
      data_type: uint32
      scale: 0.001
      precision: 3
      device_class: power_factor

      # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 73 -c 2 /dev/ttyUSB0
    - name: "Gesamtbezogene Wirkenergie OG"
      unit_of_measurement: "kWh"
      slave: 1
      address: 72
      input_type: input
      data_type: int32
      scale: 0.01
      device_class: energy
      state_class: total_increasing
      precision: 2

      # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 75 -c 2 /dev/ttyUSB0
    - name: "Gesamteingespeiste Wirkenergie OG"
      unit_of_measurement: "kWh"
      slave: 1
      address: 74
      input_type: input
      data_type: int32
      scale: 0.01
      precision: 2


    # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 97 -c 2 /dev/ttyUSB0
    - name: "Teilbezogene Wirkenergie OG"
      unit_of_measurement: "kWh"
      slave: 1
      address: 96
      input_type: input
      data_type: int32
      scale: 0.01
      precision: 2

      # mbpoll -m rtu -a 1 -b 9600 -d 8 -s 1 -P none -t 3:hex -r 99 -c 2 /dev/ttyUSB0
    - name: "Teileingespeiste Wirkenergie OG"
      unit_of_measurement: "kWh"
      slave: 1
      address: 98
      input_type: input
      data_type: int32
      scale: 0.01
      precision: 2

Hey mr-gosh,

I would also like to order a dsz15dzmod-3x80a. If I have Home Assistant running, do I need an additional gateway or device to read the data via Modbus? Could you send me a picture of your wiring, how do you get the data into the network. Do I only need an Ethernet cable (RJ45)?

Thanks for the help

Hi - i used an usb to ttl adapter that is directly plugged into my rpi.
The cable is a simple two wired Speaker cable :zipper_mouth_face::grin:

One side is on the top right corner of the meter (don’t forget to put in the resistor that got delivered with the meter on that end!).
The other side is in the usb ports of the ttl adapter.

There is also an additional mqtt gateway available from eltako but i didn’t want to buy that expensive stuff.
If you do it that way you would need a different setup - which seems to be possible too.

I have now built a solution with an ESP32 board and a TTL to RS485 board. The ESP32 was flashed with ESPHome. The data from the electricity meter is transmitted from the ESP32 directly to Home Assistant via the network. The sensors for Home Assistant are already created in ESPHome.

Excerpt from the ESPHome .yaml:

uart:
  id: mod_bus #optional
  tx_pin: GPIO17
  rx_pin: GPIO16 
  baud_rate: 9600
  stop_bits: 1
  parity: NONE
  data_bits: 8
  #debug:
  #  direction: BOTH
  #  dummy_receiver: false
  #  after:
  #    delimiter: "\n"
  #  sequence:
  #    - lambda: UARTDebug::log_string(direction, bytes);

modbus:
  send_wait_time: 200ms
  flow_control_pin: GPIO2

modbus_controller:
  - id: epever #optional
    address: 0x1 ## the Modbus device addr
    command_throttle: 0ms
    setup_priority: -10
    update_interval: 5s

sensor:
  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l1
    name: "Spannung L1"
    address: 0x0000
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l2
    name: "Spannung L2"
    address: 0x0002
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l3
    name: "Spannung L3"
    address: 0x0004
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l1
    name: "Strom L1"
    address: 0x0006
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l2
    name: "Strom L2"
    address: 0x0008
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  
  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l3
    name: "Strom L3"
    address: 0x000A
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l1
    name: "Leistung L1"
    address: 0x000C
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l2
    name: "Leistung L2"
    address: 0x000E
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l3
    name: "Leistung L3"
    address: 0x0010
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"

  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l1
    name: "Leistungsfaktor L1"
    address: 0x001E
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001    
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l2
    name: "Leistungsfaktor L2"
    address: 0x0020
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001 

  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l3
    name: "Leistungsfaktor L3"
    address: 0x0022
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001     
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtleistung
    name: "Gesamtleistung"
    address: 0x0034
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamt_leistungsfaktor
    name: "Gesamt-Leistungsfaktor"
    address: 0x003E
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001    
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtenergie_netzbezug
    name: "Gesamtenergie Netzbezug"
    address: 0x0048
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtenergie_netzeinspeisung
    name: "Gesamtenergie Netzeinspeisung"
    address: 0x004A
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: teilenergie_netzbezug
    name: "Teilenergie Netzbezug"
    address: 0x0060
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: teilenergie_netzeinspeisung
    name: "Teilenergie Netzeinspeisung"
    address: 0x0062
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
1 Like

Awesome - much cleaner than my setup.
Could you add some information about your hardware setup?
Which connection did you establish between the meter and the ESP32?
only the rx pin to GPIO 17 and the TX pin of the meter to GPIO16?

Which board did you use?

Is this the whole esphome config we are looking?
So more is not necessary to readout the meter?

we could than emerge this integration a little further :smiley:

You can find a picture of the wiring in the first post at this link. Please note that the wiring in the picture is not quite correct, please read the solution note. There is still a missing connection between DE and RE.

I have used the following Hardware:

  • DollaTek 5PCS 5V MAX485 / RS485 module TTL to RS-485 MCU
  • ESP32 board

    (should not matter which type, only in the ESPHome config the correct board must be selected and in the pinout of the esp32 you have to check which PIN is the RX and TX)

First I tried an RS485 to TTL module with a MAX13487 chip. This makes the wiring a bit easier but unfortunately it didn’t work. The packet response from the Eltako Smart Meter is so fast that apparently the MAX13487 chipset is too slow.

Here again the complete yaml file for ESP Home

esphome:
  name: wohnung-stromzaehler

esp32:
  board: esp32doit-devkit-v1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: ""

ota:
  - platform: esphome
    password: ""

wifi:
  ssid: "Your SSID"
  password: "your pw"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Wohnung Stromzaehler"
    password: "your pw"

captive_portal:
    
uart:
  id: mod_bus #optional
  tx_pin: GPIO17
  rx_pin: GPIO16 
  baud_rate: 9600
  stop_bits: 1
  parity: NONE
  data_bits: 8
  #debug:
  #  direction: BOTH
  #  dummy_receiver: false
  #  after:
  #    delimiter: "\n"
  #  sequence:
  #    - lambda: UARTDebug::log_string(direction, bytes);

modbus:
  send_wait_time: 200ms
  flow_control_pin: GPIO2
  
modbus_controller:
  - id: epever #optional
    address: 0x1 ## the Modbus device addr
    command_throttle: 0ms
    setup_priority: -10
    update_interval: 5s

sensor:
  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l1
    name: "Spannung L1"
    address: 0x0000
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l2
    name: "Spannung L2"
    address: 0x0002
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: spannung_l3
    name: "Spannung L3"
    address: 0x0004
    unit_of_measurement: "V"
    register_type: read
    value_type: U_DWORD
    device_class: "voltage"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l1
    name: "Strom L1"
    address: 0x0006
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l2
    name: "Strom L2"
    address: 0x0008
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  
  - platform: modbus_controller
    modbus_controller_id: epever
    id: strom_l3
    name: "Strom L3"
    address: 0x000A
    unit_of_measurement: "A"
    register_type: read
    value_type: U_DWORD
    device_class: "current"
    state_class: "measurement"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l1
    name: "Leistung L1"
    address: 0x000C
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l2
    name: "Leistung L2"
    address: 0x000E
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: leistung_l3
    name: "Leistung L3"
    address: 0x0010
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"

  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l1
    name: "Leistungsfaktor L1"
    address: 0x001E
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001    
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l2
    name: "Leistungsfaktor L2"
    address: 0x0020
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001 

  - platform: modbus_controller
    modbus_controller_id: epever
    id: Leistungsfaktor_l3
    name: "Leistungsfaktor L3"
    address: 0x0022
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001     
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtleistung
    name: "Gesamtleistung"
    address: 0x0034
    unit_of_measurement: "W"
    register_type: read
    value_type: S_DWORD
    device_class: "power"
    state_class: "measurement"
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamt_leistungsfaktor
    name: "Gesamt-Leistungsfaktor"
    address: 0x003E
    register_type: read
    value_type: S_DWORD
    device_class: "power_factor"
    state_class: "measurement"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001    
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtenergie_netzbezug
    name: "Gesamtenergie Netzbezug"
    address: 0x0048
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: gesamtenergie_netzeinspeisung
    name: "Gesamtenergie Netzeinspeisung"
    address: 0x004A
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: epever
    id: teilenergie_netzbezug
    name: "Teilenergie Netzbezug"
    address: 0x0060
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: epever
    id: teilenergie_netzeinspeisung
    name: "Teilenergie Netzeinspeisung"
    address: 0x0062
    unit_of_measurement: "kWh"
    register_type: read
    value_type: U_DWORD
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

I hope this will help you!

1 Like