Hilfe zu Script für API Sonnen-Batterie

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Muasmolle
Beiträge: 68
Registriert: 30.03.2017, 21:34
Wohnort: Laupheim
Hat sich bedankt: 11 Mal

Hilfe zu Script für API Sonnen-Batterie

Beitrag von Muasmolle » 18.03.2018, 20:13

Hallo werte Homematic-Experten,
Ich habe folgendes Thema schon mal in einem anderen Post angesprochen, möchte dafür aber nun einen neuen Thread aufmachen, da ich denke dass es früher oder später für viele nützlich sein könnte:

Ich würden gern die Daten von meiner Solar-Batterie (Fa. Sonnen) in meine CCU2 bekommen um diese für weitere Funktionen verwenden zu können und auch über Mediola zu visualisieren.
Ich bin leider absoluter Anfanger was Scripte anbelangt, denke mir aber dass es eigentlich ähnlich wie bei dem Script für die Netatmo-Daten oder Wounderground-Daten funktionieren müsste. Die Netatmo-Script habe ich erfolgreich am laufen, aber auch nur, weil es hier im Forum eine super Anleitung für Anfänger dafür gibt.

Vielleicht schaffe ich es mit eurer Hilfe eine schöne Anleitung zu erstellen. Die Batterien der Fa. Sonnen verkaufen sich schon länger in sehr großen Stückzahlen, vielleicht gibt es den einen oder anderen Anwender hier, dem es gleich geht wie mir und die Daten daraus weiter verwenden will oder muss. Konkret möchte ich damit eine sinnvolle Steuerung bauen, um die heute erforderliche 50%-Limitierung der PV-Anlage und Eigenverbrauchsanteil mittels diverser Verbaucher wie Wärmepumpe usw. zu optimieren.

Und los gehts:
Ich schaffe es bereits, über den Browser die Daten der Batterie auszulesen, ich muss einfach folgendes in die Adressleiste eingeben:

Code: Alles auswählen

http://192.168.178.22:8080/api/v1/status
Der Browser gibt mir dann folgendes aus:

Code: Alles auswählen

{"Consumption_W":1667,"Fac":50,"GridFeedIn_W":-33,"IsSystemInstalled":1,"Pac_total_W":930,"Production_W":704,"RSOC":99,"Timestamp":"2018-03-04 16:11:45","USOC":99,"Uac":228,"Ubat":53}
Genau um diese Daten geht es! Am wichtigsten davon wären:

Code: Alles auswählen

Consumption_W":1667 (Verbauch im Haus)
GridFeedIn_W":-33 (Einspeisung am Netzeinspeisepunkt)
Production_W":704 (Leistung PV-Anlage)
Pac_total_W":930 (Ladeleistung)
USOC":99 (Ladestand)
Die CCU2 hängt am gleichen LAN wie die Sonnenbatterie, d.h. ich kann direkt in echtzeit über das lokale LAN darauf zugreifen, kein Umweg über das Internet.
Ich würde gern diese Werte in der CCU in SVs oder als Gerät im 5-Sekunden Takt einlesen. (Was einfacher ist bzw mehr Sinn macht)
CuXD ist installiert.

Freue mich auf eure Vorschläge :-)
Zuletzt geändert von alchy am 19.04.2018, 12:15, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

ChristianF
Beiträge: 395
Registriert: 27.06.2014, 21:50

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von ChristianF » 26.03.2018, 22:48

Du brauchst irgendein Device, was den JSON Inhalt für Dich zerlegt und, wenn es wirklich in die CCU soll, über die XML API in die CCU schreibt. Theoretisch kann die CCU von der Hardware her das auch, aber da was zu bauen... ich weiß nicht, behagt mir nicht so. Ich würde den Weg andersrum gehen und eine ioBroker Instanz auf einem Raspi aufbauen. Dort ist das Parsen von JSON eine Kleinigkeit. Wenn Du es dann unbedingt noch in die CCU haben willst, ist das mittels eines einfachen Javascripts schnell und einfach erledigt.
370 Kanäle in 119 Geräten und 22 CUxD-Kanäle in 18 CUxD-Geräten, dazu ioBroker und diverse weitere eingebundene Systeme, vom 433MHz Bewegungsmelder bis hin zur Wallbox.

Mikeldk
Beiträge: 157
Registriert: 24.03.2016, 10:25
Danksagung erhalten: 3 Mal

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von Mikeldk » 29.03.2018, 11:58

Hi,

ich hatte fast das gleiche Problem.

Schau mal hier :

viewtopic.php?f=26&t=42928

tob
Beiträge: 15
Registriert: 02.11.2016, 14:31

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von tob » 19.04.2018, 08:30

Also bestimmt nicht elegant aber das Script funktioniert. Abfrage per cuxd.

Code: Alles auswählen

!Abfrage Sonnenbatterie
var url="http://192.168.0.19:8080/api/v1/status";
!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string sonnenstatus_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine(sonnenstatus_xml);

!Daten finden und extrahieren - Consumption_W
string word0 = "Consumption_W";
string word1 = "Fac";
integer word_position0 = sonnenstatus_xml.Find(word0);
integer word_position1 = sonnenstatus_xml.Find(word1);
integer word0_laenge = word0.Length();
string daten = sonnenstatus_xml.Substr((word_position0 + word0_laenge+2), (word_position1 - word_position0 + word0_laenge + 4));
WriteLine(daten);
dom.GetObject("Sonnen_Consumption_W").State(daten.ToInteger());
WriteLine(daten.ToInteger());

!Daten finden und extrahieren -Gridfeedin
string word2 = "GridFeedIn_W";
string word3 = "IsSystemInstalled";
integer word_position2 = sonnenstatus_xml.Find(word2);
integer word_position3 = sonnenstatus_xml.Find(word3);
integer word2_laenge = word2.Length();
string daten = sonnenstatus_xml.Substr((word_position2 + word2_laenge+2), (word_position3 - word_position2 + word2_laenge + 4));
WriteLine(daten);
dom.GetObject("Sonnen_GridFeedIn_W").State(daten.ToInteger());
WriteLine(daten.ToInteger());

!Daten finden und extrahieren -Production_W
string word3 = "Production_W";
string word4 = "RSOC";
integer word_position3 = sonnenstatus_xml.Find(word3);
integer word_position4 = sonnenstatus_xml.Find(word4);
integer word3_laenge = word3.Length();
string daten = sonnenstatus_xml.Substr((word_position3 + word3_laenge+2), (word_position4 - word_position3 + word3_laenge + 4));
WriteLine(daten);
dom.GetObject("Sonnen_Production_W").State(daten.ToInteger());
WriteLine(daten.ToInteger());

!Daten finden und extrahieren -USOC
string word5 = "USOC";
string word6 = "Uac";
integer word_position5 = sonnenstatus_xml.Find(word5);
integer word_position6 = sonnenstatus_xml.Find(word6);
integer word5_laenge = word5.Length();
string daten = sonnenstatus_xml.Substr((word_position5 + word5_laenge + 2), (word_position6 - word_position5 + word5_laenge + 4));
WriteLine(daten);
dom.GetObject("Sonnen_USOC").State(daten.ToInteger());
WriteLine(daten.ToInteger());
WriteLine("Hallo Welt!");
Zuletzt geändert von alchy am 19.04.2018, 12:15, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

tob
Beiträge: 15
Registriert: 02.11.2016, 14:31

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von tob » 19.04.2018, 21:27

Nachtrag:

Für das Script werden diese homematic Variablen benötigt.
Dateianhänge
Bildschirmfoto 2018-04-20 um 09.37.18.png
Zuletzt geändert von tob am 20.04.2018, 09:37, insgesamt 1-mal geändert.

tob
Beiträge: 15
Registriert: 02.11.2016, 14:31

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von tob » 19.04.2018, 21:32

Hier noch die Visualisierung mit home assistant.
Dateianhänge
Bildschirmfoto 2018-04-19 um 21.29.52.png

klausi0812
Beiträge: 2
Registriert: 15.05.2018, 21:51
System: CCU

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von klausi0812 » 15.05.2018, 22:05

Danke für die tollen Tipps zur Einbindung der Sonnenbatterie. Analog zu den Netatmo-Sensoren möchte ich ich dies nun auch bei meiner CCU2 integrieren.
Ich habe es mit

Code: Alles auswählen

http://xxx.xxx.xxx.xxx:8080/api/v1/status
sowie

Code: Alles auswählen

http://xxx.xxx.xxx.xxx:7979/rest/devices/battery/M03
versucht (mit M0x sollte man die Parameter separat abfragen können).
Nur leider klappt das schon bei der einfachen Browser-Abfrage der Daten nicht, der Browser zeigt:
ERR_CONNECTION_REFUSED
Die SB ist eine eco aus dem Jahr 2015 mit 8kWh und dürfte lt. Display eine V6.0 sein.
Die Batterie hängt im LAN und ist per Ping fehlerfrei erreichbar.
Auch das Webinterface sowie die App funktionieren.

Was könnte hier die Ursache sein bzw. gibt es hier ähnliche Erfahrungen?
Wenn die Abfrage per Browser klappt sollte es kein Problem sein, das ganze mit Euren Tipps per Script und CuXD in die CCU2 zu füttern - und das wäre wirklich sehr nützlich.
Danke schon mal im Voraus!

Muasmolle
Beiträge: 68
Registriert: 30.03.2017, 21:34
Wohnort: Laupheim
Hat sich bedankt: 11 Mal

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von Muasmolle » 08.06.2018, 18:47

2018-06-08 18_40_37-Eingabeaufforderung.png
2018-06-08 18_40_37-Eingabeaufforderung.png (20.21 KiB) 12504 mal betrachtet
Hallo Tob,
vielen vielen Dank für Dein Script. Scheint mir eine gute Lösung zu sein. Ich habe es ausprobiert und stehe aber noch vor folgenden Problemen bzw habe noch folgende Fragen, da ich ein Anfänger mit CuxD und Scripten bin.
Folgendes habe ich als erstes gemacht:
Dein Script mit meiner IP-Adresse angepasst und als tcl gespeichert und mittels WinSCP auf die CCU hochgeladen.
Die SV's in der CCU angelegt, genau so, wie in deinem Screenshot. Ohne Kanalzuordnungen.
Zum Test das Script gestartet mittels der Eingabeaufforderung im WinSCP tclsh /usr/local/addons/Sonnen/SonnenScript.tcl
Es kommt aber dann eine Fehlermeldung, siehe Screenshot.

Wäre super, wenn du mir weiterhelfen könntest. Sicher habe ich noch etwas vergessen?
Den Timer für den Start des Scipts muss ich ja uach noch machen, denke aber dass ich mich dann schon irgendwie durchbeisen kann.
Zuletzt geändert von Muasmolle am 08.06.2018, 20:46, insgesamt 1-mal geändert.

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von alchy » 08.06.2018, 19:17

Bei dem Script handelt es NICHT um ein tcl Script.
Es ist ein Homematic Script welches du z.B. >> direkt unter Script testen <<
ausführen oder in ein Programm integrieren kannst.


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Muasmolle
Beiträge: 68
Registriert: 30.03.2017, 21:34
Wohnort: Laupheim
Hat sich bedankt: 11 Mal

Re: Hilfe zu Script für API Sonnen-Batterie

Beitrag von Muasmolle » 08.06.2018, 21:46

Hallo Alchy,
Danke für den Hinweis. Ich habe es nun in ein Programm eingebunden, das von der Zeitsteuerung alle 5 Sek. gestartet wird. Aber die Variablen werden trotzdem nicht befüllt. Auch nicht wenn ich das Programm manuell starte. Wenn ich es bei "Skript testen" ausführe, kommt eine Zahlen/Textkolonne, die irgendwie Sinn macht, es scheint also prinzipiell zu funktionieren. Was mache ich falsch?
Dateianhänge
HM Script.png
Im Fenster "Skript bearbeiten" sagt die Fehlerprüfung "Kein Fehler"
HM Script.png (22.74 KiB) 12497 mal betrachtet

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“