Gegebenheiten:
Shelly 3EM ist im lokalen Sicherungskasten verbaut. Alle Verbraucher und auch die Balkonsolaranlage hängen sozusagen "hinter" dem Shelly 3EM. Wie das BKW in Home Assistant eingebunden und angeschlossen ist, ist hier zu finden.
Wie man die Werte des Shelly 3EM in Home Assistant einbinden kann, kann man in diversen YT Videos nachschauen. An diesen habe ich mich auch orientiert und als Verbraucher die Sensoren
sensor.shellyem3_xxxx_channel_a_energy
sensor.shellyem3_xxxx_channel_b_energy
sensor.shellyem3_xxxx_channel_c_energy
eingebunden und als Einspeisung ins Netz die Sensoren
sensor.shellyem3_xxxx_channel_a_energy_returned
sensor.shellyem3_xxxx_channel_b_energy_returned
sensor.shellyem3_xxxx_channel_c_energy_returned
Anfänglich sah dies auch alles recht plausibel aus. Die Überlegung die jeweils 3 Werte in einem Sensor zusammen zu fassen habe ich zwar in der template.yaml hinterlegt, aber die Einzelsensoren in der Energie-Konfig belassen. Eingerichtet wurde alles zu einem Zeitpunkt als schlechtes Wetter und kein Ertrag vom BKW verfügbar war.
Dann ist mir folgender Sachverhalt aufgefallen. An einem sehr sonnigen Tag (siehe Screenshot) hatte ich mittags in der EnergieAnzeige 5,6kWh Verbrauch, 0,8kWh Einspeisung, 1,4kWh Solarertrag und am Ende 6,2kWh Gesamtverbrauch. Komisch kam mir vor, dass während den wenigen Sonnenstunden von mir die Spülmaschine angemacht wurde und laut Shelly der Verbrauch immer größer war als der Solarertrag (Habe ich so aus der Grafik in der ShellyApp herausgelesen). Die 0,8kWh Netzeinspeisung konnten einfach nicht stimmen. Während die Solaranlage Strom produzierte war der Verbrauch immer höher.
Dann ist mir mein Fehler aufgefallen. Das BKW liegt auf der Phase 3, der Shelly saldiert keinerlei Werte und anhand der Werte der Sensoren ist nicht erkennbar ob es wirklich zu einer zählerrelevanten Netzeinspeisung gekommen ist. Der Energy-Wert wird im Shelly fleißig weiter aufaddiert und der energy_returned-Wert auf Phase 3 auch. In Summe stimmt am Ende weder der tatsächliche Verbrauch noch die tatsächliche Einspeisung. Inkl. dem Wert was das BKW produziert hat, stimmt dann auch der Gesamtverbrauch nicht und wird i.d.R. als viel zu hoch angegeben. Das Problem tritt dann nicht auf, wenn auf der selben Phase wie das BKW noch ein Verbraucher hängt, der ununterbrochen mehr verbraucht als das BKW maximal erzeugen kann, aber das wird wohl eher die absolute Ausnahme sein. Bei mir ist die Phase 3 untertags, wenn niemand zuhause ist, sogar nur mit maximal 30-50Watt belastet.
Ich habe dann lange überlegt und nach alternativen Sensoren gesucht um diese definitiv falschen Werte zu korrigieren und in Home Assistant korrekt darzustellen. Die vom Shelly gelieferten “energy”-Werte sind jedoch hierfür unbrauchbar.
Die Lösung war folgende. In template.yaml habe ich folgende Sensoren angelegt
#Die aktuellen Verbräuche/Erträge je Phase werden in einen Wert zusammengefasst
- sensor:
- name: "Total Power"
device_class: power
state_class: measurement
unit_of_measurement: "W"
state: >
{{
states('sensor.shellyem3_xxxx_channel_a_power')| float(0) +
states('sensor.shellyem3_xxxx_channel_b_power')| float(0) +
states('sensor.shellyem3_xxxx_channel_c_power')| float(0)
}}
#Dann wird ermittelt ob sich der Sensor im positiven Bereich bewegt, was Verbrauch
#bedeutet. Bei negativen Werten (Netzeinspeisung), wird der Sensor auf 0 gesetzt
- sensor:
- name: "Total Power Nur Verbrauch" #Das ist der reine Verbrauch ohne Einspeisungen ins Netz
device_class: power
unit_of_measurement: "W"
state: "{{ states('sensor.total_power')|float(0) if states('sensor.total_power')| int > 0 else 0 }}"
#Die folgenden beiden Sensoren ermitteln Netzeinspeisung anhand eines negativen
#Wertes. Ansonsten wird der Sensor auf 0 gestellt. In einem weiteren Sensor wird dann
#der negative Wert in einen positiven umgewandelt und wir haben den tatsächlichen
#Netzeinspeisewert
- sensor:
- name: "PV Einspeisung Ausgelesen" #Das sind die reinen Einspeisungen ins Netz
device_class: power
unit_of_measurement: "W"
state: "{{ states('sensor.total_power')|float(0) if states('sensor.total_power')| int < 1 else 0 }}"
- sensor:
- name: "PV Einspeisung Normiert" #Das sind die reinen Einspeisungen ins Netz in einen positiven Wert verwandelt
device_class: power
unit_of_measurement: "W"
state: "{{ states('sensor.pv_einspeisung_ausgelesen')|float(0) * -1 | round (3) }}"
Da ich über diesen Weg aber nur Sensoren mit Watt-Werten habe für das EnergyDashboard aber kWh-Werte brauche habe ich mir 2 Helfer angelegt "Stromverbrauch gesamt" und "Zurück ins Netz (kWh)" mit dem Typ "Integration - Riemann Summenintegralsensor".
Beides ist ebenfalls in YT mehr als einmal sehr gut vorgestellt worden und z.B. hier von Simon42 super erklärt und bebildert. "Stromverbrauch gesamt" ist nun in der Energie-Konfig als Verbrauch hinterlegt und "Zurück ins Netz (kWh)" als reale Netzeinspeisung.
Mit diesem Mehraufwand sehen die Werte nun endlich so aus, dass sie nachvollziehbar und plausibel sind. Zumindest geht man nicht in einem ersten Gedankenblitz auf die Suche wie man die Netzeinspeisung reduzieren könnte, wenn es am Ende gar keine gegeben hat oder diese viel zu hoch ausgewiesen wurde.
Wer keine BKW hat und somit auch keine "energy_returned" Werte vom Shelly 3EM bekommt, kann sich diesen Aufwand natürlich sparen. Erst in Kombination mit einem BKW kann es zu den obigen Fehlern kommen. Das Ganze ist natürlich abhängig davon was der Shelly wirklich misst und was vor oder nach ihm angeschlossen ist. Alternativ meinen Zähler vom Stromanbieter auszulesen ist nicht möglich. Der Zähler befindet sich in einem Gemeinschaftskeller ohne eine mir zugewiesene Stromsteckdose um ein andere Auswertungsmöglichkeit meines Zweirichtungszählers betreiben zu können. Vom WLAN-Empfang ganz zu schweigen.