JSON-APIs auswerten

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

aha
Beiträge: 140
Registriert: 24.07.2020, 18:01
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: JSON-APIs auswerten

Beitrag von aha » 21.11.2021, 22:25

aha hat geschrieben:
21.11.2021, 21:49
MichaelN hat geschrieben:
21.11.2021, 12:49
zu wenig Input
Hier das Beispiel:

Code: Alles auswählen

!Testdaten rauslöschen für produktiven Betrieb
rueck = '{"A_Plus":123456.0}';
! Ende Testdaten
Und dann in der letzten Zeile:

Code: Alles auswählen

WriteLine(JSON_A-Plus);
Ich verstehe nicht, wie ich an die Value "JSON_A-Plus" dran komme.
Jetzt habe ich es erraten, was Du da gebaut hast. Ich muss also eine Systeminterne-Variable

Code: Alles auswählen

JSON_A-Plus
erstellen und dann wird sie automatisch befüllt. Das war echt schwer zu erraten gewesen!

Wirklich glücklich bin ich damit aber nicht, denn so kann ich sie mir nicht anzeigen lassen und es besteht ein Kollisionsproblem bei mehreren Geräten. Ok, kann ich lösen, indem ich den Prefix-Namen ändere... muss ich nochmal drüber nachdenken, ob für mich dieses komplexe Skript dann noch Sinn macht. Zumindest hat es geholfen mal an die JSON-Werte überhaupt dran zu kommen.

Den JSON Namen will ich jedenfalls nicht im GUI anzeigen. Von meinem Verständnis brauche ich dann noch ein Programm und noch eine Variable die eine andere Variable ausließt... nicht schön.

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

Re: JSON-APIs auswerten

Beitrag von MichaelN » 21.11.2021, 22:46

Ich verstehe dich nicht ganz

Ich zitiere mich mal selbst aus Beitrag 1
Für die Werte, die man aus dem JSON benötigt, muss man eine Systemvariable mit dem passenden Namen anlegen: bestehend aus Präfix+JSON-Schlüsselname.
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 +++

aha
Beiträge: 140
Registriert: 24.07.2020, 18:01
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal

Re: JSON-APIs auswerten

Beitrag von aha » 22.11.2021, 00:06

MichaelN hat geschrieben:
21.11.2021, 22:46
Ich verstehe dich nicht ganz

Ich zitiere mich mal selbst aus Beitrag 1
Für die Werte, die man aus dem JSON benötigt, muss man eine Systemvariable mit dem passenden Namen anlegen: bestehend aus Präfix+JSON-Schlüsselname.
Das versteht nur leider niemand auf Anhieb, der das zum ersten Mal anschaut.

Dein Präfix ("prefix") ist "JSON" und dann schreibst Du "Präfix+JSON-Schlüsselname". Ja ich bin jetzt kleinlich weil mich das alles 4h gekostet hat, aber hättest Du geschrieben

Code: Alles auswählen

[prefix] + [JSON Key]
(und man beachte auch die Leerzeichen) hätte ich es vermutlich auf Anhieb verstanden. "prefix" plötzlich in "Präfix" zu übersetzen ist hier sehr unglücklich, da nicht klar ist, dass es um die technischen Variablennamen im Code geht. Das man den Wert davon eventuell anpassen muss - ist im Code nicht zu lesen (keine inline-comments). Zudem hätte ein Beispiel des "Systeminternen Variablen"-Namens mich vermutlich auch früher abgeholt z.b. JSON_Vorname als CODE block. Wenn Du auch nicht einfach "SV" schreiben würdest, sondern Systeminterne Variable: wäre das auch massiv hilfreich - aktuell sieht es aus als wenn die Variable

Code: Alles auswählen

SV Präfix+JSON-Schlüsselname
heißen soll... auf die dumme Idee die Varaible mit "sv" zu prefixen bin ich nur gekommen, weil ich schon ~10 andere "sv* systeminterne Variablen habe und dachte die müssen so heißen.

Ich entwickle HomeMatic-Skripte echt selten... von daher jedes mal wie die Jungfrau zum Kinde.

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

Re: JSON-APIs auswerten

Beitrag von MichaelN » 22.11.2021, 09:08

Wow, jemand der solche kryptischen Beiträge verfasst beschwert sich das andere zu wenig Infos liefern
Wie komme ich an den Wert der Variable dran? Bei mir haben die Variablen auch noch einen Bindestrich und wenn ich "JSON_Foo-Test" verwende kommt da nichts zurück.

Code: Alles auswählen

WriteLine(JSON_Foo-Test);
gibt eine parsing Fehlermeldung aus
Nun, der Beitrag richtet sich nicht an Anfänger und YT-Kiddies. Vielleicht sollte ich einen entsprechenden Disclaimer ergänzen. Betrachte es als Intelligenztest und freu Dich das Du nur 4 Stunden gebraucht hast ihn zu bestehen.

Das SV die Abkürzung für Systemvariable ist, hat in diesem Forum noch keiner hinterfragt und das prefix englisch für Präfix ist... Ja, schwer zu erraten. Da gebe ich Dir recht. Aber da ich gerade nochmal geprüft habe, das im Beitrag 1 alles relevante erklärt ist und bei aufmerksamen lesen auch verstanden werden kann, sehe ich hier keinen Handlingsbedarf. Aber danke für die Anregung nochmal darüber nachzudenken. Den Disclaimer werde ich noch ergänzen.
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 +++

Steph74
Beiträge: 13
Registriert: 02.10.2018, 06:05
Hat sich bedankt: 4 Mal

Re: JSON-APIs auswerten

Beitrag von Steph74 » 28.11.2021, 07:42

MichaelN hat geschrieben:
20.11.2021, 14:55
Steph74 hat geschrieben:
18.11.2021, 20:26
Replace & Aufbereitung funktionieren - aber beim Schreiben der Variable geht die erste Stelle des ...counters0 verloren.
Fehler gefunden und in V1.10 korrigiert. Danke fürs melden.
Die aktuelle Version ist wie immer in Beitrag 1 zu finden.

Hallo @MichaelN,
getestet, funktioniert & implementiert. Das Skript hat mir einiges an Arbeit erspart und ich konnte damit alle klobigen HmIP-PSMs und BSMs gegen Shellys austauschen. Vielen Dank ...

Gruß
Stephan

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: JSON-APIs auswerten

Beitrag von Tibin » 19.01.2022, 17:52

Hallo Michael,
habe dein Skript auch gerade mal durch Zufall ausprobiert und für super befunden :mrgreen:
Kann man gut gebrauchen, tolle Arbeit.
Gruß Tino

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: JSON-APIs auswerten

Beitrag von Germa » 10.02.2022, 13:47

Hi Michael,

habe das Script ausprobiert für das Auslesen meines Saugroboter-Status. Klappt wunderbar.
In Blacks SDV benötigt es aber fast 4 Sekunden für die Ausführung, weil die API-Ausgabe etliche Einträge für die Erstellung der "Map" generiert. Also nach den eigentlichen auszuwertenden Einträgen (StatusStateAttribute und BatteryStateAttribute) kommen hunderte Zeilen mit Pixelpunktkoordinaten und deswegen dauert das so lange.

Code: Alles auswählen

------------------------------- Scriptausgabe -------------------------------
=== HTTP-Request OK === {"__class":"RobotState","metaData":{"version":1},"attributes":[{"__class":"AttachmentStateAttribute","metaData":{},"type":"dustbin","attached":true},{"__class":"AttachmentStateAttribute","metaData":{},"type":"watertank","attached":false},{"__class":"AttachmentStateAttribute","metaData":{},"type":"mop","attached":false},{"__class":"StatusStateAttribute","metaData":{},"value":"docked","flag":"none"},{"__class":"BatteryStateAttribute","metaData":{},"level":100,"flag":"charged"},{"__class":"PresetSelectionStateAttribute","metaData":{},"type":"fan_speed","value":"medium"},{"__class":"ConsumableStateAttribute","metaData":{},"type":"brush","subType":"main","remaining":{"value":11888,"unit":"minutes"}},{"__class":"ConsumableStateAttribute","metaData":{},"type":"brush","subType":"side_right","remaining":{"value":5888,"unit":"minutes"}},{"__class":"ConsumableStateAttribute","metaData":{},"type":"filter","subType":"main","remaining":{"value":2888,"unit":"minutes"}},{"__class":"ConsumableStateAttribute","metaData":{},"type":"sensor","subType":"all","remaining":{"value":576,"unit":"minutes"}}],"map":{"__class":"ValetudoMap","metaData":{"vendorMapId":845,"version":2,"nonce":"xxxxxxx"},"size":{"x":5120,"y":5120},"pixelSize":5,"layers":[{"__class":"MapLayer","metaData":{"area":4500},"type":"floor","pixels":[],"dimensions":{"x":{"min":391,"max":612,"mid":502,"avg":522},"y":{"min":276,"max":572,"mid":424,"avg":498},"pixelCount":180},"compressedPixels":[556,276,1,556,277,1,555,280,1,555,281,1,575,396,1,579,396,2,575,398,1,579,398,1,590,399,2,587,401,4,599,401,2,602,401,1,590,403,4,566,407,1,602,409,2,391,410,1,611,411,2,603,413,4,612,414,1,590,417,1,577,421,2,556,422,1,581,422,3,557,424,1,559,425,1,566,425,2,574,425,1,560,426,1,568,426,3,575,426,2,561,427,1,571,427,2,563,428,1,575,428,1,564,429,1,576,429,2,580,429,1,567,431,1,583,431,1,487,534,1,491,536,2,494,536,1,496,536,1,486,537,1,491,537,7,486,538,1,491,538,1,493,538,5,489,539,1,491,539,2,494,539,4,485,540,1,489,540,1,491,540,1,495,540,3,499,540,1,485,541,1,494,541,4,499,541,1,484,542,1,491,542,1,494,542,2,497,542,1,499,542,1,491,543,1,495,543,5,437,544,1,484,544,1,491,544,1,495,544,5,437,545,1,488,545,1,491,545,1,495,545,1,497,545,3,491,546,1,495,546,4,500,546,1,496,547,2,500,547,1,436,548,1,488,548,1,496,548,2,500,548,1,488,549,1,496,549,1,500,549,1,498,550,1,490,551,1,496,551,3,496,552,3,496,553,1,498,553,1,495,554,1,489,555,1,495,555,3,489,556,1,495,556,2,489,557,1,496,557,1,496,558,1,435,559,1,488,559,1,496,559,1,488,560,1,496,560,1,488,561,1,496,561,
.........
.........
.........
In Deiner Script-Anleitung beschreibst Du, wie man den eigentlichen Startpunkt des Scripts nach hinten schieben kann. Gibt es auch die Möglichkeit, die Json-Auslesung nach einigen Zeilen abzubrechen, sprich, den ganzen unnützen hinteren Teil des json wegzulassen?

Grüße
Germa
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

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

Re: JSON-APIs auswerten

Beitrag von MichaelN » 10.02.2022, 15:25

Ja, klar, das können wir bestimmt hinbekommen. Sag mir nur, wo die Auswertung aufhören soll.
Und kannst du mir zum Testen die komplette JSON-Ausgabe ausgeben?
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 +++

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: JSON-APIs auswerten

Beitrag von Germa » 10.02.2022, 20:39

habs Dir als PN geschickt
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

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

Re: JSON-APIs auswerten

Beitrag von MichaelN » 11.02.2022, 11:22

Ok, habe die Option ins das Skript mit eingebaut. Version V1.11 im ersten Beitrag aktualisiert.

Wenn Du am Start des Skript diese Zeilen anpasst:

Code: Alles auswählen

! optional kann man Texte am Anfang und Ende abschneiden
string Start_JSON =''; ! 'Hier den Start des eigentlichen JSON-Codes eingeben'
string Ende_JSON ='compressedPixels'; ! 'Hier den Ende des eigentlichen JSON-Codes eingeben' 
Dann wird dein JSON-String nur noch bis vor "compressedPixels" ausgewertet. Das Skript läuft dann statt 4 Sekunden nur noch 0,09 sec.

Btw: trotz der langen Laufzeit - ich bin selber beeindruckt, wie problemlos solch ein Monster-JSON verarbeitet wird.
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 +++

Antworten

Zurück zu „Projektvorstellungen“