Hilfe bei Modbus -> Slider -> Dashboard -> Modbus

Ich bekomme den Bogen nicht hin…

Meine Wärmepumpe hat einen Modbus, über den kann ich alles Mögliche auslesen. Sie hat aber auch ein Display, darüber kann ich alles Mögliche einstellen. Ich möchte nun aber auch über den Modbus etwas einstellen. Natürlich soll sich der Parameter aber auch dann auf dem HA Dashboard ändern, wenn er über das Display der WP direkt eingestellt wurde.

Nun kann ich per

  sensors:
    - name: "P59 Min Pumpenleistung"
      unique_id: wp_p59_min_pump_speed
      unit_of_measurement: "%"
      address: 8249
      slave: 1
      scale: 10.0
      min_value: 20
      max_value: 80
      step: 10
      input_type: holding

Einen Wert auslesen, der immer aktuell ist, wenn ich am Display der WP den Wert ändere.

Bevor ich nun einen Wert einstellen kann, muss ich einen Helfer erstellen, der Typ, Symbol und Wertebereich abbildet.

Diesen Helfer kann ich nun auf ein Dashboard pinnen und einstellen.
Damit passiert aber noch nichts, wenn ich den Wert ändere, also den Slider bewege oder den Zahlenwert ändere.

Dafür braucht es eine Automation:

alias: Modbus Write input_number.minimale_pumpenleistung_p59
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - input_number.minimale_pumpenleistung_p59
    above: 20
    below: 80
conditions: []
actions:
  - action: modbus.write_register
    metadata: {}
    data:
      hub: waermepumpe
      address: 8249
      value: >-
        {{ states('input_number.minimale_pumpenleistung_p59') | float / 10 | int
        }}
mode: single

Nun wird der Wert automatisch über den Modbus gesendet, wenn er sich innerhalb der gesetzten Grenzen ändert.

Aber… Wie schließe ich den Kreis, wenn der Wert sich nun von Außerhalb (LCD der Pumpe) ändert? Denn sowohl die Automation als auch der Helfer beziehen sich nur auf sich selbst, nie auf den Wert des Modbus.

Ich hatte es zuerst mit der Modbus Entität “numbers:” versucht, diese tauchen aber nachher nirgends in HA auf, so dass ich sie weiter verwenden könnte.

Beispiel:

  numbers:
    - name: "P59 Min Pumpenleistung"
      unique_id: wp_p59_min_pump_speed
      unit_of_measurement: "%"
      address: 8249
      slave: 1
      scale: 10.0
      min_value: 20
      max_value: 80
      step: 10
      input_type: holding
      scan_interval: 600

Ergibt keinen Fehler, kann aber nirgends als Entität ausgewählt werden und damit ist es nutzlos.

Viele Dank schon mal im Voraus!

Also händisch kannst du das was du willst machen.

Du schaust dir den akt. Wert deines modbus sensors an und machst dann folgendes:

Einstellungen>Entwicklerwerkzeuge>Zustände
und dort über den Punkt oben “Zustand setzen”.
Wählst deinen input_number Helfer und trägst den Wert vom modbus Sensor ein.
:slight_smile:

Das ist natürlich doof … so schnell wie sich der modbus senspor Wert ändert kannst du gar nicht tippen.

Also gehst du in HACS und filterst mal nach typ python_script und suchst nach entities
script.

Das macht genau das was ich oben beschrieben habe.

Sprich du syncst sozusagen den Helfer auf den akt. modbus Wert.

Ja ich suche eine Möglichkeit, dass eine Einstellung immer vom realen im Gerät vorhandenen Wert ausgeht und diesen bei einer Änderung zurück schreibt. Also:

WP Reg ist 50 → WP LCD zeigt 50 → HA zeigt 50.
Ich stelle über das LCD 70 ein, Reg wird auf 70 geändert
WP LCD zeigt auch 70 an
Ich stelle über LCD 80 ein, Reg wird auf 80 geändert
HA zeigt darauf ebenfalls 80 an.

Lösung:

Ich habe mich mit diesem Problem im DC an das HA Team gewendet und eine sehr elegante Lösung über ein Template erhalten.

Wenn man in der configuration.yaml templates anlegt, kann man das mit einem einzigen Eintrag pro Wert erledigen. Hier ein Beispiel von einem Wärmepumpen-Parameter, dessen Real-Wert 20% bis 80% in Schritten von 10% einstellbar ist, im Modbus-Register aber als Zahl zwischen 2 und 8 abgelegt wird.

template:
  - number:
      - name: P59 Minimale Pumpenleistung
        unique_id: number_p59_min_pumpenleistung
        state: "{{ states('sensor.p59_min_pumpenleistung') }}"
        availability: "{{ has_value('sensor.p59_min_pumpenleistung') }}"
        step: 10
        min: 20
        max: 80
        optimistic: True
        set_value:
          - action: modbus.write_register
            data:
              hub: waermepumpe
              address: 8249
              value: "{{ value // 10 }}"

Mit diesem template wird eine Entität “number.p59_minimale_pumpenleistung” erzeugt und sie aktualisiert sich immer vom realen Sensor und schreibt in den richtigen Parameter. Auf diese Entität kann man auch Slider oder Numeric Inputs auf Dashboards erzeugen. Alles an einer Stelle.