WGET Befehl Variable einsetzen

Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI

Moderator: Co-Administratoren

Antworten
andi4822
Beiträge: 19
Registriert: 24.03.2020, 09:21
Hat sich bedankt: 2 Mal

WGET Befehl Variable einsetzen

Beitrag von andi4822 » 28.02.2023, 16:47

Hallo,

ich kämpfe schon länger mit einem Problem bei einem wget Befehl. Und zwar möchte ich anstelle des "XSRF-TOKEN" den String "Key" einsetzen lassen. Leider funktioniert das aber nicht mit '"#key#"'. Das selbe gilt für die URL, die kann ich auch nicht so von der Variable übernehmen. Könnt Ihr mir sagen wo ich da einen Denkfehler habe. Liegt es an den ^^ die ich am Anfang und Ende vom Befehl habe? Aber die brauch ich, damit die "--post-data={"stationCodes": "NE=xxxxxxx"}' Funktion funktioniert. Der String key wird bei WriteLine korrekt dargestellt. Und wenn ich den key direkt in den Pfad eingebe bekomme ich auch eine Rückmeldung vom Link. Es funktioniert nur das einsetzen der Variable nicht.

Danke für eure Hilfe

Das hier funktioniert:

Code: Alles auswählen

string key = dom.GetObject("X-fusion").State();

WriteLine(key);

var url = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=XSRF-TOKEN:x-1234 https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi^);
dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1);
var stdOut = dom.GetObject("CUxD.CUX2801001:5.CMD_RETS").State();
WriteLine(stdOut);
Das hier nicht mehr

Code: Alles auswählen

string key = dom.GetObject("X-fusion").State();

WriteLine(key);

var url = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header='"#key#"' '"#url#"'^);
dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1);
var stdOut = dom.GetObject("CUxD.CUX2801001:5.CMD_RETS").State();
WriteLine(stdOut);

Benutzeravatar
Henke
Beiträge: 1521
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 140 Mal
Danksagung erhalten: 306 Mal

Re: WGET Befehl Variable einsetzen

Beitrag von Henke » 28.02.2023, 16:59

Würde ich so lösen:

Code: Alles auswählen

string sKey = "XSRF-TOKEN:x-1234";
string sWget = ^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=$sKey$ https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi^;
sWget = sWget.Replace( "$sKey$", sKey );
WriteLine (sWget);
dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(sWget);     
Damit erspart man sich weitere Fummelei mit "\""

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

Re: WGET Befehl Variable einsetzen

Beitrag von MichaelN » 28.02.2023, 18:22

Nur zur Sicherheit : das ^ lässt sich in der Standard CCU nicht abspeichern.
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 +++

andi4822
Beiträge: 19
Registriert: 24.03.2020, 09:21
Hat sich bedankt: 2 Mal

Re: WGET Befehl Variable einsetzen

Beitrag von andi4822 » 28.02.2023, 20:34

Danke für den Tipp. Nur leider wird das ^ nicht mit im String mit abgelegt. Daher funktioniert die Abfrage wieder nicht 🫣. Gibt es eine Alternative für das ^?

Ich hab übrigens eine CCU 3 mit Rasperrymatic

Benutzeravatar
Henke
Beiträge: 1521
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 140 Mal
Danksagung erhalten: 306 Mal

Re: WGET Befehl Variable einsetzen

Beitrag von Henke » 28.02.2023, 20:53

Soviel zu: "Das funktioniert..."

Code: Alles auswählen

!string sKey = "XSRF-TOKEN:x-1234";
string sKey = dom.GetObject("X-fusion").State();
string sStation = '{"stationCodes": "NE=xxxxxxx"}';
string sUrl = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

string sWget = 'wget -q --post-data=\'$sStation$\' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=$sKey$ $sUrl$';
sWget = sWget.Replace( "$sKey$", sKey );
sWget = sWget.Replace( "$sStation$", sStation );
sWget = sWget.Replace( "$sUrl$", sUrl );
WriteLine (sWget);
string stdOut ; string stdErr;
system.Exec (sWget,&stdOut ,&stdErr);
if ( stdErr ){ WriteLine (  "Fehler: " #            stdErr );}
else
{
	WriteLine(stdOut );
}
Gibt bei mir:

Code: Alles auswählen

https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi
{"failCode":305,"immediately":true,"message":"USER_MUST_RELOGIN"}
8)

cuxd braucht man dafür nicht.

andi4822
Beiträge: 19
Registriert: 24.03.2020, 09:21
Hat sich bedankt: 2 Mal

Re: WGET Befehl Variable einsetzen

Beitrag von andi4822 » 01.03.2023, 07:58

Danke jetzt funktioniert es. Es war nur noch ein kleiner Fehler bei dir drinnen. Er hat mir immer "missing URL" hin geschrieben. Jetzt hab ich den $sURL$ nach vorne gesetzt nach dem "-O -" und jetzt funktioniert es auch bei mir.

Vielen Dank

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“