Objekte per rest api auslesen mit einem Skript

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Black
Beiträge: 5472
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1071 Mal
Kontaktdaten:

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von Black » 13.07.2021, 19:54

MichaelN hat geschrieben:
13.07.2021, 19:16
@Black: wie blendet man denn diesen Hint ein? Bei mir erscheint das nicht.
Kein Problem, das sollte sich hier:

editor.png

einschalten lassen

Gruss, Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von MichaelN » 13.07.2021, 19:55

Diese Neuerung muss mir entgangen sein. Das Leben könnte so einfach sein :roll:
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Black
Beiträge: 5472
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1071 Mal
Kontaktdaten:

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von Black » 13.07.2021, 19:57

August / September letzten Jahres hab ich das umgestellt gehabt...

du must aber showEditorHints auch anhaben, sonst färbt er dir zwar die Fehlerstelle, aber der Infokommentar kommt nicht.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

SOW
Beiträge: 14
Registriert: 12.07.2021, 14:10
System: CCU
Danksagung erhalten: 1 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von SOW » 25.08.2021, 20:35

Hallo Michael,
Du hast mir mit dem Auslesen des go-eChargers so toll geholfen. Das sript funktioniert tadellos!
Jetzt möchte ich Dich nochmals um Deine Hilfe bitten.

Mit meiner CCU2 bin ich gerade dabei eine PV-Überschussladung mit einer API-fähigen Wallbox (go-eCharger Homefix 11kW) zu realisieren.

A_AUSGANGSSITUATION:
Die aktuelle zur Verfügung stehende Überschussleistung frage über die Homematic Zählersensor-Sendeeinheit HM HM-ES-TX-WM ab und schreibe den Wert in die Systemvariable „Leistung_Ueberschuss“.
- positive Werte bedeuten für diese Systemvariable: PV speist ins Ö-Netz ein
- negative Werte bedeuten für diese Systemvariable: Haus entnimmt Strom aus dem Ö-Netz.
Über die API des go-eChargers können unter anderem auch Strom in A und ein- bzw. 3-phasiges Laden vorgegeben werden:
goe_amx I/A:
6 7 8 9 10 11 12 13 14 15 16 A
goe_fsp =0 1-phasig in Watt:
1400 1628 1855 2083 2311 2539 2767 2995 3223 3451 3679 W

goe_amx I/A:
6 7 8 9 10 11 12 13 14 15 16 A
goe_fsp =1 2-phasig in Watt:
3426 3992 4557 5123 5689 6255 6820 7386 7952 8517 9083 W

goe_amx I/A:
6 7 8 9 10 11 12 13 14 15 16 A
goe_fsp =1 3-phasig in Watt:
4189 4882 5575 6267 6960 7653 8346 9039 9731 10424 11117 W

Der für meine Anwendung wichtigen Rückgabewerte des go-eChargers werden cyklisch in Systemvariablen der CCU2 geschreiben.

Diese sind:
goe_alw: allow_charging: PWM Signal darf anliegen 0: nein 1: ja
goe_amp: aktuelle eingestellter maximaler Ladestrom Ampere Wert für die PWM Signalisierung in ganzen Ampere von 6-32A
goe_amx: Ampere Wert für die PWM Signalisierung in ganzen Ampere von 6-32A. Wird nicht auf dem Flash persistiert, verhält sich sonst aber gleich wie amp. Nach dem reboot wird amp auf den letzten Wert zurückgesetzt, der mit amp gesetzt wurde. Für PV Regelung empfohlen.
goe_car : Status PWM Signalisierung 1: Ladestation bereit, kein Fahrzeug 2: Fahrzeug lädt 3: Warte auf Fahrzeug 4: Ladung beendet, Fahrzeug noch verbunden
goe_fsp: Abfrage ob goe 1 oder 3 phasig lädt
goe_nrg1: Spannung auf L2 in volts
goe_nrg11: goe Leistung gesamt 0.01kW (360 entspricht 3.6kW)
(goe_nrg11F10: Korrektur des goe_nrg11 um Faktor 10)

B_LÖSUNG?
Am schönsten fände ich eine Lösung mittels Script. Was meinst Du?

Schon jetzt vielen Dank für Deine Hilfe.

Viele Grüße

Wilfried

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von MichaelN » 26.08.2021, 14:43

Ganz ehrlich? Ich finde in deinem Beitrag keine Frage, die ich beantworten könnte.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

SOW
Beiträge: 14
Registriert: 12.07.2021, 14:10
System: CCU
Danksagung erhalten: 1 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von SOW » 26.08.2021, 18:07

Hallo Michael,
ich kenne mich mit der Scriptprogrammierung für CCU2 einach nicht aus. Ich benötige ein Programm das die Strom-Werte für die goe Wallbox vorgibt.
Es muss die aktuell verfügbare Uberschußleistung abfragen und entscheiden welchen Stromvorgabewert an die goe weitergegeben werden soll.

Z.B.:

Code: Alles auswählen

**********************************
! goe Homefix Stromvorgabe schreiben

string lGetOut;
string lGetErr;

!Laden mit 6A /1-phasig
string lUrl="http://192.168.1.224/mqtt?payload=fsp=0";
system.Exec("wget -q -O - " # lUrl, &lGetOut, &lGetErr);
string lUrl="http://192.168.1.224/mqtt?payload=amx=6";
system.Exec("wget -q -O - " # lUrl, &lGetOut, &lGetErr);
**********************************
...dies funktioniert bereits. Es soll ab einer zur Verfügung stehenden Überschussleistung von ca. 1400W das Fahrzeug mit 6A /1-phasig laden. Sobald mehr oder weniger Solar-Leistung zur Vefügung steht soll der entsprechende Vorgabestromwert erneut berechnet werden. Es ist allerdings zu beachten, dass dann die Überschußleistung am Zähler genau um diese +/-Ladeleistung sinkt. Sobald wieder weniger Sollenleistung zur Verfügung steht, soll sich der Vorgabestromwert wiederum neu berechnen usw.. Im Prinzip soll immer nur, mit gerade maximal zur Verfügungsstehenden PV-Strom, geladen werden.

Programmtechnisch bekomme ich das nicht hin.
Daher bitte ich um Unterstützung. Falls mir jemand mit einer Script-Lösung helfen könnte wäre es prima.

Viele Grüsse

Wilfried
Zuletzt geändert von uwe111 am 11.04.2022, 15:36, insgesamt 2-mal geändert.
Grund: CODE in CODE Tags

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von MichaelN » 26.08.2021, 20:53

Macht das wirklich Sinn mit jedem Watt mehr oder weniger die Ladeleistung anzupassen? MAchen das Wallbox / Auto überhaupt mit?
Das bisschen was ich bisher mitbekommen habe geht doch eher in die Richtung, das gewisse Stufen gefahren werden 3,6kW - 7,2 kW - 11kW
Oder habe ich das was falsch verstanden? Auch 1-phasig, 3-phasig darf man doch nicht einfach so umschalten?!

Auf jeden Fall kann ich Dir kein Skript schreiben, wenn die Aufgabenstellung nicht vollkommen klar ist. Da müsstest Du mal ein Lastenheft, Programmablaufplan, Algorithmus, o.ä. skizzieren.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von MichaelN » 27.08.2021, 00:07

Was mir, unabhängig von homematic so einfällt : mit einer cFos Powerbrain hättest du so eine Steuerung schon fertig integriert für weniger Geld.

Umtausch ist aber vermutlich keine Option?
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

FrankJacobs
Beiträge: 34
Registriert: 11.04.2022, 12:40
System: CCU

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von FrankJacobs » 11.04.2022, 13:00

Hallo zusammen,
habe mir jetzt seit Tagen die Posts hier durchgelesen und werde nicht wirklich draus schlau. Das Los eines Anfängers.
Ich würde gerne das machen was der Spezialist namens Hattermann so netterweise hier reingeschrieben hat.
Ziel: Daten des Powerfox auslesen um immer dann wenn ich mit meiner PV Strom ins Netz einspeise, diesen Strom lieber selbst zu verbrauchen. Daher brauche ich sozusagen vielleicht alle Minute den aktuellen Wert von Powerfox.

Ich bin mal so dreist und stelle einfach mal meine Frage:
1. was ist besser? Das Script das hier eingestellt in in die CUXd einstellen und wenn dann wie ? Die Cuxd habe ich geladen.
1.a. oder bessser in der Webui direkt das Script reinschreiben?

Ich habe hier mal das Script abgeändert, so wie ich es verstanden habe, die Zeilen mit Ausrufezeichen weglassen ( korrekt ?) . das in mehren Fragezeiche sind meine Fragen dazu.

Sorry, aber mir ist nicht ganz klar, welche Zeilen ich in das Script schreiben sollte und welche nicht. Am Ende wirft ja das Programm mit dem Script
minestens zwei Werte aus. Bestenfalls die Einspeisemenge und den aktuellen Stromverbrauch jeweils in Watt. Damit kann ich dann die ersten beiden hier genannten SV bauen, mti denen ich dann ein entsprechendes Programm bauen kann. Das wäre super.


Ach so: Die API Abfrage funktioniert. CUXd habe ich auch, weiß aber nicht ob ich die dafür brauche...
Könnt Ihr mir helfen ?

BG Frank

Code: Alles auswählen

********************************************************************************************************
!-------- Hier die eigenen Daten Eintragen------------------ 
string username = "Frank.jacobs@gmail.com";
string password  = "Bauernstrasse39";
string poweropti_serial = "1234567890ab";
!-----------------------------------------------------------

string usernameEnc = Frank.jacobs@gmail.com();
string passwordEnc = Bauernstrasse39();
string JSON_All;
string stemp;
integer StrLen;
integer pos;
real AktuelleLeistung; 
real VerbrauchSumme;
var v_Leistung;
var v_Summe;

! diese Systemvariablen als Fließkomma anlegen! 
string strLeistung = "StromAktLeistung";                 ????????so anlegen- heisst das Fließkomma????????
string strSumme = "StromSummeVerbrauch";

???????????????Wofür ist das noch ??????????????
! Username, Password ausgeben um Strings selbst zu basteln
! WriteLine(usernameEnc);
! WriteLine(passwordEnc);
! Abfrage der Serial im Browser:
! https://%usernameEnc%:%passwordEnc%@backend.powerfox.energy/api/2.0/my/all/devices

string cmd = "curl -X GET \"https://" + Frank.jacobs@gmail.comEnc + ":" + Bauernstrasse.39Enc + "@backend.powerfox.energy/api/2.0/my/" + poweropti_serial + "/current\"";

????????????????????Brauche ich dass folgende wenn es nicht über die CUxD laufen soll? Oder ist es über über die CuxD einfacher und besser ??????????

!Daten der Geräte abrufen
  dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
  dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
  JSON_All = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State().ToLatin();
  StrLen = JSON_All.Length();
!  WriteLine( JSON_All ); ?????????????????????????was hier eintragen ???????????????????????????

! Leistung Lesen
  pos = JSON_All.Find( "\"Watt\":" ) + 7;
  JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
  pos = JSON_All.Find( "," );
  stemp = JSON_All.Substr( 0, pos );
!  WriteLine( stemp ); ??????????????????????????was hier eintragen?????????????????????????????
  AktuelleLeistung = stemp.ToFloat();
!  WriteLine( AktuelleLeistung ); ????????????????????????????was hier eintragen?????????????????????????????

! Verbrauch lesen
  pos = JSON_All.Find( "\"A_Plus\":" ) + 9;
  JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
  pos = JSON_All.Find( "," );
  stemp = JSON_All.Substr( 0, pos );
!  WriteLine( stemp ); ??????????????????????????was hier eintragen?????????????????????????????
  VerbrauchSumme = stemp.ToFloat();
!  WriteLine( VerbrauchSumme ); ??????????????????????????was hier eintragen?????????????????????????????

?????????????????????????????Diese vier Variablen müsste ich dann anlegen in der Webui? ?????????????????????????? und was ist mit den beiden SV von oben?
! Variablen setzen
  v_Leistung = dom.GetObject( strLeistung );
  v_Leistung.State( AktuelleLeistung );
  v_Summe = dom.GetObject( strSumme );
  v_Summe.State( VerbrauchSumme );
Zuletzt geändert von uwe111 am 11.04.2022, 15:35, insgesamt 1-mal geändert.
Grund: CODE in CODE Tags

FrankJacobs
Beiträge: 34
Registriert: 11.04.2022, 12:40
System: CCU

Re: Objekte per rest api auslesen mit einem Skript

Beitrag von FrankJacobs » 11.04.2022, 21:52

Hallo zusammen,
so, habe mal versucht die Beschreibung für das Script richtig zu deuten und habe in das Programm folgendes Script eingefügt. Könnt Ihr mir sagen ob das so richtig ist ? Habe über das Scripttesten alle möglichen Varianten ausprobiert. kein Ergebnis. Blöderweise kann ich nicht erkennen welche Zeilen Scirpttext und welche Anleitung sind.

Dazu habe ich die folgenden SV in der Webui angelegt:(lässt sich hier nicht hin kopieren)
Name: StromAktLeistung, StromSummeVerbrauch
beide mit Auswahl Zahl in Watt, Bereich -5000 bis +5000 ohne Kanalzuordnung

Frage:
müssen die ganz unten genannten SV nicht auch angelegt werden ?
Was ist mir dem Bereich ab:

1. string cmd..... - muss dass noch ins Skript?
2. ! Daten der Geräte abrufen... bis ! Variablen setzen ..... muss dass noch ins Skript ?
bin mir wegen der Ausrufezeichen davor nicht sicher ....

Danke euch!
BG
Frank


Code: Alles auswählen

string username = "xxxxx@gmail.com";
string password = "xxxxxxxxx50";
string poweropti_serial = "xxxxxxxxxx";

string usernameEnc = username.UriEncode();
string passwordEnc = password.UriEncode();
string JSON_All;
string stemp;
integer StrLen;
integer pos;
real AktuelleLeistung;
real VerbrauchSumme;
var v_Leistung;
var v_Summe;
string strLeistung = "StromAktLeistung";
string strSumme = "StromSummeVerbrauch";

string cmd = "curl -X GET \"https://" + usernameEnc + ":" + passwordEnc + "@backend.powerfox.energy/api/2.0/my/" + poweropti_serial + "/current\"";

!Daten der Geräte abrufen
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
JSON_All = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State().ToLatin();
StrLen = JSON_All.Length();
! WriteLine( JSON_All );

! Leistung Lesen
pos = JSON_All.Find( "\"Watt\":" ) + 7;
JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
pos = JSON_All.Find( "," );
stemp = JSON_All.Substr( 0, pos );
! WriteLine( stemp );
AktuelleLeistung = stemp.ToFloat();
! WriteLine( AktuelleLeistung );

! Verbrauch lesen
pos = JSON_All.Find( "\"A_Plus\":" ) + 9;
JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
pos = JSON_All.Find( "," );
stemp = JSON_All.Substr( 0, pos );
! WriteLine( stemp );
VerbrauchSumme = stemp.ToFloat();
! WriteLine( VerbrauchSumme );

! Variablen setzen
v_Leistung = dom.GetObject( strLeistung );
v_Leistung.State( AktuelleLeistung );
v_Summe = dom.GetObject( strSumme );
v_Summe.State( VerbrauchSumme );
Zuletzt geändert von alchy am 12.04.2022, 21:43, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Antworten

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