JSON-APIs auswerten
Moderator: Co-Administratoren
-
- Beiträge: 9650
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 697 Mal
- Danksagung erhalten: 1617 Mal
Re: JSON-APIs auswerten
Vielleicht brauchst du ja nur den richtigen Aufruf?
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 +++
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 +++
-
- Beiträge: 213
- Registriert: 19.01.2016, 10:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 49 Mal
- Danksagung erhalten: 19 Mal
Re: JSON-APIs auswerten
Ja sicher, aber ich habe keinen blassen Schimmer, wie ich das machen soll
gibt es vielleicht einen Link, der mir weiterhelfen könnte?
Ich weis nicht wonach ich suchen soll
-
- Beiträge: 9650
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 697 Mal
- Danksagung erhalten: 1617 Mal
Re: JSON-APIs auswerten
Nach deiner Steuerung und JSON API.
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 +++
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 +++
Re: JSON-APIs auswerten
Hi,
ich bin leider in der Programmierung nicht so fit. Allerdings verstehe ich nicht warum der Link https://www.dwd.de/DWD/warnungen/warnap ... nings.json wenn ich diesen unter URL eintrage keine Rückmeldung gibt.
Die Testdaten habe ich mit ! Auskommentiert.
Unter CUXD habe ich meinen Standard eingegeben.
Das Script läuft durch, aber bringt keine Werte.
Script:
Return:
Vielen Dank für den Support
Grüße
ich bin leider in der Programmierung nicht so fit. Allerdings verstehe ich nicht warum der Link https://www.dwd.de/DWD/warnungen/warnap ... nings.json wenn ich diesen unter URL eintrage keine Rückmeldung gibt.
Die Testdaten habe ich mit ! Auskommentiert.
Unter CUXD habe ich meinen Standard eingegeben.
Das Script läuft durch, aber bringt keine Werte.
Script:
Code: Alles auswählen
!JSON universell auslesen
!V1.9 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=18&t=68762
string url "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
! string url = "http://IP/";
url = "wget --no-check-certificate --timeout=2 -O - '"#url#"'";
string prefix = "JSON_";
! string CUXD_Device = ""; ! falls man CUxD nutzt, Device eintragen z.B. "CUxD.CUX2801001:1"
string CUXD_Device = "CUxD.CUX2801001:1";
! Trenner kann notfalls angepasst werden, wenn es mit den Nutzdaten kollidiert
string TrennerArray = " \ "; TrennerArray = TrennerArray.Trim();
string TrennerArrayErsatz = "/";
! festlegen welche Zeichen in den Nutzdaten durch welches Zeichen ersetzt werden
string ersetzen = ":,[]{}";
string durch = " ";
string rueck;
string error;
object SV;
string SVName;
var Wert;
!Testdaten rauslöschen für produktiven Betrieb
! rueck = '{
! "Vorname": "Ronald",
! "Nachname": "Reagan",
! "Geburtsdatum": "1911-02-06",
! "Nationalitaet": "US-amerikanisch",
! "Partei":
! {
! "Name": "Republican Party",
! "Synonyme": ["Republikaner","Grand Old Party", "GOP"],
! "Hauptsitz": "Washington/D.C.",
! "Gründungsdatum": "1854-03-20",
! "Gründungsort": "Ripon"
! },
! "Amt": "US-Präsident",
! "Hobbys": ["Reiten", "Golfen", "Lesen"],
! "verheiratet": true,
! "Kinder": [
! {
! "Vorname": "Michael",
! "Nachname": "Reagan" },
! {
! "Vorname": "Patti",
! "Nachname": "Davis" },
! {
! "Vorname": "Ron",
! "Nachname": "Reagan" }]
! }
! ';
! Ende Testdaten
!- Abruf der Daten
if ( !CUXD_Device ) {
! system.exec
system.Exec(url , &rueck, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(url);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
rueck = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
if (!rueck== "")
{
WriteLine("=== HTTP-Request OK === "#rueck);
rueck = rueck.ToLatin(); ! wegen deutschen Umlauten
rueck = rueck.Trim(" {}[]");
rueck = rueck.Replace('\n','');
rueck = rueck.Replace('\r','');
rueck = rueck.Replace('_','-');
rueck = rueck.Replace(TrennerArray,TrennerArrayErsatz);
if (rueck.Substr(0,1) == "[" ) { rueck = "data:"#rueck; }
WriteLine("=== nach Replace === '"#rueck#"'");
! Array und Payload aufbereiten
integer pos1 = 0; integer posG = 0;
integer pos2 = rueck.Length();
string temp = ""; string temp2;
string teil;
boolean Array = false; boolean Payload = false;
while ( pos1 < pos2 )
{
teil = rueck.Substr(pos1,1);
if ( teil == "[")
{! Array gefunden
Array = true;
}
if ( (teil == "," ) && Array )
{! Komma gegen Schraegstrich tauschen
teil = TrennerArray;
}
if ( teil == "]")
{! Array Ende
Array = false;
}
if ( teil == '"' ) {
if ( Payload )
{! Payload Ende
Payload = false;
} else {
! Payload Start
Payload = true;
}
}
if ( ( ersetzen.Contains(teil) ) && Payload )
{! verbotene Zeichen austauschen
teil = durch;
}
temp = temp#teil;
pos1 = pos1 + 1;
}
rueck = temp;
rueck = rueck.Replace('"','');
WriteLine("=== nach Aufbereitung === '"#rueck#"'");
WriteLine("=== Output V1.8 ===");
string Part; string SVNameArray;
string Gruppe = ""; string GruppeNeu;
integer G1; integer G2;
integer ArrayZaehler = 0;
boolean ArrayMitGruppe = false;
foreach (Part, rueck.Split(",") ){
if (Part.Contains(":"))
{
if (Part.Contains("{"))
{ ! Unter-Objekt gefunden
!WriteLine("Z96 Part='"#Part#"'"); ! *** DEBUG
if (Part.Contains("[")) {
! enthält Arrray
GruppeNeu = Part.StrValueByIndex(":", 0);
GruppeNeu = GruppeNeu.Trim() #"_";
Part = Part.Substr(GruppeNeu.Length()+2).Trim("{ ");
Gruppe = Gruppe # GruppeNeu; Gruppe = Gruppe.Replace("__","_");
!WriteLine("Gruppe alt:"#Gruppe); ! DEBUG ***
!WriteLine("Inhalt alt:"#Part); ! DEBUG ***
} else {
! enthält kein Array, aber möglicherweise geschachtelte Objekte
temp = Part.Replace("{",";");
G2 = web.webGetValueListCount(temp);
G1=0;
while (G1 < (G2-1)) {
GruppeNeu = web.webGetValueFromList(temp,(G1)).Trim(" :");
if ( (GruppeNeu == "_") || (GruppeNeu == "") ) {
ArrayZaehler = ArrayZaehler + 1;
GruppeNeu = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe # GruppeNeu # "_";
G1 = G1 + 1;
}
if ( Gruppe == "_" ) {
ArrayZaehler = ArrayZaehler + 1;
Gruppe = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe.Replace("__","_");
Part = web.webGetValueFromList(temp,(G2-1));
!WriteLine("Gruppe neu:"#Gruppe); ! *** DEBUG
!WriteLine("Inhalt neu:"#Part); ! **** DEBUG
}
!WriteLine("=== GRUPPE-START: "#Gruppe);
}
if (Part.Contains(TrennerArray)) {
! Array gefunden
!WriteLine("=== ARRAY auflösen:"#Part);
ArrayMitGruppe = false;
Part = Part.Replace("[","");
Part = Part.Replace("]","");
pos1 = 0; posG = 0;
SVName = Gruppe;
if (Part.Contains(":"))
{
SVName = Part.StrValueByIndex(":", 0);
Part = Part.Substr(SVName.Length()+2).Trim();
SVName = SVName.Trim("[{ ");
!WriteLine("*** Z365 ARRAY aufgelöst in:"#SVName#"==="#Part#"==="); ! DEBUG ***
}
foreach (temp,Part.Split(TrennerArray))
{
!WriteLine("Z352 temp="#temp); ! DEBUG ***
if ( temp.Contains(":")) {
! Array enthält eine Gruppe
SVName = temp.StrValueByIndex(":", 0).Trim("{ ");
temp2 = temp;
temp = temp.StrValueByIndex(":", 1).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
if ( temp.Contains("{")) {
! weitere Gruppe gefunden
ArrayMitGruppe = true;
Gruppe = Gruppe # SVName # "_";
temp = temp.Trim(" {"); ! temp.StrValueByIndex("{", 1).Trim();
SVName = temp;
temp = temp2.StrValueByIndex(":", 2).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
!WriteLine("Z363 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
}
if ( temp.Contains("}")) { posG = posG + 1; }
!WriteLine("Z367 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
} else {
! keine Gruppe
SVNameArray = SVName#pos1.ToString(0).Trim();
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
pos1 = pos1 + 1;
}
if ( (temp.Contains("}")) && (ArrayMitGruppe) )
{ ! Unter-Objekt zu Ende
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("Z365 GRUPPE: "#Gruppe#" ==="); ! DEBUG ***
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z368 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
!WriteLine("=== Z374 GRUPPE-ENDE: "#Gruppe#" ===");
ArrayMitGruppe = false;
}
}
if ( posG > 0 ) {
!WriteLine("Z413 Part="#Part); ! *** DEBUG
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("=== GRUPPE-ENDE (array): "#Gruppe#"***");
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z422 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
}
! ARRAY ENDE
} else {
! ohne Array
! WriteLine("Z154 Part='"#Part#"'"); ! *** DEBUG
Part = Part.Replace(":",";");
SVName = Gruppe#web.webGetValueFromList(Part,0).Trim();
Wert = web.webGetValueFromList(Part,1).RTrim("}").Trim(" {[]}");
WriteLine (prefix # SVName #" = '"# Wert #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # SVName));
if (SV) {
SV.State(Wert);
WriteLine("=== SV "#prefix # SVName #" written ===");
}
if (Part.Contains("}"))
{ ! Unter-Objekt zu Ende
! *** Gruppe muss um so viele Einträge gekürzt werden, wie } vorhanden sind in Part ***
Part = Part.Replace(" ","");
! WriteLine("Z199 Part='"#Part#"'"); ! *** DEBUG
while ( Part.EndsWith("}") ) {
! Gruppe um letzten Eintrag kürzen
temp = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp);
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp,(G1)) # "_";
! WriteLine("=== "#G1#":"#Gruppe); *** DEBUG
G1 = G1 + 1;
}
Part = Part.Substr(0,(Part.Length()-1)) ;
! WriteLine("Z212 Part="#Part); ! *** DEBUG
} ! Ende while
!WriteLine("=== GRUPPE-ENDE: "#Gruppe#" ===");
}
}
}
}
} else {
WriteLine("Error at HTTP Request");
}
Code: Alles auswählen
Error 1 at row 3 col 72 near ^;
! string url = "http://IP/";
url = "wget --no-check-certificate --timeout=2 -O
Parse following code failed:
!JSON universell auslesen
!V1.9 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=18&t=68762
string url "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
! string url = "http://IP/";
url = "wget --no-check-certificate --timeout=2 -O - '"#url#"'";
string prefix = "JSON_";
! string CUXD_Device = ""; ! falls man CUxD nutzt, Device eintragen z.B. "CUxD.CUX2801001:1"
string CUXD_Device = "CUxD.CUX2801001:1";
! Trenner kann notfalls angepasst werden, wenn es mit den Nutzdaten kollidiert
string TrennerArray = " \ "; TrennerArray = TrennerArray.Trim();
string TrennerArrayErsatz = "/";
! festlegen welche Zeichen in den Nutzdaten durch welches Zeichen ersetzt werden
string ersetzen = ":,[]{}";
string durch = " ";
string rueck;
string error;
object SV;
string SVName;
var Wert;
!Testdaten rauslöschen für produktiven Betrieb
! rueck = '{
! "Vorname": "Ronald",
! "Nachname": "Reagan",
! "Geburtsdatum": "1911-02-06",
! "Nationalitaet": "US-amerikanisch",
! "Partei":
! {
! "Name": "Republican Party",
! "Synonyme": ["Republikaner","Grand Old Party", "GOP"],
! "Hauptsitz": "Washington/D.C.",
! "Gründungsdatum": "1854-03-20",
! "Gründungsort": "Ripon"
! },
! "Amt": "US-Präsident",
! "Hobbys": ["Reiten", "Golfen", "Lesen"],
! "verheiratet": true,
! "Kinder": [
! {
! "Vorname": "Michael",
! "Nachname": "Reagan" },
! {
! "Vorname": "Patti",
! "Nachname": "Davis" },
! {
! "Vorname": "Ron",
! "Nachname": "Reagan" }]
! }
! ';
! Ende Testdaten
!- Abruf der Daten
if ( !CUXD_Device ) {
! system.exec
system.Exec(url , &rueck, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(url);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
rueck = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
if (!rueck== "")
{
WriteLine("=== HTTP-Request OK === "#rueck);
rueck = rueck.ToLatin(); ! wegen deutschen Umlauten
rueck = rueck.Trim(" {}[]");
rueck = rueck.Replace('\n','');
rueck = rueck.Replace('\r','');
rueck = rueck.Replace('_','-');
rueck = rueck.Replace(TrennerArray,TrennerArrayErsatz);
if (rueck.Substr(0,1) == "[" ) { rueck = "data:"#rueck; }
WriteLine("=== nach Replace === '"#rueck#"'");
! Array und Payload aufbereiten
integer pos1 = 0; integer posG = 0;
integer pos2 = rueck.Length();
string temp = ""; string temp2;
string teil;
boolean Array = false; boolean Payload = false;
while ( pos1 < pos2 )
{
teil = rueck.Substr(pos1,1);
if ( teil == "[")
{! Array gefunden
Array = true;
}
if ( (teil == "," ) && Array )
{! Komma gegen Schraegstrich tauschen
teil = TrennerArray;
}
if ( teil == "]")
{! Array Ende
Array = false;
}
if ( teil == '"' ) {
if ( Payload )
{! Payload Ende
Payload = false;
} else {
! Payload Start
Payload = true;
}
}
if ( ( ersetzen.Contains(teil) ) && Payload )
{! verbotene Zeichen austauschen
teil = durch;
}
temp = temp#teil;
pos1 = pos1 + 1;
}
rueck = temp;
rueck = rueck.Replace('"','');
WriteLine("=== nach Aufbereitung === '"#rueck#"'");
WriteLine("=== Output V1.8 ===");
string Part; string SVNameArray;
string Gruppe = ""; string GruppeNeu;
integer G1; integer G2;
integer ArrayZaehler = 0;
boolean ArrayMitGruppe = false;
foreach (Part, rueck.Split(",") ){
if (Part.Contains(":"))
{
if (Part.Contains("{"))
{ ! Unter-Objekt gefunden
!WriteLine("Z96 Part='"#Part#"'"); ! *** DEBUG
if (Part.Contains("[")) {
! enthält Arrray
GruppeNeu = Part.StrValueByIndex(":", 0);
GruppeNeu = GruppeNeu.Trim() #"_";
Part = Part.Substr(GruppeNeu.Length()+2).Trim("{ ");
Gruppe = Gruppe # GruppeNeu; Gruppe = Gruppe.Replace("__","_");
!WriteLine("Gruppe alt:"#Gruppe); ! DEBUG ***
!WriteLine("Inhalt alt:"#Part); ! DEBUG ***
} else {
! enthält kein Array, aber möglicherweise geschachtelte Objekte
temp = Part.Replace("{",";");
G2 = web.webGetValueListCount(temp);
G1=0;
while (G1 < (G2-1)) {
GruppeNeu = web.webGetValueFromList(temp,(G1)).Trim(" :");
if ( (GruppeNeu == "_") || (GruppeNeu == "") ) {
ArrayZaehler = ArrayZaehler + 1;
GruppeNeu = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe # GruppeNeu # "_";
G1 = G1 + 1;
}
if ( Gruppe == "_" ) {
ArrayZaehler = ArrayZaehler + 1;
Gruppe = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe.Replace("__","_");
Part = web.webGetValueFromList(temp,(G2-1));
!WriteLine("Gruppe neu:"#Gruppe); ! *** DEBUG
!WriteLine("Inhalt neu:"#Part); ! **** DEBUG
}
!WriteLine("=== GRUPPE-START: "#Gruppe);
}
if (Part.Contains(TrennerArray)) {
! Array gefunden
!WriteLine("=== ARRAY auflösen:"#Part);
ArrayMitGruppe = false;
Part = Part.Replace("[","");
Part = Part.Replace("]","");
pos1 = 0; posG = 0;
SVName = Gruppe;
if (Part.Contains(":"))
{
SVName = Part.StrValueByIndex(":", 0);
Part = Part.Substr(SVName.Length()+2).Trim();
SVName = SVName.Trim("[{ ");
!WriteLine("*** Z365 ARRAY aufgelöst in:"#SVName#"==="#Part#"==="); ! DEBUG ***
}
foreach (temp,Part.Split(TrennerArray))
{
!WriteLine("Z352 temp="#temp); ! DEBUG ***
if ( temp.Contains(":")) {
! Array enthält eine Gruppe
SVName = temp.StrValueByIndex(":", 0).Trim("{ ");
temp2 = temp;
temp = temp.StrValueByIndex(":", 1).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
if ( temp.Contains("{")) {
! weitere Gruppe gefunden
ArrayMitGruppe = true;
Gruppe = Gruppe # SVName # "_";
temp = temp.Trim(" {"); ! temp.StrValueByIndex("{", 1).Trim();
SVName = temp;
temp = temp2.StrValueByIndex(":", 2).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
!WriteLine("Z363 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
}
if ( temp.Contains("}")) { posG = posG + 1; }
!WriteLine("Z367 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
} else {
! keine Gruppe
SVNameArray = SVName#pos1.ToString(0).Trim();
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
pos1 = pos1 + 1;
}
if ( (temp.Contains("}")) && (ArrayMitGruppe) )
{ ! Unter-Objekt zu Ende
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("Z365 GRUPPE: "#Gruppe#" ==="); ! DEBUG ***
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z368 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
!WriteLine("=== Z374 GRUPPE-ENDE: "#Gruppe#" ===");
ArrayMitGruppe = false;
}
}
if ( posG > 0 ) {
!WriteLine("Z413 Part="#Part); ! *** DEBUG
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("=== GRUPPE-ENDE (array): "#Gruppe#"***");
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z422 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
}
! ARRAY ENDE
} else {
! ohne Array
! WriteLine("Z154 Part='"#Part#"'"); ! *** DEBUG
Part = Part.Replace(":",";");
SVName = Gruppe#web.webGetValueFromList(Part,0).Trim();
Wert = web.webGetValueFromList(Part,1).RTrim("}").Trim(" {[]}");
WriteLine (prefix # SVName #" = '"# Wert #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # SVName));
if (SV) {
SV.State(Wert);
WriteLine("=== SV "#prefix # SVName #" written ===");
}
if (Part.Contains("}"))
{ ! Unter-Objekt zu Ende
! *** Gruppe muss um so viele Einträge gekürzt werden, wie } vorhanden sind in Part ***
Part = Part.Replace(" ","");
! WriteLine("Z199 Part='"#Part#"'"); ! *** DEBUG
while ( Part.EndsWith("}") ) {
! Gruppe um letzten Eintrag kürzen
temp = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp);
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp,(G1)) # "_";
! WriteLine("=== "#G1#":"#Gruppe); *** DEBUG
G1 = G1 + 1;
}
Part = Part.Substr(0,(Part.Length()-1)) ;
! WriteLine("Z212 Part="#Part); ! *** DEBUG
} ! Ende while
!WriteLine("=== GRUPPE-ENDE: "#Gruppe#" ===");
}
}
}
}
} else {
WriteLine("Error at HTTP Request");
}
Grüße
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
- Baxxy
- Beiträge: 10779
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 604 Mal
- Danksagung erhalten: 2205 Mal
Re: JSON-APIs auswerten
Na du hast das = wegrationalisiert.
Code: Alles auswählen
string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
Re: JSON-APIs auswerten
Hm, stimmt.
Jetzt kommt aber gar nichts mehr als Returnwert.
Mal weiter knobeln
Vielen Dank.
Grüße
Edit: Ich befürchte das mir das Script keine fertige JSON-Datei aufbereitet sondern eine API aufrufen will. Und hinter dem Link ist doch keine API. Oder verstehe ich jetzt was grundsätzlich falsch?
Jetzt kommt aber gar nichts mehr als Returnwert.
Mal weiter knobeln
Vielen Dank.
Grüße
Edit: Ich befürchte das mir das Script keine fertige JSON-Datei aufbereitet sondern eine API aufrufen will. Und hinter dem Link ist doch keine API. Oder verstehe ich jetzt was grundsätzlich falsch?
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
- Baxxy
- Beiträge: 10779
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 604 Mal
- Danksagung erhalten: 2205 Mal
Re: JSON-APIs auswerten
Hast du noch was verändert?
Wenn ich das original Script mit deiner url teste haut der mir hier Warnungen ohne Ende um die Ohren.
Grüße, Baxxy
Re: JSON-APIs auswerten
Ich habe noch das CUXD eingetragen welches ich immer nutze. Ich nehme das mal raus ....
Das ist nun das original, Testdaten entfernt und Link eingetragen, Return bleibt leer.
Komisch .....
Edit: Ich vermute das Problem sitzt 60 cm vor dem Monitor
Edit2: Kann jemand mal testen ob das Script bei Ihm Meldungen wirft?
Code: Alles auswählen
!JSON universell auslesen
!V1.9 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=18&t=68762
string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
url = "wget --no-check-certificate --timeout=2 -O - '"#url#"'";
string prefix = "JSON_";
string CUXD_Device = ""; ! falls man CUxD nutzt, Device eintragen z.B. "CUxD.CUX2801001:1"
! Trenner kann notfalls angepasst werden, wenn es mit den Nutzdaten kollidiert
string TrennerArray = " \ "; TrennerArray = TrennerArray.Trim();
string TrennerArrayErsatz = "/";
! festlegen welche Zeichen in den Nutzdaten durch welches Zeichen ersetzt werden
string ersetzen = ":,[]{}";
string durch = " ";
string rueck;
string error;
object SV;
string SVName;
var Wert;
!- Abruf der Daten
if ( !CUXD_Device ) {
! system.exec
system.Exec(url , &rueck, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(url);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
rueck = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
if (!rueck== "")
{
WriteLine("=== HTTP-Request OK === "#rueck);
rueck = rueck.ToLatin(); ! wegen deutschen Umlauten
rueck = rueck.Trim(" {}[]");
rueck = rueck.Replace('\n','');
rueck = rueck.Replace('\r','');
rueck = rueck.Replace('_','-');
rueck = rueck.Replace(TrennerArray,TrennerArrayErsatz);
if (rueck.Substr(0,1) == "[" ) { rueck = "data:"#rueck; }
WriteLine("=== nach Replace === '"#rueck#"'");
! Array und Payload aufbereiten
integer pos1 = 0; integer posG = 0;
integer pos2 = rueck.Length();
string temp = ""; string temp2;
string teil;
boolean Array = false; boolean Payload = false;
while ( pos1 < pos2 )
{
teil = rueck.Substr(pos1,1);
if ( teil == "[")
{! Array gefunden
Array = true;
}
if ( (teil == "," ) && Array )
{! Komma gegen Schraegstrich tauschen
teil = TrennerArray;
}
if ( teil == "]")
{! Array Ende
Array = false;
}
if ( teil == '"' ) {
if ( Payload )
{! Payload Ende
Payload = false;
} else {
! Payload Start
Payload = true;
}
}
if ( ( ersetzen.Contains(teil) ) && Payload )
{! verbotene Zeichen austauschen
teil = durch;
}
temp = temp#teil;
pos1 = pos1 + 1;
}
rueck = temp;
rueck = rueck.Replace('"','');
WriteLine("=== nach Aufbereitung === '"#rueck#"'");
WriteLine("=== Output V1.8 ===");
string Part; string SVNameArray;
string Gruppe = ""; string GruppeNeu;
integer G1; integer G2;
integer ArrayZaehler = 0;
boolean ArrayMitGruppe = false;
foreach (Part, rueck.Split(",") ){
if (Part.Contains(":"))
{
if (Part.Contains("{"))
{ ! Unter-Objekt gefunden
!WriteLine("Z96 Part='"#Part#"'"); ! *** DEBUG
if (Part.Contains("[")) {
! enthält Arrray
GruppeNeu = Part.StrValueByIndex(":", 0);
GruppeNeu = GruppeNeu.Trim() #"_";
Part = Part.Substr(GruppeNeu.Length()+2).Trim("{ ");
Gruppe = Gruppe # GruppeNeu; Gruppe = Gruppe.Replace("__","_");
!WriteLine("Gruppe alt:"#Gruppe); ! DEBUG ***
!WriteLine("Inhalt alt:"#Part); ! DEBUG ***
} else {
! enthält kein Array, aber möglicherweise geschachtelte Objekte
temp = Part.Replace("{",";");
G2 = web.webGetValueListCount(temp);
G1=0;
while (G1 < (G2-1)) {
GruppeNeu = web.webGetValueFromList(temp,(G1)).Trim(" :");
if ( (GruppeNeu == "_") || (GruppeNeu == "") ) {
ArrayZaehler = ArrayZaehler + 1;
GruppeNeu = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe # GruppeNeu # "_";
G1 = G1 + 1;
}
if ( Gruppe == "_" ) {
ArrayZaehler = ArrayZaehler + 1;
Gruppe = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe.Replace("__","_");
Part = web.webGetValueFromList(temp,(G2-1));
!WriteLine("Gruppe neu:"#Gruppe); ! *** DEBUG
!WriteLine("Inhalt neu:"#Part); ! **** DEBUG
}
!WriteLine("=== GRUPPE-START: "#Gruppe);
}
if (Part.Contains(TrennerArray)) {
! Array gefunden
!WriteLine("=== ARRAY auflösen:"#Part);
ArrayMitGruppe = false;
Part = Part.Replace("[","");
Part = Part.Replace("]","");
pos1 = 0; posG = 0;
SVName = Gruppe;
if (Part.Contains(":"))
{
SVName = Part.StrValueByIndex(":", 0);
Part = Part.Substr(SVName.Length()+2).Trim();
SVName = SVName.Trim("[{ ");
!WriteLine("*** Z365 ARRAY aufgelöst in:"#SVName#"==="#Part#"==="); ! DEBUG ***
}
foreach (temp,Part.Split(TrennerArray))
{
!WriteLine("Z352 temp="#temp); ! DEBUG ***
if ( temp.Contains(":")) {
! Array enthält eine Gruppe
SVName = temp.StrValueByIndex(":", 0).Trim("{ ");
temp2 = temp;
temp = temp.StrValueByIndex(":", 1).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
if ( temp.Contains("{")) {
! weitere Gruppe gefunden
ArrayMitGruppe = true;
Gruppe = Gruppe # SVName # "_";
temp = temp.Trim(" {"); ! temp.StrValueByIndex("{", 1).Trim();
SVName = temp;
temp = temp2.StrValueByIndex(":", 2).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
!WriteLine("Z363 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
}
if ( temp.Contains("}")) { posG = posG + 1; }
!WriteLine("Z367 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
} else {
! keine Gruppe
SVNameArray = SVName#pos1.ToString(0).Trim();
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
pos1 = pos1 + 1;
}
if ( (temp.Contains("}")) && (ArrayMitGruppe) )
{ ! Unter-Objekt zu Ende
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("Z365 GRUPPE: "#Gruppe#" ==="); ! DEBUG ***
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z368 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
!WriteLine("=== Z374 GRUPPE-ENDE: "#Gruppe#" ===");
ArrayMitGruppe = false;
}
}
if ( posG > 0 ) {
!WriteLine("Z413 Part="#Part); ! *** DEBUG
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("=== GRUPPE-ENDE (array): "#Gruppe#"***");
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z422 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
}
! ARRAY ENDE
} else {
! ohne Array
! WriteLine("Z154 Part='"#Part#"'"); ! *** DEBUG
Part = Part.Replace(":",";");
SVName = Gruppe#web.webGetValueFromList(Part,0).Trim();
Wert = web.webGetValueFromList(Part,1).RTrim("}").Trim(" {[]}");
WriteLine (prefix # SVName #" = '"# Wert #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # SVName));
if (SV) {
SV.State(Wert);
WriteLine("=== SV "#prefix # SVName #" written ===");
}
if (Part.Contains("}"))
{ ! Unter-Objekt zu Ende
! *** Gruppe muss um so viele Einträge gekürzt werden, wie } vorhanden sind in Part ***
Part = Part.Replace(" ","");
! WriteLine("Z199 Part='"#Part#"'"); ! *** DEBUG
while ( Part.EndsWith("}") ) {
! Gruppe um letzten Eintrag kürzen
temp = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp);
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp,(G1)) # "_";
! WriteLine("=== "#G1#":"#Gruppe); *** DEBUG
G1 = G1 + 1;
}
Part = Part.Substr(0,(Part.Length()-1)) ;
! WriteLine("Z212 Part="#Part); ! *** DEBUG
} ! Ende while
!WriteLine("=== GRUPPE-ENDE: "#Gruppe#" ===");
}
}
}
}
} else {
WriteLine("Error at HTTP Request");
}
Komisch .....
Edit: Ich vermute das Problem sitzt 60 cm vor dem Monitor
Edit2: Kann jemand mal testen ob das Script bei Ihm Meldungen wirft?
Code: Alles auswählen
!JSON universell auslesen
!V1.9 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=18&t=68762
string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
url = "wget --no-check-certificate --timeout=2 -O - '"#url#"'";
string prefix = "JSON_";
string CUXD_Device = ""; ! falls man CUxD nutzt, Device eintragen z.B. "CUxD.CUX2801001:1"
! Trenner kann notfalls angepasst werden, wenn es mit den Nutzdaten kollidiert
string TrennerArray = " \ "; TrennerArray = TrennerArray.Trim();
string TrennerArrayErsatz = "/";
! festlegen welche Zeichen in den Nutzdaten durch welches Zeichen ersetzt werden
string ersetzen = ":,[]{}";
string durch = " ";
string rueck;
string error;
object SV;
string SVName;
var Wert;
!- Abruf der Daten
if ( !CUXD_Device ) {
! system.exec
system.Exec(url , &rueck, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(url);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
rueck = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
! Testdaten rauslöschen für produktiven Betrieb
! rueck = '{
! "Vorname": "Ronald",
! "Nachname": "Reagan",
! "Geburtsdatum": "1911-02-06",
! "Nationalitaet": "US-amerikanisch",
! "Partei":
! {
! "Name": "Republican Party",
! "Synonyme": ["Republikaner","Grand Old Party", "GOP"],
! "Hauptsitz": "Washington/D.C.",
! "Gründungsdatum": "1854-03-20",
! "Gründungsort": "Ripon"
! },
! "Amt": "US-Präsident",
! "Hobbys": ["Reiten", "Golfen", "Lesen"],
! "verheiratet": true,
! "Kinder": [
! {
! "Vorname": "Michael",
! "Nachname": "Reagan" },
! {
! "Vorname": "Patti",
! "Nachname": "Davis" },
! {
! "Vorname": "Ron",
! "Nachname": "Reagan" }]
! }
! ';
! Ende Testdaten
if (!rueck== "")
{
WriteLine("=== HTTP-Request OK === "#rueck);
rueck = rueck.ToLatin(); ! wegen deutschen Umlauten
rueck = rueck.Trim(" {}[]");
rueck = rueck.Replace('\n','');
rueck = rueck.Replace('\r','');
rueck = rueck.Replace('_','-');
rueck = rueck.Replace(TrennerArray,TrennerArrayErsatz);
if (rueck.Substr(0,1) == "[" ) { rueck = "data:"#rueck; }
WriteLine("=== nach Replace === '"#rueck#"'");
! Array und Payload aufbereiten
integer pos1 = 0; integer posG = 0;
integer pos2 = rueck.Length();
string temp = ""; string temp2;
string teil;
boolean Array = false; boolean Payload = false;
while ( pos1 < pos2 )
{
teil = rueck.Substr(pos1,1);
if ( teil == "[")
{! Array gefunden
Array = true;
}
if ( (teil == "," ) && Array )
{! Komma gegen Schraegstrich tauschen
teil = TrennerArray;
}
if ( teil == "]")
{! Array Ende
Array = false;
}
if ( teil == '"' ) {
if ( Payload )
{! Payload Ende
Payload = false;
} else {
! Payload Start
Payload = true;
}
}
if ( ( ersetzen.Contains(teil) ) && Payload )
{! verbotene Zeichen austauschen
teil = durch;
}
temp = temp#teil;
pos1 = pos1 + 1;
}
rueck = temp;
rueck = rueck.Replace('"','');
WriteLine("=== nach Aufbereitung === '"#rueck#"'");
WriteLine("=== Output V1.8 ===");
string Part; string SVNameArray;
string Gruppe = ""; string GruppeNeu;
integer G1; integer G2;
integer ArrayZaehler = 0;
boolean ArrayMitGruppe = false;
foreach (Part, rueck.Split(",") ){
if (Part.Contains(":"))
{
if (Part.Contains("{"))
{ ! Unter-Objekt gefunden
!WriteLine("Z96 Part='"#Part#"'"); ! *** DEBUG
if (Part.Contains("[")) {
! enthält Arrray
GruppeNeu = Part.StrValueByIndex(":", 0);
GruppeNeu = GruppeNeu.Trim() #"_";
Part = Part.Substr(GruppeNeu.Length()+2).Trim("{ ");
Gruppe = Gruppe # GruppeNeu; Gruppe = Gruppe.Replace("__","_");
!WriteLine("Gruppe alt:"#Gruppe); ! DEBUG ***
!WriteLine("Inhalt alt:"#Part); ! DEBUG ***
} else {
! enthält kein Array, aber möglicherweise geschachtelte Objekte
temp = Part.Replace("{",";");
G2 = web.webGetValueListCount(temp);
G1=0;
while (G1 < (G2-1)) {
GruppeNeu = web.webGetValueFromList(temp,(G1)).Trim(" :");
if ( (GruppeNeu == "_") || (GruppeNeu == "") ) {
ArrayZaehler = ArrayZaehler + 1;
GruppeNeu = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe # GruppeNeu # "_";
G1 = G1 + 1;
}
if ( Gruppe == "_" ) {
ArrayZaehler = ArrayZaehler + 1;
Gruppe = ArrayZaehler.ToString(0).Trim() # "_";
}
Gruppe = Gruppe.Replace("__","_");
Part = web.webGetValueFromList(temp,(G2-1));
!WriteLine("Gruppe neu:"#Gruppe); ! *** DEBUG
!WriteLine("Inhalt neu:"#Part); ! **** DEBUG
}
!WriteLine("=== GRUPPE-START: "#Gruppe);
}
if (Part.Contains(TrennerArray)) {
! Array gefunden
!WriteLine("=== ARRAY auflösen:"#Part);
ArrayMitGruppe = false;
Part = Part.Replace("[","");
Part = Part.Replace("]","");
pos1 = 0; posG = 0;
SVName = Gruppe;
if (Part.Contains(":"))
{
SVName = Part.StrValueByIndex(":", 0);
Part = Part.Substr(SVName.Length()+2).Trim();
SVName = SVName.Trim("[{ ");
!WriteLine("*** Z365 ARRAY aufgelöst in:"#SVName#"==="#Part#"==="); ! DEBUG ***
}
foreach (temp,Part.Split(TrennerArray))
{
!WriteLine("Z352 temp="#temp); ! DEBUG ***
if ( temp.Contains(":")) {
! Array enthält eine Gruppe
SVName = temp.StrValueByIndex(":", 0).Trim("{ ");
temp2 = temp;
temp = temp.StrValueByIndex(":", 1).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
if ( temp.Contains("{")) {
! weitere Gruppe gefunden
ArrayMitGruppe = true;
Gruppe = Gruppe # SVName # "_";
temp = temp.Trim(" {"); ! temp.StrValueByIndex("{", 1).Trim();
SVName = temp;
temp = temp2.StrValueByIndex(":", 2).Trim(" []");
SVNameArray = SVName#posG.ToString(0).Trim();
!WriteLine("Z363 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
}
if ( temp.Contains("}")) { posG = posG + 1; }
!WriteLine("Z367 Gruppe="#Gruppe#" SVNameAray="#SVNameArray#" temp="#temp); ! DEBUG ***
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
} else {
! keine Gruppe
SVNameArray = SVName#pos1.ToString(0).Trim();
WriteLine (prefix # Gruppe # SVNameArray #" = '"# temp.Trim(" {[]}") #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # Gruppe # SVNameArray));
if (SV) {
SV.State(temp.Trim(" {[]}"));
WriteLine("=== SV "#prefix # Gruppe # SVNameArray #" written ===");
}
pos1 = pos1 + 1;
}
if ( (temp.Contains("}")) && (ArrayMitGruppe) )
{ ! Unter-Objekt zu Ende
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("Z365 GRUPPE: "#Gruppe#" ==="); ! DEBUG ***
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z368 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
!WriteLine("=== Z374 GRUPPE-ENDE: "#Gruppe#" ===");
ArrayMitGruppe = false;
}
}
if ( posG > 0 ) {
!WriteLine("Z413 Part="#Part); ! *** DEBUG
! Gruppe um letzten Eintrag kürzen
temp2 = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp2);
!WriteLine("=== GRUPPE-ENDE (array): "#Gruppe#"***");
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp2,(G1)) # "_";
!WriteLine("Z422 "#G1#"/"#G2#":"#Gruppe); ! *** DEBUG
G1 = G1 + 1;
}
}
! ARRAY ENDE
} else {
! ohne Array
! WriteLine("Z154 Part='"#Part#"'"); ! *** DEBUG
Part = Part.Replace(":",";");
SVName = Gruppe#web.webGetValueFromList(Part,0).Trim();
Wert = web.webGetValueFromList(Part,1).RTrim("}").Trim(" {[]}");
WriteLine (prefix # SVName #" = '"# Wert #"'");
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # SVName));
if (SV) {
SV.State(Wert);
WriteLine("=== SV "#prefix # SVName #" written ===");
}
if (Part.Contains("}"))
{ ! Unter-Objekt zu Ende
! *** Gruppe muss um so viele Einträge gekürzt werden, wie } vorhanden sind in Part ***
Part = Part.Replace(" ","");
! WriteLine("Z199 Part='"#Part#"'"); ! *** DEBUG
while ( Part.EndsWith("}") ) {
! Gruppe um letzten Eintrag kürzen
temp = Gruppe.Replace("_",";");
G2 = web.webGetValueListCount(temp);
Gruppe = ""; G1=0;
while (G1 < (G2-2)) {
Gruppe = Gruppe # web.webGetValueFromList(temp,(G1)) # "_";
! WriteLine("=== "#G1#":"#Gruppe); *** DEBUG
G1 = G1 + 1;
}
Part = Part.Substr(0,(Part.Length()-1)) ;
! WriteLine("Z212 Part="#Part); ! *** DEBUG
} ! Ende while
!WriteLine("=== GRUPPE-ENDE: "#Gruppe#" ===");
}
}
}
}
} else {
WriteLine("Error at HTTP Request");
}
Zuletzt geändert von Dome_2001 am 01.10.2021, 14:28, insgesamt 1-mal geändert.
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------
- Baxxy
- Beiträge: 10779
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 604 Mal
- Danksagung erhalten: 2205 Mal
Re: JSON-APIs auswerten
Hmm, läuft so wie gepostet bei mir (im Script testen) durch. Dauert aber 2-3 Sekunden.
Welche Zentrale hast Du?
Grüße, Baxxy