Modbus auslesen

Hallo zusammen,

ich würde gerne die Temperaturwerte meiner Heizungsregelung mittels Modbus auslesen und anzeigen lassen.

Ich habe dazu in einem Haustechnik Forum einen entsprechenden Code gefunden und wenn ich hier schaue , dann sollte HA dies ha alles von Haus aus können.

Ich muss nur die IP und Port entsprechend anpassen und die Werte welche ich auslesen möchte.

Wie bekomme ich das ganze nun in HA visuell dargestellt? Einfach in die Configuration.yaml einfügen wird’s wohl nicht sein.

Hier mal der Code:

modbus:
- name: systacomfort
type: tcp
host: ----- IP ------
port: ---- PORT -----
sensors:
- name: "Außentemperatur"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 0
data_type: int16
- name: "Vorlauftemp HK1"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 1
data_type: int16
- name: "Rücklauftemp HK1"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 2
data_type: int16
- name: "Warmwassertemp Oben"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 3
data_type: int16
- name: "Vorlauftemp HK2"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 7
data_type: int16
- name: "Rücklauftemp HK2"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 8
data_type: int16
- name: "Vorlauftemp Kessel"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 12
data_type: int16
- name: "Rücklauf Kessel"
scan_interval: 100
slave: 1
input_type: input
scale: 0.1
unit_of_measurement: °C
address: 13
data_type: int16
- name: "Sollwert Vorlauftemp HK1"
scan_interval: 100
slave: 1
input_type: holding
scale: 0.1
unit_of_measurement: °C
address: 2
data_type: int16
- name: "Sollwert Vorlauftemp HK2"
scan_interval: 100
slave: 1
input_type: holding
scale: 0.1
unit_of_measurement: °C
address: 3
data_type: int16
- name: "Sollwert Leistung HK1"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
unit_of_measurement: "%"
address: 5
data_type: uint16
- name: "Sollwert Leistung HK2"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
unit_of_measurement: "%"
address: 6
data_type: uint16
- name: "Sollwert Trinkwassertemp"
scan_interval: 100
slave: 1
input_type: holding
scale: 0.1
unit_of_measurement: °C
address: 8
data_type: int16
- name: "maximale Vorlauftemp HK1"
scan_interval: 100
slave: 1
input_type: holding
scale: 0.1
unit_of_measurement: °C
address: 9
data_type: int16
- name: "maximale Vorlauftemp HK2"
scan_interval: 100
slave: 1
input_type: holding
scale: 0.1
unit_of_measurement: °C
address: 10
data_type: int16
- name: "Betriebsstunden Kessel"
scan_interval: 100
slave: 1
input_type: holding
unit_of_measurement: "h"
scale: 1
address: 27
data_type: uint32
- name: "Anzahl Starts Kessel"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
address: 29
data_type: uint32
- name: "Status HK1"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
address: 36
data_type: uint16
- name: "Status HK2"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
address: 37
data_type: uint16
- name: "Status Kessel"
scan_interval: 100
slave: 1
input_type: holding
scale: 1
address: 41
data_type: uint16
- name: "Kessel Solltemperatur"
scan_interval: 100
slave: 1
input_type: holding
unit_of_measurement: °C
scale: 0.1
address: 45
data_type: int16

Ich schieb es noch mal an, da ich immer noch nicht weiter gekommen bin :frowning:

Hier gibt es einen Thread wo um den Modbus geht Smart Meter per Modbus in HA

Im Prinzip kannst du das als Grundlage verwenden. Am Modbus hat sich in HA in den letzten Updates bisschen was geändert. Daher schaut meine modbus.yaml so aus:

- name: "SDM72D" 
  type: tcp
  host: 192.168.178.209
  port: 8887
  #close_comm_on_error: true
  timeout: 9
  #retry_on_empty: true
    
  sensors:
    - name: EG_Total_power
      unique_id: eg_total_power
      scan_interval: 5
      #slave_count: 2
      data_type: float32
      precision: 2
      address: 52
      input_type: input
      slave: 1
      unit_of_measurement: W
      state_class: measurement
      device_class: power
      
    - name: EG_Verbrauch
      address: 72
      input_type: input
      #slave_count: 2
      slave: 1
      precision: 2
      data_type: float32
      unit_of_measurement: kWh
      device_class: energy

Beachten, wenn du das so wie ich in die modbus.yaml auslagerst, dies auch der configuration.yaml mit zu teilen:


automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
modbus: !include modbus.yaml
group: !include groups.yaml

1 „Gefällt mir“

Super, danke dir, schaue mal in den Thread.

Bedeutet das, ich muss eine modbus.yaml anlegen? Ich bin leider garnicht fit in Sachen manueller Konfiguration :frowning:

Hallo,
ich bin zwar nicht der YAML Profi, aber Du musst es auf jeden Fall noch richtig einrücken.
Normalerweise brauchts Du auch noch die Modbus Adressen der Einzelenen Coils.

Ja, aber ich habe auch schon einiges ausprobiert (vielleicht auch einiges falsch) , aber ich komme leider nicht weiter.

Die Modus Adressen der Coils, sollten die sein, wie auch oben im Code, da es genau die Regelung ist, die ich auch benutze.

Was ich noch nicht ganz verstehe, host und die dazugehörige IP ist klar. aber der Port?!

versuch mal port 502, der passte bis jetzt immer
hier in der Anleitung sind auch die Register die ich meinte.
https://bg-etech.de/download/manual/SDM72D-M-DE.pdf

Nachtrag:

modbus:
  name: SDM72D
  type: tcp
  host: 192.168.178.209
  port: 502
  sensors:
    - name: Total_System_power
      unique_id: Total_system_power
      unit_of_measurement: W
      slave: 1
      precision: 3
      adress: 30053
      device_class: power
      count: 2
      data_type: float32

:crayon:by HarryP: Zusammenführung Doppelpost

Besser spät als nie :slight_smile:

Mittlerweile habe ich es dann doch hinbekommen den Modbus auszulesen und mir die entsprechenden Temperaturen anzeigen zu lassen.

Vielen Dank noch mal für die hilfreichen Hinweise, hat mir sehr gut geholfen

Anbindung eines Stromzählers Eastron SDM72D-M über einen
Waveshare RS485 TO ETH Wandler.

Hallo,

nachdem ich mehrere Wochen (mit Unterbrechungen) nach einer Lösung gesucht
habe hat es jetzt geklappt.

Der Wert address: XX in modbus.yaml ist eine Dezimalzahl. Diese berechnet sich aus dem
Stromzählermanual: Der Hex-Wert in der Spalte HIByte und der Hex-Wert
in der Spalte LowByte werden einzel in DEZ umgerechnet und dann addiert.
Beispiel : Spalte 1: Registeradresse:3043 wird wie folgt für den
address: Wert im HA umgerechnet:
HIByte 1(hex) = 256 (dez),
LowByte 56(hex) = 86 (dez)
Summe: 342 (dez)---- also address: 342

Die Verkabelung habe ich mit IYSTY Kabel mit 200Ohm
Endwiderständen versehen.

HA ist auf dem neuesten Stand (14.11.2024)

Fazit: im Internet schwirren verschiedene (falsche) Lösungsvorschläge herum,
auch Chatgpt liefert teilweise Blödsinn.

VG
pkrischer

Example yaml: TCPconnection 2024-11-13–16:30 funktioniert

liefert richtige Werte

  • name: Wavesxhar
    type: rtuovertcp
    #type: tcp
    host: 192.168.1.190
    timeout: 5
    port: 502

Sensoren für spezifische Register

sensors:
- name: Zaehler01 Spg L1
unique_id: Spg L1
unit_of_measurement: “V”
slave: 1
address: 0 # Register für Spannung auf L1
input_type: input
scan_interval: 10 # Abfrageintervall in Sekunden
#count: 4 X
#data_type: int16
data_type: float32

- name: Zaehler01 Lstg L1
  unique_id: Lstg L1
  unit_of_measurement: "W"
  slave: 1
  address: 12          # Register für Powerauf L1
  input_type: input
  scan_interval: 10  # Abfrageintervall in Sekunden
  #count: 4 X
  #data_type: int16  
  data_type: float32

- name: Zaehler01 Lstg gesamt
  unique_id: Lstg gesamt
  unit_of_measurement: "W"
  slave: 1
  address: 52
  input_type: input
  scan_interval: 10  # Abfrageintervall in Sekunden
  #count: 2
  data_type: float32

- name: Zaehler01 Frequenz
  unique_id: Frequenz
  unit_of_measurement: "Hz"
  slave: 1
  address: 70
  input_type: input
  scan_interval: 10  # Abfrageintervall in Sekunden
  #count: 2
  data_type: float32
  #data_type: int16

- name: Zaehler01 Gesamtenergie
  unique_id: Gesamtenergie
  unit_of_measurement: "kWh"
  slave: 1
  address: 342
  #count: 2
  input_type: input
  scan_interval: 10  #  Abfrageintervall in Sekunden#count: 2
  data_type: float32


Funktioniert-modbus-yaml-richtige -Werte.txt (1,7 KB)