Energy Node: PV, Speicher und Verbraucher überwachen, mit Raspberry Pi 1 und optionaler Home-Assistant-Brücke

Hallo zusammen,

ich möchte euch mein Projekt Energy Node vorstellen und zusätzlich dazu eine Home-Assistant-Integration, die daraus entstanden ist und einen LiFePO4-SoC ohne BMS-Zugriff berechnet.

Wie kam es dazu?

Entworfen habe ich das Ganze ursprünglich für meine Eltern. Insbesondere mein Vater hat in seiner Werkstatt eine kleine PV-Anlage mit APsystems-EZ1-Wechselrichtern, einem DIY-Speicher mit Lumentree-Wechselrichter und Trucki-Stick, ein paar Shellys und ein Tuya-Wasserventil für die Heizung. Bisher steuert er alles über die Cloud-Services der einzelnen Anbieter und an das Trucki-System kommt er gar nicht von außerhalb dran. Ein Home Assistant läuft bereits im Wohnhaus und es gab konkreten Bedarf die Geräte der Werkstatt auch von dort aus steuern zu können.

Ende Juli habe ich deshalb geplant einen alten Raspberry Pi 1 in der Werkstatt zu installieren. Er sollte alle Geräte lokal abfragen und die Werte per MQTT über Tailscale an Home Assistant im Wohnhaus schicken. Dort sollen sie dann als MQTT-Discovery-Entitäten auftauchen und wie jedes andere Gerät eingebunden werden können. Diesen prozess habe ich dann händisch eingerichtet und kleine Skripte für die einzelnen Geräte geschrieben. Für eine Oberfläche probierte ich anfangs bestehende Lösungen aus, die auf einem Pi mit Armv6 noch laufen. Doch die meisten Lösungen wirkten einfach veraltet oder haben schlicht nicht das ermöglicht, was ich mir vorgestellt hatte, sodass ein eigenes Dashboard auf dem Pi letztlich mein Lösungsansatz wurde. Danach kamen nach und nach Funktionen wie eine Geräte-Übersicht, kleine graphische Automatisierungen, Verlaufsdiagramme und ein live editierbares Dashboard dazu. Alles ein wenig in Anlehnung an Home-Assitant, nur abgespeckt und daher lauffähig auf kleinerer Hardware.

Im August habe ich dann beschlossen, dass die Ressourcen die in das Projekt geflossen sind, eigentlich zu schade sind um damit nur eine einzige Anwendung zu betreiben. Daher habe ich das Projekt Energy Node getauft und auf GitHub veröffentlicht.

Was Energy Node stand heute kann

Energy-Node verwandelt eine kleinen Linux-Rechner in einen minimalen Steuerungs- und Mess-Knoten mit Schwerpunkt auf Energie-Technik. Broker, Gerätedienste, Automatisierungen und Dashboard laufen alle autonom. Leistungs- und Speicherhungrigere Datenaufzeichnung und komplexe Steuerungen können dabei über die Anbindung von Home-Assistant realisiert werden. Fällt das Internet oder der VPN aus, können dennoch die wichtigsten Regeln weiterhin durch den Knoten selbst kontrolliert werden und auch das Dashboard bleibt im lokalen Netz erreichbar.

Unterstützt werden im Moment Shelly Gen1 und Gen2+, APsystems EZ1 (inklusive Leistungsbegrenzung), Lumentree-Wechselrichter bzw. alle Trucki-Sticks, Tuya-Geräte über das lokale Protokoll und DIY-LiFePO4-Speicher, deren SoC aus den Werten der anderen Geräte (vorwiegend die Trucki-Geräte) berechnet wird. Alles wird lokal verbunden, ein Konto ist lediglich für den Tailscale VPN notwendig.

Im Dashboard gibt es verschiedene Energiegrafiken, Verlaufsdiagramme, einen Regel-Editor mit Bedingungen, Hysterese und Haltezeiten sowie eine Gerätekarte, auf der man festhält, wie die Geräte miteinander verknüpft sind. Die Verläufe werden im Browser gespeichert (IndexedDB), der Pi selbst hält keine Historie.

Startseite mit Status, Speicher, Energiefluss und Autarkie Verlaufsdiagramme (nur wenn Browser dauerhaft offen)
Startseite mit Energiefluss Verlaufsdiagramme
Regel-Editor Geräte-Übersicht
Regel-Editor Geräte-Übersicht
Weitere Seiten hier (en)

Der Raspberry Pi 1 mit ARMv6, einem Kern und 512 MB RAM ist die durch den Kontext weiterhin die Grundlage für jede kommende Designentscheidung. Das Dashboard ist deshalb ein einzelnes Go-Binary ohne Datenbank. Gerade deswegen nutzt das Dashboard auch die Browser-Performance, um Flexibilität und das Feeling einer modernen Oberfläche trotz minimaler Server-Leistung zu gewährleisten. Also eine perfekte Verwendung für alte Raspberry Pi Geräte, die für ein volles Home Assistant nicht performant genug sind.

Die Installation auf einem frischen Pi, oder das aktualisieren oder reparieren kann man mit einem Desktop-Installer für Windows, macOS und Linux durchführen. Updates lassen sich aber auch direkt per OTA von GitHub auf dem Dashboard einspielen.

Hinweis auf ein neues Release im Dashboard Vorschau vor dem Update
Update-Hinweis im Dashboard Update-Vorschau

Battery SoC als Home-Assistant-Integration

Die SoC-Berechnung für das DIY Battery-System aus dem Energy Node gibt es auch einzeln für Home Assistant, da mein Vater sich vor Begeisterung noch ein zweites DIY-System für sich zuhause gebaut hat. Da dort Home-Assistant dann natürlich verfügbar ist, habe ich den service in eine core-bibliothek geschoben und verwende diesen nun als gemeinsame Grundlage für eine HA Integration und den MQTT standalone service in energy-node.

Der Grund für diese Integration ist, wie die meisten hier wissen dürften, dass die Spannungskurve eines LiFePO4-Akkus zwischen etwa 15 und 85 % so flach ist, dass man daraus kaum etwas über den Ladezustand ablesen kann. Die Integration zählt deshalb die Netto-Leistung am Akku mit, also Ladeleistung minus Entladeleistung, AC oder DC. Weil so eine Zählung mit der Zeit driftet, korrigiert sie den Wert im vollen oder leeren Zustand, also genau da wo der flache Bereich aufhört. Sobald die lastkorrigierte Spannung nahe leer oder nahe voll eine Schwelle überschreitet und der Strom klein genug ist, setzt sie den SoC auf 0 bzw. 100 % zurück. Die Spannung wird dafür vorher um einen stromabhängigen Innenwiderstand pro Zelle bereinigt.

Ihr braucht keine zusätzliche Hardware und keinen direkten BMS-Zugriff. Es reichen ein Sensor für die Ladeleistung, einer für die Entladeleistung und ein Spannungssensor pro Bank. Ein oder zwei Bänke werden unterstützt. Bei Parallelschaltung gibt es einen gemeinsamen SoC, bei Reihenschaltung einen pro Bank und zusätzlich den Wert der schwächsten Bank. Zusätzlich können AC und DC Messwerte gekoppelt eingesetzt werden und viele Feinheiten über Parameter justiert werden.

Eine Lovelace-Karte (ursprünglich aus dem energy-node dashboard) ist ebenfalls dabei, die den Ladezustand als Säule mit Restlaufzeit oder als Ring mit sechs Stunden Verlauf und sechs Stunden Prognose zeigt.

Lovelace-Karte als Säule Lovelace-Karte als Ring mit Verlauf und Prognose
Lovelace-Karte als Säule Lovelace-Karte als Ring

Die Installation ist über HACS möglich. Im README gibt es den Button, der den HACS-Dialog vorausfüllt.

Nebenbei gibt es auch die Gerätesymbole aus dem Dashboard als Icon-Set für Home Assistant, falls jemand alternative Symbole für Speicher, Wechselrichter, Wallbox und Co. sucht:

AI-Disclaimer und wie man mitgestalten kann

Energy Node und die Integrationen habe ich mit KI-Unterstützung (Claude Code) geschrieben. Den Umfang der Software hätte ich sonst nicht in den letzten drei Monaten neben meiner beruflichen Tätigkeit als Software-Ingenieur berwerkstelligen können. Das Prüfen und Pflegen von Code behalte ich mir auch weiterhin vor, dennoch möchte ich daraus einen Mehrwert für Alle schaffen.

Über Rückmeldungen freue ich mich, gerne auch als Issue auf GitHub. Besonders interessiert mich, wie gut die SoC-Schätzung bei anderen Speichern funktioniert und welche Geräte euch an einem Außenstandort noch fehlen würden. Vielleicht nicht nur rein theoretisch, sondern wirklich, falls ihr energy-node wirklich im praktischen Anwendungsfall für eins eurer Projekte in Betracht ziehen würdet.

Viele Grüße

Simon

PS: Zurzeit arbeite ich an der Lokalisierungs des Dashboards, wodurch das Dashboard dann auch auf englisch verfügbar sein wird. Zurzeit gibts alles nur auf Deutsch, aber das sollte hier hoffentlich kein großes Problem sein :innocent:

1 „Gefällt mir“

Update: Energy Node v0.9 mit Geräteplan, Live-Gerätekarte und HA-Erweiterung

Hallo zusammen,

seit meiner Vorstellung vor gut zwei Wochen ist bei Energy Node einiges passiert, deshalb hier ein kleines Update. Aktuell ist seit heute Version v0.9.8 mit ein paar netten Änderungen :blush:

Wie im ersten Beitrag angekündigt, gibt es das Dashboard inzwischen auch auf Englisch. Sprache und Zahlenformat lassen sich in den Einstellungen umstellen.

Energy Node Companion als native HA-Ein-/Anbindung

Bisher konnte man das Dashboard zwar auch über Home Assistant aufrufen, dafür musste man aber selbst einen nginx-Proxy einrichten, der es unter einem Unterpfad wie /node/ ausliefert. Das funktioniert grob, hat aber bereits in der HA-App schon probleme gemacht und brauchte einfach unnötigerweise das mächtige Nginx Add-On.

Mit dem Energy Node Companion gibt es dafür jetzt eine native Integration, die man über HACS installiert. Sie stellt das Dashboard als eigenen Eintrag in die Seitenleiste von Home Assistant zur Verfügung und macht es so besser zugänglich. Einen Proxy braucht man dafür nicht mehr, und das Dashboard ist so auch auf jedem Gerät erreichbar, welches selbst nicht im Tailnet ist.

Außerdem kümmert sich der Companion um ein Problem, das mich schon länger gestört hat: Die Verläufe im Dashboard habe ich mit Absicht nicht persistent gespeichert, um die Schreibzyklen auf der SD-Karte einfach gering zu halten. Die einzige Verlaufsoption hat bisher der Browser selbst geboten. Lief nicht irgendwo dauerhaft ein Client, zum Beispiel an einem Walldisplay, waren die Darstellungen einfach unvollständig und man konnte kaum nachvollziehen, was in der Zwischenzeit passiert ist. Home Assistant speichert die Sensoren der Gesamtauswertung, welche ja in HA bereits gespiegelt werden, ohnehin im Recorder, und daraus füllt der Companion jetzt die fehlenden Stunden und Tage auf.

Bei der Einrichtung übernimmt Home Assistant die Adresse des Dashboards automatisch, wenn die MQTT-Brücke bereits eingerichtet ist. In den Optionen lassen sich Verläufe und Seitenleiste einzeln abschalten. Name und Symbol in der Seitenleiste kann man auch anpassen.

Eintrag in der Seitenleiste Optionen des Companions
Energy Node in der Seitenleiste von Home Assistant Optionen des Companions

Wen ein paar Details interessieren, findet hier (en) ein paar mehr infos.

Visuelle Konfiguration des Energie-Setups

Die Gerätekarte aus dem ersten Beitrag war bisher recht rudimentär. Man konnte dort festhalten, wie der Standort verdrahtet ist, und das war es dann auch schon. Mein eigentlicher Gedanke dahinter war aber von Anfang an, das Energie-System darüber visuell zu konfigurieren, statt Rollen und Zuordnungen in Formularen und Tabellen zusammenzusuchen. Das habe ich jetzt in einem ersten Schritt umgesetzt.

Klickt man auf ein Gerät, sieht man die Energierollen seiner Messwerte, also ob ein Wert als PV, Netz, Speicher oder Verbraucher zählt, und kann sie direkt dort ändern. Mehrere Geräte lassen sich auf der Karte zu Gruppen zusammenfassen, deren Werte dann summiert werden. Um diesen Gruppen auch eigene Verläufe zu geben, kann man dafür nun auch neue benutzerspezifische Kategorien anlegen.

Ein Großteil der Konfiguration lässt sich so direkt auf der Karte erledigen. Die bisherigen Einstellungen gibt es aber weiterhin, zum Beispiel die Rollentabelle im Energie-Tab. Von der Karte aus ist die passende Einstellung außerdem immer verlinkt, sodass man mit einem Klick an der richtigen Stelle landet, wenn man doch lieber in der Tabelle arbeitet. Im Energie-Tab gibt es dazu passend jetzt auch eine Anlagenansicht mit dem Live-Zustand der ganzen Anlage.

Für eine bessere Übersicht, lässt sich die Karte auch in Ebenen umschalten. In der Live-Ansicht laufen animierte Striche über die Verbindungen, je schneller, desto mehr Leistung, mit dem aktuellen Wert am Gerät. Die Datenfluss-Ebene zeigt, welche Informationen zwischen Geräten, Diensten und Automatisierungsregeln laufen.

Geräteplan mit Live-Energie und Datenfluss Gruppe im Editor der Karte
Geräteplan mit Datenfluss Gruppen-Editor auf der Karte
Energierollen eines Geräts auf der Karte Dieselben Gruppen im Energie-Tab
Energierollen auf der Karte Energiegruppen

Auch hier (en) findet ihr nochmal weitere Infos, falls ich euer Interesse wecken konnte.

Was sonst noch dazugekommen ist

  • Automatisierungen: Regeln können jetzt an Sonnenauf- und Sonnenuntergang geknüpft werden, jeweils mit Versatz in Minuten, und auf bestimmte Wochentage beschränkt. Außerdem lassen sich die benutzerspezifischen Energiekategorien auch in Bedingungen verwenden.

  • OTA-Updates: Beim OTA-Update zeigt das Dashboard jetzt den Fortschritt an und danach eine Übersicht, was neu ist. Außerdem können durch das OTA-Update jetzt auch die Systempakete des Pi aktualisiert werden.

  • Diagnose: Die Diagnose-Seite habe ich übersichtlicher gestaltet. Man sieht jetzt auf einen Blick, wie es um die Anlage steht und welches Gerät die meisten Probleme macht. Gleichartige Befunde werden zusammengefasst, sodass man statt einer langen Liste einzelner Meldungen direkt die Ursache und einen Hinweis zur Behebung bekommt.

  • Dokumentation: Die Doku habe ich vollständig überarbeitet. Sie ist als eigene Seite hier (en) erreichbar, mit Anleitungen zu Installation, Dashboard, Diensten und den Home-Assistant-Integrationen.

Was ich mir noch so in den Kopf gesetzt habe

Ganz allgemein denke ich gerade über eine Auswertung der Energie-Statistik nach, also wie viel PV, Netz, Speicher und Verbraucher über Tage, Monate und Jahre ausmachen. Das soll mit dem Companion funktionieren, der die Werte aus Home Assistant liefern kann, aber genauso standalone ohne Home Assistant mit einem kleinen Build-in logger.

Außerdem habe ich darüber nachgedacht, die Funktionen rund um die Trucki-Sticks weiter auszubauen. Mein Fokus wäre dabei ein Algorithmus, der aus den aufgezeichneten Werten Vorschläge für eine bessere Parametrierung der Nulleinspeisung macht. Wenn es dafür Interesse gibt, würde ich das auch als eigene Home-Assistant-Integration bauen, sodass es auch ohne Energy Node nutzbar wäre.

Gemeinsam mehr draus machen

Mir macht das Projekt riesigen Spaß, und am schönsten wäre es, wenn nicht nur mein Vater in seiner Werkstatt etwas davon hat, sondern möglichst viele von euch. Deshalb freue ich mich über jeden Beitrag, ob Rückmeldung, Idee oder Issue auf GitHub. Und wenn ihr eins meiner Projekte ausprobiert und irgendwo hängen bleibt, meldet euch einfach, ich helfe euch sehr gerne weiter. Und natürlich bin ich auch gespannt, was ihr von den Ideen oben und von dem bisher Umgesetzten haltet.

Viele Grüße
Simon

1 „Gefällt mir“