JSON-APIs auswerten

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

1techone
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

Beitrag von 1techone » 25.09.2021, 13:55

Danke, dann geht es so leider nicht.
Schade, ich hätte gerne die Daten in HomeMatic übernommen! :cry:

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: JSON-APIs auswerten

Beitrag von MichaelN » 25.09.2021, 17:10

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 +++

1techone
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

Beitrag von 1techone » 26.09.2021, 15:43

MichaelN hat geschrieben:
25.09.2021, 17:10
Vielleicht brauchst du ja nur den richtigen Aufruf?
Ja sicher, aber ich habe keinen blassen Schimmer, wie ich das machen soll :roll:
gibt es vielleicht einen Link, der mir weiterhelfen könnte? :idea:
Ich weis nicht wonach ich suchen soll :(

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: JSON-APIs auswerten

Beitrag von MichaelN » 26.09.2021, 18:11

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 +++

Dome_2001
Beiträge: 319
Registriert: 01.07.2014, 10:18
Hat sich bedankt: 5 Mal

Re: JSON-APIs auswerten

Beitrag von Dome_2001 » 01.10.2021, 13:48

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:

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");
}
Return:

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");
}


Vielen Dank für den Support

Grüße
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------

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

Re: JSON-APIs auswerten

Beitrag von Baxxy » 01.10.2021, 14:07

Dome_2001 hat geschrieben:
01.10.2021, 13:48
Allerdings verstehe ich nicht warum der Link...
Na du hast das = wegrationalisiert. :wink:

Code: Alles auswählen

string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
Grüße, Baxxy

Dome_2001
Beiträge: 319
Registriert: 01.07.2014, 10:18
Hat sich bedankt: 5 Mal

Re: JSON-APIs auswerten

Beitrag von Dome_2001 » 01.10.2021, 14:12

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?
--------------------------------------------
138 Kanäle in 55 Geräten und 111 CUxD-Kanäle in 7 CUxD-Geräten
--------------------------------------------

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

Re: JSON-APIs auswerten

Beitrag von Baxxy » 01.10.2021, 14:16

Dome_2001 hat geschrieben:
01.10.2021, 14:12
knobeln
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. :wink:

Grüße, Baxxy

Dome_2001
Beiträge: 319
Registriert: 01.07.2014, 10:18
Hat sich bedankt: 5 Mal

Re: JSON-APIs auswerten

Beitrag von Dome_2001 » 01.10.2021, 14:20

Ich habe noch das CUXD eingetragen welches ich immer nutze. Ich nehme das mal raus ....

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");
}
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();
}

! 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
--------------------------------------------

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

Re: JSON-APIs auswerten

Beitrag von Baxxy » 01.10.2021, 14:28

Dome_2001 hat geschrieben:
01.10.2021, 14:20
Return bleibt leer.
Hmm, läuft so wie gepostet bei mir (im Script testen) durch. Dauert aber 2-3 Sekunden.
Welche Zentrale hast Du?

Grüße, Baxxy

Antworten

Zurück zu „Projektvorstellungen“