Shelly 3EM, eine Photovoltaik-Anlage und HomeAssistant: Den Stromverbrauch richtig saldierend messen

Für wen ist diese Beschreibung?

  • Ihr nutzt eine Shelly 3EM um den Stromverbrauch eures Hauses oder Wohnung zu messen.
  • Ihr betreibt eine Photovoltaik-Anlage, deren Überschuss über in das öffentliche Netzeingespeist wird (und diese ist nicht an einen separaten Stromzähler oder dergleichen angeschlossen).
  • Ihr nutzt HomeAssistant, um euren Energieverbrauch zu messen und eure Home Automation darüber zu steuern.
  • Ihr wollt genau sehen, wieviel von eurem produzierten Strom ins Stromnetz eingespeist wird und wie hoch der Eigenverbrauch ist, habt aber das Problem, dass die Shelly 3EM dies leider korrekt darstellen kann, weil die Shelly (noch) nicht saldieren kann.

Warum kann ich nicht direkt in der Shelly 3EM sehen, wieviel Strom ich eingespeist habe?

Grundsätzlich muss man sagen, die Shelly 3EM macht alles korrekt und man sieht den Strom der eingespeist wird technisch korrekt dargestellt. “Abrechnungstechnisch” stimmt das jedoch nicht. Denn wenn ihr den Stromverbrauch in der Shelly mit den auf deinem Stromzähler vergleicht, werdet ihr teils erhebliche Differenzen feststellen.

Warum: Dein Stromzähler saldiert, die Shelly 3EM nicht. Was bedeutet das?

Dazu muss man kurz ausholen: Dein Haushaltsstrom kommt über drei Phasen zu Dir nach nach Hause – das nennt man Dreiphasenwechselstrom und ist ein europäischer Standard. Kurz gesagt: In dein Haus / Wohnung kommen drei Stromleitungen mit 230V Spannung. Jeder deiner Verbraucher (Lampe, Steckdose, usw) hängt an einer der drei Phasen. Auch das Balkonkraftwerk. Wenn dein Balkonkraftwerk mehr Strom erzeugt als die Verbraucher an der Phase gerade an Strom benötigen, wird der überschüssige Strom ins Netz eingespeist. Der überschüssige Strom kann auch nicht auf die anderen beiden Phasen überspringen, das geht technisch nicht.

Dein Stromzähler ist – fast immer – saldierend. Bei saldierenden Zählern werden Verbräuche und Erträge aller drei Phasen noch vor der Anzeige auf dem Stromzähler miteinander verrechnet. Man sieht also nicht, wie viel auf den jeweiligen Phasen verbraucht oder erzeugt wurde, man sieht nur das Ergebnis der Verrechnung. Genauso verhält sich der Zähler wenn du Strom auf einer Phase einspeist. Der saldierende Stromzähler verrechnet die Einspeisung auf einer Phase mit dem Verbrauch der anderen beiden Phasen. Das ist gut so, ansonsten hätte man weniger davon, sich ein Balkonkraftwerk anzuschaffen.

Der Shelly 3EM kann nicht saldieren – er schaut sich Phase für Phase an. Zwar war vor längerem schon man angekündigt worden, dass dieses Feature durch ein Software Update nachgereicht werden soll, aber bis zum aktuellen Zeitpunkt ist das noch nicht der Fall. Das ist aber nicht so schlimm, wir bilden das einfach in HomeAssistant ab, was bei mir ohnehin im Betrieb ist.

In HomeAssistant bekommt man dann auch so schöne Übersichten angezeigt, auf denen man sehr übersichtlich sehen kann wieviel Kilowattstunden man aus den Netz bezogen hat, wieviel Solarenergie produziert worden ist und wieviel selbstbezogen worden ist.

Wie sieht der Aufbau der Anlage aus?

  1. Das PV Modul hängt an eurem Mikrowechselrichter. Bei mir nennt man das Balkonkraftwerk (BKW).
  2. Der Mikrowechselrichter ist mit einem Shelly Plug S verbunden. Dieser smarte Aus- und Einschalter misst den Stromverbrauch, hier die Stromgenerierung durch das PV Modul.
  3. Der generierte Strom des PV Moduls landet an einer der drei Phasen im “Sicherungskasten”.
  4. Im Sicherungskasten ist die Shelly 3EM installiert und überwacht die Stromverbräuche – sowohl den bezogenen Strom als auch den eingespeisten Strom. Eine Anleitung wie man die Shelly 3EM installiert findet ihr hier.

Vorraussetzung

Diese Anleitung geht davon aus, das eure Shelly 3EM korrekt in Betrieb ist und in eurem Netzwerk eingebunden ist. Ebenfalls setzt diese Anleitung voraus, dass im gleichen Netzwerk Home Assistant installiert ist und dort bereits die Shelly 3EM mit der Shelly Integration eingebunden ist.

Schritt für Schritt Anleitung

1. Das File Editor Add-On in Home Assistant installieren

Um in Home Assistant die Konfigurationsdatei zu öffnen, solltet ihr euch das Addon “File Editor” installieren. So kann man am einfachsten die Konfiguration verändern. Macht dazu folgendes:

  1. Öffne HomeAssistant in einem Browser
  2. Klicke auf “Settings”
  3. Klicke dann auf “Add-ons”
  4. Klicke auf “Add-On Store”
  5. Gibt im Suchfeld “File editor” an
  6. Klicke auf “Installieren”.
  7. Aktiviere folgende Parameter:
    “Start on Boot”
    “Show in Sidebar”
  8. Nach der Installation solltet ihr im Menü an der linken Seite den Menüpunkt “File editor” sehen, klickt auf diesen.
  9. Danach solltet ihr oben einen Ordner-Symbol sehen, dieses anklicken.
  10. In der Dateiliste dann die Datei “configuration.yaml” öffnen

2. Die “configuration.yaml” ändern

Als nächstes kopiert den nachstehenden Yaml-Code in die Datei “configuration.yaml”, die ihr mit dem File Editor aus dem vorherigen Schritt geöffnet habt. Fügt es einfach ganz am Ende an und verändert die bestehende Konfiguration nicht.

Es kann sein, dass ihr etwas Anpassen müsst: In der Datei findet ihr wiederkehrend die drei Namen der Phasen der Shelly 3EM in Home Assistant sensor.shelly3em_channel_a_power, sensor.shelly3em_channel_b_power, sensor.shelly3em_channel_c_power.

Diese müsst ihr mit euren jeweiligen Namen für die “Power” Entity der Shelly 3EM ersetzen. Bei mir wurden die Namen automatisch bei der Integration der Shelly 3EM in HomeAssistant so benannt. Habt ihr die gleichen Namen, dann ist alles gut.

sensor:
  - platform: template
    sensors:

      # Template sensor for values of power import (active_power > 0)
      power_import:
        friendly_name: "Power Import"
        unit_of_measurement: 'W'
        value_template: >-
          {% if (states('sensor.shelly3em_channel_a_power')|float + states('sensor.shelly3em_channel_b_power')|float + states('sensor.shelly3em_channel_c_power')|float) > 0 %}
            {{ states('sensor.shelly3em_channel_a_power')|float + states('sensor.shelly3em_channel_b_power')|float + states('sensor.shelly3em_channel_c_power')|float }}
          {% else %}
            {{ 0 }}
          {% endif %}
        availability_template: "{{
            [ states('sensor.shelly3em_channel_a_power'),
              states('sensor.shelly3em_channel_b_power'),
              states('sensor.shelly3em_channel_c_power')
            ] | map('is_number') | min
          }}"

      # Template sensor for values of power export (active_power < 0)
      power_export:
        friendly_name: "Power Export"
        unit_of_measurement: 'W'
        value_template: >-
          {% if (states('sensor.shelly3em_channel_a_power')|float + states('sensor.shelly3em_channel_b_power')|float + states('sensor.shelly3em_channel_c_power')|float) < 0 %}
            {{ (states('sensor.shelly3em_channel_a_power')|float + states('sensor.shelly3em_channel_b_power')|float + states('sensor.shelly3em_channel_c_power')|float) * -1 }}
          {% else %}
            {{ 0 }}
          {% endif %}
        availability_template: "{{
            [ states('sensor.shelly3em_channel_a_power'),
              states('sensor.shelly3em_channel_b_power'),
              states('sensor.shelly3em_channel_c_power')
            ] | map('is_number') | min
          }}"

      # Template sensor for values of power consumption
      power_consumption:
        friendly_name: "Power Consumption"
        unit_of_measurement: 'W'
        value_template: >-
          {% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.power_solargen')|float(0) - states('sensor.power_export')|float(0)) < 0 %}
          {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.power_solargen')|float(0) - states('sensor.power_export')|float(0)) > 0 %}
            {{ (states('sensor.power_solargen')|float(0)) - states('sensor.power_export')|float(0) }}    
          {% else %}
            {{ states('sensor.power_import')|float(0) + states('sensor.power_solargen')|float(0) }}
          {% endif %}


  # Sensor for Riemann sum of energy import (W -> Wh)
  - platform: integration
    source: sensor.power_import
    name: energy_import_sum
    unit_prefix: k
    round: 2
    method: left

  # Sensor for Riemann sum of energy export (W -> Wh)
  - platform: integration
    source: sensor.power_export
    name: energy_export_sum
    unit_prefix: k
    round: 2
    method: left

  # Sensor for Riemann sum of energy consumption (W -> Wh)
  - platform: integration
    source: sensor.power_consumption
    name: energy_consumption_sum
    unit_prefix: k
    round: 2
    method: left

utility_meter:
  energy_import_daily:
    source: sensor.energy_import_sum
    name: Energy Import Daily
    cycle: daily
  energy_import_monthly:
    source: sensor.energy_import_sum
    name: Energy Import Monthly
    cycle: monthly
  energy_export_daily:
    source: sensor.energy_export_sum
    name: Energy Export Daily
    cycle: daily
  energy_export_monthly:
    source: sensor.energy_export_sum
    name: Energy Export Monthly
    cycle: monthly
  energy_consumption_daily:
    source: sensor.energy_consumption_sum
    name: Energy Consumption Daily
    cycle: daily
  energy_consumption_monthly:
    source: sensor.energy_consumption_sum
    name: Energy Consumption Monthly
    cycle: monthly

Nachdem ihr die Konfiguration am Ende der “configuration.yaml” angefügt habt bitte die folgenden Schritte durchführen:

  1. Klicke unten links im Hauptmenü auf “Developer Tools”
  2. Klicke dann auf “Check configuration”
  3. Kommt dann die Meldung “Configuration will not prevent Home Assistant from starting” passt alles.
  4. Klickt danach auf “Restart”
  5. Nach 1-2 Minuten ist HomeAssistant wieder erreichbar und hat die neue Konfiguration geladen.

3. Das Energy Dashboard konfigurieren

Im letzten Schritt konfigurieren wir noch das Energy Dashboard, damit die neuen Entities dort auch eingebunden sind und die richtigen Werte angezeigt werden. Dazu gehen wir wie folgt vor:

  1. Klicke unten links im Hauptmenü auf “Settings”.
  2. Klicke dann auf “Dashboards”.
  3. Klicke dann auf das “Energy” Dashboard.
  4. Füge die neue Entity “Energy Import Daily” bei “Grid Consumption” hinzu.
  5. Füge die neue Entity “Energy Export Daily” bei “Return to Grid” hinzu.
  6. Bei den “Solar Panels” bitte den Zähler für eure PV Produktion hinzufügen. In meinem Fall sind das zwei Shelly Plug S, weil ich zwei Module habe.

Am Ende sieht die Konfiguration bei mir wie folgt aus:

So sieht es dann im Home Assistant Energy Dashboard aus

Ihr seht nun schon übersichtlich den Stromverbrauch aus dem Netz und eurer Photovoltaik Anlage und wieviel eures selbst produzierenden Stroms durch euch verbraucht worden ist – zumindest rechnerisch.

Bitte beachten: Es dauert eine Weile bis ihr Daten im Energie Dashboard seht. Es dauert mindestens eine Stunde, kann aber auch bis zu 3 Stunden benötigen. Habt ein wenig Geduld!

Hinterlasst mir gerne Kommentare wenn die Beschreibung Schwächen hat, oder verbessert werden kann! Vielen Dank an James von dem die Ursprungsversion kam.

9 Kommentare zu „Shelly 3EM, eine Photovoltaik-Anlage und HomeAssistant: Den Stromverbrauch richtig saldierend messen“

  1. Hi

    das ist eine super Anleitung, ich habe dazu aber eine Frage und zwar, gibt es auch ein Code bei dem das BKW noch vor dem Shelly sitzt oder kann man diese konfiguration nicht richtig auslesen?

    1. Wenn die PV Anlage im Stromkreis vor der Shelly sitzt, dann wüsste ich nicht, wie das funktionieren soll. Du kannst dann nicht mehr unterscheiden, ob der selbst benötigte Strom aus dem Netz oder von der PV Anlage kommt. Kannst du es nicht ändern, dass die PV Einspeisung hinter der Shelly stattfindet?

  2. Super Anleitung. Eine Verständnisfrage hätte ich noch, der ‘sensor.power_solargen’ bei “Power Consumption” wird ebenfalls durch die “Power” Entity des Shelly EM beim BKW (in meinem Fall) ersetzt?

    1. Richtig! Und wenn du mehrer “Zähler” hast, zählst du die am besten vorab zusammen:

      # Template sensor for values of energy Solar generation (solar_power > 0)
      power_solargen:
      friendly_name: “Power Solar Generation”
      unit_of_measurement: ‘W’
      value_template: >-
      {% if (states(‘sensor.pv_power’)|float(0) + states(‘sensor.pv_power_2’)|float(0)) > 0 %}
      {{ (states(‘sensor.pv_power’)|float(0) + states(‘sensor.pv_power_2’)|float(0)) }}
      {% else %}
      {{ 0 }}
      {% endif %}

  3. Vielen Dank für die tolle Anleitung! Bei mir kann ich leider die Entitäten nicht auswählen. Scheinen aus dem Skript nicht übernommen zu sein. Leider weis ich nicht wie ich überprüfen kann wo der Fehler liegt. “Check configuration” ist bestanden. In den logs nichts zu sehen. Jemand eine Idee wo ich suchen sollte oder woran es liegen könnte?

    1. Hast du nachdem du die neue Konfiguration getestet hast, Home Assistant auch neu gestartet?

      Wenn ja, dann lösche mal den Cache deines Browsers. Home Assistant cached recht viel am Client.

      1. Ich habe es hin bekommen. Fehler war:
        In meiner configuration.yaml habe ich “sensor:” über einen Ordner inkludiert. Darin befinden sich wiederum einzelne *.yaml.
        Habe dein Skript natürlich mit “Sensor:” am Anfang übernommen. Das weg, , formatiert, nun funktioniert es wie beschrieben. Vielen dank nochmal, auch für den schnellen Support!

Kommentar verfassen

Your email address will not be published. Required fields are marked *