OpenWB API per CuXD abfragen + steuern (HTTP call in JSON)

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
nseith
Beiträge: 316
Registriert: 23.06.2013, 11:08
Wohnort: bei Karlsruhe
Hat sich bedankt: 8 Mal
Danksagung erhalten: 3 Mal

OpenWB API per CuXD abfragen + steuern (HTTP call in JSON)

Beitrag von nseith » 09.02.2023, 09:40

Hallo an Alle,
nachdem mir das Forum (speziell Baxxy & Tyfys) wiedermal prima geholfen hat, hier das fuer mich finale Ergebnis.
Ich hatte das universal JSON abfrage file gesehen, aber das war ziemlich maechtig und ich wollte meine simple Loesung kurz mit Euch teilen.

Was wollte ich machen?
Ich wollte die openWB morgens zw. 5-9 Uhr auf Sofortladen stellen (damit die Standheizung nicht den Akku vom Auto leerzieht, da ich zu 99% mit Min+PV lade)

Vorbereitung (CuXD und Variablen anlegen)
Ich frage die openWB per lokalem API ab ohne MQTT.

oWB Timestamp Zeichenkette Datum im Json:date
oWB Lade-Leistung Zahl Watt im Json:llgesamt
oWB Lademodus Werteliste sofort;Min+PV;PV;Stop;Standby im Json:ladestatusLP1
oWB Auto Werteliste abgesteckt;angesteckt im Json:plugstatLP1

Wer noch mehr braucht kann sich die Befehle aus der openWB API ziehen (google)

zum abfrage Script:

Code: Alles auswählen

! Daten von openwb holen
var url ="http://IP-der-openWB/openWB/web/api.php?get=all";

! Abfrage der openwb mit CUxD und Antwort in string schreiben
dom.GetObject("CUxD.CUX2801001:4.CMD_SETS").State("wget --no-check-certificate -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:4.CMD_QUERY_RET").State(1);
string openwb_xml = dom.GetObject("CUxD.CUX2801001:4.CMD_RETS").State();

! Schlüsselwoerter im String finden und Daten in Systemvariablen schreiben
! Beispiel: Position plus 3 Stellen - plus 19 Stellen Wert

!oWB Timestamp 	Zeichenkette 	Datum 				im Json:date
string word = "date";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 19);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("oWB Timestamp").State(daten);

!oWB Lade-Leistung 	Zahl 		Watt 				im Json:pvw
string word = "llgesamt";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 10);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("oWB Lade-Leistung").State(zahl);

!oWB Auto		Werteliste	abgesteckt;angesteckt		im Json:plugstatLP1
string word = "plugstatLP1";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 1);
WriteLine(daten);
integer zahl = daten.ToInteger();
dom.GetObject("oWB Auto").State(zahl);

!oWB Lademodus	Werteliste	sofort;Min+PV;PV;Stop;Standby 	im Json:ladestatusLP1
string word = "lademodus";
integer word_laenge = word.Length();
integer word_position = openwb_xml.Find(word);
string daten = openwb_xml.Substr((word_position + word_laenge +3), 1);
integer zahl = daten.ToInteger();
dom.GetObject("oWB Lademodus").State(zahl);
jetzt noch zum steuern der Lademodi (weitere Befehle koennen ebenfalls gegoogelt werden)

Code: Alles auswählen

!MIN und PV
var url= "http://IP-der-openWB/openWB/web/api.php?lademodus=minundpv";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State(cURL#" -X POST -H 'Content-Type: text/xml; charset=UTF-8' -d '' '"#url#"'");

!Sofort
var url= "http://IP-der-openWB/openWB/web/api.php?lademodus=jetzt";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State(cURL#" -X POST -H 'Content-Type: text/xml; charset=UTF-8' -d '' '"#url#"'");

!Ueberschuss
var url= "http://IP-der-openWB/openWB/web/api.php?lademodus=pvuberschuss";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State(cURL#" -X POST -H 'Content-Type: text/xml; charset=UTF-8' -d '' '"#url#"'");

!Standby
var url= "http://IP-der-openWB/openWB/web/api.php?lademodus=standby";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State(cURL#" -X POST -H 'Content-Type: text/xml; charset=UTF-8' -d '' '"#url#"'");

!Stop
var url= "http://IP-der-openWB/openWB/web/api.php?lademodus=stop";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
dom.GetObject("CUxD.CUX2801001:4.CMD_EXEC").State(cURL#" -X POST -H 'Content-Type: text/xml; charset=UTF-8' -d '' '"#url#"'");
Keine Ahnung ob irgendwas noch besser/effizienter geht, bei mir auf der alten CCU2 laeuft das jetzt sehr stabil und ich bin happy.
Vielleicht kann´s ja noch jemand brauchen.

Gruss
N

MH76
Beiträge: 14
Registriert: 29.11.2022, 09:22
System: CCU und Access Point
Hat sich bedankt: 5 Mal
Danksagung erhalten: 3 Mal

Re: OpenWB API per CuXD abfragen + steuern (HTTP call in JSON)

Beitrag von MH76 » 10.09.2023, 09:27

Hallo nseith,
danke für die Infos zur Einbindung der openWB.
Seit kurzem habe ich nun auch einen openWB in betrieb und wollte gerne einige der Daten der Wallbox auf meiner CCU nutzen.

Meine openWB wurde aber direkt mit der Software V2 geliefert und scheinbar gibt es nun die http Schnittstelle nicht mehr.
Laut openWB Forum kann man die Box wohl via MQTT abfragen mir ist aber noch unklar wie ich deine Skripte für eine Abfrage via MQTT umbauen kann.

Hast Du dazu bereits Erfahrungen gemacht oder kannst mir Tipps geben wie ich die openWB aus einem Homematic Skript mit MQTT abfragen kann?
Oder gibt es vielleicht noch einen anderen Weg die Daten aus der openWB in die CCU zu bekommen?

Danke & Gruß

nseith
Beiträge: 316
Registriert: 23.06.2013, 11:08
Wohnort: bei Karlsruhe
Hat sich bedankt: 8 Mal
Danksagung erhalten: 3 Mal

Re: OpenWB API per CuXD abfragen + steuern (HTTP call in JSON)

Beitrag von nseith » 11.09.2023, 08:51

Hi MH76,

leider kann ich Dir nicht helfen - Ich bin selbst nur maessig gut in Scripting und hatte mir diese Anleitung muehevoll zusammengesucht und dann als "vermeintliche" Endloesung einfach gepostet, da ich eben seit vielen Jahren hier im Forum profitiere.

Vielleicht einfach nach MQTT abfragen im Forum suchen, das ist vermutlich sogar deutlich einfacher als der JSON http call.

Sorry
N

Benutzeravatar
Baxxy
Beiträge: 10646
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 596 Mal
Danksagung erhalten: 2180 Mal

Re: OpenWB API per CuXD abfragen + steuern (HTTP call in JSON)

Beitrag von Baxxy » 11.09.2023, 09:01

Mal ganz grob aus dem Bauch heraus...

Wenn die OpenWB ein eigener MQTT-Broker ist dann brauchts einen Client der die Topics abonniert und ggf. in virtuelle Geräte / SysVars der Zentrale schreibt. Einfachste Lösung hier wäre wohl RedMatic als AddOn.

Wenn die OpenWB ein Client ist der seine Daten an einen MQTT-Broker published dann wäre der CCU-Jack als AddOn eine gute Wahl.

Externe Middlewares wie ioBroker / Homeassistant gehen natürlich auch.

Antworten

Zurück zu „Projektvorstellungen“