In einem Kommentar unter einem meiner YouTube-Videos wurde ich gefragt, wie man den JSON-Response eines Shelly-Geräts im Shelly Script verarbeiten kann. Eine sehr gute Frage – denn Shelly-Geräte arbeiten intern oft mit JSON-Daten, sei es bei HTTP-Abfragen, Webhooks oder MQTT-Nachrichten.
Da dieses Thema ideal zu meiner Reihe „Shelly Scripting – JavaScript-Grundlagen für Einsteiger„ passt, widme ich diesem Kommentar nun einen eigenen Blogbeitrag. Ich zeige dir Schritt für Schritt, wie du einen JSON-String parst, auf einzelne Werte zugreifst und die Informationen direkt im Script verwenden kannst – z. B. um ein Relais zu schalten oder eine LED zu steuern.
Inhaltsverzeichnis
Was ist ein JSON-Dokument?
JSON steht für JavaScript Object Notation und ist ein leichtgewichtiges, textbasiertes Datenformat, das sich hervorragend für den Austausch von Informationen eignet – z. B. zwischen zwei Geräten oder zwischen einem Server und einem Mikrocontroller wie einem Shelly.
Ein JSON-Dokument besteht im Grunde aus Schlüssel-Wert-Paaren, ähnlich wie ein Wörterbuch. Diese Daten sind in einer klaren und standardisierten Struktur gespeichert. Ein JSON-String sieht beispielsweise so aus:
{ "device": "shellyplus1pm", "temperature": 42.5, "is_on": true, "timestamp": "2025-06-29T10:15:00Z" }
In diesem Beispiel:
"device"
ist der Schlüssel (Key),"shellyplus1pm"
ist der dazugehörige Wert (Value)."temperature"
enthält eine Zahl (float)."is_on"
speichert einen booleschen Wert (true
oderfalse
)."timestamp"
ist ein Textwert (String) im ISO-Format.
JSON-Daten lassen sich hierarchisch verschachteln, also auch Objekte in Objekten oder Listen (Arrays) enthalten:
{ "device": "shellyplus1pm", "measurements": { "voltage": 230.1, "power": 12.3 }, "history": [42.1, 42.5, 43.0] }
Diese einfache, aber flexible Struktur macht JSON zum perfekten Format für viele IoT-Projekte – auch auf den Shelly-Geräten. Du wirst JSON vor allem dann begegnen, wenn du per HTTP-Request Informationen abrufst oder auf Ereignisse im Shelly reagierst.
JSON-Daten vom Shelly abrufen und parsen
In der Praxis möchtest du vielleicht den aktuellen Status eines Shelly-Geräts abrufen – z. B. um Informationen wie den Gerätenamen, den Stromverbrauch oder den Schaltzustand auszulesen.
Dazu kannst du im Shelly Script eine HTTP-GET-Anfrage an das Gerät senden. In folgendem Beispiel wird per Shelly.call()
die Methode http.get
aufgerufen, um den Status eines Shelly Plus 1PM unter der IP-Adresse 192.168.178.104
abzufragen:
let params = { method: "GET", // Wir wollen Daten abrufen (GET-Anfrage) url: "http://192.168.178.104/rpc/Shelly.GetStatus" // IP-Adresse des Shelly-Geräts }; Shelly.call("http.get", params, function(result, error_code, error_message) { if (error_code != 0) { print("Fehler beim Senden der Daten: " + error_message); print(params); // Ausgabe der Parameter zur Fehleranalyse } else { print("Daten erfolgreich empfangen."); // JSON-Antwort parsen let json = JSON.parse(result.body); // Auf ein verschachteltes Element zugreifen print("Gerätename: " + json.sys.alt.S1PMG4ZB.name); } });

Erklärung:
Shelly.call("http.get", ...)
führt einen HTTP-Request direkt im Script aus.result.body
enthält die Antwort vom Shelly – als JSON-String.- Mit
JSON.parse(result.body)
wird dieser String in ein nutzbares JavaScript-Objekt umgewandelt. - Über Punktnotation (
json.sys.alt.S1PMG4ZB.name
) greifst du auf verschachtelte Werte zu.
Hinweis:
Welche Felder dein JSON-Dokument enthält, hängt vom Gerät und der verwendeten RPC-Methode ab. Da die Konsole im Shelly-Webinterface nur maximal 10 Zeilen ausgibt, ist die vollständige Anzeige eines größeren JSON-Objekts dort nicht möglich.
💡 Tipp:
Kopiere die URL aus dem params.url
-Feld (z. B. http://192.168.178.104/rpc/Shelly.GetStatus
) und rufe sie im Webbrowser oder mit einem Tool wie Postman auf. Du erhältst dann die vollständige JSON-Antwort als formatierten Text und kannst gezielt die Felder identifizieren, die du im Script verwenden möchtest.