✅ 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?
- 📜 Lösung: Skript direkt auf dem Shelly
- 🎁 Bonus: Historische Statistiken übertragen
- 🔔 Bonus 2: Benachrichtigung bei Sensor-Ausfall
- 📊 Fazit
⚡ 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:
- Davc0m (empfohlen, MQTT + HA Auto-Discovery): gist.github.com/Davc0m
- sicanins (alternativ): github.com/sicanins/shelly-pro3EM-energycounter
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!



Beginnen die Diskussion unter community.simon42.com