NEWS
JSON Parser - Aus Blockly JSON in Datenpunkte schreiben
-
Hallo zusammen,
ich weiß nicht ob es sinnvoll ist - oder ob es sogar nicht schon irgendwie integriert ist, aber mir ging es mächtig auf den Zeiger JSON Strukturen zu zerlegen und auszulesen und in Datenpunkte zu schreiben.Deswegen hab ich ein Java-Script entwickelt die die Arbeit uns abnimmt und in Blockly entsprechend verwendet werden kann ... ihr gebt in Blockly nur als Variable den JSON String mit und sagt wie der Ordner der daraus generierten Datenpunkte heißen soll.
Baut euch folgende Funktion zusammen - Zu übergebende Variablen:
DPName -> wird in Userdata -> JSONPArser.DPName dann geschrieben
JSONTXT -> Der JSON als String der zerlegt werden soll in DatenpunkteSo sollte das Ganze aussehen :
Den Code weiter unten tragt ihr dann in die Javascript-Funktion bei den "drei Punkten" Rechts per Copy & Paste ein.
In den Trigger in Blockly hab ich in dem Fall mal den Shelly TRV Datenpunkt abgefragt der aber nur ein JSON liefert - immer wenn sich dort der Datenpunkt mit dem JSON nun ändert wird das nun in Datenpunkte bei 0_userdata.0.JSONParser geschrieben (Der Pfad lässt und Bezeichnung lässt sich unter id aber auch noch im JavaScript ändern).
Aktuell ist debugging noch an - falls nicht erwünscht das so viel protokolliert wird einfach "//" vor -> "console.log('inserting: ' +id + parent + '=' + element)" (in Zeile 27)
Vielen Dank an meinen guten Freund David Marenke der mich hier tatkräftig unterstützt hat.
Seid bitte gnädig - ist mein erstes JavaScript und es geht bestimmt viel besser ...
//Verschachteltes JSON Object in Datenpunkte schreiben - dynamisch let data = JSONTXT; let vardpname =DPName; console.log('Starting Parsing: ' + vardpname) var obj2 = JSON.parse(data); id=("0_userdata.0.JSONParser." + vardpname+".") insertElements(obj2) function insertElements(elems, parent="") { if(typeof(elems) === 'object') { for (const key in elems) { insertElements(elems[key], parent !== "" ? parent + '.' + key : key) } } else { insertelement(elems, parent) } } function insertelement(element, parent="") { console.log('inserting: ' +id + parent + '=' + element) if(!existsState(id + parent + "." + element)) { createState(id + parent , "", {name: parent}) setState(id+ parent , element, true); } else { setState(id + parent, element, true); } }
Vorher :
Nach Parsen :