Praxisnahe Tutorials, auf die du zählen kannst.
Einsteiger Guide für Home Assistant

Shelly Pro 3EM: Saldierung richtig einrichten in Home Assistant

✅ Der Shelly Pro 3EM ist ein beliebter Energiezähler für Home Assistant – aber er hat ein bekanntes Problem: Er saldiert nicht so, wie es dein Stromzähler tut. Das führt zu verfälschten Werten im Energiedashboard, vor allem wenn du eine PV-Anlage oder ein Balkonkraftwerk betreibst, dass nicht auf allen 3 Phasen verteilt einspeist.

In diesem Beitrag erkläre ich dir das Problem und zeige dir zwei gleichwertige Lösungswege: ein Skript direkt auf dem Shelly, oder Template-Sensoren in Home Assistant. Beide funktionieren gut – sie haben nur unterschiedliche Voraussetzungen und Eigenschaften.

Inhaltsverzeichnis



⚡ Das Problem: Was bedeutet „saldieren“ überhaupt?

Dein Haushalt wird über drei Phasen mit Strom versorgt. Jeder Verbraucher – und auch deine PV-Anlage oder dein Balkonkraftwerk – hängt an einer dieser drei Phasen. Wenn dein Balkonkraftwerk auf Phase A einspeist und gleichzeitig auf Phase B und C Verbraucher laufen, verrechnet dein Stromzähler das automatisch: Er saldiert. Sprich: Er zieht die Einspeisung von Phase A vom Bezug der anderen Phasen ab, bevor er den Gesamtverbrauch anzeigt.

Der Shelly Pro 3EM macht das nicht – zumindest nicht bei der Energiezählung (kWh). Ein konkretes Beispiel:

  • Phase A: Balkonkraftwerk speist −600 W ein
  • Phase B: 50 W Verbrauch
  • Phase C: 550 W Verbrauch

Dein Stromzähler saldiert: −600 + 50 + 550 = 0 W → kein Nettobezug, keine Einspeisung.
Der Shelly Pro 3EM hingegen zählt: 600 Wh als Einspeisung auf Phase A und gleichzeitig 600 Wh als Verbrauch auf Phase B+C – obwohl du real nichts eingespeist und nichts bezogen hast.

Für die Momentanleistung (Watt) macht der Shelly das übrigens korrekt – da wird korrekt über alle Phasen saldiert. Das Problem liegt ausschließlich bei der kumulierten Energiezählung (kWh).

📖 Wie du den Shelly Pro 3EM generell in Home Assistant einbindest und fürs Energiedashboard nutzt, erkläre ich ausführlich hier: Strom, Wasser & Gas überwachen mit Home Assistant


📜 Lösung: Skript direkt auf dem Shelly

Ja, es gibt Skripte die direkt auf dem Shelly laufen und die Saldierung dort erledigen – alles auf einem Gerät, ohne dass Home Assistant daran beteiligt ist. Die bekanntesten sind:

Diese Ansätze funktionieren gut, ich nutze das Skript von Davc0m – es gibt aber ein paar Dinge die du vorher wissen solltest:

⚠️ Shelly-App-Graphen bleiben falsch: In der Shelly App selbst werden weiterhin die unsaldierten Werte angezeigt. Die Skripte können das nicht korrigieren.

⚠️ Flash-Verschleiß (konfigurierbar): Skripte die ihre Zählerstände im KVS (Key-Value-Storage, also Flash-Speicher) des Shellys ablegen, schreiben teils alle 60–150 Sekunden in den Flash. Das sind hunderte bis tausende Schreibvorgänge pro Tag – Flash-Speicher hat aber begrenzte Schreibzyklen. Neuere Skriptversionen haben dieses Intervall entschärft oder bieten eine Option, die Persistenz komplett zu deaktivieren. Wer Home Assistant nutzt, kann das bedenkenlos ausschalten – HA trackt den Zählerstand ohnehin weiter.

⚠️ MQTT-Abhängigkeit: Das Davc0m-Skript (die ausgefeilteste Lösung) arbeitet über MQTT mit HA Auto-Discovery – wer ausschließlich die native Shelly-Integration nutzt und kein MQTT betreibt, hat hier Mehraufwand.

📹 Mehr zu MQTT im Video auf YouTube: https://youtu.be/6dakzuffues

Das Davc0m-Skript ist die ausgefeilteste Variante und läuft bei mir selbst produktiv – mit deaktivierter Persistenz (RAM-only) und einem großzügigen Save-Intervall. Wer kein MQTT betreiben möchte, findet in Lösung 2 eine gleichwertige Alternative direkt in Home Assistant.

Das 👆 ist die Lösung, die ich auch im Video erklärt habe


🧑‍💻 Alternative Lösung: Template-Sensoren in Home Assistant

Wer kein MQTT betreiben möchte oder alles lieber in Home Assistant verwaltet, kann die Saldierung komplett in HA abbilden – ohne Script auf dem Shelly, ohne zusätzliche Dienste. Der Trick: Die Momentanleistung (W) saldiert der Shelly bereits korrekt. Wir nehmen also die drei Phasen-Sensoren, summieren sie in HA zu einem Gesamtwert, filtern positiv (Bezug) und negativ (Einspeisung) auf – und lassen Home Assistant daraus saubere kWh integrieren.

Schritt 1: Template-Sensoren anlegen

Gehe in Home Assistant zu Einstellungen → Geräte & Dienste → Helfer → Helfer hinzufügen → Vorlage → Sensor.

Lege zwei Template-Sensoren an:

Sensor 1 – Netz Leistung Bezug (W):

{% set p = states('sensor.shellypro3em_DEINE_ID_phase_a_active_power') | float(0)
         + states('sensor.shellypro3em_DEINE_ID_phase_b_active_power') | float(0)
         + states('sensor.shellypro3em_DEINE_ID_phase_c_active_power') | float(0) %}
{{ [p, 0] | max | round(1) }}

Einstellungen: Einheit W, Geräteklasse power, Zustandsklasse measurement

Sensor 2 – Netz Leistung Einspeisung (W):

{% set p = states('sensor.shellypro3em_DEINE_ID_phase_a_active_power') | float(0)
         + states('sensor.shellypro3em_DEINE_ID_phase_b_active_power') | float(0)
         + states('sensor.shellypro3em_DEINE_ID_phase_c_active_power') | float(0) %}
{{ [p * -1, 0] | max | round(1) }}

Einstellungen: Einheit W, Geräteklasse power, Zustandsklasse measurement

Die Entity-IDs deiner Phasen-Sensoren findest du unter Einstellungen → Geräte & Dienste → Shelly → dein Gerät → Entitäten – such nach „Leistung“ oder „active power“.

Schritt 2: Integrations-Helfer (kWh) anlegen

Gehe zu Einstellungen → Geräte & Dienste → Helfer → Helfer hinzufügen → Integrieren.

Lege zwei Integrationshelfer an:

  • Netzbezug kWh saldiert → Quellsensor: sensor.netz_leistung_bezug, Präfix: k, Methode: Trapez
  • Netzeinspeisung kWh saldiert → Quellsensor: sensor.netz_leistung_einspeisung, Präfix: k, Methode: Trapez

Die Methode Trapez (trapezoidal) ist am genauesten – sie mittelt den Leistungswert am Anfang und Ende jedes Intervalls.

Schritt 3: Energiedashboard umstellen

Gehe zu Einstellungen → Dashboards → Energie und tausche die bisherigen Shelly-Sensoren gegen die neuen aus:

  • Netzstrom (Bezug): sensor.netzbezug_kwh_saldiert
  • Rückgabe ans Netz: sensor.netzeinspeisung_kwh_saldiert

🎁 Bonus: Historische Statistiken übertragen

Wenn du die alten Shelly-Sensoren bereits im Energiedashboard hattest, stecken dort Monate an Verbrauchshistorie drin. Die kannst du per SQLite-Direktzugriff zu den neuen Sensoren kopieren – so entsteht kein Datenverlust und das Dashboard zeigt weiterhin eine lückenlose Historie.

⚠️ Backup ist Pflicht! Bevor du irgendwas an der SQLite-Datenbank änderst, erstelle ein vollständiges HA-Backup. Außerdem muss Home Assistant während der Datenbankoperationen gestoppt sein.

Du brauchst dafür das SQLite Web Add-on (verfügbar im HA Add-on Store). Dort kannst du SQL-Statements direkt ausführen – aber jeweils nur eines auf einmal.

🗼 Netzbezug migrieren

Ersetze die Entitäts-IDs natürlich durch deine eigenen Entitäts-IDs:

  • Quell-Sensor, von dem die Daten kopiert werden: sensor.shellypro3em_DEINE_ID_total_active_energy
  • Ziel-Sensor, zu dem die Statistik kopiert wird: sensor.netzbezug_kwh_saldiert

Hinweis: Falls du wie im Video empfohlen Verbrauchszähler angelegt hast, gibts du natürlich diese als Ziel-Entität an.

1. Metadaten anlegen (falls noch nicht vorhanden):

INSERT OR IGNORE INTO statistics_meta (statistic_id, source, unit_of_measurement, has_mean, has_sum, name) VALUES ('sensor.netzbezug_kwh_saldiert', 'recorder', 'kWh', 0, 1, 'Netzbezug kWh saldiert')

2. Statistiken kopieren:

INSERT OR IGNORE INTO statistics (created, created_ts, start, start_ts, mean, min, max, last_reset, last_reset_ts, state, sum, metadata_id) SELECT s.created, s.created_ts, s.start, s.start_ts, s.mean, s.min, s.max, s.last_reset, s.last_reset_ts, s.state, s.sum, (SELECT id FROM statistics_meta WHERE statistic_id = 'sensor.netzbezug_kwh_saldiert') FROM statistics s JOIN statistics_meta m ON s.metadata_id = m.id WHERE m.statistic_id = 'sensor.shellypro3em_DEINE_ID_total_active_energy'

3. Kontrolle:

SELECT COUNT(s.id) as eintraege, datetime(MIN(s.start_ts), 'unixepoch') as erster, datetime(MAX(s.start_ts), 'unixepoch') as letzter, MAX(s.sum) as sum_kwh FROM statistics s JOIN statistics_meta m ON s.metadata_id = m.id WHERE m.statistic_id = 'sensor.netzbezug_kwh_saldiert'

☀️ Netzeinspeisung migrieren

Ersetze die Entitäts-IDs natürlich durch deine eigenen Entitäts-IDs:

  • Quell-Sensor, von dem die Daten kopiert werden: sensor.shellypro3em_DEINE_ID_total_active_returned_energy
  • Ziel-Sensor, zu dem die Statistik kopiert wird: sensor.netzeinspeisung_kwh_saldiert

Hinweis: Falls du wie im Video empfohlen Verbrauchszähler angelegt hast, gibts du natürlich diese als Ziel-Entität an.

1. Metadaten anlegen:

INSERT OR IGNORE INTO statistics_meta (statistic_id, source, unit_of_measurement, has_mean, has_sum, name) VALUES ('sensor.netzeinspeisung_kwh_saldiert', 'recorder', 'kWh', 0, 1, 'Netzeinspeisung kWh saldiert')

2. Statistiken kopieren:

INSERT OR IGNORE INTO statistics (created, created_ts, start, start_ts, mean, min, max, last_reset, last_reset_ts, state, sum, metadata_id) SELECT s.created, s.created_ts, s.start, s.start_ts, s.mean, s.min, s.max, s.last_reset, s.last_reset_ts, s.state, s.sum, (SELECT id FROM statistics_meta WHERE statistic_id = 'sensor.netzeinspeisung_kwh_saldiert') FROM statistics s JOIN statistics_meta m ON s.metadata_id = m.id WHERE m.statistic_id = 'sensor.shellypro3em_DEINE_ID_total_active_returned_energy'

3. Kontrolle:

SELECT COUNT(s.id) as eintraege, datetime(MIN(s.start_ts), 'unixepoch') as erster, datetime(MAX(s.start_ts), 'unixepoch') as letzter, MAX(s.sum) as sum_kwh FROM statistics s JOIN statistics_meta m ON s.metadata_id = m.id WHERE m.statistic_id = 'sensor.netzeinspeisung_kwh_saldiert'

Die alten Sensoren bleiben dabei erhalten – sie werden nur nicht mehr im Energiedashboard verwendet. Du kannst sie jederzeit wieder reaktivieren.

📖 Mehr zur Korrektur von Statistiken in Home Assistant: Statistiken in Home Assistant korrigieren (Energie Dashboard)


🔔 Bonus 2: Benachrichtigung bei Sensor-Ausfall

Da beide Lösungen auf dem kontinuierlichen Watt-Signal des Shellys basieren (entweder direkt auf dem Gerät oder als HA-Integration), lohnt es sich, eine Automation einzurichten die dich benachrichtigt wenn der Shelly nicht mehr erreichbar ist oder sein Sensor sich ungewöhnlich lange nicht mehr ändert. So weißt du sofort, wenn Lücken in der Energiezählung entstehen.

Die Automation überwacht sensor.shellypro3em_DEINE_ID_phase_a_active_power und feuert in drei Fällen nach jeweils 5 Minuten:

  • unavailable – Shelly ist nicht erreichbar
  • unknown – Sensor liefert unbekannte Werte
  • keine Änderung – Wert bleibt 5 Minuten konstant (Gerät möglicherweise eingefroren)

Gehe zu Einstellungen → Automationen → Automation erstellen → YAML-Editor und füge folgenden Code ein. Ersetze dabei DEINE_ID durch deine tatsächliche Shelly-ID und passe den Notify-Service auf dein Gerät an:

alias: Shelly Pro 3EM – Sensor Offline Benachrichtigung
description: >
  Benachrichtigt wenn der Shelly Pro 3EM Watt-Sensor für mehr als 5 Minuten
  unavailable/unknown ist oder sich nicht mehr ändert.
mode: single
trigger:
  - platform: state
    entity_id: sensor.shellypro3em_DEINE_ID_phase_a_active_power
    to: unavailable
    for: "00:05:00"
    id: unavailable
  - platform: state
    entity_id: sensor.shellypro3em_DEINE_ID_phase_a_active_power
    to: unknown
    for: "00:05:00"
    id: unknown
  - platform: state
    entity_id: sensor.shellypro3em_DEINE_ID_phase_a_active_power
    for: "00:05:00"
    id: no_change
action:
  - choose:
      - conditions:
          - condition: trigger
            id: unavailable
        sequence:
          - action: notify.mobile_app_DEIN_GERAET
            data:
              title: ⚠️ Shelly Pro 3EM offline
              message: >
                Der Shelly Pro 3EM ist seit mehr als 5 Minuten nicht erreichbar
                (unavailable). Die saldierten Energiewerte werden in dieser Zeit
                nicht gezählt.
      - conditions:
          - condition: trigger
            id: unknown
        sequence:
          - action: notify.mobile_app_DEIN_GERAET
            data:
              title: ⚠️ Shelly Pro 3EM – Sensor unbekannt
              message: >
                Der Shelly Pro 3EM Sensor meldet seit mehr als 5 Minuten
                'unknown'. Bitte Gerät prüfen.
      - conditions:
          - condition: trigger
            id: no_change
        sequence:
          - action: notify.mobile_app_DEIN_GERAET
            data:
              title: ⚠️ Shelly Pro 3EM – Keine Aktualisierung
              message: >
                Der Shelly Pro 3EM Watt-Sensor hat sich seit mehr als 5 Minuten
                nicht geändert. Möglicherweise ist das Gerät eingefroren oder
                die Verbindung unterbrochen.

Den notify.mobile_app_DEIN_GERAET-Service findest du in HA unter Entwicklerwerkzeuge → Dienste – such nach „notify“ und wähle dein Smartphone aus.



📊 Fazit

Der Shelly Pro 3EM ist ein sehr gutes Gerät – das Saldierungsproblem existiert nicht in der Shelly app, wenn man weiß wo man umstellen kann, aber sehr wohl in Home Assistant.

Es ist lösbar, und zwar auf zwei gleichwertige Arten: Entweder mit einem Skript direkt auf dem Shelly (robust, alles auf einem Gerät, MQTT nötig) oder mit Template-Sensoren in Home Assistant (kein MQTT, keine zusätzliche Konfiguration auf dem Gerät, etwas fummeliger).

Beide Wege liefern korrekte Werte im Energiedashboard. Die historischen Daten lassen sich dank SQLite nahtlos übertragen, sodass dein Dashboard sofort wieder eine lückenlose Historie zeigt.

Hast du Fragen oder läuft bei dir etwas anders? Schreib’s in die Kommentare oder komm in die simon42 Community!

Verpasse keine Tipps!

Ich sende keinen Spam! Erfahre mehr in der Datenschutzerklärung.

Transparenz: In diesem Artikel sind Partnerlinks enthalten. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhalte ich ei­ne kleine Provision. Für euch ändert sich am Preis nichts & Partnerlinks haben keinerlei Einfluss auf meine Berichterstattung. Vielen Dank für deine Unterstützung!

Beginnen die Diskussion unter community.simon42.com

Schreibe einen Kommentar