Integration eines E3/DC Hauskraftwerks in ioBroker (inkl. Visualisierung)

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 (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 hier mal einen Export gemacht. Einfach markieren, kopieren und unter „Holding Registers“ importieren:

address	name	description	unit	type	len	factor	offset	role	room	poll	wp
40002	Modbus_Firmware	Modbus-Firmware-Version		uint16be	1	1	0	value		true	false	
40004	Hersteller	Hersteller		string	16	1	0	value		true	false	
40020	Modell	Modell		string	16	1	0	value		true	false	
40036	Seriennummer	Seriennummer		string	16	1	0	value		true	false	
40052	Firmware	Firmware Release		string	16	1	0	value		true	false	
40068	PV_Leistung	Photovoltaik-Leistung in Watt	W	int32sw	2	1	0	value		true	false	
40070	Batterie_Leistung	Batterie-Leistung in Watt	W	int32sw	2	1	0	value		true	false	
40072	Hausverbrauch_Leistung	Hausverbrauchs-Leistung in Watt	W	int32sw	2	1	0	value		true	false	
40074	Netz_Leistung	Leistung am Netzübergabepunkt in Watt	W	int32sw	2	1	0	value		true	false	
40082	Autarkie_Eigenverbrauch	Autarkie und Eigenverbrauch in Prozent		uint16be	1	1	0	value		true	false	
40083	Batterie_SOC	Batterie-SOC in Prozent	%	uint16be	1	1	0	value		true	false	
40084	Emergency_Power_Status	Emergency-Power Status		uint16be	1	1	0	value		true	false	
40085	EMS_Status	EMS-Status		uint16be	1	1	0	value		true	false	
40096	DC_String_1_Voltage	Spannung String 1 in Volt	V	uint16be	1	1	0	value		true	false	
40097	DC_String_2_Voltage	Spannung String 2 in Volt	V	uint16be	1	1	0	value		true	false	
40098	DC_String_3_Voltage	Spannung String 3 in Volt	V	uint16be	1	1	0	value		true	false	
40099	DC_String_1_Current	Strom String 1 in Ampere	A	uint16be	1	0.01	0	value		true	false	
40100	DC_String_2_Current	Strom String 2 in Ampere	A	uint16be	1	0.01	0	value		true	false	
40101	DC_String_3_Current	Strom String 3 in Ampere	A	uint16be	1	0.01	0	value		true	false	
40102	DC_String_1_Power	Leistung String 1 in Watt	W	uint16be	1	1	0	value		true	false	
40103	DC_String_2_Power	Leistung String 2 in Watt	W	uint16be	1	1	0	value		true	false	
40104	DC_String_3_Power	Leistung String 3 in Watt	W	uint16be	1	1	0	value		true	false	

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. Hier das kurze Script:

// Aufteilung der Datenpunkte mit doppelten Informationen

// Aufteilung "Autarkie und Eigenverbrauch in Prozent"
var id = 'modbus.0.holdingRegisters.40082_Autarkie_Eigenverbrauch';
createState('e3dc.modbus.Autarkie');
createState('e3dc.modbus.Eigenverbrauch');
on(id, function (obj) {
     setState('e3dc.modbus.Autarkie', (obj.state.val >> 8) & 0xFF, true);
     setState('e3dc.modbus.Eigenverbrauch', obj.state.val & 0xFF, true);
});

// Aufteilung "Modbus Firmware Verwsion"
var id = 'modbus.0.holdingRegisters.40002_Modbus-Firmware';
createState('e3dc.modbus.MajorVersion');
createState('e3dc.modbus.MinorVersion');
on(id, function (obj) {
     setState('e3dc.modbus.MajorVersion', (obj.state.val >> 8) & 0xFF, true);
     setState('e3dc.modbus.MinorVersion', obj.state.val & 0xFF, true);
});

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.

Auf der nächsten Seite geht es darum, wie man Daten die vom S10 gelesen werden speichert um sie später als historische Daten auswerten zu können. Wer das nicht benötigt kann diesen Schritt gerne überspringen.

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.

21
Hinterlasse einen Kommentar

avatar
10000
7 Kommentare
14 Antworten
1 Abonnenten
 
Meiste Antworten
Beliebtester Kommentar
9 Kommentatoren
KevinEikeManuelHartimanRoman Letzte Kommentatoren
  Abonnieren  
Benachrichtige mich zu:
Kevin
Gast
Kevin

ausführliche Anleitung , konnte alles wie beschrieben machen, jedoch verbindet sich der modbusadapter 1sekunde danach wird die Verbindung wieder getrennt ohne eine wert zu übertragen, wo könnte da der Fehler sein?

Eike
Gast
Eike

Hallo, das klingt sehr gut. Ich möchte an das E3/DC eine Wallbox zum Laden eines E-Autos (logisch) anschliessen, die nur den überschüssigen PV-Strom (und ggf. Strom aus der Batterie) verwendet, aber keinen Netzstrom. Die E3/DC Wallbox, die das kann, geht bei uns aus baulichen Gründen nicht. Jetzt bin ich auf die KEBA p30 x-Series gekommen, die zumindest modbus UDP spricht. Das E3/DC leider nur modbus TCP. Jetzt ist die Idee, mittels ioBroker zwischen E3/DC und KEBA Wallbox zu vermitteln. Klappt es, dass die Wallbox per modbus UDP eine Anfrage an ioBroker stellt, der die Werte per modbus TCP aus dem… Mehr lesen »

Manuel
Gast
Manuel

Hi, erstmal vielen Dank für die gute Anleitung und die Integration in IoBroker. Gibt es eigentlich die Möglichkeit auch die verschiedenen Temperaturen mithilfe des Modbus auszulesen?

Roman
Gast
Roman

Hi, ich bekommen in den nächsten Wochen ein e3/de Hauskraftwerk. Diesen wollte ich in VIS anzeigen lassen. Hab soweit alles (soweit wie möglich) vorbereitet. Jetzt bin ich bei der Visualisierung angekommen. Ich wollte dein Widgets importieren. Ich bekomm bei Export1 die Fehlermeldung „Invalid JSON SyntaxError: JSON.parse Error: Unterminated string constant at position:2364“ und bei Export 2 „Invalid JSON SyntaxError: JSON.parse Error: Unterminated string constant at position:1730“. Was mach ich falsch? Kann es sein, dass ich erst das HK haben muss damit ich das Widget einfügen kann?
Gruß Roman

Dom
Gast
Dom

Hallo André,
Bin auch gerade dabei meinen S10E in Iobroker einzubinden. Hast du noch den Register Eintrag für die 70% Abregelung?
Ich möchte gerne auf Basis der Abregelung per Iobroker und Homematic diverse Aktionen starten – vor allem, meine Klimaanlage einschalten wenn die Abregelung aktiv wird…

Grüße
Dom

Ralph
Gast
Ralph

Hallo Andre, klasse Anleitung – vielen Dank. Allerdings komme ich mit den angegebenen PW nicht auf den DL Deiner Exports. Gibt es da ein neues? Merci, gute Nacht.

Malmara
Gast
Malmara

wow… ich habe noch kein E3DC aber kann es kaum noch erwarten 🙂
Kann man auch Daten zu E3DC senden? z.B. starte das laden der Batterie etc…?