Startseite » OpenHAB: Photovoltaik mit Solakon, APsystems und vielen anderen Wechselrichtern mit API

OpenHAB: Photovoltaik mit Solakon, APsystems und vielen anderen Wechselrichtern mit API

Du hast einen Wechselrichter oder Speicher zu Hause und willst dessen Werte in dein Smart Home holen, statt jedes Mal in einer separaten Hersteller-App nachzuschauen? In diesem Artikel zeige ich dir Schritt für Schritt, wie du das für dein eigenes Solakon/APsystem nutzt.

Hauptthema des Artikels: Die Solakon-App gibt nicht viel her – zum Glück steckt technisch ein APsystems-Wechselrichter dahinter, und der spricht eine offene lokale API.

Du verbindest dich tagsüber per Bluetooth, aktivierst den Offline-Modus, und schon kannst du deinen Wechselrichter als Thing in openHAB einbinden – mit dem HTTP-Binding, komplett ohne Cloud-Umweg.

Am Ende hast du Leistung, Energieertrag und Fehlerstatus pro Kanal sauber als Items im Haus, eingebettet in ein durchdachtes Gruppen- und Tag-System zum Loggen und Alarmieren. Einmal eingerichtet, läuft’s einfach durch.

Du bist auf dieser Seite gelandet, weil du dich für eine der folgenden Fragen interessierst:

  • Wie integriere ich meine Photovoltaikanlage in openHAB?
  • Wie lese ich Daten meines Solaranlage-Wechselrichters in openHAB aus?
  • Welche Wechselrichter sind kompatibel mit openHAB?
  • Wie kann ich Solakon, APsystems oder andere PV-Wechselrichter in openHAB einbinden?
  • Wie nutze ich APIs von Wechselrichtern zur Energieüberwachung in openHAB?
  • Wie verbinde ich meine PV-Anlage mit meinem Smart Home?
  • Wie kann ich Solarertrag, Verbrauch und Einspeisung in openHAB anzeigen?
  • Was brauche ich, um PV-Daten per HTTP in openHAB zu integrieren?

Das macht wenig Aufwand und geht so:

In meinem Fall habe ich ein Balkonkraftwerk von Solakon gekauft. Die App gibt nicht viele Optionen her. Der Wechselrichter ist aber von APsystems. Wie viele andere Wechselrichter auch, stellt dieser eine eigene API zur Verfügung.

1. API des Wechselrichters aktivieren

Bei dieser Marke ist das ganz gut in der API-Dokumentation erklärt.

  • App von APsystems verwenden, statt die von Solakon
  • Mit Bluetooth am Tag (der Wechselrichter ist ohne PV-Strom nicht erreichbar) verbinden
  • Wechselrichter in WLAN aufnehmen und in den Offline-Modus setzen

2. Wechselrichter als Thing in OpenHAB hinzufügen

Dafür habe ich wieder eine textuelle Thing-Definition für dich vorbereitet. Diese erfordert für konkret diese API das HTTP-Binding

Thing http:url:pv "Photovoltaik Wechselrichter" [ baseURL="http://192.168.X.X:8050", refresh=30, bufferSize=16, timeout=5000, ignoreSSLErrors=true ]{
	Channels:
		Type string : deviceId	[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*deviceId.*)∩JSONPATH:$.deviceId", mode="READONLY" ]
		Type number : p1 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*p1.*SUCCESS.*)∩JSONPATH:$.data.p1", unit="W", mode="READONLY" ]			//Power-Channel1. Unit W.
		Type number : e1 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*e1.*SUCCESS.*)∩JSONPATH:$.data.e1", unit="kWh", mode="READONLY" ]		//Energy generation after startup - Channel1. Unit kWh.
		Type number : te1 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*te1.*SUCCESS.*)∩JSONPATH:$.data.te1", unit="kWh", mode="READONLY" ]		//Energy generation lifetime Channel1. Unit kWh.
		Type number : p2 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*p2.*SUCCESS.*)∩JSONPATH:$.data.p2", unit="W", mode="READONLY" ]			//Power-Channel2. Unit W.
		Type number : e2 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*e2.*SUCCESS.*)∩JSONPATH:$.data.e2", unit="kWh", mode="READONLY" ]		//Energy generation after startup - Channel2. Unit kWh.
		Type number : te2 		[ stateExtension="/getOutputData", stateTransformation="REGEX:(.*data.*te2.*SUCCESS.*)∩JSONPATH:$.data.te2", unit="kWh", mode="READONLY" ]		//Energy generation lifetime Channel2. Unit kWh.
		
		Type number : maxPower	[ stateExtension="/getMaxPower", stateTransformation="REGEX:(.*data.*maxPower.*SUCCESS.*)∩JSONPATH:$.data.maxPower", commandExtension="/setMaxPower?p=%2$s", unit="W" ]	//The Max Power of the device .Unit W.
		
		Type contact : offGrid			[ stateExtension="/getAlarm", stateTransformation="REGEX:(.*data.*og.*SUCCESS.*)∩JSONPATH:$.data.og", openValue="1", closedValue="0", mode="READONLY" ]
		Type contact : outputFault		[ stateExtension="/getAlarm", stateTransformation="REGEX:(.*data.*oe.*SUCCESS.*)∩JSONPATH:$.data.oe", openValue="1", closedValue="0", mode="READONLY" ]
		Type contact : DC1shortCircuit	[ stateExtension="/getAlarm", stateTransformation="REGEX:(.*data.*isce1.*SUCCESS.*)∩JSONPATH:$.data.isce1", openValue="1", closedValue="0", mode="READONLY" ]
		Type contact : DC2shortCircuit	[ stateExtension="/getAlarm", stateTransformation="REGEX:(.*data.*isce2.*SUCCESS.*)∩JSONPATH:$.data.isce2", openValue="1", closedValue="0", mode="READONLY" ]
		
		Type switch : status	[ stateExtension="/getOnOff", stateTransformation="REGEX:(.*data.*status.*SUCCESS.*)∩JSONPATH:$.data.status", commandExtension="/setOnOff?status=%2$s", onValue="0", offValue="1" ]
}

Passe die IP für dich an. Das klappt natürlich auch mit dem Namen der PV-Anlage. Du kannst auch darüber nachdenken, eine feste IP in deinem Netzwerk dafür zu vergeben.

3. Items in OpenHAB hinzufügen

Ich verwende nicht alle Kanäle. Folgende Items sind aber ausreichend, wenn du Fehler überwachen willst, die Anlage drosseln willst oder den Energie-Output messen und loggen willst.

Group					igPV				"PV"								(sgEnvironment)
Switch					PV_Status			"Status" 							(igPV)															{ channel="http:url:pv:status" }
Number:Power			PV_Watt_1			"Zelle 1 SW [%.0f W]" 	<energy>	(fgPersist,igPV,fgStopDetection)["Measurement","Power"]			{ channel="http:url:pv:p1" }
Number:Power			PV_Watt_2			"Zelle 2 SE [%.0f W]"	<energy>	(fgPersist,igPV)["Measurement","Power"]							{ channel="http:url:pv:p2" }
Contact					PV_offGrid			"Fehler Inverter"					(igPV)															{ channel="http:url:pv:offGrid" }
Contact					PV_outputFault		"Fehler AC"							(igPV)															{ channel="http:url:pv:outputFault" }
Contact					PV_DC1shortCircuit	"Kurzschluss 1"						(igPV)															{ channel="http:url:pv:DC1shortCircuit" }
Contact					PV_DC2shortCircuit	"Kurzschluss 2"						(igPV)															{ channel="http:url:pv:DC2shortCircuit" }
Number:Power			PV_maxPower			"Maximaler Output [%.0f W]"			(igPV)															{ channel="http:url:pv:maxPower", stateDescription=" "[ min=0, max=800, step=10 ] }

Ich verwende dabei wieder mein strukturiertes Namensschema für semantische Gruppen.

  • sgEnvironment steht dabei für die semantic group, die die Umwelt um das Haus beschreibt. Alle Items, die dazu gehören (Wetter, Sensorik draußen) gehören da rein
  • igPV steht für die item group der PV-Anlage. Also die Gruppe, zu der alle Sensoren der Anlage gehören
  • fgPersist ist die function group, die in Persistence-Richtlinien mit besonders häufigem Logging definiert ist
  • fgStopDetection ist die function group, die regelmäßig auf Änderungen geprüft wird. Mein System schlägt Alarm, wenn ein Gerät zu lange keine Updates mehr gesendet hat
  • [“Measurement”,”Power”] sind die Tags, die von OpenHAB entsprechend dem semantischen System empfohlen sind. Auch mit diesen Tags kann ich in Rules gut arbeiten

Das wars auch schon =)

Alexander Hacker sitzt an einem Schreibtisch und hat eine Hand am Telefon

Alexander Hacker

Ich bin Alex, IT-Projektmanager im Bereich Digitalisierung, mit einer Ausbildung zum Fachinformatiker für Systemintegration und einem anschließenden Informatik-Studium im Rücken. Zusammen mit meiner Frau habe ich außerdem die Hacker & Hacker Web GbR gegründet.

Unser ganzes Haus habe ich selbst mit Smarthome-Technik ausgestattet und bastle quasi täglich weiter daran – von der Netzwerk-Infrastruktur bis zur letzten Zigbee-Steckdose. Meine Zentrale ist openHAB, dazu kommen Zigbee, MQTT und jede Menge selbst gelötete Sensorik. Was ich hier zeige, habe ich selbst aufgebaut, getestet und oft erstmal falsch gemacht, bevor es lief.

0
0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

Translate »