ioBrokerioBroker Blockly

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 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

8 Gedanken zu „Blockly – Zeichenfolge parsen

  • Sören Gläsmann

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

    Antwort
  • S.Oliver

    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?

    Antwort
    • Matthias Korte

      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

      Antwort
  • 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}}

    Antwort
    • bluefish

      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‘));

      Antwort
  • N.Schulte

    Guten Morgen,
    wie kann ich den ausgeparsten Inhalt in einen eigenen Datenpunkt schreiben, damit ich mit diesem arbeiten kann?

    Mfg

    Antwort
  • Max

    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

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.