Modbus Abfrage in HA

Benötige etwas Unterstützung bei der Integration meines BMS-Systems in HA.
Konkret versuche ich alle Daten aus meinem BMS auszulesen und hierzu habe ich eine Abfrage über Modbus Poll erstellt.

Diese Abfrage funktioniert dort und es kommen auch jede Sekunde neue Daten an, siehe hier:

Und hier mein YAML von HA, aktuell nur mit der Abfrage einer Zellspannung.

- name: "BMS"
  type: tcp
  host: 192.168.178.99  # IP-Adresse des Modbus-Geräts (BMS)
  port: 502  # Modbus Standard-Port
  delay: 5  # Warten zwischen Anfragen (in Sekunden, falls Gerät langsam antwortet)
  timeout: 5 # Timeout auf 5 Sekunden erhöhen
  sensors:
    # Einzelzellenspannungen (75 Zellen)
    - name: "Cell Voltage 1"
      unique_id: "cell_voltage_1"
      address: 48195  # Adresse ohne hex
      unit_of_measurement: "V"
      input_type: input
      scale: 0.001     # Skalierungsfaktor, um von Millivolt in Volt umzuwandeln
      precision: 3     # Nachkommastellen
      device_class: voltage
      state_class: measurement
      slave: 1

In HA kommen sporadisch Werte an, und diese sind auch noch falsch.
Habe auch die Adressen 48193-48195 getestet, immer das gleiche Ergebnis.
Auch habe ich den input_type von holding auf input umgestellt, immer das gleiche.

Und das Log von HA. irgendwie scheint es ein Verbindungsproblem zu geben, aber warum funktioniert es dann über Modubus Poll?

2024-12-27 10:41:51.549 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: BMS: Error: device: 1 address: 48195 → Modbus Error: [Input/Output] ERROR: No response received after 3 retries

Bitte gebt mir ein paar Tipps, denn ich finde meinen Fehler nicht.
Danke

Wenn du Hilfe möchtest solltest du den YAML Code als Vorformatierten Text Posten.


Sonst stimmen die Einrückungen und so nicht mehr wo YAML sehr empfindlich drauf reagiert und es ist unmöglich Fehler zu erkennen.

LG

Danke für den Tipp, habe meinen Post entsprechend angepasst, ist auf jeden Fall besser zu lesen.

Wechselrichter :
Bei mir steht unter „sensors“ noch der eintrag „device_address: 1“
und der Eintrag „data_type: uint16“
„precision“ habe ich auskommentiert. gibt ne fehlermeldung.
„slave:“ gibt es garnicht.

Vieleicht einfach soviel auskommentieren wie geht, und dann sehen was als Daten kommt.

Also ich habe jetzt versucht das YAML etwas zu kürzen, nun sieht es wie folgt aus:

- name: "BMS"
  type: tcp
  host: 192.168.178.99  # IP-Adresse des Modbus-Geräts (BMS)
  port: 502  # Modbus Standard-Port
  delay: 5  # Warten zwischen Anfragen (in Sekunden, falls Gerät langsam antwortet)
  timeout: 5 # Timeout auf 5 Sekunden erhöhen
  sensors:
    # Einzelzellenspannungen (75 Zellen)
    - name: "Cell Voltage 1"
      unique_id: "cell_voltage_1"
      address: 48195  # Adresse ohne hex
      unit_of_measurement: "V"
      # input_type: input
      # scale: 0.001     # Skalierungsfaktor, um von Millivolt in Volt umzuwandeln
      # precision: 3     # Nachkommastellen
      device_class: voltage
      state_class: measurement
      device_address: 1
      data_type: uint16

Die Fehlermeldung sieht nun etwas anders aus, allerdings immer noch keine Daten:
2024-12-28 18:31:22.839 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: BMS: Error: device: 1 address: 48195 → Modbus Error: [Input/Output] ERROR: No response received after 3 retries
2024-12-28 18:31:22.840 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: BMS: Error: device: 1 address: 48195 → Modbus Error: [Connection] Not connected[AsyncModbusTcpClient 192.168.178.99:502]

Das Device, die Adresse und der Port stimmen.
Hab auch anschließend über Modubus Poll erneut getestet und dort kommen die Daten an. Ich bin echt schon am verzweifeln…

Ich vermute mal Modbus Poll und HA laufen nicht auf derr gleichen Maschine.
Sonnt Netzwerk Probleme mit HA ?
Alles weg was nicht unbedingt benötig wird.

Anbei ein Beispiel das bei mir funktioniert hat. (Den go-e gibts nicht mehr)

modbus:
  - name: "go-eCharger"
    type: tcp
    host: 192.168.19.21
    port: 502
    sensors:
      - name: "go-eCharger Allow"
        unique_id: "go-echarger_allow"
        address: 200 # allow_charging:  0: nein 1: ja
        input_type: holding
        state_class: measurement
        data_type: uint16

      - name: "go-eCharger Volt L1"
        unique_id: "go-echarger_volt_l1"
        address: 108 # Spannung auf L1 in Volt
        input_type: input
        unit_of_measurement: V
        state_class: measurement
        data_type: uint32
        swap: word

Noch eine Anmerkung. Meine configuration.yaml ist aufgeteilt und wird mit „include_dir_named“ eingelesen.
Das Beispiel ist also evtl. so nicht direkt zu verweden.

Also HA läuft bei mir in einem Docker Container und Modbus Poll auf meinem PC.
Von daher gibt es sicherlich auch Unterschiede in der Geschwindigkeit, allerdings habe ich in HA auch andere Geräte integriert und diese funktionieren tadellos. Zum Beispiel habe ich einen Goodwe Wechselrichter ergänzt und dessen Daten werden auch über Modbus TCP übertragen.
Also irgendwie komme ich hier nicht weiter.

Ach ja, habe auch die Konfiguration aufgeteilt mit einem Include in der Configuration.Yaml

# Loads default set of integrations. Do not remove.
default_config:

logger:
  default: info
  logs:
    homeassistant.components.modbus: debug
    pymodbus.client: debug

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

# Automations, Scripts und Scenes sollten direkt inkludiert werden
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

# Modbus TCP Konfiguration 
modbus: !include modbus.yaml

Und einer Modbus.Yaml, welche ich ja bereits eingangs gepostet habe.

Kann es sein, dass ich die Adresse in einem anderen Format angeben muss?

Hab den Fehler nun selbst entdeckt, muss einfach nur die normale Dezimal Adresse anstatt der PLC-Adresse eingeben, dann klappt es auch.