NEWS
MQTT -> {Value: XX} im Wert
-
@paul53
Vielen Dank für die schnelle Hilfe!Funktioniert aber leider noch nicht, ich bekomme vom mqtt Adapter und direkt gleich darauf folgende Fehler:
javascript.0 2021-02-15 19:08:03.080 error (2300) at processImmediate (internal/timers.js:439:21) javascript.0 2021-02-15 19:08:03.080 error (2300) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37) javascript.0 2021-02-15 19:08:03.079 error (2300) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:472:25) javascript.0 2021-02-15 19:08:03.079 error (2300) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1055:38) javascript.0 2021-02-15 19:08:03.079 error (2300) at Object.<anonymous> (script.js.Parse.Parse_P4:11:5) javascript.0 2021-02-15 19:08:03.079 error (2300) at werteAuslesen (script.js.Parse.Parse_P4:5:20) javascript.0 2021-02-15 19:08:03.078 error (2300) at JSON.parse (<anonymous>:null:null) javascript.0 2021-02-15 19:08:03.077 error (2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1366 mqtt.0 2021-02-15 19:08:03.070 error (29487) Client [] Cannot parse {"Heizung": {"Kesseltemperatur_0x0": {"value": 65.5}, "Status": {"value": "Betriebsbereit"}, "Abgastemperatur_0x1": {"value": 64.0}, "Betriebsmodus": {"value": "Automati
Ich verstehe "Unexpected token in JSON at position 1366" nicht. Die Klammern passen doch?
-
@seeandfeel sagte: Die Klammern passen doch?
Ja, wenn sie so kommen, wie im ersten Beitrag gezeigt. Prüfe es per log(obj.state.val).
-
Die Daten hab ich 3x verglichen, sollten eigentlich gleich sein.
Falls das so stimmt:
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(obj.state.val); } on({id:idJson,change:'ne'}, function (obj) { werteAuslesen(obj.state.val); });
Ergibt jetzt:
(2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1368
-> nicht 67 sondern die Klammer bei 68. Ich verstehs nicht. -
@seeandfeel sagte: Falls das so stimmt:
Nein, so:
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) { log(obj.state.val); werteAuslesen(obj.state.val); });
So liefert das Log den kompletten JSON-String.
@seeandfeel sagte in MQTT -> {Value: XX} im Wert:
Unexpected token in JSON at position 1368
Das ist das Ende des JSON. Kann da noch ein nicht sichtbares Sonderzeichen / Leerzeichen sein? Um das zu erkennen, füge im Log am Ende noch ein sichtbares Zeichen an:
log(obj.state.val + 'x');
Versuche mal
werteAuslesen(obj.state.val.trim());
-
@paul53 sagte in MQTT -> {Value: XX} im Wert:
werteAuslesen(obj.state.val.trim());
Das mit dem "x" hat etwas weitergeholfen.. - im Debug hab ich ein Leerzeichen gesehen.
Wenn ich mir dann das MQTT Adapter Debug ansehe, findet sich folgendes:
Client [] Cannot parse {"Heizung": {"Kesseltemperatur_0x0": {"value": 71.0}, "Status": {"value": "Heizen"}, "Abgastemperatur_0x1": {"value": 187.0}, "Betriebsmodus": {"value": "Automatik"}, "Boardtemperatur_0x2": {"value": 38.0}, "Uhrzeit": {"value": "Dienstag, 16. Feb. 2021 11:06:33"}, "Restsauerstoffgehalt_0x3": {"value": 8.4}, "Aussentemperatur_0x4": {"value": 2.0}, "Saugzugdrehzahl_0x7": {"value": 1929.0}, "Fuehler1_0x8": {"value": 90.5}, "LuftgeschwindigkeitinderAnsaugoeffnung_0xc": {"value": 1.19}, "Kesselstellgroesse_0x12": {"value": 98.0}, "Vorlauf-Isttemperatur_0x15": {"value": 51.0}, "Vorlauf-Solltemperatur_0x16": {"value": 50.0}, "Ansauglufttemperatur_0x60": {"value": 33.0}, "StromaufnahmederAustragschnecke_0x61": {"value": 0.01}, "FuellstandimPelletsbehaelter_0x71": {"value": 82.64}, "Einschub_0x74": {"value": 59.0}, "Sauerstoffregler_0x75": {"value": 61.0}, "Puffertemperaturoben_0x76": {"value": 64.5}, "PuffertemperaturMitte_0x77": {"value": 60.0}, "Puffertemperaturunten_0x78": {"value": 51.5}, "PufferpumpenAnsteuerung_0x8c": {"value": 74.0}, "Stromaufnahme24VDCPelletsmodul_0xa3": {"value": 0.28}, "BreitbandsondeHeizstrom_0xf3": {"value": 1.085}, "BreitbandsondeHeizungsSpannung_0xf4": {"value": 9.047}, "BreitbandsondeInnenwiderstand_0xf7": {"value": 298.0}, "Resetierbarerkg-Zaehler_0x111": {"value": 50.0}, "Resetierbarert-Zaehler_0x112": {"value": 4.0}}}�
2 Einträge später macht Iobroker daraus {"value": 4.0}}}� -> {"value": 4.0}}}\u0000" .
Ich hab das mal an den Entwickler weitergegeben, mal sehen ob er was findet.
Gibt es dazu evtl. einen Workaround? -
@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