NEWS
Einzelwerte aus Zeichenkette auslesen
-
Hallo Zusammen,
sind meine Kenntnisse relativ rudimentär und deshalb schaffe ich es nicht, eine Zeichenkette so zu zerpflücken, dass ich einzelne Werte extrahieren und weiterverwenden kann.
Konkret geht es darum, den Salzverbrauch eines Tages aus dem Grünbeck-Adapter zu extrahieren.
Die Zeichenkette ist wie folgt:
[{"date":"2022-06-30","value":291},{"date":"2022-06-29","value":0},{"date":"2022-06-28","value":0}]

Mein Ziel ist es, die 291g Salz an ein KNX-Objekt zu senden.Wie kann ich das mit Blockly umsetzen?
Vielen Dank schon mal.
-
@paul53
Vielen Dank, habs soweit nachgebaut, bekomme den Wert 291 gerade noch nicht auf den Bus. Kann ich mir im Debug anschauen, was durch das Skript ausgespuckt wird?

-
@paul53
Vielen Dank, habs soweit nachgebaut, bekomme den Wert 291 gerade noch nicht auf den Bus. Kann ich mir im Debug anschauen, was durch das Skript ausgespuckt wird?

@blacksheep587 sagte: bekomme den Wert 291 gerade noch nicht auf den Bus.
Der JSON-String in "salt" muss sich erst ändern, damit getriggert wird. Um das zu provozieren, kann man den Wert von vorgestern im JSON manuell ändern.
-
@blacksheep587 sagte: bekomme den Wert 291 gerade noch nicht auf den Bus.
Der JSON-String in "salt" muss sich erst ändern, damit getriggert wird. Um das zu provozieren, kann man den Wert von vorgestern im JSON manuell ändern.
@paul53 Okay, jetzt habe ich einen String extrahiert. Wie muss es aussehen, wenn ich daraus eine Zahl(Number) machen möchte?
-
@paul53 Okay, jetzt habe ich einen String extrahiert. Wie muss es aussehen, wenn ich daraus eine Zahl(Number) machen möchte?
@blacksheep587 sagte: String extrahiert. Wie muss es aussehen, wenn ich daraus eine Zahl(Number) machen möchte?
Verstehe ich nicht. Das macht das gezeigte Skript unter der Voraussetzung, dass der Trigger auslöst.
Damit der Wert auch bei Skriptstart geschrieben wird, ergänze das Skript:
-
@blacksheep587 sagte: String extrahiert. Wie muss es aussehen, wenn ich daraus eine Zahl(Number) machen möchte?
Verstehe ich nicht. Das macht das gezeigte Skript unter der Voraussetzung, dass der Trigger auslöst.
Damit der Wert auch bei Skriptstart geschrieben wird, ergänze das Skript:
@paul53 das sagt das Log zu Skript 1

-
@paul53 das sagt das Log zu Skript 1

@blacksheep587 sagte: das sagt das Log zu Skript 1
Was wurde denn in den KNX-Datenpunkt geschrieben? Im JSON liegt 291 als Zahl vor, muss also nicht gewandelt werden.

-
@blacksheep587 sagte: das sagt das Log zu Skript 1
Was wurde denn in den KNX-Datenpunkt geschrieben? Im JSON liegt 291 als Zahl vor, muss also nicht gewandelt werden.

@paul53 das habe ich gerade noch entdeckt.

Aktuell steht in der ETS 0
-
@paul53 das habe ich gerade noch entdeckt.

Aktuell steht in der ETS 0
@blacksheep587 sagte: das habe ich gerade noch entdeckt.
Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
@blacksheep587 sagte: das habe ich gerade noch entdeckt.
Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
var obj1, obj2; on({id: 'gruenbeck.0.softliQ.D/BS50010188.salt', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; obj1 = (function () { try {return JSON.parse((obj.state ? obj.state.val : ""));} catch(e) {return {};}})()[0]; setState("knx.0.Sonderfunktionen.Wasseraufbereitung.softliQ-Salzverbrauch_gestern"/*softliQ-Salzverbrauch_gestern*/, getAttr(obj1, 'value')); }); on({id: 'gruenbeck.0.softliQ.D/BS50010188.water', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; obj2 = (function () { try {return JSON.parse((obj.state ? obj.state.val : ""));} catch(e) {return {};}})()[0]; setState("knx.0.Sonderfunktionen.Wasseraufbereitung.softliQ-Weichwasserverbrauch_gestern"/*softliQ-Weichwasserverbrauch_gestern*/, getAttr(obj2, 'value')); }); -
var obj1, obj2; on({id: 'gruenbeck.0.softliQ.D/BS50010188.salt', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; obj1 = (function () { try {return JSON.parse((obj.state ? obj.state.val : ""));} catch(e) {return {};}})()[0]; setState("knx.0.Sonderfunktionen.Wasseraufbereitung.softliQ-Salzverbrauch_gestern"/*softliQ-Salzverbrauch_gestern*/, getAttr(obj1, 'value')); }); on({id: 'gruenbeck.0.softliQ.D/BS50010188.water', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; obj2 = (function () { try {return JSON.parse((obj.state ? obj.state.val : ""));} catch(e) {return {};}})()[0]; setState("knx.0.Sonderfunktionen.Wasseraufbereitung.softliQ-Weichwasserverbrauch_gestern"/*softliQ-Weichwasserverbrauch_gestern*/, getAttr(obj2, 'value')); });@blacksheep587 Kein Fehler zu erkennen.
@blacksheep587 sagte in Einzelwerte aus Zeichenkette auslesen:
Aktuell steht in der ETS 0
Wenn nicht immer der JSON-String im Datenpunkt steht, dann ergänze um eine Prüfung:

-
@paul53 das habe ich gerade noch entdeckt.

Aktuell steht in der ETS 0
@blacksheep587 said in Einzelwerte aus Zeichenkette auslesen:
@paul53 das habe ich gerade noch entdeckt.

Aktuell steht in der ETS 0
Hat es denn bei dir noch funktioniert?
Ich bekomme ebenfalls "Cannot get value of undefined".Viele Grüße
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden

