Drücken sie Ctrl/Cmd + P zum drucken
oder zum Speichern als PDF.

Home Assistant: Energiemessung mit Shelly 3EM, Ahoy-DTU und Hoymiles

Der Shelly 3EM erfasst den Stromverbrauch nicht saldierend. Das bedeutet, dass die angezeigten Verbräuche bei gleichzeitiger Einspeisung von Solarstrom in das Netz von den tatsächlichen abweichen können. Die Ursache hierfür liegt darin, dass der Shelly 3EM die Verbräuche nicht verrechnet, sondern lediglich die Summe der einzelnen Phasen anzeigt. Dadurch kann es zu einer Doppelzählung von Strom kommen, der sowohl verbraucht als auch eingespeist wird.

Eine mögliche Lösung für dieses Problem ist die Verwendung einer zusätzlichen Zählerentität, die die Einspeisung des Solarstroms erfasst. Diese Zählerentität kann dann verwendet werden, um die tatsächlichen Verbräuche zu berechnen, indem die eingespeiste Strommenge von der Summe der angezeigten Verbräuche abgezogen wird.

Falls der Shelly schon eine Weile im Einsatz ist, sollte man darüber nachdenken die Messwerte im Shelly zurückzusetzen, um einen sauberen Einstieg für die kommende Auswertung zu haben.

Voraussetzungen

  • Shelly 3EM (Fw 20230913-114244/v1.14.0-gcb84623) Gen1
  • Werte werden per Shelly Integration in HA eingebunden
    • Entität sensor.l1_power -> Leistung Phase 1
    • Entität sensor.l2_power -> Leistung Phase 2
    • Entität sensor.l3_power -> Leistung Phase 3
  • es werden 2 Hoymiles Wechselrichter verwendet (HM800 & HM1200), die über eine Ahoy-DTU (Release 0.8.140) ihre Werte per MQTT an Home Assistent senden
    • Entität sensor.hm_800_p_ac -> stellt die aktuelle AC Solarleistung des HM800 in Watt dar, Wert wird durch DTU geliefert
    • Entität sensor.hm_1200_p_ac -> stellt die aktuelle AC Solarleistung des HM1200 in Watt dar, Wert wird durch DTU geliefert

Sensorenüberblick

Für die korrekte Berechnung von Verbrauch, Einspeisung und Rückvergütung habe ich folgende zusätzliche Sensoren erstellt:

  • HM-800 P AC korrigiert
    • verhindert die Anzeige im Dashboard „nicht verfügbar / unbekannt“ wenn keine Leistung erzeugt wird
  • HM-1200 P AC korrigiert
    • verhindert die Anzeige im Dashboard „nicht verfügbar / unbekannt“ wenn keine Leistung erzeugt wird
  • Total Energy Haus (kWh)
    • gesamte Energie, die vom Shelley 3EM über alle 3 Phasen gemessen wird (in kWh)
  • Total Power Haus (W)
    • gesamte Leistung, die vom Shelly 3EM über alle 3 Phasen gemessen wird (in W)
  • Power vom Netz (W)
    • momentane Leistung in Watt, die aus dem Netz bezogen wird (Solarleistung ist kleiner als momentanter Verbrauch)
  • Power ins Netz (W)
    • momentane Leistung in Watt, die ins Netz eingespeist wird (Solarleistung ist größer als momentanter Verbrauch)
  • Energy vom Netz (kWh)
    • aufsummierte Energie in kWh, die aus dem Netz bezogen wird
  • Energy ins Netz (kWh)
    • aufsummierte Energie in kWh, die in das Netz eingespeist wird
  • Power Solar gesamt (W)
    • Gesamte Solarleistung, die von allen PV Modulen erzeugt wird
  • Energy Solar gesamt DTU (kWh)
    • liest den gesamten Ertrag der Wechselrichter aus, die über die DTU verbunden sind
  • Solar Eigenverbrauch (W)
    • momentaner Eigenverbrauch der erzeugten Solarleistung
  • Solar Eigenverbrauch gesamt (kWh)
    • aufsummierter gesamter Eigenverbrauch (kWh)
  • Strompreis
    • Sensor für den Stompreis
  • HA nach Erstellung der Sensoren neu starten!

Sensoren erstellen

Template Sensor HM-800 P AC korrigiert bzw. HM-1200 P AC korrigiert

Einstellungen -> Geräte & Dienste -> Helfer + Helfer erstellen -> Sensor Template

  • Name: HM-800 P AC korrigiert bzw. HM-1200 P AC korrigiert
  • Maßeinheit: W
  • Geräteklasse: Leistung
  • Zustandsklasse: Messung
  • Gerät: HM-800 bzw. HM-1200
YAML
# Zustandstemplate*
{{ states('sensor.hm_800_p_ac') | float(0) }}
Template Sensor – Total Power Haus (W)

Summiert alle Phasen die der Shelly 3EM misst auf und gibt die momentane Gesamtleistung aus. Der Wert wird auf Null gesetzt, falls nicht gemessen wird.

  • Einstellungen -> Geräte & Dienste -> Helfer + Helfer erstellen -> Sensor Template
    • die Entitäten für die Phasen sensor.l1.power, sensor.l2.power, sensor.l3.power müssen auf die eigene Umgebung angepasst werden
    • er handelt sich hierbei jeweils um den momentanten Verbrauch der Phase
YAML
# ZUSTANDSTEMPLATE*
{% set invalid = ['none', 'unavailable', 'unknown'] %}
{% set a = states('sensor.l1_power') %}
{% set b = states('sensor.l2_power') %}
{% set c = states('sensor.l3_power') %}
{% set a = (a | float) if a not in invalid else 0 %}
{% set b = (b | float) if b not in invalid else 0 %}
{% set c = (c | float) if c not in invalid else 0 %}
{{ a + b +  c }}
Template Sensor – Total Energy Haus (kWh)

Sensor zeigt den gesamten Energieverbrauch in kWh an und summiert diesen auf.

  • Einstellungen -> Geräte & Dienste -> Helfer
  • + Helfer erstellen -> Sensor Template
    • Name: Total Energy Haus (kWh)
    • Maßeinheit: kWh
    • Geräteklasse: Energie
    • Zustandsklasse: Gesamt steigend
    • Gerät: Shelly 3EM
  • die Entitäten für die Phasen sensor.l1.energy, sensor.l2.energy, sensor.l3.energy müssen auf die eigene Umgebung angepasst werden
YAML
# ZUSTANDSTEMPLATE*
{% set invalid = ['none', 'unavailable', 'unknown'] %}
{% set a = states('sensor.l1_energy') %}
{% set b = states('sensor.l2_energy') %}
{% set c = states('sensor.l3_energy') %}
{% set a = (a | float) if a not in invalid else 0 %}
{% set b = (b | float) if b not in invalid else 0 %}
{% set c = (c | float) if c not in invalid else 0 %}
{{ a + b +  c }}
Template Sensor – Power vom Netz (W)

Misst die Werte von Total Power (W) die größer Null sind, also Energie die aus dem Netz bezogen wird. Hierbei ist die aktuelle Solarleistung also kleiner als der momentane Verbrauch.

  • Einstellungen -> Geräte & Dienste -> Helfer + Helfer erstellen -> Sensor Template
    • Name: Power vom Netz (W)
    • Maßeinheit: W
    • Geräteklasse: Leistung
    • Zustandsklasse: Messung
    • Gerät: Shelly 3EM
  • mißt die Werte von Total Power (W) die größer als Null sind, also Energie die aus dem Netz bezogen wird und schreibt diese in den Sensor
  • hierbei ist die aktuelle Solarleistung also kleiner als der momentane Verbrauch
YAML
# ZUSTANDSTEMPLATE*
{% if states('sensor.total_power_haus_w') | float(0) >= 0 %}
      {{states('sensor.total_power_haus_w') | float(0) | round (3) }}
  {% else %}
      {{(states ('0.0') | float(0)) |round(3) }}
  {% endif %}
Template Sensor – Power in das Netz (W)

Misst die Werte von Total Power (W) die kleiner als Null sind, also Energie die in das Netz eingespeist wird und gibt ihnen ein positives Vorzeichen. Hierbei ist die aktuelle Solarleistung also größer als der momentane Verbrauch.

  • Einstellungen -> Geräte & Dienste -> Helfer
  • + Helfer erstellen -> Sensor Template
    • Name: Power ins Netz (W)
    • Maßeinheit: W
    • Geräteklasse: Leistung
    • Zustandsklasse: Messung
    • Gerät: Shelly 3EM
YAML
# ZUSTANDSTEMPLATE*
{% if states('sensor.total_power_haus_w') | float(0) < 0 %}
    {{(states('sensor.total_power_haus_w') | float(0))*-1 | round (3) }}
      {% else %}
         {{(states ('0.0') | float(0)) |round(3) }}
{% endif %}
Template Sensor – Energy vom Netz (kWh)

Sensor summiert die Energie auf, die aus dem Netz bezogen wird.

  • Einstellungen -> Geräte und Dienste -> Helfer -> + HELFER ERSTELLEN -> Integralsensor -> Riemann Summenintegralsensor erstellen
    • Name: Energy vom Netz (kWh)
    • Metrisches Präfix: k (kilo)
    • Zeiteinheit: Stunden
    • Eingangssensor: Power vom Netz (W)
    • Integrationsmethode: Linke Riemannsche Summe
    • Genauigkeit: 2
Template Sensor – Energy ins Netz (kWh)

Sensor summiert die Energie auf, die in das Netz eingespeist wird.

  • Einstellungen -> Geräte und Dienste -> Helfer -> + HELFER ERSTELLEN -> Integralsensor -> Riemann Summenintegralsensor erstellen
    • Name: Energy ins Netz (kWh)
    • Metrisches Präfix: k (kilo)
    • Zeiteinheit: Stunden
    • Eingangssensor: Power ins Netz (W)
    • Integrationsmethode: Linke Riemannsche Summe
    • Genauigkeit: 2
Template Sensor – Power Solar gesamt (W)

Gesamte AC Solarleistung, die von allen Wechselrichtern erzeugt wird. Sensoren müssen auf eigene Umgebung angepasst werden.

  • Einstellungen -> Geräte & Dienste -> Helfer + Helfer erstellen -> Sensor Template
    • Name: Power Solar Gesamt (W)
    • Maßeinheit: W
    • Geräteklasse: Leistung
    • Zustandsklasse: Messung
    • Gerät:
YAML
# ZUSTANDSTEMPLATE*
{{ (states('sensor.hm_800_p_ac') | float(0)) + (states('sensor.hm_1200_p_ac') | float(0)) }}
MQTT Sensor – Energy Solar DTU gesamt (kWh)

MQTT Sensor in configuration.yaml hinzufügen. Ggf. ist das state_topic auf die eigenen Umgebung anzupassen. Ein gutes Hilfmittel dazu ist der mqtt.explorer.

YAML
mqtt:
  sensor:
    - name: "Energy Solar DTU gesamt (kWh)"
      state_topic: "inverter/total/YieldTotal"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      value_template: "{{ value | float(0) }}"
Template Sensor – Solar Eigenverbrauch (W)
  • Name: Solar Eigenverbrauch (W)
  • Maßeinheit: W
  • Geräteklasse: Leistung
  • Zustandsklasse: Messung
  • Gerät: Shelly 3EM
YAML
# ZUSTANDSTEMPLATE*
{% if states('sensor.total_power_haus_w') | float(0) < 0 %}
              {{ ( (states('sensor.total_power_haus_w') | float(0) ) + (states('sensor.power_solar_gesamt_w') | float(0) ) ) | round (3) }}
          {% else %}
              {{ states('sensor.power_solar_gesamt_w') | round (3) }}
          {% endif %}
Template Sensor – Solar Eigenverbrauch gesamt (kWh)
  • Name: Solar Eigenverbrauch gesamt (kWh)
  • Metrisches Präfix: k (kilo)
  • Zeiteinheit: Stunden
  • Eingangssensor: Solar Eigenverbrauch (W)
  • Integrationsmethode: Linke Riemannsche Summe
  • Genauigkeit: 0
Template Sensor – Strompreis

Um später den Strompreis einfach über das Dashboard ändern zu können, erstelle ich noch einen Helfer für den Strompreis. Diesen Helfer können wir dann später im Energiedashboard angeben um korrekte Berechnungen zu bekommen.

  • Einstellungen -> Geräte & Dienste -> Helfer + Helfer erstellen -> Zahlenwert-Eingabe
    • Name: Strompreis
    • Symbol:
    • Maßeinheit: EUR/kWh
Template Sensor – Solar Ersparnis

Berechnet die Preiseinsparung durch die Solaranlage anhand des Eigenverbrauches.

  • Name: Solar Ersparnis
  • Maßeinheit: EUR
  • Geräteklasse:
  • Zustandsklasse: Gesamt steigend
  • Gerät:
YAML
# ZUSTANDSTEMPLATE*
{{ states('solar_eigenverbrauch_gesamt')|float(0) * states('input_number.strompreis')|float(0) }}

Energie-Dashboard einrichten

  • zum Engerie-Dashboard wechseln
  • Konfiguration aufrufen (3 Pkt. Menü rechts oben)
  • Netzbezug hinzufügen – Energy vom Netz (kWh)
    • Strompreis als Entität für aktuellen Strompreis eintragen
Bei Verwendung ohne Solaranlage, können hier die 3 Phasen des Shelly hinzugefügt werden, die die Energie ausgeben. (in kWh)z.B. sensor.l1_energy, sensor.l2_energy, sensor.l3_energy
  • Netzeinspeisung hinzufügen – Energy ins Netz (kWh)
    • Strompreis als Entität für aktuellen Strompreis eintragen
  • PV-Module hinzufügen – HM-800 YieldDay & HM-1200 YielDay (MQTT Werte aus der DTU)
Energiedashboard
Bis zur Anzeige von Werten kann es bis zu 2h dauern, da die Variablen erst mit Werten vom momentanen Verbrauch gefüllt werden müssen.
Energiedashboard

Quellen