Hallo zusammen!
Ziemlich grundlegendes Problem hier:
Integriert nach HA via Inverter Wifi, läuft alles tadellos seit Monaten. Die Integration gibt ja über den Smart Meter nur das, was rein bzw rausgeht. Daher die Regel:
Zudem gibts einen Messpunkt am WR, was momentan so produziert wird. Daher hab ich einen Helfer:
- sensor:
- name: "House Power Consumption"
unique_id: house_power_consumption
unit_of_measurement: "W"
device_class: power
state_class: measurement
state: >
{% set solar = states('sensor.inverter_active_power') | float(0) %}
{% set grid = states('sensor.power_meter_active_power') | float(0) %}
{{ (solar - grid) | round(0) }}
Das funktioniert auch mehr oder weniger. Und genau dieses weniger ist mein Problem - manchmal rutscht der aktuelle Verbrauch zum Beispiels ins Minus. Dies vorallem, wenn kleine Sprünge da sind: Sonne/Wolken. Oder aber auch Staubsauger etc. Ist ja irgendwo durch auch logisch: Die beiden Werte werden nicht zur absolut gleichen ms gemessen. Ich vermute, HA rechnet einfach neu sobald einer der Werte sich aktualisiert und nimmt für den anderen den letzten verfügbaren oder?
Wie umgeht ihr das Problem falls ihr möglichst genau den momentanen Verbauch haben wollt?
Du kannst zumindest ein If rein machen, falls der Hausverbrauch<0, dann auf 0 setzen. Dann ist er schon Mal nicht negativ. Genauer wird schwierig
Ich habe es nie probiert und bin mir auch nicht sicher, ob sich die Automatisation verschlucken würde bei so kurzfristigen Änderungen …
Man könnte Deinen Sensor über eine Automatisation berechnen
- Triggers: Jegliche Änderung von
sensor.inverter_active_power oder sensor.power_meter_active_power
- Actions: Befüllen eines numerischen Helfer
house_power_consumption_helper (vielleicht mit einem delay 1 s davor)
- Modus: Warteschlange!!
Probiere es einfach und schaue beide Sensoren dann im Vergleich an.
PS: Ich habe genau die entgegengesetzte Intension. Erst wenn sich das Delta Vorgänger/Nachfolger um xx % ändert, ändere den Sensor.
Hintergrund war eine ausufernde Datenbankgröße und daß ich von den kleinen Schwankungen real nichts wissen muß.
Das Problem ist ja, dass es sich mathematisch schlicht nicht lösen lässt oder?
Beispielsweise liefert das Haus -200W. PV 800W - ergibt 1’000W aktueller Verbrauch. Nun, 10ms später liefert die PV nur noch 100W (Wolke whatever); in diesem Fall rechnet HA -100W da sich der Hausverbrauch noch nicht aktualisiert hat.
Das grundlegende Problem haben ja alle PV HA Besitzer oder? Jemand eine technische Lösung? Irgendwas in Richtung Shelly und dort nach Netzbezug und nach PV, das müsste ja dann genau sein?
Schau doch einfach Mal nur deinen Stromzähler an wie schnell sich da der Verbrauch oft ändert. In HA lässt du bestimmt ja auch nicht jede Sekunde aktualisieren, also könnte man sagen, die Zeit wo nicht aktualisiert wird ist auch ein falscher Wert vorhanden.
Technisch ist es nicht möglich den Hausverbrauch genauer zu bestimmen, da du immer zwei Größen hast, die niemals komplett synchron laufen werden.
Ja, leider komme ich auch immer mehr zu dieser Schlussfolgerung.
Der Fall von gestern zeigts ganz gut:
Der Wechselrichter schickt den Wert 12.52.16 und veranlasst den Sensor es neu zu rechnen. Verwendet wird dabei der letzte bekannte Werte von ein paar Sekunden zuvor (1164W) - es fällt auf Minus. Millisekunden später (ebenfalls 12.52.16 in HA) kommt dann auch der Stromzähler und das ganze passt wieder.
Eine Möglichkeit die mir eben in den Sinn gekommen ist, den Wert nur neu rechnen falls der Stromzähler sich ändert (via trigger based template sensor). So wies ausschaut kommt der immer nach dem Wechselrichter…
Nachtrag: Ja, so klappts ziemlich zuverlässig. Da wir gerade wechselhaftes Wetter haben, konnt ichs gut nachvollziehen. Der Verbrauch ist nun wesentlich besser und zuverlässiger. Hier das yml für all jene, die zukünftig darüber stolpern:
template:
- trigger:
- platform: state
entity_id: sensor.stromzahler_wirkleistung
sensor:
- name: "calculated_power_sensor"
unique_id: calculated_power_sensor
unit_of_measurement: "W"
device_class: power
state_class: measurement
state: >
{{ (states('sensor.wechselrichter_wirkleistung') | float(0)
- states('sensor.stromzahler_wirkleistung') | float(0)) | round(2) }}