Leistung vom Durchlauferhitzer berechnen

Hallo zusammen,

ich habe im Energiedashboard die Anzeige einzelner Geräte und deren Energieverbrauch. Ebenso einen Sensor über den aktuellen Strombedarf. Im Zählerschrank ist ein Shelly 3EM verbaut.

Nun würde ich gerne den Durchlauferhitzer zur Warmwassererzeugung von dem ich keine eigenen Messwerte bekomme ebenfalls anzeigen lassen, bzw. einen Sensor erzeugen.
Meine Idee ist die, dass wenn die Leistung über 2000 W steigt, eine Sensor/Zähler die Leistung minus aller anderen Geräte, von denen ich die Werte erfasse, anzeigt.

Stehe da irgendwie auf dem Schlauch, das umzusetzen.

Hilfe wäre sehr willkommen…

VG Oliver

Hallo Oliver,
du kannst Geräte mit einem festen oder variablen Verbrauch anlegen.
Anleitung hier:

Schreibe dir deinen aktuellen Verbrauch am Zähler alle paar Minuten in einen “Hilfssensor”.

Die Spitze im Verbrauch triggerst du.

So lange der Trigger aktiv ist musst du in einen Power-Sensor (achte auf die device-class) noch die Leistung abzüglich der Leistung aus deinem “Hilfssensor” (der “Grundleistung”) schreiben.

Denk noch dran das Schreiben des “Hilfssensors” so lange zu unterbinden, wie der Trigger aktiv ist.

In PowerCalc kannst du den Energy-Sensor einfach hinzufügen. Als Quelle den Power Sensor nutzen.

Ist das zu umständlich kannst du die ungefähre Leistung auch einfach durchs triggern der Spitze als virtuelle Leistung dazu rechnen.

PS Power Calc lässt sich auch angenehm über das IntegrationsUI steuern du musst nicht unbedingt alles in yaml machen.

Mfg Andreas

Moin Andreas,

vielen Dank für deine Anleitung. Hat allerdings gedauert und hat mich schon etwas herausgefordert, bis ich das hatte. Den Trigger habe ich als Helfer erstellt.
Die beiden Sensoren “Grundlast aktuell” und “Durchlauferhitzer Power” hatte ich ebenfalls als Helfer probiert, aber mit dem Schwellwertsensor und Trigger als Bedingung klappte das bei mir nicht. Hätte das dann wahrscheinlich wieder in eine Automation packen müssen.

Habe jetzt in der energy.yaml folgendes hinzugefügt:

##############################################################
## Durchlauferhitzer #########################################
##############################################################
- name: "Grundlast aktuell"
  unique_id: "Grundlast_aktuell"
  device_class: power
  state_class: "measurement"
  unit_of_measurement: "W"
  state: >
    {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'off') %}
    {{ states('sensor.aktueller_strombedarf')| float(0) }}
    {% endif %}

- name: "Durchlauferhitzer Power"
  unique_id: "Durchlauferhitzer_Power"
  device_class: power
  state_class: "measurement"
  unit_of_measurement: "W"
  state: >
    {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'on') %}
    {{ states('sensor.aktueller_strombedarf')| float(0) -
    states('sensor.grundlast_aktuell')| float(0) }}
    {% endif %}

Habe es aber nicht hinbekommen, dass die “Grundlast aktuell” nur alle paar Minuten und dann auch nur der Maximal-Wert geschrieben wird. Wobei, das finde ich nicht schlimm, da die aktuelle Grundlast kurz vor dem Trigger ja aktueller ist, als ein Wert paar Minuten vorher.

VG Oliver

Nachtrag…
irgendwie passen aber die Werte nicht zusammen. Laut Energie-Dashboard hat der Durchlauferhitzer mit dem Powercalc-Sensor bereits 9,56 kWh verbraucht, obwohl ich erst 0,6 kWh am Zähler ablese.


hmmm…ein paar Sachen.

In der Reihenfolge und ich hoffe, dass ich nichts vergesse.
Ich habe den gleichen Trigger (Schwellwertsensor) erstellt wie du. Das hat funktioniert.

Zum Code:
Vorweg ich arbeite nicht mit der energy.yaml
ich denke man kann dort einfach yaml code auslagern.
ich mache das in der sensors.yaml, die ich in der config.yaml inkuldiert habe.

- platform: template      
  sensors:
    grundlast_act:
      unique_id: "Grundlast_aktuell"
      device_class: power
      unit_of_measurement: "W"
      value_template: >
        {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'off') %}
        {{ states('sensor.esphome_web_4eff0d_zaehler_wohnung')| float(0) }}
        {% endif %}

- platform: template      
  sensors:
    hotwater_pw_act:    
      unique_id: "Durchlauferhitzer_Power"
      device_class: power
      unit_of_measurement: "W"
      value_template: >
        {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'on') %}
        {{ states('sensor.esphome_web_4eff0d_zaehler_wohnung')| float(0) -
        states('sensor.grundlast_act')| float(0) }}
        {% else %}
        {{ float(0) }}
        {% endif %}

Ich setze den Wert für meinen Durchlauferhitzer(hotwater_pw_act) auf 0, wenn er aus ist. (mit dem else)
Sonst bleibt der Wert immer hoch.
Das dürfte ein Teil des Fehlers sein.

Ich setze in meiner Zuweisung “value_template” und nicht den “state”. (Bei state gab es einen Fehler, mag in der energy.yaml anders sein)

In Powercalc reicht dann auch:
image
Und du kannst einfach die aktuelle Leistung des Durchlauferhitzers zuweisen.

Schlussendlich noch zum Energy-Dashboard hinzufügen. Aber das hatte ja bereits geklappt.

PS: Die andere Lösung hatte ich für meine Thermostate der Infrarotheizung umgesetzt, da Trigger ich keinen Wert sondern nur das ein- und ausschalten und rechne je 1000W, wenn aktiv. Dann muss man einen virtuellen manuellen Zähler nehmen.

PPS: es wird wohl noch etwas umständlicher, da mir aufgefallen ist, dass der Wert der Grundlast höher ist als die tatsächliche Grundlast. Bei mir ca. 300W bei tatschlich 225W.

Das liegt wohl daran, wo der Trigger einsetzt.
Hast du den Trigger, wie ich, auf 600W gesetzt wird auch dort (abzüglich einer zeitlichen Verzögerung) die Grundlast berechnet. Die liegt durch den Anstieg der Leistung dann natürlich höher. Setzt du den Trigger niedriger wird realistischer gerechnet. Jedoch auch der Trigger mal falsch ausgelöst. Beim einschalten des Herdes z.B. Man könnte also auch einfach die Gesamtlast minus “Pi- mal-Daumen-Grundlast” rechnen. Oder die Intervallspeicherung nutzen für die Grundlastermittlung. Das habe ich aber noch nicht umgesetzt.

Ich habe auch “noch” kleine Abweichungen, denen ich erst noch auf den Grund gehen muss.


Nur 1kWh :confused:

Moin…

ich war ein paar Tage beruflich unterwegs, daher erst jetzt eine Rückmeldung.

Den Zähler auf Null zu setzten,

hatte ich bereits vorher auch schon eingefügt, was aber keine Änderung/Verbesserung gebracht hat.

Meine energy.yaml ist ja quasi deine sensor.yaml und folgendermassen in der configuration.yaml ausgelagert.

template:
  - sensor: !include energy.yaml

Nach dem Ändern mit deinem Vorschlag,

bekomme ich jetzt aber folgende Fehlermeldung:

Home Assistant Core
Invalid config for [template]: [value_template] is an invalid option for [template]. Check: template->sensor->16->value_template. (See /config/configuration.yaml, line 20).
14:04:45 – (FEHLER) config.py

also umgekehrt zu dir.

Mein Trigger liegt bei 5000 W, da ich damit ausschliessen möchte, dass eventuell ein Backofen oder Herd schon triggert.
Ich sehe zu dem Zeitpunkt, wenn der Trigger anspringt, der Wert des Triggers auch der Grundlast kurz vorher entspricht. Würde die Grundlast in dem Moment auch deutlich zu hoch sein, würde Powercalc ja auch auch viel mehr Grundlast vom Durchlauferhitzer abziehen, was aber nicht mein Problem war, sondern, dass viel zu viel saldiert wurde und der Wert im Energie Dashboard utopisch hoch war.

Wieviele Entitäten legt Powercalc den bei dir über den “Real Sensor” an? Bei mir nur eine und ich habe irgendwo gelesen, dass Powercalc zwei anlegen würde, eine in W und eine in kW.

@AlphizZzle benutzt noch die alte Template Methode und da gibt es halt unterschiede state / value_template @Kickaha

LG

@totow Danke für den Hinweis, Tobias.

@Kickaha
Ich hatte den Trigger bei mir falsch gesetzt. Lower 0 und Upper auf den Grenzwert.
Hab Lower jetzt bei 5000 und Upper bei 50000
… Watt

würde Powercalc ja auch auch viel mehr Grundlast vom Durchlauferhitzer abziehen

Das macht ja Powercalc nicht, ich weiß aber was du meinst.

Powercalc legt für Sensoren wie den virtual Power (manual) eine Power Entität an damit nachvollziehbar ist wieviel “virtueller” Strom dann fließt.

Für Sensoren die als “Energy from real power sensor” angelegt werden. Wird eine Entität als kWh angelegt.

Willst du die Werte täglich/monatlich/jährlich berechnen lassen, musst du noch auswählen, dass für den Sensor Utilitymeter Entitäten angelegt werden. (Kannst du auch nachträglich einfach machen.)
Dann gibt es 4 bzw. 5 Entitäten.

Möglicherweise ist die Anzeige im Dashboard der Gesamtverbrauch und nicht der Tagesverbrauch.
Das Energy-Dashboard greift m.M.n. darauf zurück.

Nachtrag:

bei mir sieht es ab und zu so aus:


Händewaschen

Die rote Linie(Grundlast) liegt hinter der grünen(Gesamt). Bei auslösen des Triggers geht sie auf einen Wert der nicht der Grundlast entspricht.
Leistung Durchlauferhitzer (blau) wird rechnerisch richtig berechnet. Aber spiegelt einen falschen Zustand wieder.

Nicht immer, wie man hier sieht…


Zähneputzen


Duschen

…aber immer öfter


*

:crayon:by HarryP: Zusammenführung Doppelpost

Also bei mir passt es jetzt soweit. Nur beim ersten Test (links) hat der Trigger am Anfang kurz “Aus” und wieder “An” gestellt und dabei ging natürlich die Grundlast hoch.
Zuerst dachte ich, der Trigger von 5500 Watt ist doch zu hoch eingestellt und hatte beim mittleren Versuch mit 800 Watt Schwellenwert gearbeitet und dann ganz rechts wieder mit 5500 Watt zur Kontrolle.

Das “An-Aus-An” beim Trigger werde weiter beobachten und schauen ob und warum das girekt am Anfang passiert. Vielleicht war das aber auch nur ein seltener Ausrutscher…

Die Werte im Energie Dashboard sind auch plausibel nachvollziehbar. Einzig der Gesamtverbrauch des Durchlauferhitzers seit Erstellung der Powercalc Entität stimmt nicht, da ja am Anfang fehlerhaft saldiert wurde.

Abschließend arbeite ich jetzt mit folgendem Trigger:

und nur der Obergrenze!

Hier meine Sensoren in der “energy.yaml”:

##############################################################
## Durchlauferhitzer #########################################
##############################################################
- name: "Grundlast aktuell"
  unique_id: "Grundlast_aktuell"
  device_class: power
  unit_of_measurement: "W"
  state: >
    {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'off') %}
    {{ states('sensor.aktueller_strombedarf')| float(0) }}
    {% endif %}

- name: "Durchlauferhitzer Power"
  unique_id: "Durchlauferhitzer_Power"
  device_class: power
  unit_of_measurement: "W"
  state: >
    {% if is_state('binary_sensor.durchlauferhitzer_trigger', 'on') %}
    {{
    states('sensor.aktueller_strombedarf')| float(0) -
    states('sensor.grundlast_aktuell')| float(0)
    }}
    {% else %}
    {{ float(0) }}
    {%- endif %}
##############################################################

Zum ursprünglichen Post hatte ich allerdings noch die “state_class” herausgenommen:

state_class: "measurement"

Aber ehrlich gesagt auch keine Ahnung, ob das was bewirkt hat oder nicht!?

Mich wundern nur deine “unknown” Trigger" Zustände… Versuche doch auch nur mal mit der Obergrenze zu triggern, reicht doch völlig aus.

Freut mich, dass es nun funktioniert.

Sensor Entity | Home Assistant Developer Docs (home-assistant.io)

state_class string None Type of state. If not None, the sensor is assumed to be numerical and will be displayed as a line-chart in the frontend instead of as discrete values.

Dabei ist es wohl für uns egal, weil wir eh andere Charts nutzen.

Habe den Trigger geändert und beobachte. Bin aber der Meinung, dass ich das schonmal hatte.

Ich messe die Leistung über S0-Zähler und hatte dort, auf Empfehlung, einen average_throttle Filter auf 30s gesetzt.
Ohne Filter muss ich mir das anschauen.

Die Werte alle 30 Sekunden können einen falschen Wert bei der Grundlastermittlung verursacht haben, da es ja eben nur ein Durchschnittswert ist.