Entität Number Handhabung

...ich könnt mich kringeln - nachfolgender (trivialer) YAML-Code unter "Sensor" scheint das Problem zu lösen:
Code:
name: "Friwasta Zirkulationsstatus"
        slave: 1
        address: 284
        input_type: holding
        data_type: uint32
        scan_interval: 15
...wenn die Pumpe aus ist= 0 ; wenn an= 100...ich denke, damit kann man was anfangen..;)
 
So, und zu den numbers - sieht nicht so aus, als gäbe es dese Option für Modbus als Entität.

Was genau möchtest Du mit diesem Codeblock letztlich erreichen?
 
so, hier die/ eine mögliche Lösung:

1. Helfer anlegen:
Code:
input_number:
  frischwasser_sollwert:
    name: "Gewünschte Frischwassertemperatur"
    min: 35
    max: 90
    step: 1
    unit_of_measurement: "°C"
    mode: box

2. Sensor zum Auslesen (Rückkanal) anlegen - wichtig um Werte gegenseitig zu aktualisieren!
Code:
    # Modbus TCP Verbindung und Sensor für den Rückkanal
    sensors:
      - name: "Frischwassertemperatur Aktuell"
        unique_id: frischwasser_temp_aktuell
        address: 186
        scan_interval: 10 # Prüft alle 10 Sekunden den Wert am Gerät
        data_type: int32  # Entspricht Anzahl = 2 Registern (32-Bit)
        scale: 0.1        # Rechnet z.B. 600 im Register in 60.0 °C für HA um
        precision: 1
        unit_of_measurement: "°C

3. zwei Automatisierungen zum Datenaustausch in beide Richtungen einrichten
Code:
- alias: "Modbus: Sollwert an Frischwasser senden"
  id: modbus_sollwert_senden
  trigger:
    - platform: state
      entity_id: input_number.frischwasser_sollwert
  condition:
    # Verhindert das Senden, wenn der Helfer gerade erst vom Rückkanal aktualisiert wurde
    - condition: template
      value_template: "{{ (trigger.to_state.state | float - states('sensor.frischwassertemperatur_aktuell') | float) | abs > 0.5 }}"
  action:
    - service: modbus.write_register
      data:
        hub: heizung_hub
        address: 186
        # Multipliziert den HA-Wert wieder mit 10 (z.B. 60 °C -> 600)
        # Da int32 aus 2 Registern besteht, senden wir den Wert als Liste von zwei 16-Bit-Werten
        value:
          - "{{ ((trigger.to_state.state | float * 10) | int // 65536) }}"
          - "{{ ((trigger.to_state.state | float * 10) | int % 65536) }}"
  mode: restart

- alias: "Modbus: Rückkanal Frischwasser in UI spiegeln"
  id: modbus_rueckkanal_empfangen
  trigger:
    - platform: state
      entity_id: sensor.frischwassertemperatur_aktuell
  condition:
    # Verhindert das Überschreiben, während der Nutzer gerade in der UI tippt
    - condition: template
      value_template: "{{ (trigger.to_state.state | float - states('input_number.frischwasser_sollwert') | float) | abs > 0.5 }}"
  action:
    - service: input_number.set_value
      target:
        entity_id: input_number.frischwasser_sollwert
      data:
        value: "{{ trigger.to_state.state | float | round(0) }}"
  mode: restart

4. im Dashboard hab ich mich für die übersichtliche Standard-Karte entschieden. Diese Karte zeigt den aktuellen Sensorwert (Rückkanal) und darunter das Eingabefeld für den Wunschwert.

Code:
type: entities
title: Frischwasserheizung
entities:
  - entity: sensor.frischwassertemperatur_aktuell
    name: Aktuelle Temperatur
    icon: mdi:thermometer
  - entity: input_number.frischwasser_sollwert
    name: Gewünschte Temperatur
    icon: mdi:thermometer-lines

Das funktioniert wunderbar - ich hab es in meiner (noch vorhanden IP-Symcon Konfiguration) und am Gerät gegengecheckt - die Werteänderungen sind konsistent.

Gruß, copalethri. 😎
 
Prima (y)

Eine kleine Anmerkung, bei unit_of_measurement: "°C bei dem Rückkanal scheint das schließende Anführungszeichen zu fehlen, sofern das nicht nur beim Kopieren zurückgelassen wurde kann das bei späteren Einträgen unter Umständen mal zu Problemen führen.
 
bei unit_of_measurement: "°C bei dem Rückkanal scheint das schließende Anführungszeichen zu fehlen
...ist beim Kopieren hier verlorengegangen - in der modbus.yaml ist das Teil drinne ;)

btw...hab heut früh noch fix die Statusabfrage der Zirkulation eingerichtet:

Sensor:
Code:
      - name: "FRIWASTA Zirkulationspumpe Status"
        unique_id: friwa_zirkstatus
        address: 284
        input_type: holding
        data_type: int32        # Verarbeitet die 2 gelesenen Register (32-Bit)
        scan_interval: 2       # Abfrage-Intervall in Sekunden (anpassbar)

Dashboard;
Code:
type: custom:mushroom-template-card
primary: Zirkulation
entity: sensor.friwasta_zirkulationspumpe_status
icon: mdi:power
grid_options:
  columns: 12
  rows: auto
color: |-
  {% if states(config.entity) | float(0) < 50 %}
  red
  {% elif states(config.entity) | float(0) > 50 %}
  green
  {% endif %}
features_position: bottom

Fängt langsam an Spaß zu machen *g
 
na toll, hab heut tüchtig Lehrgeld bezahlen müssen - das Ganze Gedöns mit Helfern, Automation etc. bezüglich der Frischwassertemp.-Einstellung hätte ich mir sparen können...Der "Climate"-Ansatz ist viel einfacher, sicherer und sieht auch noch besser aus *argh*

Code:
      - name: "Sailer Warmwasser Soll"
        unique_id: sailer_ww_soll_ctrl
        slave: 1
        address: 186          
        target_temp_register: 186
        data_type: int32
        max_temp: 90
        min_temp: 35
        scale: 0.1
        precision: 1
        temp_step: 1
        temperature_unit: C

Saile_Temp.png
 
Mach Dir nichts draus, wird Dir in HomeAssistant noch öfter passieren, das man sich was zurecht bastelt und man später erkennt "Verdammt, da hatte doch schon jemand was gemacht und das ist sogar besser".
Geht mir auch immer wieder mal so.
 

Letzte Anleitungen

Statistik des Forums

Themen
8.202
Beiträge
81.018
Mitglieder
8.950
Neuestes Mitglied
Helge37
Zurück
Oben