Smart Meter per Modbus in HA

Ich habe keine Probs mit dem Modbus. Der letzte Fehler ist aufgetaucht, bei einen Update letztes Jahr. Da mussten zwei Zeile raus aus der Config.

- name: "SDM72D" 
  type: tcp
  host: 192.168.178.209
  port: 8887
  #close_comm_on_error: true
  timeout: 9
  #retry_on_empty: true
    
  sensors:

Siehe die aus kommentierten Zeilen. Wenn es nicht dein Problem löst, zeig bitte mal die Fehlermeldung.

Hab ich versucht aber ohne Erfolg
Hier mal die Fehler:

2024-03-18 15:47:10.289 ERROR (MainThread) [homeassistant.config] Invalid config for ‘modbus’ at modbus.yaml, line 105: export_wh_since_last_reset: count illegal with data_type: float32 ‘modbus->0->sensors->8’, got {‘name’: ‘export_wh_since_last_reset’, ‘address’: 74, ‘input_type’: ‘input’, ‘count’: 2, ‘slave’: 1, ‘precision’: 2, ‘data_type’: ‘float32’, ‘unit_of_measurement’: ‘kWh’, ‘device_class’: ‘energy’}, please check the docs at Modbus - Home Assistant

Aber ich hab an meiner modbus yaml nichts geändert. Nur mal seit längerem HA geupdatet…

Schau mal hier: HA 23.10 nach dem Update keine Modbus Daten mehr in der Lovelace

Auch ChatGPT meinte, das der Count: 2 nicht richtig ist :smiley:

“Es scheint, dass Sie versuchen, ein float32 -Datenformat mit einer Länge von 2 zu verwenden, was für den export_wh_since_last_reset -Sensor ungültig ist. Das Modbus-Protokoll unterstützt normalerweise verschiedene Datentypen mit festen Längen, und float32 hat normalerweise eine Länge von 4 .”

1 „Gefällt mir“

Das ist tatsächlich die Lösung gewesen. ChatGPT zu fragen hätte mir auch mal einfallen können :smiley:
Vielen Dank für den Hinweis, dachte mir schon das da in einem Patch etwas an HA geändert wurde

Hallo,

kann mir mal wer bitte weiterhelfen.
Beis mir gerade die Zähe aus mit diesem Zähler:

MODBUS ENERGIEZÄHLER 1-PHASIG
Art. Nr. 200156 von Loxone.

Bekomme einfach nicht zum laufen.

Habe 2 em345 per rs485 die laufen ohne probleme

Baudrate wird automatisch ermittelt - na ja….

Da ist eine minimale Recoverzeit von 5s angegeben. Schneller darfst du nicht abfragen (scan_interval: >= 5). Mehrere Sensoren in HA sind auch mehrere Abfragen; eventuell solltest du einen Registerblock lesen und mit Templates auseinandernehmen. Maximal 20 Register in einer Abfrage.

Hallo,

habe mal den Zähler nur alleine am modbus gehabt, trozdem keine werte.

- name: modbuspi
  #unique_id: modbuspi
  #delay : 5
  #timeout : 5
  #message_wait_milliseconds : 1000
  type: serial
  method: rtu
  baudrate: 9600
  bytesize: 8
  stopbits: 1
  parity: N
  port: /dev/ttyUSB0

  sensors:

    - name: Küche_test_v
      unique_id: Küche_test_v
      unit_of_measurement: V
      state_class: measurement
      device_class: voltage
      slave: 4
      address: 36
      data_type: int16
      input_type: input
      precision: 2
      #    count: 2
      scale: 0.1
      scan_interval: 15
      lazy_error_count: 999
      swap: word


    - name: Küche_test_a
      unique_id: Küche_test_a
      unit_of_measurement: "A"
      slave: 4
      address: 37
      data_type: int16
      scale: 0.1
      precision: 1
      device_class: current
      scan_interval: 15

doch leider auch ohne erfolg.

Das sind ebenfalls 2 Abfragen - mag sein dass das Ding wegen der 5s da schon bockt.

Alternativ könntest Du mit einem einzigen Sensor ab Adresse 36 mal ein int32 lesen und dir ausgeben lassen. Dann kannst Du sehen, ob überhaupt Daten kommen.

Hallo,

habe es jetzt nur mal mit einer Abfrage probiert,
aber das sch… ding spukt nichts aus.

unavailable - nicht erreichbar

- name: modbus_hub
  type: serial
  port: /dev/ttyUSB0
  baudrate: 9600
  bytesize: 8
  method: rtu
  parity: E
  stopbits: 1

  delay: 0
  message_wait_milliseconds: 30
  timeout: 10

  sensors:
    - name: Lox_Test
      unique_id: Lox_Test_V
      unit_of_measurement: V
      state_class: measurement
      device_class: voltage
      slave: 10
      address: 36
      data_type: int32
      input_type: input
      precision: 2
      #    count: 2
      scale: 0.1
      scan_interval: 15
      lazy_error_count: 999
      swap: word

Was sagt denn das Log? Fehlermeldung oder nix?

Baudrate stimmt? device_address (“slave” kennt der Modbus-Standard nicht mehr) ist tatsächlich 10? Kann die Modbus-Funktion beim Zähler deaktiviert sein?

Hallo,

habe im Zähler jetzt mal die adresse auf 5 geändert und ansatt “Slave” device_address angegeben.

Logger: homeassistant.components.modbus.modbus
Quelle: components/modbus/modbus.py:331
Integration: Modbus (Dokumentation, Probleme)
Erstmals aufgetreten: 12:44:14 (1 Vorkommnisse)
Zuletzt protokolliert: 12:44:14

Pymodbus: modbus_hub: Error: device: 5 address: 36 -> pymodbus returned isError True

gibt es kein PC tool mit dem ich das teil mal so testen könnte??

Du brauchst halt was, das von RS485 auf USB umsetzt, dann geht das. Tools gibt es reichlich.

Einen ESP32 hast du nicht zufällig und ein RS485-Modul?

habe einen usb-485 adapter
mit den stelle ich die 3 phasen zähler em340 ein. das geht ohne probleme, ist halt die software des herstellers, da geht natürlich kein fremder zähler.

esp32 habe ich auch ein paar zuhause :slight_smile:

Nachtrag:
Och man, so jetzt läuft das ding :slight_smile:

- name: modbus_hub
  type: serial
  port: /dev/ttyUSB0
  baudrate: 9600
  bytesize: 8
  method: rtu
  parity: E
  stopbits: 1

  delay: 0
  message_wait_milliseconds: 30
  timeout: 10

  sensors:
    - name: Lox_Test
      unique_id: Lox_Test_V
      unit_of_measurement: V
      state_class: measurement
      device_class: voltage
      slave: 5
      address: 35
      data_type: int16
      input_type: holding
      precision: 2
      #    count: 2
      scale: 0.1
      scan_interval: 15
      # lazy_error_count: 999
    #  swap: word

    - name: test_adresse_modbus
      slave: 5
      address: 23
      input_type: holding
      unit_of_measurement: A
      state_class: measurement
      # count: 1
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16

input type = holding das war der Fehler

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

1 „Gefällt mir“

Moin Moin zusammen,

vielleicht kann mir hier jemand weiterhelfen.
Ich habe 4 SDM230 die an einem RS485 dran hängen, und super funktionieren,
nun kam ein SDM630 dazu, der aber keine Daten sendet, der Telefonhöhrer leuchtet nie auf… Woran kann das liegen, evtl defekt?
Baudrate, Adresse usw. hab ich richtig eingestellt, auch nur der SDM630 am RS485 bringt nichts.

Hast du schon mal mit einem anderen Tool probiert, ob der Zähler überhaupt was am Modbus rausgibt? Ich hatte das ja das Tool Gineers weiter oben mal gepostet. Es gibt auch andere Tools zum testen. Nur um zu sehen, ob überhaupt eine Kommunikation statt findet.

Moin, ich habe gerade auch einen ESP32 mit einen RS485 TTL in Arbeit. Bei Tasmota muss man RE dann zusätzlich auf ground ziehen, ist das richtig? Kannst du sonst vielleicht bitte die Anleitung aufführen, wo Du mit gemacht hast? Vielen Dank!

Moin,

ich habe einen EASTRON SDM72D-M Zähler über Modbus an einem Protoss PE11.

In meiner /homeassistant/configuration.yaml habe ich folgende Zeile hinzugefügt:
modbus: !include modbus.yaml

Dann habe ich die modbus.yaml mit folgendem Inhalt erstellt:

- name: "SDM72D" 
  type: tcp
  host: 192.168.178.178
  port: 5022
  #close_comm_on_error: true
  timeout: 9
  #retry_on_empty: true
    
  sensors:
    - name: wallbox_innogy
      address: 72
      input_type: input
      slave: 1
      precision: 2
      data_type: float32
      unit_of_measurement: kWh
      device_class: energy

Beim überprüfen meiner Konfiguration kommt kein Fehler.
Dann starte ich neu, wo und wie finde ich jetzt den Zählerwert ?
Unter Entwicklerwerkzeuge → Zustände finde ich auch nichts.

EDIT:

habe homeassistant komplett neu gestartet und jetzt ist der Sensor schon mal da.
Leider mit dem Zustand: unavailable

In den Protokollen habe ich nur dies gefunden:

Logger: pymodbus.logging
Quelle: components/modbus/modbus.py:389
Erstmals aufgetreten: 23:20:00 (8 Vorkommnisse)
Zuletzt protokolliert: 23:24:12

No response received after 3 retries, continue with next request

Wo könnte noch ein Fehler liegen?

Die Register stehen in HEX in der Doku, müssen in HomeAssistant aber Dezimal angegeben werden.

Nimm als Beispiel “30053 - Total system power.”, dann steht ganz rechts Hi Byte/ Low Byte = 00 34. Jetzt nimmst Du den Windows Tachenrechner calc, wechselst in den Programmiermodus, klickst auf HEX und tippst 0034 ein (die führenden Nullen verschwinden und brauchst Du nicht eintippen). Bei DEC steht nun 52. Das muss in die yaml bei “address : 52”.

Sicher, dass der Port stimmt?

Jetzt wird ein Schuh draus :face_with_peeking_eye: Nach fast zwei Jahren hab ich es endlich kapiert. Vielen Dank Christian!!!