Blockly – Zeichenfolge parsen
In dieser Artikelserie möchte ich das Thema Blockly in ioBroker näher erklären. Im Artikel zeige ich, wie Du eine Zeichenfolge parsen und einen entsprechenden Wert extrahieren kannst.
Bei manchen Sensoren oder Aktoren werden mehrere Informationen in einem Datenpunkt gespeichert. Dabei werden die verschiedenen Informationen mit einem Trennzeichen verkettet als Zeichenfolge gespeichert. Bei einem Vibrationssensor hatte ich z.B. folgende Werte in einem Datenpunkt stehen:
100,60,22
Wenn ich nun aus dieser Zeichenfolge z.B. nur den ersten Wert verarbeiten möchte, muss ich hier ein entsprechenden Parser aufbauen um den Wert zu extrahieren. Wir haben es hier mit einem wirklich sehr einfachen Parsing zu tuen, da wir dazu einfach die Zeichenfolge mittels dem Komma zerlegen und in eine Liste schreiben können. Für den Artikel habe ich folgenden Datenpunkt angelegt:
Im Datenpunkt „Datenpunkte.0.Test.TestString“ wird die Zeichenfolge „100,60,20“ gespeichert. Für diesen Datenpunkt erstellen wir uns nun ein Blockly-Trigger, mit dem wir das String-Parsing durchführen können. Bevor mit dem eigentlichen Parsing beginnen hier der Trigger mit einer Ausgabe in das ioBroker Log:
Im Log sehen wir nun die folgende Ausgabe:
Im nächsten Schritt erweitern wir nun das Script um die Funktionalität zum „Parsen“ des Strings. Dazu erstellen wir uns im ersten Schritt mit dem Block „setze … auf“ eine neue Liste, welche die einzelnen Elemente der Zeichenfolge aufnehmen soll. Gefüllt wird die Liste über den Block „Liste aus Text erstellen“. Dem Block übergeben wir dazu den neuen Wert des Datenpunktes (Wert) sowie das Trennzeichen „,“. Der Block erstellt nun eine Liste mit den Elementen des Strings. Nun können wir mit dem Block „In der Liste“ auf die Variable „StringDetails“ zugreifen und das 1. Element auswählen. Die Liste ist 1-basiert.
Im ioBroker Log sehen wir nun die Ausgabe des 1. Elements der Liste.
So einfach können wir auch mit Blockly Zeichenfolgen zerlegen. Ich hoffe Dir gefällt der Artikel. Ich freue mich über Deinen Kommentar oder Fragen 🙂
Hallo
Ich versuche gerade das Script nach zu bauen , aber ich komme nicht weiter. Würde die Möglichkeit bestehen, das Script zu Exportieren ? Ich hatte so etwas mal von irgendwo raus kopiert aber ich wollte mit Blockly arbeiten und ich bekomme bei diesem Script eine Warnung.
Danke und grüsse von der Spree
const idJson = ‚mqtt.1.Zutritt.RFID‘; // ID des Datenpunktes mit dem JSON-String eintragen !
const idUid = ‚rfid.username‘; // Name des uid-Datenpunktes
createState(idUid, “, {type: ’string‘}); // Datenpunkt erstellen
on(idJson, function(dp) { // triggert bei Änderung des JSON-Strings
var obj = JSON.parse(dp.state.val);
setState(idUid, obj.username, true);
});
Hallo Matthias
Vielen Dank für die zahlreichen Anleitungen. Die haben mir schon das eine oder andere mal weitergeholfen.
Kann es sein, dass hier die Erstellung der Variablen (oder Liste?) „StringDetails“ fehlt?
Hallo,
dazu habe ich einfach eine Variable mit dem Namen StringDetails angelegt. Werde ich noch ergänzen, danke!
Einen guten und vor allem gesunden Rutsch ins neue Jahr.
LG Matthias
Wie bekomme ich den Wert 2809 aus dem DP heraus? Hier habe ich kein direktes Trennzeichen.
{„Time“:“2021-05-30T21:05:10″,“BH1750″:{„Illuminance“:2809}}
Ein [ ] herum bauen und dann kannst du es in ein Object konvertieren und das Object 0.BH1750.Illuminance auslesen:
console.warn(getAttr((function () { try {return JSON.parse(‚[{„Time“:“2021-05-30T21:05:10″,“BH1750″:{„Illuminance“:2809}}]‘);} catch(e) {return {};}})(), ‚0.BH1750.Illuminance‘));
Guten Morgen,
wie kann ich den ausgeparsten Inhalt in einen eigenen Datenpunkt schreiben, damit ich mit diesem arbeiten kann?
Mfg
Vielen Dank
Mahlzeit.Es gibt in Iobrocker jetzt den Alexa-shoppinglist Adapter .Soweit prima Sache läuft auch nur habe ich keine Textliste sondern Json einträge mit denen ich nichts anfangen kann !! Wie kann ich aus der Jsonliste eine Einkaufsliste machen . Bei zb. Fenster geöffnet kommt ja auch eine Liste welche Fenster noch offen sind .Sowas hätte ich gern für die Einkaufsliste um sie dann aufs Handy zu senden .
Für ein Blockly wäre ich sehr Dankbar