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
 

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
8.200
Beiträge
81.000
Mitglieder
8.950
Neuestes Mitglied
Helge37
Zurück
Oben