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 (trueoderfalse)."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.bodyenthä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.
Letzte Aktualisierung am: 29. Juni 2025