NEWS
[gelöst] Blockly: JSON mit Regex aus Variable auslesen
-
@chris-1 sagte in [gelöst] Blockly: JSON mit Regex aus Variable auslesen:
Das Script ist für mich der erste Verteiler, welcher vom Tasmota-Zigbee-Gateway rein kommenden Sachen verteilen soll.
Tja Du siehst, wenn man gleich das Ziel ausformuliert, dann bekommt man auch gleich einen Vorschlag.
@mickym said in Blockly: JSON mit Regex aus Variable auslesen:
Tja Du siehst, wenn man gleich das Ziel ausformuliert, dann bekommt man auch gleich einen Vorschlag.
@chris-1 said in Blockly: JSON mit Regex aus Variable auslesen:
wegen erwogenem Umstieg von Zigbee2mqtt auf Tasmota-Zigbee möchte ich gerne den von Tasmota übermittelten JSON Record auslesen.
War das so mißverständlich ausgedrückt?
Nochmals ganz herzlichen Dank für die grandiose & schnelle Hilfestellung!
Gruss von der Ostsee
Chris -
@chris-1 sagte in [gelöst] Blockly: JSON mit Regex aus Variable auslesen:
Das Script ist für mich der erste Verteiler, welcher vom Tasmota-Zigbee-Gateway rein kommenden Sachen verteilen soll.
Tja Du siehst, wenn man gleich das Ziel ausformuliert, dann bekommt man auch gleich einen Vorschlag.
@mickym Nochmal eine Nachfrage zu JsonATA
Wie greife ich auf das x-te (hier 2tes) Elemente-Paar im JSON String zu?
Habe schon alle möglichen Tutorials hoch und runter gesucht, aber hierzu nichts gefunden.Beispiel für empfangene Daten:
{"Device":"0x0D73","EF00/0214":83,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0215":469,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0216":749,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0202":295,"Endpoint":1,"LinkQuality":136}Müsste ich das ggf über sowas wie "$spread()" lösen?
Schon mal vorab herzlichen Dank
Chris -
@mickym Nochmal eine Nachfrage zu JsonATA
Wie greife ich auf das x-te (hier 2tes) Elemente-Paar im JSON String zu?
Habe schon alle möglichen Tutorials hoch und runter gesucht, aber hierzu nichts gefunden.Beispiel für empfangene Daten:
{"Device":"0x0D73","EF00/0214":83,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0215":469,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0216":749,"Endpoint":1,"LinkQuality":136} {"Device":"0x0D73","EF00/0202":295,"Endpoint":1,"LinkQuality":136}Müsste ich das ggf über sowas wie "$spread()" lösen?
Schon mal vorab herzlichen Dank
Chris@chris-1 Das steht ddoch niemals so alleine da? - Entweder ist das ein Array mit Objekten (also das ganze in eckigen Klammern und mit Kommas?) oder möchtest Du auf den Wert EF00/0214 zugreifen?
So steht es aber mit Sicherheit nirgends.
-
@chris-1 Das steht ddoch niemals so alleine da? - Entweder ist das ein Array mit Objekten (also das ganze in eckigen Klammern und mit Kommas?) oder möchtest Du auf den Wert EF00/0214 zugreifen?
So steht es aber mit Sicherheit nirgends.
-
@mickym Ja, ich möchte diese (AirQuality) Werte unter "EF00/02xx" selektiv zugreifen.
Und nein, das ist so kein Array, sonsern beispielhaft aus dem Log heraus geschnippelt. Es kommt immer nur ein JSON an.
-
@mickym Ja, ich möchte diese (AirQuality) Werte unter "EF00/02xx" selektiv zugreifen.
Und nein, das ist so kein Array, sonsern beispielhaft aus dem Log heraus geschnippelt. Es kommt immer nur ein JSON an.
@chris-1 sagte in [gelöst] Blockly: JSON mit Regex aus Variable auslesen:
@mickym Ja, ich möchte diese (AirQuality) Werte unter "EF00/02xx" selektiv zugreifen.
Und nein, das ist so kein Array, sonsern beispielhaft aus dem Log heraus geschnippelt. Es kommt immer nur ein JSON an.
Dann verstehe ich Dein Problem glaube ich nicht???

Oder willst Du das Attribut mit JSONATA extrahieren?
-
@chris-1 sagte in [gelöst] Blockly: JSON mit Regex aus Variable auslesen:
@mickym Ja, ich möchte diese (AirQuality) Werte unter "EF00/02xx" selektiv zugreifen.
Und nein, das ist so kein Array, sonsern beispielhaft aus dem Log heraus geschnippelt. Es kommt immer nur ein JSON an.
Dann verstehe ich Dein Problem glaube ich nicht???

Oder willst Du das Attribut mit JSONATA extrahieren?
-
@mickym Der Sensor liefert 6? unterschiedliche Werte.
Diese stehen an 2ter Stelle des JSON in der Form "EF00/02<xx>" : ValueIch möchte also a) wissen welcher Wert (zB "EF00/0212") übermittelt wird,
b) Value ergibt sich danach leichter. -
@mickym Ja
Ob man dies ggf einfacher als "SubString" extrahiert?
Bis einschliesslich SubString-ID hat es ja immer die selbe Länge... -
@mickym Ja
Ob man dies ggf einfacher als "SubString" extrahiert?
Bis einschliesslich SubString-ID hat es ja immer die selbe Länge...@chris-1 So hier die Lösung:

Der JSONATA Ausdruck erzeugt ein neues Objekt mit den Attributen key und value auf dass Du dann normal mit den Blockly Attributen zugreifen kannst.
Der JSONATA Ausdruck lautet:
$.$sift(function($v, $k) {$k ~> /^EF00\/02/}){"key": $keys(),"value":$.*}Hier das Ganze zum Import und Testen
-
@chris-1 So hier die Lösung:

Der JSONATA Ausdruck erzeugt ein neues Objekt mit den Attributen key und value auf dass Du dann normal mit den Blockly Attributen zugreifen kannst.
Der JSONATA Ausdruck lautet:
$.$sift(function($v, $k) {$k ~> /^EF00\/02/}){"key": $keys(),"value":$.*}Hier das Ganze zum Import und Testen