NEWS
MQTT -> {Value: XX} im Wert
-
@seeandfeel sagte: Gibt es dazu evtl. einen Workaround?
Hast Du es mal mit .trim() versucht?
werteAuslesen(obj.state.val.trim());
-
Hatte ich auch probiert:
on({id:idJson,change:'ne'}, function (obj) { log(obj.state.val); werteAuslesen(obj.state.val.trim()); });
Ergibt:
javascript.0 2021-02-16 11:52:38.276 error (2300) at Object.<anonymous> (script.js.Parse.Parse_P4:11:5) javascript.0 2021-02-16 11:52:38.276 error (2300) at werteAuslesen (script.js.Parse.Parse_P4:5:20) javascript.0 2021-02-16 11:52:38.275 error (2300) at JSON.parse (<anonymous>:null:null) javascript.0 2021-02-16 11:52:38.274 error (2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1366
Ich hab jetzt gerade mal probiert (wohin? ) sowas einzubauen:
json.replaceAll("\\u0000", "")
oder gibt wohl auch ein:
str.replace
Aber ich habe ehrlich gesagt wenig Ahnung von JAVA .
-
var x = obj.state.val; x=x.replace('�','');
-
Auch dir gleich mal Danke @Gargano :
Um nichts falsch zu machen, hab das ganze jetzt so:
var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state"; // Datenpunkt-ID mit JSON-String var test = "javascript.0.testp4"; function werteAuslesen(jsonStr) { var x = obj.state.val; x=x.replace('�',''); var obj = JSON.parse(jsonStr).Heizung; var test = obj.Kesseltemperatur_0x0.value; } on({id:idJson,change:'ne'}, function (obj) { log(obj.state.val); werteAuslesen(obj.state.val); });
Json Parse Fehler "zum Ende" ist weg. Dafür jetzt:
javascript.0 2021-02-16 12:09:38.847 error (2300) at Object.<anonymous> (script.js.Parse.Parse_P4:14:5) javascript.0 2021-02-16 12:09:38.846 error (2300) at werteAuslesen (script.js.Parse.Parse_P4:6:17) javascript.0 2021-02-16 12:09:38.846 error (2300) Error in callback: TypeError: Cannot read property 'state' of undefined
Oh man..
-
@paul53 sagte: Workaround?
Verkürze mal den String um das letzte Zeichen:
var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state"; // Datenpunkt-ID mit JSON-String var test = "javascript.0.testp4"; function werteAuslesen(jsonStr) { var obj = JSON.parse(jsonStr).Heizung; var test = obj.Kesseltemperatur_0x0.value; log('Kesseltemperatur: ' + test + ' °C'); } on({id:idJson, change:'ne'}, function (obj) { let str = obj.state.val; let json = str.substr(0, str.length - 1); werteAuslesen(json); });
-
@seeandfeel sagte: Um nichts falsch zu machen, hab das ganze jetzt so:
So ist es falsch. Richtig:
var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state"; // Datenpunkt-ID mit JSON-String var test = "javascript.0.testp4"; function werteAuslesen(jsonStr) { var obj = JSON.parse(jsonStr).Heizung; var test = obj.Kesseltemperatur_0x0.value; } on({id:idJson,change:'ne'}, function (obj) { var json = obj.state.val.replace('�',''); werteAuslesen(json); });
-
-
@seeandfeel
Mit welcher Methode funktioniert es jetzt? Verkürzen oder Ersetzen? -
@seeandfeel Paul war schneller, war grad Mittag essen.
Zur Erklärung dieses Zeichens am Ende. Es handelt sich wohl hier um das String Ende Zeichen welches in C den Wert (hex) 0x0 hat. Fälschlicherweide wird wohl die Länge des Strings beim MQTT senden falsch berechnet und dieses Zeichen mitgesendet. -
Oh, entschuldigt.. - vor lauter Freude die Lösung vergessen.
Funktioniert hat es jetzt mit:
let json = str.substr(0, str.length - 1);
Ersetzen hatte ich noch gar nicht probiert gehabt. Das hatte ich ganz übersehen.
Das "var json = obj.state.val.replace('�','');" läuft auf:
(2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1364
Vielen Dank auch für die Erklärung @Gargano ! Ich wollte nicht fragen bzw. euch noch mehr "belästigen" .
Eigentlich versuchs ich ja echt selber zu lösen.. - aber bei JAVA setzt es (noch) bei mir aus. -
@seeandfeel Hi, könntest du mir das ganze Script schicken?
lg