Shelly 3EM in Home Assistant einbinden und dabei diverse Fehlerquellen entdecken und vermeiden

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.

9 „Gefällt mir“

Danke für Deine Erklärung. Ich habe auch ein BKW und den Shelly 3EM.

Die Daten habe ich noch nicht so genau betrachtet. Ich freue mich erst mal, dass alles läuft. Wenn ich meine anderen "Baustellen" abgearbeitet habe, schau ich mir des bestimmt nochmals an.

Gruß Uwe

Hallo,

ich habe auch einen Shelly 3EM und leider tauchen trotz Einrichtung im Energie-Dashboard nur folgende Fehler auf bzgl. Zurück ins Netz :

statistics_not_defined

  • sensor.zuruck_zum_netz_in_kwh

Entität nicht verfügbar

Der Status dieser konfigurierten Entitäten ist derzeit nicht verfügbar:

  • sensor.zuruck_zum_netz_in_kwh (unknown)

Habe ich in der Config einen Fehler?

Zur Umrechnung nutze ich den wie von Simon beschriebenen Helfer:
Integration - Riemann Summenintegralsensor. Die ersten negativen Werte gab es bereits, nur leider tauchen sie hier nicht auf, vielleicht hat jemand eine Idee. :grinning:

Kann es sein, dass Du nur etwas zu schnell warst?
Die Integration muss aus den PowerAngaben erst EnergieWerte ermitteln. Das kann schon einmal eine Weile dauern. → sind jetzt Werte vorhanden?
Was wird angezeigt, wenn Du über
Entwicklerwerkzeuge - Zustände
gehst? Werden dort die Sensoren angezeigt?
Haben sie Werte?
Haben die AusgangsSensoren Werte in dieser Ansicht?
Also die von Dir berechneten Sensoren aus deinem Code?

Also den ganzen Weg bis zu deinem eigen angelegten SummenIntegralSensor nachstellen und die Werte prüfen.

Dann finde ich Deinen “Namen” Deines Sensors sehr ungeschickt. Bitte vermeide Umlaute und Sonderzeichen, die NICHT im Standard ASCII enthalten sind. Umlauten und Sonderzeichen sind immer ein Quell von potentiellen Fehlern.

So ist es. Einfach abwarten… :slightly_smiling_face:

Moin,

Wenn du eine Shelly 3EM hast, brauchst du keine Rieman Summe anwenden um Sensoren zu erstellen, die kwh anzeigen. Der 3EM liefert bereits alles was du brauchst für das EnergieDashboard.
Jedenfalls sieht man in deinen Screenshots auch nichts von einer Rieman Summe.

Dem würde ich nach meinen Erfahrungen widersprechen.
Der Shelly 3EM arbeitet nicht saldierend und dann stimmen die Werte im Energie-Dashboard nicht mehr, da Netzbezug und Netzeinspeisung nicht korrekt in den Energy-Sensoren ausgewiesen werden können.

Um mit einem BKW korrekte Werte im EnergieDashboard anzeigen zu können muss man selber die Werte errechnen.

Ich habe versucht dies in meinem Post ausführlich zu beschreiben und die Lösung aufzuzeigen.

Nachtrag:
@simon42 kann es sein, dass mein Ur-Post aus dem alten Forum ins neue nicht komplett übernommen wurde? Die Punkte “diverse Fehlerquellen” tauchen hier gar nicht mehr auf und so wirkt der Post doch etwas wirr. Ich dachte ich hätte damals auch noch Screenshots verwendet oder zumindest Beispielrechnungen.
Könntest Du im alten Forum bitte mal schauen oder könnte ich dafür einen Link bekommen, dann schaue ich dort selber nach und korrigiere den Post im neuen Forum.

:crayon:by HarryP: Zusammenführung Doppelpost.
*@ryhoruk *
Bitte für Ergänzungen die “bearbeiten” Funktion verwenden. Danke!

1 „Gefällt mir“

Was du über 3EM+Balkonkraftwerk schreibst ist mir bekannt.
@Finn3690 hat aber gar nicht geschrieben dass er eine PV oder Balkonkraftwerk hat.
Falls das so sein sollte, stimmt meine Antwort nicht.

Ich habs noch mal gelesen. Der Sensor ‘Zurück zum Netz’ macht natürlich ohne PV keine Sinn. Da haste schon recht.

1 „Gefällt mir“

Hallo ryhoruk,

vielen Dank für deinen Post. Ich hatte exakt das selbe Problem. Hast mir sehr geholfen.

1 „Gefällt mir“

Hallo ryhoruk,

Ich habe deinen Code von oben in meine configuration.yaml eingefügt und habe die Template Sensoren auf ein Dashboard gepackt um es erstmal zu beobachten bevor ich sie in das Energy Dashboard einfüge. Leider sieht es bei mir so aus. Habe ich was falsch gemacht?

Bild

template:
sensor:

  • name: “Shelly3EM Total Power”
    unique_id: shelly3em_energy_total
    device_class: energy
    state_class: total
    unit_of_measurement: “W”
    state: >
    {{
    states(‘sensor.shelly_em3_channel_a_power’)| float(0) +
    states(‘sensor.shelly_em3_channel_b_power’)| float(0) +
    states(‘sensor.shelly_em3_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

  • name: “Total Power Nur Verbrauch” #Das ist der reine Verbrauch ohne Einspeisungen ins Netz
    device_class: power
    unit_of_measurement: “W”
    state: “{{ states(‘sensor.shelly3em_energy_total’)|float(0) if states(‘sensor.shelly3em_energy_total’)| 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

  • name: “PV Einspeisung Ausgelesen” #Das sind die reinen Einspeisungen ins Netz
    device_class: power
    unit_of_measurement: “W”
    state: “{{ states(‘sensor.shelly3em_energy_total’)|float(0) if states(‘sensor.shelly3em_energy_total’)| int < 1 else 0 }}”

  • 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) }}”

Ich weiss nicht ob das das Problem ist, aber du hast

sensor:
* name: “Shelly3EM Total Power”
unique_id: shelly3em_energy_total
device_class: energy
state_class: total
unit_of_measurement: “W”
state: >
{{
states(‘sensor.shelly_em3_channel_a_power’)| float(0) +
states(‘sensor.shelly_em3_channel_b_power’)| float(0) +
states(‘sensor.shelly_em3_channel_c_power’)| float(0)
}}

device_class: energy
ist falsch. richtig wäre
device_class: power

Energy wird in Wh, kWh, MWh gemessen
Power in W, kW, MW

Eventuell mal im Log schauen ob es dort Fehlermeldungen gibt. Oder über “Entwicklerwerkzeug” die Sensoren suchen und anzeigen lassen.

Viel Erfolg.

Hallo ryhoruk,
welchen deiner angelegten Sonsoren verknüpfe ich jeweils im Helfer “Stromverbrauch gesamt” und “Zurück ins Netz (kWh)” im Riemann Summenintegralsensor?".

hallo Curgan,
„Total Power nur Verbrauch“ geht in „Stromverbrauch gesamt“
und „PV Einspeisung normiert“ geht in „Zurueck ins Netz (kWh)“
Viel Erfolg
Claudius

Dann habe ich es ja richtig gemacht :slight_smile:

Danke Dir.

1 „Gefällt mir“

Du musst jetzt nur eine Weile warten bis genügend Werte zusammen gekommen sind, dann sollten die shelter auch Werte ausgeben und anzeigen.

Hallo,

wenn ich jetzt einen Sensor erstellen will, der anzeigt, was das Haus momentan für einen Leistungsbedarf hat, müßte ich die PV-Leistung und den Netzbezug addieren und die Einspeisung wieder abziehen, oder?

Wenn ich das als Helfer anlege über Kombination der entsprechenden Sensoren, sieht der Wert auch plausibel aus.

Mit dem folgenden Sensor wird mir aber nur die Solarleistung ausgeben, obwohl das Schema und die Entitäten gleich sind wie bei dem Helfer. Wo ist der Fehler in dem Code?

  - sensor:
    - name: "Hausstrombedarf"
      unique_id: "Hausstrombedarf"
      device_class: power
      state_class: measurement
      unit_of_measurement: "W"
      state: >
        {{
        states('Total_Power_Nur_Verbrauch')| float(0) +
        states('sensor.solar_gesamt_aktuell')| float(0) +
        states('PV_Einspeisung_Ausgelesen')| float(0)
        }}
 

Vielen Dank und schönes Wochenende,

Gruß Pit

Ich kenne Deine Ursprungssensoren nicht. Bei mir wird der korrekte Wert im Energiedashboard angezeigt. Dafür musste ich dort die korrekten Werte einbinden.
Dann hast du in deinem Beispielcode 3 mal +. Das kann nicht stimmen.
Korrekt ist wie du es geschrieben hast.
Netzbezug + Solarproduktion - Netzeinspeisung.
Sind die von dir verwendeten Werte alles W Werte, oder stimmt da eventuell etwas nicht?
Viel Erfolg
Claudius

P.S. poste doch mal die Ermittlung der 3 Ausgangswerte inkl. Einheit, dann wird es vielleicht verständlicher.
Rechts unten in dem bunten Kreis siehst du den komplettverbrauch bei mir heute. Den Wert möchtest du in einem Sensor haben, das wären dann kWh oder möchtest du den aktuellen Wert haben in Watt?

Hallo,

danke, die Sensoren sind die beiden aus dem Beispiel oben plus die Solarleistung über eine Meßsteckdose.

Das mit dem Minus stimmt schon, weil der Shelly3EM die Einspeisung ja negativ darstellt.

Wenn ich das mit denselben Entitäten über einen Helfer mache als Summe der drei Werte, dann stimmt es wohl auch, ich verstehe nur nicht, was an dem Code falsch ist.

Ich wollte einfach den momentanen Hausverbrauch in Watt anzeigen lassen, also eigentlich die Leistungsaufnahme.

LG Pit

Wenn ich es richtig verstehe, dann hast Du meine Sensoren vom Urpost nachgebaut.

Zur Fehlversuche wäre es hilfreich, wenn Du in einem DashBoard die 3 Werte und den berechneten neuen Wert von dir untereinander ausgibst. Vielleicht wird dann ein möglicher Fehler leichter sichtbar.

Meine Erwartung wäre, dass “Total_Power_Nur_Verbrauch” oder “PV_Einspeisung_Ausgelesen” immer 0 ist, denn die beiden schliessen sich ja gegenseitig aus. Entweder der eine hat positive Werte, dann hat der andere 0 oder umgekehrt.

Ja, ich habe Deine Sensoren verwendet und die Solarleistung ergänzt.

im Dashboard sieht es so aus

grafik

Der Hausstrombedarf ist gleich dem Solarertrag, das stimmt ja nicht.

Der Hausstrombedarf müßte hier 138 W + 73 W sein, das wären rund 200 W, und das würde auch hinkommen.

Irgendwas stimmt mit dem Code nicht, denn wenn ich die drei Entitäten in einem Helfer als Summe berechnen lasse, stimmt der Wert (ganz unten ist der Wert des Summenhelfers):

grafik

Ich wüßte aber gerne, was an dem Code nicht stimmt zum Verständnis.

Gruß Pit