JSON trouble parsing MQTT.subscribe result

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

  • I'm trying to flip a switch based on a value I'm reading from my MQTT broker in Shelly script. My starting point was the "mqtt_discovery.js" example and I actually managed to get data read.

    However, the data from the broker (mosqitto) is a JSON string - and that's where my problems start. While I managed to parse manually created JSON strings using JSON.parse(), I keep getting "Uncaught SyntaxError: Expecting a valid value, got EOF".

    Could anybody please help me wrangle the (malformed?) JSON string?

    Script:

    Value in MQTT:

    • plain: {"value": 193.2}
    • string from Debug Log: "{\"value\": 193.2}"

    Weird effect - if I use JSON.stringify() on the value, I get:

    • plain: "{\"value\": 193.2}"
    • string from Debug Log: "\"{\\\"value\\\": 187.6}\""

    Error in debug log:

    Code
    < {"ts":1700520635.55< {"ts":1700520985.856, "level":2, "data":"shelly_scripts_rpc.:348 Sending \"script_1.js\""}
    < {"ts":1700520985.869, "level":-1, "data":""}
    < {"ts":1700520985.888, "level":-1, "data":"Uncaught SyntaxError: Expecting a valid value, got EOF"}
    < {"ts":1700520985.891, "level":-1, "data":" at line 1 col 1"}
    < {"ts":1700520985.892, "level":-1, "data":""}
    < {"ts":1700520985.894, "level":-1, "data":"^"}
    < {"ts":1700520985.898, "level":-1, "data":"in function called from system"}
    < {"ts":1700520985.899, "level":-1, "data":""}
    < {"ts":1700520985.905, "level":1, "data":"shelly_user_script.:397 syntax_error: Error in EjsCall"}
    < {"ts":1700520985.935, "level":2, "data":"shelly_notification:163 Status change of script:1: {\"id\":1,\"errors\":[\"syntax_error\"],\"running\":false}"}
  • Hello ParaDogma ,

    The first _msg is an empty string. To fix this error, a string and length check are required, here this should work: