Shelly Scripting – JavaScript-Grundlagen für Einsteiger: JSON verarbeiten und parsen leicht gemacht
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.
https://youtu.be/WtaCPp3bAp4
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.
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 oder false).
- "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":
}
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);
}
});
Shelly - Name aus dem JSON Repsonse ermittelt
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.
Read the full article