Modbus Register schreiben

SilverShadow

New member
Hallo,

ich habe mich schon relative weit in HA und Modbus eingelesen. Ich lese mittlerweile Daten via der Modbus Integration mit Home Assistant aus und lass mir verschiedene Werte anzeigen.

Meine YAML sieht folgend aus:
YAML:
modbus:
  - name: hub1
    type: rtuovertcp
    host: 192.168.178.88
    port: 502
    sensors:
      - unique_id: 27acef9c-1f13-11ee-be56-0242ac120002
        name: EActual
        device_class: energy
        unit_of_measurement: "W"
        state_class: measurement
        slave: 247
        address: 781
        scan_interval: 7
        input_type: holding
        data_type: uint16

      - unique_id: c22bd43a-1f12-11ee-be56-0242ac120002
        name: ETotal
        device_class: energy
        unit_of_measurement: "Wh"
        state_class: measurement
        slave: 247
        address: 546
        scan_interval: 7
        input_type: holding
        data_type: uint32

      - name: EDay
        device_class: energy
        unit_of_measurement: "Wh"
        state_class: measurement
        slave: 247
        address: 566
        scan_interval: 7
        input_type: holding
        data_type: uint16

      - name: E-Limit
        device_class: energy
        unit_of_measurement: "%"
        state_class: measurement
        slave: 247
        address: 292
        scan_interval: 7
        input_type: holding
        data_type: uint16

Hier ein Auszug aus dem PDF mit der Übersicht der verfügaren Register:
XML:
Address | Name of Data               | Content | Unit  | Data Format | (R.W) Property | Range of Data | Remarks
0222    | ETotal                     |         | 0.1KW | INT32U      | R              |               | Total Energy Yield
030D    | Pac L                      |         | 1 W   | INT16U      | R              |               | low Byte of Feeding power
0236    | EDay                       |         | 0.1KW | INT16U      | R              |               | Energy yield in current day
0124    | Power limit setting with % |         | 1 %   | INT16U      | R/W            | 0-100         |

Die Adress in der Modbus Register Übersicht ist Hex, in der YAML dann unter address Dezimal.
Die Werte werden mir sauber im Home Assistan angezeigt, unter anderem natürlich auch das Power Limit mit zB 70%. Nun würde ich diese Register aber gern nicht nur lesen (R) sondern auch schreiben (W) mit einem Range of Date Wert von 1-100.

Ich habe mich da echt reingekämpft mit dem ganzen Modbus, RS485 TCP LAN Adapter, etc, aber ab hier steige ich nicht mehr durch. Wie kann ich mir in Home Assitant einen Schieberegler schaffen den ich von 1-100 regeln kann. Der Wert auf den der Regler geschoben wird, sollte dann ins Register geschrieben werden.

Ich würde mich sehr freuen wenn hier einer im Modbus Thema noch tiefer drinsteckt und mir hier helfen kann.
 
Vielen Dank für deine Antwort. Ich habe mich da dann wohl etwas unklar ausgedrückt... der "leere" Schieberegler war nicht das eigentliche Problem, das Problem ist die weitere Config, dass er funktioniert.
 
Ich hab mich mit Modbus noch nicht so auseinandergesetzt. Aber ich könnte mir vorstellen, das du zum Schreiben auch schon alles hast.
Veränder doch mal den Wert E-Limit und schau, ob der neue Wert nicht automatisch schon auf den Modbus gesendet wird.
 
Du must einen Dienst aufrufen: Modbus Write Register, um den Wert an den Modbus zu senden.
zB über eine Automation.
 
Danke noch für den weiteren Input. Jetzt funktioniert das ganze und ich kann das Wechselrichter Limit per Schieberegler setzen. Dann kann ich mich jetzt langsam mal informieren wie ich das ganze noch an mein Smart Meter kopple und eine weiche Regelung hinbekomme.

Danke euch!

Den Slider erstellt:
YAML:
#Schieberegler ELimit
input_number:
  sliderelimit:
    name: sliderelimit
    initial: 73
    min: 1
    max: 100
    step: 1

noch eine Automation erstellt:
YAML:
- id: '1689416298060'
  alias: Setze WR Limit
  description: ''
  trigger:
  - platform: state
    entity_id:
    - input_number.sliderelimit
  condition: []
  action:
  - service: modbus.write_register
    data:
      hub: hub1
      address: 292
      slave: 247
      value:
      - '{{ (states.input_number.sliderelimit.state) }}'
  mode: single
 
Hallo zusammen,
auch wenn das Thema schon etwas älter ist, hab ich ein ähnliches Problem:
Ich habe einen Deye12k Hybridumformer der über ein Waveshare mit Modbus an HA läuft.
meine modbus.yaml sieht auch ähnlich wie oben aus (die Formatierung ist etwas anders), funktioniert aber. Ich kann auch Optionen als Switch AN / AUS schalten.
Ich würde nun gerne den Ladestrom des Akkus (max. sind 100A) einstellbar machen. Die adresse des Registers ist 108. Wenn ich aber nun die Lösung von SliverShadow modifiziere und einfüge, zeigt mit HA beim Check wilde Fehlermeldungen von Zeilen, die gar nicht verändert wurden an? (siehe Bild)
Das schreiben scheint bei HA mit Modbus wohl ein sehr spezielles Thema zu sein?

YAML:
- name: Waveshare
    type: tcp
    host: 192.168.0.100
    port: 502
    sensors:

      - name: "Deye Deye Heat sink temperature"
        slave: 1
        address: 541
        input_type: holding
        data_type: int16
        unit_of_measurement: "°C"
        scale: 0.1
        offset: -100
        precision: 2

      - name: "Deye load frequency"
        slave: 1
        address: 655
        input_type: holding
        data_type: uint16
        unit_of_measurement: "Hz"
        scale: 0.01
        precision: 2

    input_number:
      sliderelimit:
        name: "sliderelimit"
        initial: 100
        min: 1
        max: 100
        step: 1

      - id: '1689416298060'
        alias: Setze Battery Charge Limit
        description: ''
        trigger:
        - platform: state
          entity_id:
          - input_number.sliderelimit
        condition: []
        action:
        - service: modbus.write_register
          data:
            hub: Waveshare
            address: 108
            slave: 1
            value:
            - '{{ (states.input_number.sliderelimit.state) }}'
        mode: single

die modbus.yaml ist nicht komplett, weil 1000 zeichen...
 

Anhänge

  • HA Fehler.png
    HA Fehler.png
    116,1 KB · Aufrufe: 3
Zuletzt bearbeitet:
Ich würde nun gerne den Ladestrom des Akkus (max. sind 100A) einstellbar machen. Die adresse des Registers ist 108. Wenn ich aber nun die Lösung von SliverShadow modifiziere und einfüge, zeigt mit HA beim Check wilde Fehlermeldungen von Zeilen, die gar nicht verändert wurden an? (siehe Bild)
Was du da gemacht hast, gehört nicht in die modbus.yaml, sondern in die autoamtions.yaml. Das habe ich dir schon in einem anderen Forum geschrieben.

Oder versuche so einen Eintrag in der modbus.yaml, vielleicht funktioniert es, ich habe es nicht getestet.

YAML:
      - name: "Battery Max Charging Current"
        slave: 1
        address: 108
        input_type: holding
        data_type: int16
        unit_of_measurement: "A"
        scale: 1
        rule: 1
        configurable:
          min: 0
          max: 185
        icon: "mdi:battery"
        range:
          min: 0
          max: 185
 
Zuletzt bearbeitet:
Wie amiko schon schreibt würfelst du hier Automation und Einlesen vom Modbus durcheinander.

Der Automationsteil gehört separat und muss das Modbus Register durch eine Action schreiben.
 

Letzte Anleitungen

Statistik des Forums

Themen
5.390
Beiträge
53.367
Mitglieder
5.178
Neuestes Mitglied
Semmy
Zurück
Oben