Integration eines S10 Hauskraftwerks von E3/DC

Kurze Einleitung

Nachdem ich jetzt bereits mehrfach nach der Integration meines S10 Hauskraftwerks von E3DC in meinen ioBroker gefragt wurde, habe ich mich dazu entschlossen meine Lösung für euch einmal in ein kleines Tutorial zu packen.

Bevor es aber los geht noch ein paar einleitende Worte und grundsätzliche Hinweise.

Ziel

Das Ziel dieses Tutorials ist es, ein S10 Hauskraftwerk von E3DC in ioBroker zu integrieren, sodass die gelieferten Werte zu Solarproduktion, Stromverbrauch, Ladestand usw. im ioBroker verwendet und geloggt (mitgeschrieben) werden können. Darüber hinaus werden wir am Ende die Werte in einer grafischen Oberfläche visualisieren (optional).

Voraussetzungen

Um das Tutorial nicht unnötig aufzublähen setze ich voraus, dass ihr bereits ein paar Grundkenntnisse im ioBroker habt und z.B. wisst was ein Adapter, eine Instanz, ein Objekt oder ein Script ist. Außerdem benötigt ihr eine laufende ioBroker-Installation sowie natürlich ein laufendes S10 Hauskraftwerk von E3DC. Auf welcher Plattform der ioBroker läuft sollte für dieses Tutorial ersteinmal  unerheblich sein. 

Damit die Integration samt Visualisierung gelingt, benötigt ihr verschiedene ioBroker-Adapter. Es kann nicht schaden wenn ihr euch bereits im Vorfeld mit einigen von ihnen beschäftigt habt. Voraussetzung ist in jedem Fall, dass die Adapter installiert sind und, falls erforderlich, eine Grundkonfiguration erhalten haben. Gerade in Bezug auf die am Ende stehende Visualisierung mit iobroker.vis mag zwar „Copy and Paste“ an einigen Stellen gut funktionieren, mein Ziel ist es aber dass jeder auch versteht was er da tut. 🙂

Im folgenden nun eine kurze Auflistung der benötigten Adapter. Da vielleicht nicht jeder von euch auf die Visualisierung von historischen Daten besteht, habe ich alles was diesem Zweck dient als „optional“ gekennzeichnet. Mit einem Klick auf die Einträge gelangt ihr zu den Infoseite des jeweiligen Adapters.

Soweit die Infos vorab. Falls ihr an irgendeiner Stelle Unterstützung benötigt oder nicht weiter kommt, schaut dock mal im Support-Thread zu diesem Tutorial im ioBroker-Forum vorbei: Link zum ioBroker-Forum.

Ihr habt alles startklar? Dann legen wir mal los…

Verbinden des Hauskraftwerks mit ioBroker

Damit wir überhaupt Daten vom S10 in unserer ioBroker-Installation anzeigen und sammeln können, müssen die beiden Geräte erstmal miteinander reden. Diese Kommunikation findet über das Modbus-Protokoll und das lokale Netzwerk statt. Weil das S10 laut Herstellervorgabe eine Internetverbindung benötigt, gehe ich an dieser Stelle einfach mal davon aus, dass das Gerät bereits im lokalen Netzwerk angebunden, die IP-Adresse bekannt und das Gerät im Netzwerk auch erreichbar ist (Zu prüfen z.B. per ping-Befehl).

Vorbereitung des Hauskraftwerks

Die Modbus-Schnittstelle am S10 ist standardmäßig deaktiviert. Daher müssen wir sie zuerst einmal aktivieren. Wie das genau geht (und noch ein wenig mehr) steht in der Kurzanleitung zur Modbus-Schnittstelle, welche E3DC im Kundenportal unter „Service – Download – Technische Anleitungen […] – Modbus/ TCP-Schnittstelle […]“ zum Download bereitstellt. Unter Punkt 2.3 wird die Aktivierung erläutert.

Für die Anbindung an ioBroker verwenden wir die Standardeinstellungen der Schnittstelle für Gerät und Port sowie das Protokoll „E3DC“ (E3/DC Simple-Mode).

Hinweis

Wer bisher noch nichts über Modbus gehört hat, dem empfehle ich einmal den gesamten Punkt 2 der Kurzanleitung von E3DC zu lesen.

Konfiguration des Modbus-Adapters

Nachdem das S10 durch die Aktivierung der Schnittstelle vorbereitet ist, wenden wir uns nun unserer ioBroker-Installation zu. Der Adapter ist bereits installiert, sodass wir in den Einstellungen auf der Registerkarte „Allgemein“ folgende Einstellungen konfigurieren können:

Dabei muss natürlich die „Partner IP Adresse“ der IP-Adresse des S10 entsprechen. Weiterhin lässt sich unter „Poll delay“ der Intervall definieren in dem ioBroker die Werte aus dem S10 abruft. Ich habe einen Intervall von 1s (1000ms) konfiguriert. Das bedeutet, dass ich sekündlich neue Daten bekomme. Je nach Belieben oder Performance kann man hier auch ohne schlechtes Gewissen auf 5 (5000ms) oder 10 Sekunden (10000ms) gehen.

Nachdem wir nun die allgemeinen Einstellungen erledigt haben, müssen wir dem Modbus-Adapter noch mitteilen welche Werte er aus dem S10 abfragen soll. Dies geschieht über die Registerkarte „Holding Registers“. Damit nicht alles per Hand eingepflegt werden muss, gibt es über den „+“-Button oben rechts die Möglichkeit die Werte für das S10 zu importieren. Dazu habe ich mal einen Export gemacht und ihn auf Github zur Verfügung gestellt. Einfach markieren, kopieren und unter „Holding Registers“ importieren:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/modbus_export.txt

Da ich nicht alle Daten aus dem S10 benötige (Ich habe zum Beispiel keine Wallbox), habe ich auch nicht alle Register mit in die Liste aufgenommen. Wer weitere Werte benötigt, kann die entsprechenden Adressen und Formate in der Kurzanleitung von E3DC nachlesen und manuell, analog zu den bestehenden, ergänzen.

Nachdem die Änderungen und der Import gespeichert sind, sollte der Modbus-Adapter „grün“ werden und auf der Registerkarte Objekte im ioBroker-Admin die Modbus-Register als neue Objekte hinzugefügt haben. Das sieht dann in etwa so aus:

Der Großteil der Daten lässt sich nun bereits im ioBroker verwenden. Sei es zur Visualisierung über Vis oder als Wert innerhalb eines Scripts. Allerdings gibt es auch Werte, bei denen zwei unterschiedliche Informationen in einem Wert übergeben werden. Zum Einen ist dies die Modbus-Version des S10 (welche sicher nicht zu den wichtigsten Informationen gehört), zum Anderen aber auch die Prozentwerte für Eigenverbrauch und Autarkie, die jeder S10-Besitzer schon aus dem Portal oder vom Display seines Geräts kennt.

Um diese Werte zu trennen habe ich ein kleines JavaScript entwickelt, welches den Modbus-Wert teilt und in separate Objekte schreibt. Das Script findet ihr ebenfalls auf Github:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/script.js

Das Script kann „wie es ist“ übernommen werden. Einfach im Script-Editor des JavaScript-Adapters ein neues Script anlegen, Inhalt hinein kopieren, speichern und ggf. Script starten. Das Script legt die neuen Datenpunkte (im Reiter Objekte) automatisch an. Das sieht dann etwa so aus:

Nun sind alle Werte im Klartext lesbar und können verwendet werden.

Aufzeichnen historischer Daten zur Visualisierung (optional)

Bis jetzt stehen uns nur die Echtzeitwerte vom S10 für eine Visualisierung im ioBroker zur Verfügung. Um Charts erstellen zu können (so wie in meiner Visualisierung zu sehen) müssen die Echtzeitwerte im ioBroker geloggt werden. Für das Logging gibt es dabei grundsätzlich zwei Möglichkeiten:

Welche Variante ihr verwendet, muss jeder für sich selbst entscheiden. Da der History-Adapter so gut wie „Out of the Box“ funktioniert, ist dies sicherlich die einfachere Variante. Ich persönlich ziehe allerdings immer eine echte Datenbank der Speicherung von Statistikdaten in Dateien vor. Kurzum, ich nutze den SQL-Adapter, welcher an die MariaDB 10 auf meiner Synology Disk Station angebunden ist.

Hinweis

Für den weiteren Verlauf des Tutorials ist es unerheblich über welchen Weg die historischen Daten gespeichert werden. An den entscheidenden Stellen stehen immer beide Wege zur Auswahl. Bei weiteren Fragen zum Daten sammeln bitte selbst recherchieren, das ist ein Thema ganz für sich allein.

Konfiguration des Loggings der Datenpunkte

Nun gut, zurück zu unserem S10 und Modbus. Sobald die Lösung zum Daten-Loggen gewählt und eingerichtet ist, können wir das Logging für die einzelnen Datenpunkte aktivieren.

Dazu schauen wir uns im ioBroker-Admin einmal unsere Modbus-Objekte an. Über den kleinen Schraubenschlüssel am rechten Bildschirmrand lässt sich das Logging für jeden Datenpunkt einzeln konfigurieren.

Die Maske dazu sieht in etwa so aus:

Neben dem Häkchen für „Aktiviert“ gibt es hier eigentlich keine Vorgaben für die Konfiguration. Je Nachdem macht es mal Sinn auch gleiche Werte zu loggen, mal nur die Änderungen. Was ich allerdings für mich entschieden habe ist, dass ich zum Einen die Daten dauerhaft behalten möchte („keine automatische Löschung“), zum Anderen auch wenn sich der Wert nicht ändert alle 60 Sekunden ein Wert in die Datenbank geschrieben wird. Letzteres geschieht dabei über den Wert „60“ bei „Nach Intervall aufzeichnen (s)“. Weitere Details zu den Einstellungen beim Logging gibt es in der offiziellen Doku des SQL-Adapters (Link). Beim History-Adapter sind die Einstellungen ähnlich (Link).
Über die Registerkarte „Tabelle“ können dann schließlich die letzten gesammelten Daten eingesehen und überprüft werden.

Die Einstellungen zum Logging müssen für jeden Datenpunkt der geloggt werden soll separat konfiguriert werden. Welche Daten ich mit logge kann man auf dem Screenshot der Modbus-Objekte auf der vorherigen Seite an den farbig gekennzeichneten Schraubenschlüssel-Buttons erkennen. 😉

Ist für alle interessanten Daten das Logging aktiviert kann es eigentlich mit der Visualisierung losgehen.

Visualisierung mit iobroker.vis

Die ioBroker-eigene Visualisierungsoberfläche Vis ist ein sehr mächtiges Werkzeug. Im Grunde sind bereits mit überschaubaren Kenntnissen in HTML und CSS der grafischen Darstellung verschiedenster Werte keine Grenzen mehr gesetzt.
Aus diesem Grund möchte ich an dieser Stelle betonen, dass dieses Tutorial kein Grundkurs in „Visualisierung mit Vis“ oder „HTML und CSS“ ist. Vielmehr möchte ich meine Visualisierung auf diesem Wege teilen und Hinweise dazu geben was ggf. angepasst werden muss, damit alles funktioniert.

Damit eine problemlose Integration meiner Widgets in ein bestehendes Projekt möglich ist, habe ich zur Vorbereitung alles was zur Visualisierung des S10 Hauskraftwerks gehört aus meinem eigenen Projekt heraus gelöst und mit einem möglichst schlichten Design versehen. Außerdem habe ich die Anzeige der Echtzeit-Werte (ähnlich der Darstellung im E3DC-Portal) von der Anzeige der historischen Daten (Diagramme) getrennt und werde die Integration in zwei separaten Teilen erläutern.

Hinweis

Die verwendeten Icons stammen aus dem Material-Design-Icon-Set (Link) welches sich einfach über den ioBroker Admin wie ein Adapter installieren lässt. Wem das nicht zu sagt, der kann die Bilder natürlich einfach über den Vis-Editor ersetzen.

Teil 1: Visualisierung der Echtzeitdaten

Im ersten Teil werde ich ausschließlich auf die Ansicht der Echtzeitdaten eingehen, die in ähnlicher Form ja auch im E3DC-Portal zu sehen ist:

Um die betreffenden Widgets in die eigene View zu bekommen ist nicht viel zu tun. Mit wenigen Klicks und dem Code aus dem Download lassen sich die Widgets einfach in Vis importieren. Dazu am besten, sofern noch nicht geschehen, eine neue View anlegen und einen dunklen Hintergrund festlegen. Dann auf der Registerkarte „Widgets“ im Vis-Editor auf den Button „Widgets importieren“ klicken und meinen Export einfügen. Das Ganze Bestätigen und die Widgets erscheinen auf der Arbeitsfläche.

Da der Export der Widgets sehr umfangreich ist, habe ich den Code dazu ebenfalls zu Github ausgelagert:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/vis-widgets-part1-export.txt

Hinweis

Die Grafik, die in der Visualisierung für das E3DC-Gerät verwendet wurde, stammt nicht von mir, weshalb ich sie auch nicht zum Download anbieten kann. Für den persönlichen Gebrauch werdet Ihr aber sicher schnell in der Google-Bildersuche fündig.

Des Weiteren verwende ich für die Füllstandsanzeige des Speichers ein Widget des ioBroker-Adapters „vis-justgage“. Ist dieser Adapter bei euch nicht installiert, wird der „Ring“ beim Widgetimport einfach weg gelassen.

Wenn die Konfiguration der Modbus-Register mit meinem Export erledigt worden ist, sollten alle verwendeten Datenpunkte sofort passen und die View bei Aufruf sofort funktionieren. Für Anpassungen können die Widgets anschließend natürlich auch einzeln ausgewählt und die Eigenschaften (z.B. Schriftart und Farbe) entsprechend bearbeitet werden. Fertig.

Teil 2: Visualisierung der historischen Daten

Im zweiten Teil wird es jetzt etwas komplizierter. Es geht um die Visualisierung des aktuellen Tagesverlaufs, also der historischen Daten. Dazu habe ich, mit Hilfe des Flot-Adapters, insgesamt sechs verschiedene Mini-Diagramme erstellt, die in Vis mit iFrame-Widgets integriert werden.

Info zur Funktionsweise des Flot-Adapters

Mit der Installation des Adapters wird gleichzeitig ein Web-Editor installiert, über den Diagramme einfach erstellt oder angepasst werden können. Der Editor ist im ioBroker in der Regel über folgenden Link zu erreichen:
http://[IP oder Hostname]:8082/flot/edit.html
Nach der Konfiguration eines Diagramms erhält man innerhalb des Editors eine (recht lange) URL über die sich das Diagramm dann im Browser aufrufen lässt. Die URL enthält dabei alle im Editor konfigurierten Einstellungen. Mehr Infos

Die URLs zu den Diagrammen müssen natürlich auf die eigene Umgebung angepasst werden. Dazu müssen wir im ersten Teil jeder URL lediglich den Hostnamen bzw. die IP-Adresse des ioBroker-Hosts ersetzen. Anschließend sollten sich die einzelnen Mini-Diagramme durch Aufruf der URL auch ohne Vis im Browser anzeigen lassen. Etwa so:

Hinweis

Die Diagramme haben immer in der oberen rechten Ecke des Browserfensters ein „editieren“-Symbol. Aufgrund des dunklen Hintergrunds ist dieses aber nicht zu erkennen. Man findet es aber, wenn man mit der Maus über die rechte obere Ecke im Browserfenster wandert. Klickt man es, öffnet sich das Diagramm im Flot-Editor und man kann es nach belieben editieren.

Unter folgenden Link findet ihr einmal die einzelnen URLs der vorkonfigurierten Mini-Diagramme. Diese sind im Widget-Export bereits enthalten und müssen nach dem Import wie oben beschrieben angepasst werden:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/flot-urls.txt

Da der Export der Widgets sehr umfangreich ist, habe ich den Code dazu auch wieder zu Github ausgelagert:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/vis-widgets-part2-export.txt

Gesamte View importieren

Natürlich ist es auch möglich eine komplette View in ein eigenes Projekt zu übernehmen. Zu diesem Zweck habe ich auch einen Export der entsprechenden View, so wie sie im Titelbild zu sehen ist, gemacht:

Die View kann, ähnlich wie die Widgets, einfach über den Vis-Editor importiert werden. Dazu in der Registerkarte „Views“ auf „View importieren“ klicken und den Code einfügen.

Da der Export der View natürlich noch umfangreicher ist, als der der Widgets, habe ich auch hier den Code wieder auf Github bereitgestellt:

https://github.com/buanet/tutorials/blob/master/integration-eines-e3-dc-hauskraftwerks-in-iobroker/vis-full-view-export.txt

Nun sollte hoffentlich alles soweit klar sein. 🙂 Viel Spaß mit der Visualisierung und den Daten eures Hauskraftwerks in ioBroker. Bei Fragen nutze gerne die Kommentarfunktion oder schaut einfach mal im ioBroker-Forum vorbei.

MfG,
André

Änderungshistorie

2018-02-17

Screenshots aktualisiert (Admin V3) und kleinere Fehler behoben.

2018-10-01

Mit dem neuen Firmware-Update von E3DC wurden die Werte für den Strom der einzelnen Strings (Register 40099 bis 40101) um zwei Stellen verlängert um genauere Werte bieten zu können. Dies hat zur Folge, dass 2A jetzt als 200A angezeigt werden. Diese Anzeige lässt sich jedoch ganz leicht über die Konfiguration im Modus-Adapter unter „Holding Registers“ anpassen. Hier braucht nur der Wert für den Faktor auf 0.01 gesetzt zu werden. Schon bekommt man statt 200A wieder einen realen Wert mit 2.00A angezeigt. In meinem Export auf Seite zwei dieses Artikels habe ich das bereits entsprechend ergänzt.

2020-02-20

Anpassung des Tutorials an das neue Layout und auslagerung der Script- und Exportfiles zu Github.

2020-09-20

Umzug des Tutorials zu smarthome.buanet.de und Überarbeitung/ Anpassung an das neue Layout.