Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Shelly Scripting #3: Stromverbrauch und Sensordaten in der Cloud visualisieren

Posted on 20. Januar 202518. Januar 2025 by Stefan Draeger

Shelly Scripting Stromverbrauch visualisieren – genau darum geht es in diesem Beitrag. Ich zeige dir, wie du mithilfe von Shelly Scripting die Daten deines Shelly 1PM Gen3, ergänzt durch das Addon und einen DHT22-Sensor, flexibel erfassen, verarbeiten und in die Cloud übertragen kannst, um sie dort übersichtlich zu visualisieren.

Shelly Scripting #3: Stromverbrauch und Sensordaten in der Cloud visualisieren
Dieses Video auf YouTube ansehen.

Mit Shelly Scripting kannst du dein Gerät so programmieren, dass es die Messwerte automatisch und regelmäßig an den Cloud-Service ThingSpeak sendet. Dies geschieht im Hintergrund mithilfe von Timern, sodass keine manuelle Interaktion erforderlich ist.

Im letzten Beitrag habe ich bereits gezeigt, wie du die Daten als JSON speichern kannst. Hier machen wir den nächsten Schritt und zeigen, wie du mit Shelly Scripting und ThingSpeak die Daten in einem übersichtlichen Dashboard visualisierst. So kannst du sowohl aktuelle Werte überwachen als auch historische Daten analysieren.

Inhaltsverzeichnis

  • Shelly 1PM mit Addon und Sensor zum Erfassen von Stromverbrauch und Umweltdaten
  • Benötigten Ressourcen für diesen Beitrag
  • Anschluss des DHT22 via AddOn an den Shelly
    • Einrichten des Sensors in der Shelly Smart Control App
  • Anschluss eines Verbrauchers an den Shelly 1PM
  • Auslesen der Sensordaten via Shelly Script
  • Einrichten eines Accounts bei Thinkspeak
    • Zugrifssbeschränkungen des kostenfreien Accounts
    • Einrichten eines Channels für den Stromverbrauch & die Umweltdaten
    • API Key für den schreibzugriff auf den Channel via HTTP Request
    • Absenden eines HTTP Request via Postman
  • Absenden der ermittelten Daten via HTTP Request vom Shelly mit Script
    • Basis-Setup und Datenstruktur
    • Konfiguration des HTTP-Requests
    • Regelmäßige Datenerfassung und Verarbeitung
    • URL mit Sensordaten ergänzen
    • HTTP-Request absenden
    • Gesamter Code
  • Fazit und Ausblick zu Shelly Scripting Stromverbrauch visualisieren

Shelly 1PM mit Addon und Sensor zum Erfassen von Stromverbrauch und Umweltdaten

Um den Stromverbrauch zu messen, hast du die Wahl zwischen dem Shelly 1PM und dem Shelly 2PM. Der Shelly 1PM Mini ist besonders kompakt und eignet sich hervorragend für kleine Bauräume.

Shelly 1PM Gen3
Shelly 1PM Gen3
Shelly 1PM Mini Gen3
Shelly 1PM Mini Gen3
Shelly 1 Plus
Shelly 1 Plus
Shelly i4 Gen3
Shelly i4 Gen3

Wenn du jedoch – wie in diesem Beitrag gezeigt – zusätzlich Umweltdaten wie Temperatur und Luftfeuchtigkeit erfassen möchtest, benötigst du die größere Version des Shelly 1PM. Nur diese bietet die Möglichkeit, das Addon für Sensoren wie den DHT22 aufzustecken. Du kannst aber auch den „normalen“ Shelly 1 Plus oder den Shelly i4 Gen3 verwenden wenn du auch das Feature zum messen des Stromverbrauchs verzichen kannst.

Benötigten Ressourcen für diesen Beitrag

Wenn du diesen Beitrag nachstellen möchtest, dann benötigst du:

  • einen Shelly 1PM* oder Shelly 2PM*
  • ein Shelly AddOn*
  • ein DHT22 Sensor* mit 3-Adriger Zuleitung

Wenn du nur die Umweltdaten auslesen und ein Gerät schalten möchtest, also auf den Stromverbrauch verzichten kannst, dann empfehle ich dir den Shelly 1 Plus*.

Shelly, AddOn & DHT22 Sensor inkl. Zuleitung
Shelly, AddOn & DHT22 Sensor inkl. Zuleitung

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Anschluss des DHT22 via AddOn an den Shelly

Im Beitrag Shelly Plus #2: Shelly Plus AddOn habe ich dir bereits das kleine Modul welches du auf den Shelly Stecken kannst vorgestellt. Hier möchte ich kurz auf die Features eingehen und aufzeigen wie du dieses mit dem Shelly 1PM verbindest und einen DHT22 Sensor einrichtest.

Shelly Plus Addon
Shelly Plus Addon
Rückseite Shelly AddOn
Rückseite Shelly AddOn

Du kannst an den Shelly AddOn bis zu 3 DS18B20 Sensoren oder einen DHT22 Sensor (über die Pins VCC, DATA und GND) anschließen.

Shelly AddOn mit DHT22 Sensor
Shelly AddOn mit DHT22 Sensor
Shelly AddOn mit DS18B20 Sensor
Shelly AddOn mit DS18B20 Sensor

Einrichten des Sensors in der Shelly Smart Control App

Sobald der Sensor mit dem AddOn angeschlossen wurde, müssen wir diesen in der App „Shelly Smart Control“ einrichten. Wie du dieses machst, habe ich dir bereits im Beitrag Shelly Plus #2: Shelly Plus AddOn erläutert.

Einrichten eines Shelly AddOn am Shelly Plus 1 in der Android App
Dieses Video auf YouTube ansehen.

Anschluss eines Verbrauchers an den Shelly 1PM

Damit wir einen Stromverbrauch messen können, benötigen wir auch einen Stromverbraucher. In meinem Fall schließe ich wieder eine Lampe nach folgendem Schema an.

Der Shelly und die Lampe wird wiefolgt angeschlossen:

  • Shelly 1PM
    • N – Neutralleiter (blau)
    • L – Leiter (braun)
    • O – Ausgang „L“ zur Lampe
  • Lampe
    • Fassung „außen“ – Neutralleiter (blau)
    • Fassung „unten“ – Leiter (braun)
Schaltung - Shelly 1PM mit Lampe
Schaltung – Shelly 1PM mit Lampe

Im nachfolgenden Video erläutere ich dir, wie du eine Lampe am Shelly Plus 1 Mini anschließt und in der App einrichtest.

Shelly Plus 1 Mini - Schaltung mit einer Lampe aufbauen und Integration ins Heimnetzwerk
Dieses Video auf YouTube ansehen.

Auslesen der Sensordaten via Shelly Script

m ersten Schritt lesen wir die Sensordaten in ein JSON-Objekt ein. Das JSON-Format bietet den Vorteil, dass es unsere Daten strukturiert und organisiert speichert. Dadurch können wir über einen Key gezielt auf die entsprechenden Werte zugreifen, ohne für jede Messgröße eine separate Variable anlegen zu müssen.

let data = {
  voltage: 0, //Spannung in Volt
  current: 0, //Stromaufnahme in Ampere
  apower: 0,  //Leistungsaufnahme in Watt
  temperature: 0, //Temperatur in °C
  humidity: 0 //rel. Luftfeuchtigkeit in %
};

(Selbstverständlich wäre es auch möglich, die Werte in einzelne Variablen zu speichern. Allerdings sorgt das JSON-Format für eine übersichtlichere und flexiblere Handhabung, besonders wenn die Anzahl der Datenpunkte wächst.)

Diese Struktur hilft uns, die Daten effizient weiterzuverarbeiten und später in einem Cloud-Service wie ThingSpeak zu speichern oder zu visualisieren.

let powerResult = Shelly.getComponentStatus("Switch:0");
data.voltage = powerResult.voltage;
data.current = powerResult.current;
data.apower = powerResult.apower; 

let temperaturResult = Shelly.getComponentStatus("temperature:100");
data.temperature = temperaturResult.tC;

let humidityResult = Shelly.getComponentStatus("humidity:100");
data.humidity = humidityResult.rh;

Einrichten eines Accounts bei Thinkspeak

Nachdem wir die Daten ermittelt haben, richten wir ein Account bei Thinkspeak ein.

Für diesen Account benötigst du eine gültige Mail, Land, sowie Vorname und Nachname.

Solltest du nach einer MathLab Lizenz gefragt werden so öffne die nachfolgende Adresse um direkt auf Thinkspeak zugreifen zu können.

https://thingspeak.mathworks.com

Zugrifssbeschränkungen des kostenfreien Accounts

Der kostenfreie Account kann pro Tag nur 8219 Requests empfangen.

Wenn du dich bei Thinkspeak angemeldet und noch keinen Channel eingerichtet hast sollte dein Dashboard wiefolgt aussehen.

Mit einem klick auf „New Channel“ erstellst du ein neuen Kanal bzw. Dashboard an welchen du deine Daten senden kannst.

Einrichten eines Channels für den Stromverbrauch & die Umweltdaten

Zunächst vergeben wir dem Channel einen Namen und benennen die Felder 1 bis 5 mit den Typen unserer ermittelten Daten. Damit wir weitere Felder verwenden können, müssen wir jeweils die Checkbox markieren.

Wenn du nach unten Scrollst dann findest du dort die grüne Schaltfläche „Save“ mit welcher du die Einstellungen übernimmst.

API Key für den schreibzugriff auf den Channel via HTTP Request

Wenn du den neuen Channel angelegt hast, dann siehst du bereits einige leere Diagramme und Reiter. Im Reiter „API Keys“ findest du deinen API Key zum schreiben und lesen von Daten. Zunächst interessiert uns hier nur der „Write API Key“. Diesen Key kannst du über die Schaltfläche „Generate New Write API Key“ jederzeit neu erstellen!

Absenden eines HTTP Request via Postman

Mit dem kostenfreien Tool Postman kannst du sehr einfach REST-Schnittstellen wie der von Thinkspeak ansprechen und ermitteln wie dieser Request aufgebaut werden muss ohne das du eine Zeile Code schreiben musst. Dieses Tool habe ich bereits im letzten Beitrag eingesetzt um die Schnittstelle zu jsonbin.io zu bedienen.

Der Link ist dann wiefolgt :

https://api.thingspeak.com/update?api_key=Q1930CQB0EBK2FRF&field1=231&field2=8.5&field3=2.8&field4=25&field5=35

Wenn du oben rechts auf die Schaltfläche „Send“ klickst, wird die Adresse aufgerufen und du erhälst bei erfolg ein „200 OK“.

Diesen Request müssen wir nun im Shelly Script nachbauen. Wie du einen HTTP Request aus einem Shelly Script aufbaust und absendest hatte ich dir im letzten Beitrag Shelly Scripting #2: Sensordaten in der Cloud speichern und abrufen wie erwähnt mit jsonbin.io erläutert, dieses ist hier ähnlich einfach und du kannst die Funktion recyceln.

Absenden der ermittelten Daten via HTTP Request vom Shelly mit Script

In diesem Abschnitt zeige ich dir, wie du mit Shelly Scripting den Stromverbrauch und die eines angeschlossenen DHT22-Sensors regelmäßig an ThingSpeak sendest und dort visualisieren kannst. Dazu wird der Code in einzelne Blöcke zerlegt, um die Funktionsweise besser zu verstehen.

Stromverbrauch & Sensordaten eines Shelly auf dem Dashboard von ThingSpeak
Stromverbrauch & Sensordaten eines Shelly auf dem Dashboard von ThingSpeak

Basis-Setup und Datenstruktur

Im ersten Schritt definieren wir die Basis-URL für den HTTP-Request an ThingSpeak und erstellen ein JSON-Objekt (data), das die gemessenen Werte wie Spannung, Strom, Leistung, Temperatur und Luftfeuchtigkeit speichert.

// Basis-URL der ThingSpeak-API mit API-Schlüssel.
const baseUrl = "https://api.thingspeak.com/update?api_key=Q1930CQB0EBK2FRF";

// JSON-Objekt zur Organisation der Sensordaten.
let data = {
  voltage: 0,       // Spannung in Volt.
  current: 0,       // Stromstärke in Ampere.
  apower: 0,        // Leistung in Watt.
  temperature: 0,   // Temperatur in °C.
  humidity: 0       // Luftfeuchtigkeit in %.
};

Konfiguration des HTTP-Requests

Hier erstellen wir die grundlegenden Parameter für den HTTP-Request. Die URL wird später dynamisch mit den Messwerten ergänzt.

// Parameter für den HTTP-Request.
let parameter = {
  method: "GET",                          // HTTP-Methode GET für ThingSpeak.
  url: baseUrl,                           // URL wird später mit Daten ergänzt.
  headers: { "Content-Type": "application/json" } // Optionaler Header für JSON.
};

Regelmäßige Datenerfassung und Verarbeitung

Ein Timer wird eingerichtet, der alle 2 Sekunden die Sensordaten vom Shelly und dem angeschlossenen Sensor abruft. Die erfassten Daten werden im JSON-Objekt data gespeichert.

// Timer: Alle 2 Sekunden Sensordaten abrufen.
Timer.set(2000, true, function() {
  // Erfassen der Stromverbrauchsdaten (Spannung, Stromstärke, Leistung).
  let powerResult = Shelly.getComponentStatus("Switch:0");
  data.voltage = powerResult.voltage;
  data.current = powerResult.current;
  data.apower = powerResult.apower;

  // Erfassen der Temperatur vom DHT22-Sensor.
  let temperaturResult = Shelly.getComponentStatus("temperature:100");
  data.temperature = temperaturResult.tC;

  // Erfassen der Luftfeuchtigkeit vom DHT22-Sensor.
  let humidityResult = Shelly.getComponentStatus("humidity:100");
  data.humidity = humidityResult.rh;

  // Debugging: Ausgabe der aktuellen Messwerte in der Konsole.
  print(data);

URL mit Sensordaten ergänzen

Die erfassten Messwerte werden dynamisch an die Basis-URL angehängt. ThingSpeak erwartet die Daten in Form von field1, field2, etc.

 // Ergänzen der URL mit den Sensordaten.
  var url = baseUrl;
  url += "&field1=" + data.voltage;       // Feld 1: Spannung.
  url += "&field2=" + data.current;       // Feld 2: Stromstärke.
  url += "&field3=" + data.apower;        // Feld 3: Leistung.
  url += "&field4=" + data.temperature;   // Feld 4: Temperatur.
  url += "&field5=" + data.humidity;      // Feld 5: Luftfeuchtigkeit.

  // URL in die HTTP-Parameter übernehmen.
  parameter.url = url;

HTTP-Request absenden

Zum Abschluss wird ein HTTP-Request an ThingSpeak gesendet, um die Daten zu übertragen. Die Antwort des Servers wird im Debug-Log angezeigt, und etwaige Fehler werden ausgegeben.

// Senden des HTTP-Requests an ThingSpeak.
  Shelly.call(
    "HTTP.Request", parameter,
    function(result, error_code, error_message) {
      if (error_code != 0) {
        // Fehler: Ausgabe der Fehlermeldung.
        print("Fehler beim Senden der Daten: " + error_message);
      } else {
        // Erfolgreicher Request: Ausgabe der Serverantwort.
        print("Daten erfolgreich gesendet: ");
        print(result);
      }
    }
  );
});

Gesamter Code

Hier ist der vollständige Code, der die einzelnen Schritte zusammenführt, um mithilfe von Shelly Scripting Stromverbrauch visualisieren zu können. In regelmäßigen Intervallen werden die Stromverbrauchs- und Sensordaten deines Shelly erfasst und automatisch auf einem Dashboard dargestellt:

/*
  Der Code dient zum Ermitteln der Sensordaten eines DHT22-Sensors am Shelly 1PM Gen3. 
  Zusätzlich wird der Stromverbrauch einer LED-Lampe (Spannung, Stromstärke und Leistung) erfasst.
  Die Daten werden anschließend mithilfe eines HTTP-GET-Requests an ThingSpeak gesendet.
*/

const baseUrl = "https://api.thingspeak.com/update?api_key=Q1930CQB0EBK2FRF"; 
// Basis-URL für die ThingSpeak API. Der API-Schlüssel authentifiziert den Zugriff auf den Kanal.

let data = {
  voltage: 0,      // Spannung der LED-Lampe in Volt.
  current: 0,      // Stromstärke der LED-Lampe in Ampere.
  apower: 0,       // Momentane Leistungsaufnahme der LED-Lampe in Watt.
  temperature: 0,  // Temperaturwert des DHT22-Sensors in °C.
  humidity: 0      // Luftfeuchtigkeit des DHT22-Sensors in Prozent.
};

let parameter = {
   method: "GET",                          // Die HTTP-Methode ist GET, um Daten an ThingSpeak zu senden.
   url: baseUrl,                           // URL wird dynamisch mit Sensordaten ergänzt.
   headers: { "Content-Type": "application/json" } // Header, der den Inhaltstyp angibt.
};

// Timer, der alle 2000 ms (2 Sekunden) ausgeführt wird.
Timer.set(2000, true, function() {
  // Abrufen der Stromverbrauchsdaten vom Shelly (Spannung, Strom, Leistung).
  let powerResult = Shelly.getComponentStatus("Switch:0");
  data.voltage = powerResult.voltage;      // Spannung in Volt.
  data.current = powerResult.current;      // Stromstärke in Ampere.
  data.apower = powerResult.apower;        // Leistungsaufnahme in Watt.

  // Abrufen der Temperaturdaten vom DHT22-Sensor.
  let temperaturResult = Shelly.getComponentStatus("temperature:100");
  data.temperature = temperaturResult.tC; // Temperatur in °C.

  // Abrufen der Luftfeuchtigkeitsdaten vom DHT22-Sensor.
  let humidityResult = Shelly.getComponentStatus("humidity:100");
  data.humidity = humidityResult.rh;      // Luftfeuchtigkeit in %.

  // Debugging: Ausgabe der erfassten Daten im Konsolen-Log.
  print(data);

  // Ergänzen der URL mit den Sensordaten (ThingSpeak-Felder 1 bis 5).
  var url = baseUrl;
  url += "&field1=" + data.voltage;        // Feld 1: Spannung.
  url += "&field2=" + data.current;        // Feld 2: Stromstärke.
  url += "&field3=" + data.apower;         // Feld 3: Leistung.
  url += "&field4=" + data.temperature;    // Feld 4: Temperatur.
  url += "&field5=" + data.humidity;       // Feld 5: Luftfeuchtigkeit.

  // URL wird in den Request-Parameter übernommen.
  parameter.url = url;

  // HTTP-GET-Request an ThingSpeak senden.
  Shelly.call(
    "HTTP.Request", parameter, 
    function(result, error_code, error_message) {
      // Fehlerbehandlung: Fehlermeldung wird im Debug-Log ausgegeben.
      if (error_code != 0) {
        print(error_message);
      } else {
        // Erfolgsfall: Die Antwort von ThingSpeak wird ausgegeben.
        print(result);
      }
    }
  );
});

Fazit und Ausblick zu Shelly Scripting Stromverbrauch visualisieren

In diesem Beitrag habe ich dir gezeigt, wie du mit Shelly Scripting die Messdaten deines Shelly 1PM Gen3 und eines angeschlossenen DHT22-Sensors erfassen und regelmäßig an ThingSpeak sendest. Durch die automatische Datenübertragung mithilfe eines Timers kannst du deine Stromverbrauchs- und Umweltdaten einfach in der Cloud speichern und visualisieren. Das Zusammenspiel von Shelly Scripting und ThingSpeak bietet dir nicht nur eine praktische Möglichkeit, deine Daten zu überwachen, sondern schafft auch die Grundlage für weitere Automatisierungen in deinem Smart Home.

Im nächsten Beitrag werden wir uns einem spannenden Feature widmen, das viele von der kostenpflichtigen Version der Shelly Smart Control App kennen: die Steuerung einer Lampe basierend auf den Sonnenaufgangs- und Sonnenuntergangszeiten.

kostenpflichtige Features in der Shelly Smart Control App
kostenpflichtige Features in der Shelly Smart Control App

Mit einem kostenlosen Service und einem kleinen Shelly Script zeige ich dir, wie du diese Funktion ganz einfach nachbauen kannst – ohne zusätzliche Kosten. Freu dich darauf, wie du dein Smart Home noch smarter gestalten kannst!

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}