Aus Wasserdurchfluss den absoluten Verbrauch am Kalendertag berechnen

Hi,
ich habe mir ein Ventil von Sonoff gekauft, dass im Garten an einem Wasserschlauch hängt und mit dem ich bei Bedarf das Gewächshaus gießen lassen kann.

Der Sensor hat u.a. auch einen Durchflussmesser (sensor.sonoff_swv_water_valve_flow), der die Einheit m³/h hat.

Wenn das Wasser läuft, sehe ich z.B. 0,6 m³/h.

Ich hätte nun gerne eine Entität, die mir den Wasserdruchfluss am akuellen Tag in Litern anzeigt.

ChatGPT hat mehrere Dinge vorgeschlagen, alle haben Fehler in der Config.yaml ergeben.

sensor:
  - platform: history_stats
    name: "Wasserverbrauch heute"
    entity_id: sensor.sonoff_swv_water_valve_flow
    type: total
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"
    unit_of_measurement: "L"
    value_template: >
      {% set flow_rate_m3h = states('sensor.856_sonoff_swv_water_valve_menge') | float(0) %}
      {% if flow_rate_m3h > 0 %}
        {{ (flow_rate_m3h * 1000) | round(2) }}

Konfigurationswarnungen

Invalid config for 'history_stats' from integration 'sensor' at configuration.yaml, line 2: required key 'state' not provided

Invalid config for 'history_stats' from integration 'sensor' at configuration.yaml, line 5: value must be one of ['count', 'ratio', 'time'] for dictionary value 'type', got 'total' 
Invalid config for 'history_stats' from integration 'sensor' at configuration.yaml, line 9: 'unit_of_measurement' is an invalid option for 'sensor.history_stats', check: unit_of_measurement 
Invalid config for 'history_stats' from integration 'sensor' at configuration.yaml, line 10: 'value_template' is an 
invalid option for 'sensor.history_stats', check: value_template

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Das Einfachste bei Konfigurationsfehlern ist, zunächst einmal in die Dokumentation zu schauen.

Schon, dass hier der Mensch die künstliche Intelligenz korrigieren soll! :rage:

Frag doch mal den allzu schlauen ChatGPT, was er zu dem config.-error sagt!

1 „Gefällt mir“

Danke, das habe ich gemacht. Für mich liest es sich wie chinesisch.

Ich glaub du hast DeepSeek verwendet​:wink::joy:

Warum legst nicht einen einfachen Helfer (Verbrauchszähler) mit täglichem Zyklus zur Zählerrückstellung an?

Danke, das versuche ich

Hi,
ich bekomme es nicht hin.

Unter Einstellungen/Geräte&Dienste/Helfer habe ich

  • Helfer erstellen
    Verbrauchszähler
    Name: sensor.sonoff_swv_water_valve_value
    Eingangssensor: sensor.sonoff_swv_water_valve_flow
    Zyklus der Zyklusrückstellung: täglich
    OK

Unter Einstellungen/Geräte&Dienste/Helfer sehe ich den Helfer.
Wenn ich drauf klicke ist ein Diagramm (m²/h über der Zeit).
Bei Maßeinheit kann ich auswählen:

ft³/min
gal/min
L/h
L/min
L/s
ml/s
m³/h
m³/s

Den Durchfluss in m³/h hat das Ventil von Haus schon als Entität. Ich möpchte den absolutne Verbrauch in Litern (L). Nicht pro Stunde, sondern insgesamt.

Ich hab es immer noch nicht erledigt bekommen.

Wenn der Verbrauchszähler den Durchfluss nicht in Volumen umrechnet, musst du dies selbst tun.
Merke dir die Start- und Stoppzeit und rechne die Differenz in Sekunden aus.
Den Durchfluss von m³/h in l/s umrechnen und mit der Zeit multiplizieren. Das Problem wird darin bestehen, dass der Durchfluss nicht konstant ist. Wenn du es genau wissen willst, musst du mehrere Werte speichern und den Mittelwert ermitteln.
1 m³/h ≈ 0,27777777777778 l/s

Die Umrechnung bekomme ich grundsätzlich hin. Ich weiß nur nicht wie das in Home Assistant geht.

Ich habe da eine Idee. Ob sie funktioniert, kann ich nicht sagen.
Unter „Condition” kannst du den Wert einstellen, ab dem der Verbrauch erfasst werden soll. Das Zeitintervall beträgt drei Sekunden. Leider kann bei „time_pattern” keine Variable verwendet werden. Du kannst es mit unterschiedlichen Werten probieren.
Gib beim Time_Patter und bei der Variable zeit den gleichen Wert ein.
Programmierung im Template.yaml

- trigger: 
    - trigger: time_pattern 
      seconds: /2
  condition:
    - condition: template
      value_template: "{{ states('sensor.856_sonoff_swv_water_valve_menge') | float(0) > 0.02 }}"    
  sensor:
    - name: Wasserverbrauch gesamt
      unique_id: "wasserverbrauch_gesamt"
      unit_of_measurement: "L"
      device_class: "water"
      state_class: "total_increasing"
      state: >
        {% set gesamt = states('sensor.wasserverbrauch_gesamt') | float(0) %}
        {% set flow_rate_l_s = (states('sensor.856_sonoff_swv_water_valve_menge') | float(0) * 3.6) | round(2) %}
        {% set zeit = 2 %}
        {{ (gesamt + (flow_rate_l_s * zeit)) | round(2) }}

Damit die Berechnung oben funktioniert, musst du zunächst den sensor.wasserverbrauch_gesamt initialisieren. Z. B. so:

- trigger:
    - trigger: time
      at: "18:05"
  sensor:
    - name: Wasserverbrauch gesamt
      unique_id: "wasserverbrauch_gesamt"
      unit_of_measurement: "L"
      device_class: "water"
      state_class: "total_increasing"
      state: "{{ 0 }}"

Danke, ich verstehe überhauot nicht was ich machen soll.

Ich kann dir nicht vorschreiben, was du machen sollst, aber du könntest folgenden Code in die Datei „template.yaml“ kopieren und die Zeit anpassen, damit du nicht den ganzen Tag auf den Trigger warten musst.

- trigger:
    - trigger: time
      at: "18:05"
  sensor:
    - name: Wasserverbrauch gesamt
      unique_id: "wasserverbrauch_gesamt"
      unit_of_measurement: "L"
      device_class: "water"
      state_class: "total_increasing"
      state: "{{ 0 }}"

HA neu starten.
Wenn die Triggerzeit verstrichen ist, unter „Entwicklerwerkzeuge” > „Zustände” nachsehen, ob der Sensor „wasserverbrauch_gesamt” den Wert 0 hat.

Ersetze den alten Code durch diesen.

- trigger: 
    - trigger: time_pattern 
      seconds: /2
  condition:
    - condition: template
      value_template: "{{ states('sensor.856_sonoff_swv_water_valve_menge') | float(0) > 0.02 }}"    
  sensor:
    - name: Wasserverbrauch gesamt
      unique_id: "wasserverbrauch_gesamt"
      unit_of_measurement: "L"
      device_class: "water"
      state_class: "total_increasing"
      state: >
        {% set gesamt = states('sensor.wasserverbrauch_gesamt') | float(0) %}
        {% set flow_rate_l_s = (states('sensor.856_sonoff_swv_water_valve_menge') | float(0) * 3.6) | round(2) %}
        {% set zeit = 2 %}
        {{ (gesamt + (flow_rate_l_s * zeit)) | round(2) }}

An dieser Stelle wird der Durchfluss vorgegeben, ab dem der Zähler zählen soll. Du kannst ihn also an deinen Bedarf anpassen.
“{{ states(‘sensor.856_sonoff_swv_water_valve_menge’) | float(0) > 0.02 }}”

Ich weiß nicht, wie oft dein Durchflusssensor die Werte aktualisiert. Ich habe die Aktualisierungszeit zunächst auf zwei Sekunden eingestellt. Alle zwei Sekunden wird ein neuer Wert erfasst und zum alten addiert. Wenn du eine andere Zeit wünschst, musst du zwei Stellen anpassen.
seconds: /2
{% set zeit = 2 %}

HA neu starten und prüfen, ob der Zähler richtig zählt.
Anschließend eine Flasche Sekt öffnen und einen kleinen Erfolg feiern. :grinning: