Modbus Holding Register lesen und schreiben

Moin,

ich habe ein ISG Web zur Steuerung meiner Wärmepumpe in HA über Modbus eingebunden.
Eine der Entitäten sieht in der Configuration.yaml wie folgt aus:

      - name: "Eco Temperatur WW"
        slave: 1
        address: 1510
        input_type: holding
        data_type: int16
        scale: 0.1
        unit_of_measurement: "°C"

Um eine Boost-Funktion zu realisieren möchte ich diese Entität auch schreiben können. Dazu ergänze ich folgendes in der Yaml:

    write_registers: 
      - name: "Eco Temperatur WW Set"
        hub: Tecalor_modbus
        slave: 1
        address: 1510
        data_type: int16
        scale: 0.1 
        count: 1

Sobald dieser Abschnitt hinzukommt erhalte ich Konfigurationswarnungen bei der Prüfung der Yaml, die mir recht zusammenhangslos erscheinen:

Konfigurationswarnungen
Invalid config for 'modbus' at configuration.yaml, line 278: required key 'baudrate' not provided
Invalid config for 'modbus' at configuration.yaml, line 278: required key 'bytesize' not provided
Invalid config for 'modbus' at configuration.yaml, line 278: required key 'method' not provided
Invalid config for 'modbus' at configuration.yaml, line 278: required key 'parity' not provided
Invalid config for 'modbus' at configuration.yaml, line 278: required key 'stopbits' not provided

Könnt ihr mich bei der Fehlersuche unterstützen? Habe ich das Schreiben des Registers über “write registers” richtig in der Yaml hinterlegt?

Danke vorab,
Kuesel

Meines Erachtens gibt es den yaml-Befehl write_registers nicht. Guck mal hier: Link

Ich nutze übrigens nicht den modBus für die Steuerung des ISG-Web sondern die entsprechende HA Integration aus dem Store. Die funktioniert mit meiner LWZ404 sehr gut.

Hi @McJameson ,

danke für deinen Hinweis. Ich habe den Teil des write_registers entfernt.
Das beseitigt die Konfigurationswarnungen. Ich habe allerdings Schwierigkeiten die Informationen aus der bekannten Doku auf meinen Fall anzuwenden. Ich denke in meinem Fall ist der Abschnitt “Configuring climate entities” relevant.

      - name: "Eco Temperatur WW"
        slave: 1
        address: 1509
        input_type: holding
        data_type: int16
        scale: 0.1
        unit_of_measurement: "C"

Was fehl mir um die Entität schreiben zu können?

Grüße,
Kuesel

Es gibt in YAML write_type: holding - versuche es mal damit.

Entwicklerwerkzeuge>Aktionen

dort “modbus” eintippen, dann sieht man das es unter anderem

modbus.write_register

gibt, und man bekommt auch einen Hinweis darauf welche Parameter erforderlich sind und welche man gar nicht braucht bzw. welche überflüssig sind.

Man muss sich immer überlegen das ein modbus Gerät mit Zahlenwerten in Registern arbeitet. Ob diese Zahlen nun für einen selbst “C” oder “Äpfel” oder “Birnen” sind ist dem Gerät total egal denn es kennt gar keine Einheiten.
Es kennt auch keine Skalierung oder weiss ob es sich um einen int16 oder sonstwas handelt, das muss man wissen wenn man schreiben oder lesen will, sprich um welche Anzahl an int16 (1 Register) es sind handelt. Da 1 Register ein int16 ist, ist das also default, wären es mehr dann müsste man ohnehin mit startregister + [wert1, wert2] um 2 Register zu schreiben oder aber data_type: custom + structure arbeiten.

Was allerdings zwingend ist und was ich in den Beispielen vermisse ist das “value”. Sprich gibt man keinen Wert an den man in ein Register schreiben will kann man schreiben bis der Arzt kommt, es wird nix passieren.

Also einfach mal die relevanten Parameter in der o.g. Ansicht setzen, da das Lesen der Modbusregister ja wohl schon funktoiniert sollte man dann in der entsprechenden Entität in HA auch die Änderung sehen können.

Wichtig in dem Zusammenhang wenn man beim lesen der Register “scale” benutzt. Dann ist die Entität natürlich so wie man den Wert gerne in HA angezeigt haben möchte, was allerdings bedeutet das man den Wert den man in ein Register zurückschreibt dann selbst entsprechend skalieren muss.

Sprich wenn im Register 100 steht und man mit scale 0.1 daraus ne 10 macht sollte man tunlichst 10 * 10, respektive 100 schreiben damit es auch passt.