#ShellyScripting
Explore tagged Tumblr posts
draegerit · 10 days ago
Text
Shelly Scripting – JavaScript-Grundlagen fĂŒr Einsteiger: Arrays verstehen und anwenden
Tumblr media
Arrays sind eine der einfachsten Möglichkeiten, mehrere Werte wie Zahlen oder Zeichenketten in einer Art Liste zu speichern. Jeder Eintrag hat dabei eine feste Position und kann ĂŒber einen sogenannten Index angesprochen werden. Besonders praktisch ist das Zusammenspiel mit Schleifen: Damit lassen sich alle Elemente eines Arrays effizient durchlaufen – zum Beispiel, um sie auszugeben oder zu bearbeiten. In diesem Beitrag zeige ich dir, wie Arrays aufgebaut sind und wie du sie sinnvoll nutzen kannst. https://youtu.be/TRULc___5ps 📌 Tipp: Eine ausfĂŒhrliche EinfĂŒhrung in JavaScript-Grundlagen wie Variablen, Bedingungen und die verschiedenen Schleifenarten findest du in meinem Blogbeitrag:👉 Shelly Scripting – JavaScript-Grundlagen fĂŒr Einsteiger: Variablen, Bedingungen & Logik verstehen đŸŽ„ ZusĂ€tzlich gibt’s auf meinem YouTube-Kanal eine eigene Playlist, in der ich alle Themen Schritt fĂŒr Schritt in einzelnen Videos erklĂ€re. Was ist ein Array? Ein Array ist eine geordnete Sammlung von Werten, die unter einem gemeinsamen Namen gespeichert werden. Man kann sich ein Array wie eine Liste oder ein Regal mit nummerierten FĂ€chern vorstellen – in jedem Fach liegt ein Wert. Diese Werte können zum Beispiel Zahlen oder Zeichenketten sein. Wichtig:Die ZĂ€hlung (der sogenannte Index) beginnt bei 0, nicht bei 1! Das bedeutet: - Das erste Element eines Arrays hat den Index 0 - Das zweite Element den Index 1 - Und so weiter 
 Beispiel: GemĂŒse-Array let gemuese = ; In diesem Array haben wir vier GemĂŒsesorten gespeichert. Die Zuordnung sieht so aus: IndexWert0"Tomate"1"Gurke"2"Paprika"3"Karotte" Wenn du z. B. auf das erste Element zugreifen möchtest, schreibst du: print(gemuese); // Ausgabe: Tomate Und so greifst du auf das letzte Element zu: print(gemuese); // Ausgabe: Karotte Shelly Scripting - Arrays - Ausgabe von Werten aus dem Array Zugriff auf nicht vorhandene Elemente Wenn du in einem Array einen Index auswĂ€hlst, fĂŒr den kein Wert existiert, bekommst du als Ergebnis den speziellen Wert undefined. Das bedeutet, dass an dieser Stelle nichts gespeichert ist. Schauen wir uns das am Beispiel an: // IDX 0 IDX 1 IDX 2 IDX 3 let gemuese = ; print(gemuese); // Ausgabe: undefined In unserem Array sind nur vier Elemente enthalten, mit den Indizes 0 bis 3. Wenn du versuchst, auf gemuese zuzugreifen, also auf den fĂŒnften Platz, bekommst du undefined, weil dort kein Wert hinterlegt ist. 🔎 Tipp:Vor dem Zugriff kannst du mit einer Bedingung prĂŒfen, ob der Index gĂŒltig ist: if (gemuese !== undefined) { print(gemuese); } else { print("An dieser Stelle gibt es kein GemĂŒse!"); } Shelly Scripting - Arrays - Zugriff auf nicht vorhandenen Index Die LĂ€nge eines Arrays mit length ermitteln Mit der Eigenschaft length kannst du herausfinden, wie viele Elemente sich aktuell in einem Array befinden. let gemuese = ; print("Anzahl der Elemente im Array: "+ gemuese.length); Shelly Scripting - Arrays - ermitteln der Anzahl der Elemente Das bedeutet: Unser gemuese-Array enthĂ€lt vier Elemente.Aber Achtung: Der letzte gĂŒltige Index ist nicht 4, sondern 3, denn die ZĂ€hlung beginnt wie immer bei 0. 👉 Merke:Die length-Eigenschaft gibt dir die Anzahl der Elemente, nicht den höchsten Index. Der höchste Index ist also immer length - 1. Beispiel fĂŒr Zugriff mit length let gemuese = ; let letztesGemuese = gemuese; print(letztesGemuese); // Ausgabe: Karotte So kannst du dynamisch auf das letzte Element zugreifen, egal wie viele Werte im Array gespeichert sind. Array mit einer for-Schleife durchlaufen Eine der hĂ€ufigsten Methoden, um alle Werte eines Arrays zu verarbeiten oder auszugeben, ist die for-Schleife. Sie ermöglicht es dir, nacheinander auf jeden Index des Arrays zuzugreifen. Hier ein Beispiel mit unserem GemĂŒse-Array: let gemuese = ; for (let index = 0; index < gemuese.length; index++) { print(gemuese); } Shelly Scripting - Arrays - Ausgabe der Elemente mit einer ForSchleife 🔍 Was passiert hier? - Die Schleife beginnt bei index = 0 (also dem ersten Element). - Sie lĂ€uft so lange, wie der Index kleiner als gemuese.length ist. - Mit gemuese greifen wir auf das jeweilige Element zu. - Die Funktion print() gibt das Element aus (alternativ in der Konsole: console.log()). 💡 Wichtig:Wir verwenden index < gemuese.length – nicht - Die Methode - Sie ĂŒbergibt jedes Element nacheinander an die anonyme Funktion - Die Funktion wird print(element)); Wann forEach() verwenden? ✅ Vorteile: - Weniger FehleranfĂ€llig (kein manuelles ZĂ€hlen oder Indexvergleich) - Lesbarer und kĂŒrzerer Code - Perfekt fĂŒr einfache Ausgaben oder Operationen auf jedem Element ⚠ Beachte:forEach() ist nicht abbrechbar – ein break oder return beendet nicht die gesamte Schleife wie bei for. FĂŒr FĂ€lle mit Abbruchbedingung bleibt for oft die bessere Wahl. Mehrdimensionale Arrays – Strukturen im Array Mit einem mehrdimensionalen Array kannst du komplexere Datenstrukturen abbilden. Statt nur einer Liste mit Werten speicherst du darin Arrays innerhalb von Arrays – Ă€hnlich wie bei einer Tabelle oder Matrix. Das eignet sich besonders gut, wenn du Daten gruppieren möchtest – z. B. mehrere RĂ€ume in einer Wohnung, jeweils mit verschiedenen smarten GerĂ€ten. let wohnung = , , ], , , ] ]; for (let i = 0; i < wohnung.length; i++) { print("Raum: " + wohnung); for (let j = 1; j < wohnung.length; j++) { let gruppe = wohnung; print(" Gruppe: " + gruppe); for (let k = 1; k < gruppe.length; k++) { print(" GerĂ€t: " + gruppe); } } } Hinweis: Da die Console lediglich die letzten 10 EintrĂ€ge anzeigt, habe ich hier zu jsfiddle.net gewechselt. ZusĂ€tzlich habe ich fĂŒr die kompatibilitĂ€t die Funktion print implementiert, somit kann man den Code 1:1 ĂŒbernehmen. Shelly Scripting - Arrays - Mehrdimensionale Arrays - Ausgabe Werte in einem Array ersetzen Ein Array ist verĂ€nderbar – du kannst also einzelne Werte gezielt austauschen, indem du einen neuen Wert an einer bestimmten Stelle (Index) zuweist. Beispiel: let gemuese = ; gemuese = "Kohlrabi"; âžĄïž Was passiert hier?Das Element mit dem Index 2 (also der dritte Eintrag: "Paprika") wird durch "Kohlrabi" ersetzt. Shelly Scripting - Arrays - Ersetzen von Elementen 💡 So kannst du gezielt Werte anpassen – etwa, wenn sich ein Sensorwert Ă€ndert oder ein GerĂ€t ausgetauscht wurde. Werte per Index hinzufĂŒgen Wie gezeigt, kannst du mit gemuese = "Kohlrabi" einen bestehenden Eintrag ersetzen.Doch was passiert, wenn du einen Index verwendest, der noch nicht existiert? Beispiel: let gemuese = ; gemuese = "Brokkoli"; âžĄïž Ergebnis:Der Eintrag "Brokkoli" wird an Position 4 eingefĂŒgt – das Array wĂ€chst automatisch. Shelly Scripting - Arrays - HinzufĂŒgen von Elementen ⚠ Achtung:Wenn du z. B. gemuese = "Spinat" schreibst, aber Index 5 leer lĂ€sst, wird dieser automatisch mit undefined gefĂŒllt: gemuese = "Spinat"; print(gemuese); Shelly Scripting - Arrays - HinzufĂŒgen von Elementen Index ĂŒbersprungen 💡 Daher sollte man bei nicht fortlaufender Indexvergabe aufpassen, um unerwartete LĂŒcken im Array zu vermeiden. Ausblick: So geht’s weiter In diesem Beitrag hast du gelernt, wie Arrays aufgebaut sind, wie du auf ihre Elemente zugreifst und wie du sie mit Schleifen durchlĂ€ufst. Damit hast du die wichtigsten Grundlagen in der Hand, um mit Arrays in Shelly Scripting oder JavaScript allgemein zu arbeiten. Im nĂ€chsten Teil zeige ich dir, wie du Arrays aktiv bearbeitest:đŸ”č Elemente hinzufĂŒgen (push, unshift)đŸ”č Werte entfernen (pop, shift)đŸ”č Inhalte gezielt Ă€ndern oder löschen mit splice() So kannst du deine Daten nicht nur lesen, sondern auch flexibel anpassen – perfekt fĂŒr dynamische Smarthome-Szenarien. Bleib dran! Read the full article
0 notes
draegerit · 4 months ago
Text
Shelly Scripting #6: EventHandler und StatusHandler fĂŒr sofortige Reaktionen nutzen
Tumblr media
Mit Shelly Scripting, EventHandler und StatusHandler lassen sich smarte Automatisierungen besonders effizient umsetzen. In diesem Beitrag zeige ich dir, wie du mit einem Shelly 2PM zwei Lampen so steuerst, dass sie wechselseitig mit einem Serienschalter ein- und ausgeschaltet werden. Zwar könnte man diese Logik auch ĂŒber eine Szene in der Shelly App realisieren, doch mit einem kleinen Shelly Script benötigen wir dafĂŒr nur wenige Zeilen Code. Der große Vorteil: Da wir direkt auf StatusĂ€nderungen mit dem EventHandler reagieren, erfolgt die Schaltung ohne Verzögerung und ganz ohne Timer – die Lampen wechseln sofort ihren Zustand, sobald der Schalter betĂ€tigt wird. https://youtu.be/CcOWr91YTxI Im letzten Beitrag Shelly 2PM Gen2: Smarte Steuerung und Verbrauchsmessung fĂŒr wenig Geld habe ich den Shelly 2PM Gen2 bereits ausfĂŒhrlich vorgestellt. Falls du mehr ĂŒber seine Funktionen, Einrichtung und Einsatzmöglichkeiten erfahren möchtest, schau gerne dort vorbei!
Unterschied zwischen einem EventHandler und einem StatusHandler in Shelly Scripting
Beim Shelly Scripting gibt es zwei zentrale Mechanismen, um auf Änderungen zu reagieren: - EventHandler (Shelly.addEventHandler) - StatusHandler (Shelly.addStatusHandler) Obwohl sie auf den ersten Blick Ă€hnlich erscheinen, gibt es wesentliche Unterschiede in ihrer Funktionsweise und Anwendung.
EventHandler – Reaktion auf spezifische Ereignisse
Ein EventHandler (Shelly.addEventHandler) wird ausgelöst, wenn ein bestimmtes Ereignis am Shelly-GerĂ€t auftritt. Merkmale: - Wird nur bei einer Aktion oder einem Event ausgelöst (z. B. Taster gedrĂŒckt, MQTT-Nachricht empfangen). - Reagiert nur auf relevante Events und verarbeitet keine allgemeinen StatusĂ€nderungen. - Besonders nĂŒtzlich fĂŒr Schalter-/Taster-Steuerungen, MQTT-Kommunikation oder externe Trigger. Beispiel: Ein EventHandler erkennt, wenn ein Schalter getoggelt wird (event.info.event === "toggle") und schaltet dann ein anderes Relais aus. Shelly.addEventHandler(function (event) { print(event); // Gibt das komplette Event-Objekt aus (nĂŒtzlich fĂŒrs Debugging) if (event.id === 0 && event.info.component === "switch:0" && event.info.event === "toggle") { print("Schalter links wurde betĂ€tigt!"); } if (event.id === 1 && event.info.component === "switch:1" && event.info.event === "toggle") { print("Schalter rechts wurde betĂ€tigt!"); } }); Dieser Code erkennt, wenn ein Schalter (Switch 0 oder Switch 1) umgelegt wurde und gibt eine Debug-Nachricht aus.
StatusHandler – Reaktion auf StatusĂ€nderungen
Ein StatusHandler (Shelly.addStatusHandler) wird immer dann ausgelöst, wenn sich ein Statuswert eines GerĂ€ts Ă€ndert – unabhĂ€ngig davon, was die Änderung verursacht hat. Merkmale: - Wird bei jeder StatusĂ€nderung aufgerufen (z. B. Relais AN/AUS, Temperaturwerte, WLAN-SignalstĂ€rke). - Kann ausgelöst werden durch Benutzeraktionen, Skripte oder externe Steuerungen (z. B. MQTT oder REST-API). - Ideal fĂŒr Überwachung, Logging oder automatisches Reagieren auf ZustandsĂ€nderungen. Beispiel: Ein StatusHandler erkennt, wenn ein Relais ein- oder ausgeschaltet wurde und gibt den neuen Zustand aus. Shelly.addStatusHandler(function (status) { if (status.name === "switch" && status.id === 0 && status.delta.output) { print("Relais 0 wurde geschaltet! Neuer Zustand: " + status.delta.output); } }); Dieser Code erkennt, wenn Relais 0 geschaltet wurde (egal ob durch ein Skript, eine Szene oder manuell) und gibt den neuen Zustand aus.
Vergleich: Wann nutzt man welchen Handler?
EigenschaftEventHandler (Shelly.addEventHandler)StatusHandler (Shelly.addStatusHandler)Wann wird er ausgelöst?Nur bei spezifischen Ereignissen (z. B. Tasterdruck, MQTT-Nachricht)Bei jeder StatusĂ€nderung (z. B. Relais AN/AUS, TemperaturĂ€nderung)Reaktion auf...Benutzeraktionen, externe Trigger, MQTTJede StatusĂ€nderung, egal wodurch verursachtTypische AnwendungSchalter-Toggles, Bewegungssensoren, EreignissteuerungÜberwachung von Relais, Sensorwerten, WLAN-VerbindungWird ausgelöst durch...Aktionen wie Tastendruck, MQTT-Nachrichten, API-BefehleJede Änderung eines Statuswerts, auch durch andere Skripte oder BenutzerBeispielReagieren, wenn ein Taster gedrĂŒckt wurdePrĂŒfen, ob das Relais geschaltet wurde
Wann solltest du welchen Handler verwenden?
Verwende den EventHandler (Shelly.addEventHandler), wenn du - eine spezifische Aktion oder einen Trigger auswerten möchtest (z. B. Schalter, MQTT) - nur auf bestimmte Benutzeraktionen reagieren möchtest - ein Skript fĂŒr schnelle, einmalige Reaktionen auf Events brauchst Verwende den StatusHandler (Shelly.addStatusHandler), wenn du - jede StatusĂ€nderung mitverfolgen willst, egal wodurch sie ausgelöst wurde - Logik abhĂ€ngig vom GerĂ€testatus implementieren möchtest - eine kontinuierliche Überwachung (z. B. Temperatur, WLAN-Status) brauchst
EventHandler / StatusHandler am Shelly 2PM mit Lampen
Um den Shelly 2PM noch flexibler zu steuern, kannst du EventHandler und StatusHandler nutzen, um direkt auf SchalterbetĂ€tigungen oder StatusĂ€nderungen zu reagieren. Anstatt regelmĂ€ĂŸig mit einem Timer den Zustand abzufragen, ermöglichen diese Methoden eine sofortige Reaktion in Echtzeit.
Tumblr media
Schaltung - Shelly 2PM Gen2 mit Schalter und Lampen In diesem Abschnitt zeige ich dir, wie du mit einem EventHandler direkt auf das Umschalten eines Schalters reagieren kannst und wie du mit einem StatusHandler ĂŒberwachst, ob ein Relais geschaltet wurde – ideal fĂŒr eine intelligente Lampensteuerung mit Shelly Scripting. Script zum wechselseitigen Schalten mit StatusHandler // FĂŒgt einen Status-Handler hinzu, der auf Änderungen im Shelly-GerĂ€t reagiert. // Dieser Handler wird immer dann ausgelöst, wenn sich der Status eines GerĂ€ts verĂ€ndert. Shelly.addStatusHandler(function (status) { // ÜberprĂŒfen, ob das Ereignis vom Switch-Modul stammt und ob es sich um das Relais mit der ID 0 handelt. // Zudem wird geprĂŒft, ob sich der `output`-Status (An/Aus) verĂ€ndert hat. if (status.name === "switch" && status.id === 0 && status.delta.output) { // Definieren der Parameter fĂŒr den Schaltbefehl: // - `id:1` -> Steuert das Relais mit der ID 1 // - `on:false` -> Das Relais 1 wird ausgeschaltet let params = {id:1, on:false}; // Senden des Befehls an das Shelly-GerĂ€t, um Relais 1 auszuschalten. Shelly.call("Switch.Set", params); } // Falls das Ereignis vom Relais mit der ID 1 stammt und sich der `output`-Status verĂ€ndert hat: else if (status.name === "switch" && status.id === 1 && status.delta.output) { // Definieren der Parameter fĂŒr den Schaltbefehl: // - `id:0` -> Steuert das Relais mit der ID 0 // - `on:false` -> Das Relais 0 wird ausgeschaltet let params = {id:0, on:false}; // Senden des Befehls an das Shelly-GerĂ€t, um Relais 0 auszuschalten. Shelly.call("Switch.Set", params); } }); Script zum wechselseitigen Schalten zweier Lampen mit EventHandler // FĂŒgt einen Event-Handler hinzu, der auf Ereignisse am Shelly reagiert. // Diese Funktion wird aufgerufen, sobald eine Aktion (z. B. SchalterbetĂ€tigung) erkannt wird. Shelly.addEventHandler(function (event) { // Gibt das gesamte Event-Objekt im Debug-Log aus. // Dies hilft beim Debugging, um zu sehen, welche Daten das Event enthĂ€lt. print(event); // PrĂŒfen, ob das Ereignis vom Schalter 0 kommt und ob es sich um eine "toggle"-Aktion handelt. if (event.id === 0 && event.info.component === "switch:0" && event.info.event === "toggle") { // Definiert die Parameter fĂŒr den Schaltbefehl: // - `id:1` -> Steuert das Relais mit der ID 1 (zweites Relais). // - `on:false` -> Das Relais 1 wird ausgeschaltet. let params = {id:1, on:false}; // Senden des Befehls an das Shelly-GerĂ€t, um Relais 1 auszuschalten. Shelly.call("Switch.Set", params); } // PrĂŒfen, ob das Ereignis vom Schalter 1 kommt und ob es sich um eine "toggle"-Aktion handelt. if (event.id === 1 && event.info.component === "switch:1" && event.info.event === "toggle") { // Definiert die Parameter fĂŒr den Schaltbefehl: // - `id:0` -> Steuert das Relais mit der ID 0 (erstes Relais). // - `on:false` -> Das Relais 0 wird ausgeschaltet. let params = {id:0, on:false}; // Senden des Befehls an das Shelly-GerĂ€t, um Relais 0 auszuschalten. Shelly.call("Switch.Set", params); } });
Reagieren auf Sensoren mit dem StatusHandler am Shelly AddOn & Shelly 2PM
Mit dem StatusHandler kannst du nicht nur Relais ĂŒberwachen, sondern auch auf Sensordaten in Echtzeit reagieren. In diesem Abschnitt zeige ich dir, wie du einen LDR (Lichtsensor) mit dem Shelly AddOn nutzt, um eine Lampe abhĂ€ngig von der Umgebungshelligkeit automatisch ein- oder auszuschalten.
Tumblr media
Schaltung - Shelly 2PM Gen2 + AddOn + LDR + Schalter + Lampen Das Prinzip funktioniert nicht nur mit einem LDR, sondern auch mit anderen Sensoren wie PIR-Bewegungssensoren, Abstandssensoren oder Temperatursensoren. Durch den StatusHandler erkennt das Shelly Script sofort Änderungen der Sensordaten und kann entsprechend reagieren – ohne Verzögerung und ohne stĂ€ndige Abfragen durch einen Timer.
Tumblr media
Shelly AddOn mit analogen & digitalen Sensoren Wenn sich der LDR (Lichtsensor) am Shelly AddOn Ă€ndert, sendet der Shelly eine StatusĂ€nderung in JSON-Format, die folgendermaßen aufgebaut ist: { "component": "input:100", 12:06:58 "name": "input", 12:06:58 "id": 100, 12:06:58 "delta": { "id": 100, "percent": 20.31 } 12:06:58 } ErklĂ€rung der JSON-Daten: - "component": "input:100" → StatusĂ€nderung kommt vom Eingangssensor (LDR an Port 100). - "delta.percent": 20.31 → Neuer Helligkeitswert in Prozent (hier 20,31 %). - "id": 100 → Die ID des Sensors, ĂŒber die er angesprochen wird. Daraus können wir folgendes kleines Script ableiten mit welchem wir bei Änderung der Helligkeit eine Lampe schalten können. // Definiere Konstanten fĂŒr die Schwellwerte des Ein- und Ausschaltens const VAL_AUS = 15; // Schwellenwert, oberhalb dessen das Licht ausgeschaltet wird const VAL_AN = 20; // Schwellenwert, unterhalb dessen das Licht eingeschaltet wird // Initialisiere Objekte zur Steuerung der Lampen let paramsLampeLinks = {id: 0, on: false}; // Lampe Links mit ID 0 let paramsLampeRechts = {id: 1, on: false}; // Lampe Rechts mit ID 1 // FĂŒge einen Status-Handler fĂŒr Ereignisse des Shelly-GerĂ€ts hinzu Shelly.addStatusHandler(function (status) { print(status); // Debugging: Gibt den Status im Log aus // PrĂŒfe, ob das Ereignis von "input:100" stammt und die ID 100 ist if (status.component === "input:100" && status.id === 100) { // ÜberprĂŒfe den Helligkeitswert und steuere die Lampen entsprechend if (status.delta.percent // Wenn der Wert unter den Einschalt-Schwellenwert fĂ€llt, schalte beide Lampen ein paramsLampeLinks.on = true; paramsLampeRechts.on = true; print("Lampen AN"); } else if (status.delta.percent > VAL_AUS) { // Wenn der Wert ĂŒber den Ausschalt-Schwellenwert steigt, schalte beide Lampen aus paramsLampeLinks.on = false; paramsLampeRechts.on = false; print("Lampen AUS"); } // Sende den neuen Status an das Shelly-GerĂ€t, um die Lampen zu steuern Shelly.call("Switch.Set", paramsLampeLinks); Shelly.call("Switch.Set", paramsLampeRechts); } }); Fazit: Effiziente Automatisierung mit EventHandler und StatusHandler Mit dem EventHandler kannst du schnell und zuverlĂ€ssig auf Ereignisse am Shelly reagieren, ohne dabei einen Timer im Hintergrund laufen zu lassen. Das spart nicht nur Ressourcen, sondern macht den Code auch einfacher und ĂŒbersichtlicher. Dank dieser Methode erfolgt die Reaktion in Echtzeit, was besonders bei SchalterbetĂ€tigungen oder anderen direkten Eingaben von Vorteil ist. Auch der StatusHandler hat enormes Potenzial, insbesondere fĂŒr Automatisierungen mit Sensoren am Shelly. In zukĂŒnftigen Projekten lassen sich damit noch viele spannende Anwendungen umsetzen. 🔜 Im nĂ€chsten Beitrag widme ich mich dem Shelly i4 DC in Kombination mit Reed-Kontakten – sei gespannt! 🚀 Read the full article
0 notes
draegerit · 4 months ago
Text
Shelly Scripting #5: Intelligente Relaissteuerung bei Netzwerkausfall
Tumblr media
Ein stabiles WLAN ist essenziell fĂŒr viele smarte Automatisierungen, doch was passiert, wenn das Signal abreißt? In diesem Beitrag zeige ich dir, wie du mit Shelly Scripting die SignalstĂ€rke deines WLANs ĂŒberwachen und bei einem Verbindungsverlust automatisch ein Relais deaktivieren kannst. https://youtu.be/TztC-NnrAZU Diese Funktion ist besonders nĂŒtzlich fĂŒr sicherheitskritische Anwendungen oder GerĂ€te, die nicht unbeaufsichtigt weiterlaufen sollen, wenn die Netzwerkverbindung unterbrochen wird. Mit einem einfachen Script kannst du sicherstellen, dass dein Shelly eigenstĂ€ndig auf WLAN-AusfĂ€lle reagiert und sich entsprechend verhĂ€lt – ganz ohne zusĂ€tzliche Hardware oder manuelles Eingreifen.
Einsatzmöglichkeiten fĂŒr die intelligente Relaissteuerung bei Netzwerkausfall
Ein Shelly Script zur automatischen Deaktivierung eines Relais bei WLAN-Verlust kann in verschiedenen Szenarien sinnvoll sein. Hier sind vier praxisnahe Beispiele: - Sicherheitsabschaltung fĂŒr smarte HeizgerĂ€te - Falls ein WLAN-gesteuertes HeizgerĂ€t oder eine elektrische Heizung ĂŒber Shelly geschaltet wird, könnte ein Verbindungsverlust bedeuten, dass die Steuerung nicht mehr erreichbar ist. Das Script kann dafĂŒr sorgen, dass sich das Relais bei einem WLAN-Ausfall automatisch abschaltet, um eine unkontrollierte ErwĂ€rmung zu verhindern. - Pumpensteuerung in der Hausautomation - Viele smarte Garten- oder Heizkreispumpen werden ĂŒber WLAN gesteuert. Falls das Netzwerk ausfĂ€llt, könnte eine Pumpe dauerhaft weiterlaufen, was unnötige Energieverschwendung oder sogar SchĂ€den verursachen kann. Das Script stellt sicher, dass die Pumpe nur dann aktiv bleibt, wenn eine stabile Verbindung besteht. - Notabschaltung fĂŒr 3D-Drucker oder Maschinen - Ein ĂŒber Shelly gesteuerter 3D-Drucker oder eine CNC-Maschine könnte im Falle eines Netzwerkausfalls unbeaufsichtigt weiterlaufen. Das Script kann in solchen FĂ€llen eine Sicherheitsabschaltung einleiten, um Fehlproduktionen oder sogar BrĂ€nde zu vermeiden. - Licht- oder Alarmsteuerung bei NetzwerkausfĂ€llen - Smarte Lichter oder Alarmsysteme, die auf Netzwerkinformationen oder Steuerbefehle angewiesen sind, könnten im Falle eines WLAN-Abbruchs in einem falschen Zustand bleiben (z. B. Alarm dauerhaft aktiv). Mit dem Shelly Script kann eine definierte Abschaltlogik umgesetzt werden, um Fehlalarme oder unnötigen Stromverbrauch zu vermeiden. Diese Beispiele zeigen, wie wichtig eine intelligente Reaktion auf NetzwerkausfĂ€lle sein kann, um sowohl Sicherheit als auch Energieeffizienz in einem Smart Home zu gewĂ€hrleisten.
Wenn das WLAN ausfĂ€llt: Der HeizlĂŒfter bleibt unkontrolliert an
Ein kleiner HeizlĂŒfter, der ĂŒber einen Shelly Plug S gesteuert wird, kann effizient fĂŒr eine temperaturabhĂ€ngige Regelung genutzt werden. Die eigentliche Temperaturmessung erfolgt dabei nicht am Plug selbst, sondern ĂŒber einen DS18B20-Sensor, der an einem Shelly Plus 1 mit AddOn angeschlossen ist. Basierend auf den Sensordaten wird der HeizlĂŒfter automatisch ein- oder ausgeschaltet. Doch was passiert, wenn das WLAN-Signal abbricht? Da der Shelly Plug S seine Steuerbefehle ĂŒber das Netzwerk erhĂ€lt, könnte der HeizlĂŒfter eingeschaltet bleiben, selbst wenn die gewĂŒnschte Temperatur lĂ€ngst erreicht wurde. Dies fĂŒhrt zu unnötigem Stromverbrauch und kann im schlimmsten Fall ein Überhitzungsrisiko darstellen. Um dieses Problem zu verhindern, setzen wir ein Shelly Script ein, das regelmĂ€ĂŸig die WLAN-SignalstĂ€rke ĂŒberprĂŒft. Sobald die Verbindung verloren geht oder das Signal zu schwach wird, schaltet das Script das Relais automatisch aus, sodass der HeizlĂŒfter nicht unkontrolliert weiterlĂ€uft.
Schaltungsaufbau: Shelly Plug S & Shelly Plus 1 mit Temperatursensor
Nun werfen wir einen Blick auf den Aufbau der Schaltung. Der Shelly Plug S dient als Schaltaktor fĂŒr den HeizlĂŒfter, wĂ€hrend der Shelly Plus 1 mit AddOn die Temperaturmessung ĂŒbernimmt. Der Temperatursensor DS18B20 ist am AddOn des Shelly Plus 1 angeschlossen und misst die Umgebungstemperatur. Basierend auf diesen Daten wird der HeizlĂŒfter gesteuert.
Tumblr media
Diese Kombination ermöglicht eine flexible und prĂ€zise Temperaturregelung, ist jedoch von einer stabilen WLAN-Verbindung abhĂ€ngig. Im nĂ€chsten Schritt zeige ich, wie wir sicherstellen, dass der HeizlĂŒfter bei einem Netzwerkausfall automatisch deaktiviert wird. Benötigte Ressourcen fĂŒr dieses Projekt FĂŒr den Aufbau der Schaltung habe ich nachfolgende Komponenten verwendet: - einen Shelly Plus 1 Gen2*, - ein Shelly AddOn*, - einen Temperatursensor DS18B20*, - ein Shelly Plug S Gen3*
Tumblr media
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!
Shelly Script – Plug S temperaturgesteuert mit DS18B20
Der Shelly Plus 1 mit AddOn und angeschlossenem DS18B20-Temperatursensor ĂŒbernimmt die Temperaturmessung und steuert den Shelly Plug S entsprechend der erfassten Werte. Sinkt die Temperatur unter einen definierten Grenzwert, wird der Plug S eingeschaltet, um beispielsweise einen HeizlĂŒfter zu aktivieren. Sobald die Temperatur den oberen Grenzwert ĂŒberschreitet, schaltet der Shelly Plus 1 den Plug S wieder aus, um Energie zu sparen und eine Überhitzung zu vermeiden. // Basis-URL fĂŒr den Shelly Plug S, der den HeizlĂŒfter steuert. // Die IP-Adresse muss dem Shelly Plug S in deinem Netzwerk entsprechen. // Der Parameter "turn=" wird spĂ€ter mit "on" oder "off" ergĂ€nzt. let urlHeater = "http://192.168.178.91/relay/0?turn="; // Temperaturgrenzen fĂŒr das Ein- und Ausschalten des HeizlĂŒfters. // Sobald die Temperatur unter HEATER_ON_TEMP fĂ€llt, wird der HeizlĂŒfter eingeschaltet. // Sobald die Temperatur ĂŒber HEATER_OFF_TEMP steigt, wird der HeizlĂŒfter ausgeschaltet. const let HEATER_ON_TEMP = 17; // HeizlĂŒfter einschalten bei weniger als 17°C. const let HEATER_OFF_TEMP = 20; // HeizlĂŒfter ausschalten bei mehr als 20°C. // Variable zur Speicherung des aktuellen HeizlĂŒfter-Zustands. // Sie verhindert unnötige HTTP-Anfragen, wenn der Status unverĂ€ndert bleibt. let heaterON = false; // HTTP-Parameter fĂŒr die Anfrage an den Shelly Plug S. let parameter = { method: "GET", // HTTP-Methode: GET wird genutzt, um den Schaltbefehl zu senden. url: "", // Die URL wird dynamisch gesetzt, abhĂ€ngig davon, ob der HeizlĂŒfter an- oder ausgeschaltet wird. headers: { "Content-Type": "application/json" } // Optionaler Header fĂŒr den Request. }; /** * Funktion zur ÜberprĂŒfung der Raumtemperatur und Steuerung des HeizlĂŒfters. */ function handleHeater() { // Abrufen der aktuellen Temperatur vom DS18B20-Sensor am Shelly Plus 1 mit AddOn. let temperaturJson = Shelly.getComponentStatus("temperature:100"); print("Raumtemperatur ist: " + temperaturJson.tC + "°C"); // PrĂŒfen, ob die Temperatur unterhalb der Einschaltschwelle liegt. if (temperaturJson.tC print("Temperatur kleiner als " + HEATER_ON_TEMP + "°C. HeizlĂŒfter wird aktiviert!"); heaterON = true; // HeizlĂŒfter als eingeschaltet markieren. callUrl(); // HTTP-Anfrage zum Einschalten senden. } // PrĂŒfen, ob die Temperatur oberhalb der Ausschaltschwelle liegt. else if (temperaturJson.tC > HEATER_OFF_TEMP) { print("Temperatur grĂ¶ĂŸer als " + HEATER_OFF_TEMP + "°C. HeizlĂŒfter wird deaktiviert!"); heaterON = false; // HeizlĂŒfter als ausgeschaltet markieren. callUrl(); // HTTP-Anfrage zum Ausschalten senden. } } /** * Funktion zum Senden des HTTP-Requests an den Shelly Plug S, um das Relais zu schalten. */ function callUrl() { // Dynamisches Setzen der URL je nach aktuellem Status des HeizlĂŒfters. parameter.url = urlHeater + (heaterON ? "on" : "off"); print(parameter.url); // Debugging: Die generierte URL ausgeben. // HTTP-Request an den Shelly Plug S senden. Shelly.call( "HTTP.Request", parameter, function(result, error_code, error_message) { if (error_code != 0) { print("Fehler beim Senden der Daten: " + error_message); // Fehlerbehandlung. } else { print("Daten erfolgreich gesendet."); // Erfolgreiche Anfrage bestĂ€tigen. } } ); } // Einrichten eines Timers, der alle 2500 Millisekunden (2,5 Sekunden) die Temperatur prĂŒft. // Falls eine Änderung festgestellt wird, wird der HeizlĂŒfter entsprechend ein- oder ausgeschaltet. Timer.set(2500, true, handleHeater);
Shelly Script – Plug S abschalten, wenn das WLAN ausfĂ€llt
Es gibt mehrere Möglichkeiten, um festzustellen, ob die WLAN-Verbindung unterbrochen wurde. Zwei der wichtigsten Indikatoren sind: 1ïžâƒŁ Der RSSI-Wert – Dieser gibt die SignalstĂ€rke der Verbindung in dBm an. Ein stark negativer Wert (z. B. unter -85 dBm) kann auf eine instabile Verbindung oder einen bevorstehenden Abbruch hindeuten. 2ïžâƒŁ Die IP-Adresse – Ein Shelly erhĂ€lt normalerweise eine dynamische IP-Adresse vom Router per DHCP. Ist keine IP-Adresse zugewiesen, bedeutet dies, dass das GerĂ€t nicht mehr mit dem Netzwerk verbunden ist. ➡ Der einfachste Weg, um einen WLAN-Ausfall zu erkennen, ist zu ĂŒberprĂŒfen, ob dem Shelly aktuell eine IP-Adresse zugewiesen wurde. Dies funktioniert jedoch nur, wenn der Shelly seine IP dynamisch vom Router erhĂ€lt. Falls eine statische IP-Adresse konfiguriert wurde, bleibt diese auch bei einem WLAN-Abbruch bestehen, was zu einer falschen Erkennung fĂŒhren kann. // Ein Timer wird gesetzt, der alle 2000 Millisekunden (2 Sekunden) ausgefĂŒhrt wird. Timer.set(2000, true, function() { // Abrufen des aktuellen WLAN-Status vom Shelly-GerĂ€t. let wifiStatus = Shelly.getComponentStatus("wifi"); // ÜberprĂŒfen, ob der Shelly noch eine gĂŒltige IP-Adresse im WLAN besitzt. // Falls `sta_ip` nicht vorhanden oder leer ist, bedeutet das, dass der Shelly keine Verbindung mehr zum WLAN hat. if (!wifiStatus.sta_ip) { // Definieren der Parameter zum Ausschalten des Relais. let shellyParameter = { id: 0, // Das Relais mit der ID 0 wird angesprochen. on: false // Das Relais wird ausgeschaltet. }; // Senden des Befehls an den Shelly, um das Relais zu deaktivieren. Shelly.call("Switch.Set", shellyParameter); } });
Tumblr media Tumblr media Tumblr media
Fazit: Mehr Sicherheit und Effizienz mit Shelly Scripting fĂŒr die Relaissteuerung Mit Shelly Scripting lĂ€sst sich die Relaissteuerung intelligent erweitern, um auf NetzwerkausfĂ€lle zu reagieren. In diesem Beitrag habe ich gezeigt, wie du mithilfe eines einfachen Scripts dein Shelly Plug S automatisch abschalten kannst, wenn das WLAN ausfĂ€llt. So verhinderst du, dass Verbraucher wie ein HeizlĂŒfter unnötig weiterlaufen, falls keine Verbindung mehr besteht. Diese Methode verbessert nicht nur die Sicherheit, sondern hilft auch, Energie zu sparen. Shelly Scripting bietet damit eine leistungsstarke Möglichkeit, individuelle Automatisierungen zu erstellen, die weit ĂŒber die Standardfunktionen hinausgehen. 🔜 Im nĂ€chsten Beitrag zeige ich dir weitere spannende Automatisierungen mit Shelly – bleib dran! 🚀 Read the full article
0 notes
draegerit · 5 months ago
Text
Shelly Scripting #3: Stromverbrauch und Sensordaten in der Cloud visualisieren
Tumblr media
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. https://youtu.be/SXejhvuD2zQ 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.
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.
Tumblr media
Shelly 1PM Gen3
Tumblr media
Shelly 1PM Mini Gen3
Tumblr media
Shelly 1 Plus
Tumblr media
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*.
Tumblr media
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.
Tumblr media
Shelly Plus Addon
Tumblr media
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.
Tumblr media
Shelly AddOn mit DHT22 Sensor
Tumblr media
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. https://youtu.be/-6hS4BTGP_0
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)
Tumblr media
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. https://youtu.be/r3-TEb3K_xM
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
Tumblr media
ZugrifssbeschrÀnkungen des kostenfreien Accounts Der kostenfreie Account kann pro Tag nur 8219 Requests empfangen.
Tumblr media
Wenn du dich bei Thinkspeak angemeldet und noch keinen Channel eingerichtet hast sollte dein Dashboard wiefolgt aussehen.
Tumblr media
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.
Tumblr media
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!
Tumblr media
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.
Tumblr media
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.
Tumblr media
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. Read the full article
0 notes
draegerit · 5 months ago
Text
Shelly Scripting #2: Sensordaten in der Cloud speichern und abrufen
Tumblr media
In diesem Beitrag zeige ich dir, wie du Sensordaten deiner Shelly-GerĂ€te mit Shelly Scripting erfassen und in der Cloud speichern kannst. Dazu nutzen wir JSONBin.io – eine einfache und kostenlose Plattform, um JSON-basierte Daten zu speichern und zu verwalten. https://youtu.be/wU5eKLY0lyg Ich werde dir in diesem Beitrag zeigen, wie du die Messdaten deines Shelly 1PM Mini erfassen und in die Cloud senden kannst. Dabei lernst du, wie Spannung, Stromverbrauch und Leistungsaufnahme erfasst, strukturiert und gespeichert werden. ZusĂ€tzlich erklĂ€re ich dir, wie du die gespeicherten Daten aus der Cloud abrufen kannst – sei es, um sie anzuzeigen, weiterzuverarbeiten oder in Automatisierungen einzusetzen. Mit diesen Schritten kannst du die Sensordaten deines Shelly-GerĂ€ts nicht nur lokal nutzen, sondern auch fĂŒr Langzeitanalysen oder die Integration in externe Systeme verfĂŒgbar machen. So erschließt du das volle Potenzial von Shelly Scripting und Cloud-Diensten!
Tumblr media
Shellys der Generation 2 & 3
Wie ist meine Herangehensweise?
In diesem Beitrag zeige ich dir, wie du Sensordaten von einem Shelly-GerĂ€t erfassen und in der Cloud speichern kannst. Mein Ansatz ist dabei einfach und effizient: - Daten erfassen: Die Messdaten werden direkt vom Shelly ausgelesen. - JSON-Format verwenden: Die Daten werden in einem strukturierten JSON-Objekt organisiert. - Cloud-Speicherung: Dieses JSON wird in der Cloud gespeichert und kann dort auch gelesen, aktualisiert oder gelöscht werden. Um die Daten in der Cloud abzulegen, verwende ich den Dienst jsonbin.io, der sich durch eine einfache Handhabung und gute API-UnterstĂŒtzung auszeichnet. Besonders praktisch ist, dass der kostenfreie Plan von jsonbin.io bereits fĂŒr viele AnwendungsfĂ€lle ausreicht. FĂŒr dieses Beispiel werde ich die Sensordaten pro Minute aktualisieren, was problemlos innerhalb der 10.000 Zugriffe pro Tag liegt, die der kostenfreie Plan erlaubt. Im nĂ€chsten Abschnitt erlĂ€utere ich, wie jsonbin.io funktioniert und wie du es einrichtest, um deine Sensordaten einfach und sicher zu verwalten.
Einen Account bei JSONBin.io anlegen
Bevor wir Sensordaten in der Cloud speichern können, benötigen wir einen Account bei JSONBin.io. Dieser Dienst ermöglicht es uns, JSON-basierte Daten sicher und einfach zu speichern.
Tumblr media
Login - jsonbin.io Registrierungsoptionen JSONBin.io bietet dir zwei Möglichkeiten, ein Konto anzulegen: - Klassische Registrierung mit Benutzername und Passwort: - Du gibst eine gĂŒltige E-Mail-Adresse ein und erstellst ein sicheres Passwort. - Nach der Registrierung erhĂ€ltst du eine BestĂ€tigungs-E-Mail, die du bestĂ€tigen musst, um den Account zu aktivieren. - Schnelle Registrierung ĂŒber Drittanbieter-Konten: - Du kannst dich direkt mit einem bestehenden Konto bei Google, GitHub, Facebook oder X (ehemals Twitter) anmelden. - Diese Methode ist besonders einfach, da keine weiteren Passworteingaben erforderlich sind. Mein Vorgehen Ich habe mich fĂŒr die Registrierung ĂŒber mein Google-Konto entschieden, da diese Methode schnell und unkompliziert ist: - Gehe auf die Startseite von JSONBin.io und klicke auf "Login". - WĂ€hle das Logo von Google. - Melde dich mit deinem Google-Konto an und autorisiere die Verbindung. - Nach der Anmeldung wirst du direkt zu deinem JSONBin.io-Dashboard weitergeleitet. Warum JSONBin.io? JSONBin.io ist ideal fĂŒr Shelly Scripting, da es: - Eine einfache API fĂŒr das Speichern und Abrufen von Daten bietet. - Kostenlos fĂŒr grundlegende Anwendungen genutzt werden kann. - Keine komplexen Server-Konfigurationen erfordert. Im nĂ€chsten Schritt zeige ich, wie wir API-Zugriff auf JSONBin.io einrichten und vorbereiten, um Messdaten deiner Shelly-GerĂ€te speichern zu können. JSONBin.io: Preiskategorien und der kostenlose Plan "FREE" JSONBin.io bietet drei verschiedene Preiskategorien, die sich in ihren Funktionen und Limits unterscheiden:
Tumblr media
Übersicht - PlĂ€ne & Preise von jsonbin.io FREE Kostenloser Plan, der 10000 Anfragen pro Tag erlaubt. Perfekt fĂŒr kleinere Anwendungen oder Experimente wie in diesem Beitrag. Pro Plan FĂŒr Nutzer mit höheren Anforderungen, die mehr Anfragen (100 tausend pro Tag) und zusĂ€tzliche Funktionen benötigen. Additional Requests Zusatzoptionen, um mehr Anfragen (bis zu 2 Millionen Anfragen pro Tag) als im gewĂ€hlten Plan erlaubt zu nutzen. API-Zugriff mit dem X-Master-KEY einrichten Um JSONBin.io fĂŒr das Speichern und Abrufen von Daten zu nutzen, benötigt jede Anfrage einen speziellen X-Master-KEY. Dieser SchlĂŒssel authentifiziert dich gegenĂŒber dem Service und stellt sicher, dass nur autorisierte Benutzer Zugriff auf die Daten haben. X-Master-KEY abrufen - Melde dich in deinem JSONBin.io-Konto an. - Navigiere im Dashboard zum Menïżœïżœpunkt "API KEYS". - Dort findest du deinen aktuellen X-Master-KEY, der fĂŒr die Authentifizierung verwendet wird. - Falls notwendig, kannst du ĂŒber denselben Bereich jederzeit einen neuen SchlĂŒssel generieren. Wichtig: - Behandle deinen X-Master-KEY wie ein Passwort: Gib ihn niemals weiter und teile ihn nicht öffentlich (z. B. in öffentlichen Repositories). - Ändere den SchlĂŒssel regelmĂ€ĂŸig, insbesondere wenn du vermutest, dass er kompromittiert wurde. Im nĂ€chsten Schritt erlĂ€utere ich dir, wie du via Postman einen Request an jsonbin.io absendest und dort Daten speicherst und abrufst. Dadurch wird erstmal ohne Code möglich zu ermitteln, welche Daten wir benötigen und wie die Anfrage aufgebaut werden muss.
JSONBin.io mit Postman nutzen: Daten einfĂŒgen und abrufen
Mit Postman kannst du einfach testen, wie Daten an JSONBin.io gesendet und wieder abgerufen werden. Hier erklĂ€re ich Schritt fĂŒr Schritt, wie du einen neuen Eintrag in einer JSONBin-Collection erstellst und diesen spĂ€ter abrufst. Neuen Eintrag erstellen - Öffne Postman und erstelle einen neuen Request. - Stelle die Methode auf POST und gib die URL https://api.jsonbin.io/v3/b ein. - Navigiere zum Tab "Headers" und fĂŒge folgende EintrĂ€ge hinzu: - Content-Type → application/json - X-Master-Key → Kopiere deinen API-SchlĂŒssel (im Beispiel: $2a$10$PVlU/LH4NVxYVAJl0aAqa.Bz8bdkkYQfQ5bXI.MgU8VeETzw4ZyCW). - Wechsle zum Tab "Body", wĂ€hle den Typ raw und setze JSON als Format. - FĂŒge folgenden JSON-Inhalt ein: { "greeting": "Hello World" } - Klicke auf die SchaltflĂ€che Send, um den Request abzuschicken.
Tumblr media Tumblr media
Antwort von JSONBin.io: Bei Erfolg erhĂ€ltst du eine JSON-Antwort mit Details zur neu erstellten Bin, darunter die record-ID. Diese ID benötigst du spĂ€ter, um die Daten abzurufen. { "record": { "greeting": "Hello World" }, "metadata": { "id": "677d13b7e41b4d34e4713a85", "createdAt": "2025-01-05T11:44:55.965Z", "private": true } } Verwendung der ID aus der JSONBin.io-Antwort Nach dem Absenden eines POST-Requests an JSONBin.io erhĂ€ltst du als Antwort ein JSON-Dokument, das wichtige Informationen zur gerade erstellten Bin enthĂ€lt. Eine zentrale Rolle spielt dabei die ID, die in der Antwort enthalten ist. Diese ID identifiziert die erstellte Bin eindeutig und wird fĂŒr alle weiteren Anfragen (wie Updates oder Abrufe) benötigt.
Tumblr media
Warum ist die ID wichtig? Die ID fungiert als eindeutiger SchlĂŒssel, um die Daten, die du gespeichert hast, jederzeit wieder aufzurufen oder zu ergĂ€nzen. Bei weiteren Datenaktualisierungen (z. B. tĂ€glichen Messwerten) wird die ID in den Requests ergĂ€nzt, um die bestehende Bin zu adressieren. Datenlimits im kostenfreien Account Im kostenfreien Plan von JSONBin.io kannst du pro Request maximal 100 KB an Daten absenden. Dieses Limit ist mehr als ausreichend, um tĂ€gliche Messdaten wie Spannung, Stromverbrauch oder Temperatur zu speichern und zu erweitern. Gespeicherte DatensĂ€tze aus JSONBin.io laden Um einen zuvor gespeicherten Datensatz aus JSONBin.io zu laden, benötigst du die spezifische Bin ID, die du bei der Erstellung des Eintrags erhalten hast. Diese ID wird in der URL verwendet, um die entsprechenden Daten abzurufen. Hier sind die erforderlichen Details fĂŒr den Request: - Erstelle einen neuen GET-Request in Postman. - Gib die URL mit der entsprechenden ID ein (z. B. https://api.jsonbin.io/v3/b/63abc123ef4567890). - FĂŒge die Header hinzu: - Content-Type: application/json - X-Master-Key: - Sende den Request, um die Daten abzurufen.
Tumblr media
Bin ID finden Falls du die ID eines zuvor gespeicherten Eintrags nicht mehr weißt, kannst du sie im Dashboard von JSONBin.io abrufen: - Melde dich bei JSONBin.io an. - Gehe zum MenĂŒpunkt Bins (https://jsonbin.io/app/bins). - Hier findest du eine Übersicht aller erstellten Bins und die zugehörigen IDs. Antwort von JSONBin.io Wenn der Request erfolgreich ist, erhĂ€ltst du die gespeicherten Daten im JSON-Format: { "record": { "greeting": "Hello World" }, "metadata": { "id": "677d170fad19ca34f8e6f3c6", "private": true, "createdAt": "2025-01-05T11:59:11.047Z" } } EintrĂ€ge bei JSONBin.io aktualisieren: Daten mit PUT ersetzen Wenn du einen bestehenden Eintrag bei JSONBin.io aktualisieren möchtest, verwendest du die HTTP-Methode PUT. Dabei ĂŒbergibst du im Body ein valides JSON, das den aktuellen Inhalt vollstĂ€ndig ersetzt. - Erstelle einen neuen PUT-Request in Postman. - Gib die URL mit der entsprechenden ID ein (z. B. https://api.jsonbin.io/v3/b/63abc123ef4567890). - FĂŒge die Header hinzu: - Content-Type: application/json - X-Master-Key: - Wechsle zum Body-Tab, wĂ€hle den Typ raw, setze das Format auf JSON, und gib die neuen Daten ein:jsonCode kopieren{ "greeting": "Hello Updated World", "timestamp": "2025-01-04T12:00:00.000Z" } - Sende den Request, um die Bin zu aktualisieren.
Tumblr media Tumblr media
Wichtige Hinweise bei Updates im FREE-Plan - Beim kostenfreien Plan wird die bestehende Bin durch die neuen Daten ĂŒberschrieben, ohne dass eine Versionskontrolle erfolgt. - Das bedeutet: Die alten Daten sind unwiderruflich verloren, sobald sie ĂŒberschrieben wurden. - In den kostenpflichtigen PlĂ€nen (Pro Plan oder Additional Requests) steht eine Versionskontrolle zur VerfĂŒgung, die es ermöglicht, auf Ă€ltere Versionen zurĂŒckzugreifen. Antwort von JSONBin.io Bei Erfolg erhĂ€ltst du eine JSON-Antwort, die bestĂ€tigt, dass die Daten erfolgreich ersetzt wurden: { "record": { "greeting": "Ein anderer Eintrag!" }, "metadata": { "parentId": "677d170fad19ca34f8e6f3c6", "private": true } }
Sensordaten am Shelly via Scripting ermitteln und speichern
Nachdem ich dir nun den Service jsonbin.io ausfĂŒhrlich erlĂ€utert habe, möchte ich einsteigen und dir aufzeigen wie du die ermittelten Sensordaten am Shelly via Script speichern kannst. Abfragen des aktuellen Status via Browser Mit der Adresse http:///rpc/Shelly.GetStatus können wir den Status (als JSON-Response) des GerĂ€tes auslesen. Aus diesem Block interessiert mich nachfolgend nur der Abschnitt "switch:0". Da es sich in dem Fall um den Shelly 1PM Mini Gen3 handelt, können wir nachfolgende Daten vom Verbraucher ablesen: - Spannung in Volt (voltage), - Stromaufnahme in Ampere (current), - Leistungsaufname (momentan & Gesamt) in W (apower)
Tumblr media
Ermitteln der Sensordaten am Shelly via Scripting ZunĂ€chst möchte ich die Leistungsaufnahme einer LED Lampe am Shelly 1PM Mini Gen3 messen. Dazu können wir wie im letzten Beitrag erwĂ€hnt mit der Funktion Shelly.getComponentStatus auf diese Eigenschaften zugreifen und die aktuellen Daten als JSON auslesen. // Abrufen des aktuellen Status von Switch:0 (Relais oder Schalter). // Das Ergebnis enthĂ€lt Messwerte wie Spannung, Leistung und Energiedaten. let result = Shelly.getComponentStatus("Switch:0"); // Ausgabe der aktuell gemessenen Spannung in Volt. // Der Wert result.voltage gibt die Spannung an, die vom Shelly gemessen wurde. print("Spannung: " + result.voltage + " Volt"); // Ausgabe der aktuell gemessenen Leistungsaufnahme in Watt. // Der Wert result.apower gibt die momentane Leistung an, die das GerĂ€t verbraucht. print("Leistungsaufnahme: " + result.apower + " Watt"); // Abrufen des Zeitstempels der letzten Minute aus den Energiedaten. // result.aenergy.minute_ts liefert einen UNIX-Zeitstempel in Sekunden. let timestamp = result.aenergy.minute_ts; // Umwandeln des UNIX-Zeitstempels in ein JavaScript-Date-Objekt. // Der Zeitstempel wird mit 1000 multipliziert, da JavaScript Millisekunden erwartet. var date = new Date(timestamp * 1000); // Ausgabe des Datums und der Uhrzeit in lesbarer Form. // Das Date-Objekt wird mit toString() formatiert und in der Konsole angezeigt. print("Zeit: " + date.toString()); Der Code lĂ€dt die Daten des Shelly als JSON und aus diesem können wir recht einfach ĂŒber den entsprechenden SchlĂŒssel auf die Werte zugreifen. In diesem kleinen Script lasse ich die Daten zunĂ€chst in der Console mit dem Befehl print ausgeben.
Tumblr media
Speichern der Daten vom Shelly in ein JSON Die ermittelten Daten speichern wir in einem JSON welches wir zunĂ€chst definieren mĂŒssen. In meinem Fall benenne ich die SchlĂŒssel genauso wie diese im JSON-Response vom Shelly kommen. // Initialisieren eines Datenobjekts, um Messwerte zu speichern. // Die Felder reprĂ€sentieren Spannung (voltage), Strom (current), Leistung (apower) und Zeitstempel (timestamp). let data = { voltage: 0, // Spannung in Volt (Initialwert: 0) current: 0, // StromstĂ€rke in Ampere (Initialwert: 0) apower: 0, // Momentane Leistungsaufnahme in Watt (Initialwert: 0) timestamp: 0 // Zeitstempel der Messung in UNIX-Sekunden (Initialwert: 0) }; // Abrufen des aktuellen Status des Shelly-GerĂ€ts fĂŒr Switch:0. // Das result-Objekt enthĂ€lt Messdaten wie Spannung, Strom, Leistung und Energiedaten. let result = Shelly.getComponentStatus("Switch:0"); // Aktualisieren des voltage-Felds im data-Objekt mit der gemessenen Spannung. data.voltage = result.voltage; // Aktualisieren des current-Felds im data-Objekt mit der gemessenen StromstĂ€rke. data.current = result.current; // Aktualisieren des apower-Felds im data-Objekt mit der gemessenen Leistungsaufnahme. data.apower = result.apower; // Aktualisieren des timestamp-Felds im data-Objekt mit dem Zeitstempel der letzten Minute. // Der Zeitstempel wird in UNIX-Sekunden geliefert. data.timestamp = result.aenergy.minute_ts; // Ausgabe des gesamten data-Objekts in der Konsole. // Alle Messwerte und der Zeitstempel werden im JSON-Format angezeigt. print(data); Die Ausgabe ist wie zu erwarten ein JSON mit den aktuellen Daten vom Shelly.
Tumblr media
Ausgabe der ermittelten Sensordaten am Shelly im JSON-Format Speichern des JSON auf JSONBin.io Die zuvor ermittelten Daten können wir nun via HTTP.Request an jsonbin.io senden. Dazu mĂŒssen wir den Request wie folgt aufbauen: let parameter = { method: "POST", // Die HTTP-Methode ist POST, um neue Daten zu erstellen. url: baseUrl, // Ziel-URL fĂŒr den API-Endpunkt. headers: { // Header-Informationen fĂŒr den Request. "Content-Type": "application/json", // Gibt an, dass der Body JSON-Daten enthĂ€lt. "X-Master-key": jsonbin_API_KEY // API-Key zur Authentifizierung. }, body: data // Das zu sendende JSON-Objekt mit den Messdaten. }; Shelly.call( "HTTP.Request", parameter, function(result, error_code, error_message) { // Callback-Funktion zur Verarbeitung der Antwort. if (error_code != 0) { // Ausgabe einer Fehlermeldung, falls die Anfrage fehlschlĂ€gt. } else { // Abrufen der Bin-ID aus der erfolgreichen Antwort und Ausgabe in der Konsole. } } ); Nachfolgend das komplette Script zum speichern der Sensordaten eines Shelly in jsonbin.io. // Definieren des API-SchlĂŒssels fĂŒr JSONBin.io. Dieser SchlĂŒssel authentifiziert die Anfragen. // Hinweis: Sensible Daten wie API-Keys sollten niemals öffentlich zugĂ€nglich sein. const jsonbin_API_KEY = "geheim"; // Basis-URL fĂŒr JSONBin.io-API-Endpunkte. const baseUrl = "https://api.jsonbin.io/v3/b/"; // Initialisieren eines Objekts, um die Messwerte des Shelly-GerĂ€ts zu speichern. let data = { voltage: 0, // Spannung in Volt current: 0, // StromstĂ€rke in Ampere apower: 0, // Momentane Leistungsaufnahme in Watt timestamp: 0 // Zeitstempel der letzten Messung }; // Abrufen der aktuellen Messwerte vom Shelly-GerĂ€t fĂŒr Switch:0. let result = Shelly.getComponentStatus("Switch:0"); data.voltage = result.voltage; // Spannung wird aktualisiert. data.current = result.current; // StromstĂ€rke wird aktualisiert. data.apower = result.apower; // Momentane Leistungsaufnahme wird aktualisiert. data.timestamp = result.aenergy.minute_ts; // Zeitstempel wird aktualisiert. // Erstellen der Parameter fĂŒr den HTTP-Request, um die Daten an JSONBin.io zu senden. let parameter = { method: "POST", // Die HTTP-Methode ist POST, um neue Daten zu erstellen. Read the full article
0 notes
draegerit · 1 year ago
Text
Fehlerfreie Installation von Thonny auf Linux: Schritt-fĂŒr-Schritt-Anleitung
Tumblr media
In diesem Beitrag möchte ich dir zeigen, wie du eine fehlerfreie Installation von Thonny auf einem Linux System durchfĂŒhrst. Dazu zeige ich dir dieses in eine Schritt-fĂŒr-Schritt-Anleitung und wenn es besonders schnell gehen muss, dann biete ich dir das Shellscript an, welches diese Schritte automatisiert ausfĂŒhrt.
Tumblr media
Fehlerfreie Installation von Thonny auf Linux: Schritt-fĂŒr-Schritt-Anleitung Hintergrund: Zur Vorbereitung auf meinen MicroPython-Kurs im Jugendfreizeitzentrum Schöningen habe ich einige Laptops mit Linux Mint erhalten. Auf diesen Systemen musste ich zunĂ€chst ein Update durchfĂŒhren, bevor ich Thonny installieren konnte. Dabei sind mir einige Fallstricke aufgefallen, die ich hier gerne inklusive der Lösungen vorstellen möchte. Im Beitrag Thonny IDE auf Linux einrichten fĂŒr den Raspberry Pi Pico W habe ich dir bereits gezeigt wie du Thonny installierst, jedoch verlief dort die Installation sauber durch ohne irgendwelche Fehler. FĂŒr die nachfolgenden Schritte benötigst du root Rechte bzw. das Passwort fĂŒr den Benutzer!
Schritt 1 - Aktualisieren des Linux Systems
Bevor wir Thonny installieren, aktualisieren wir das System. Damit stellen wir sicher das alle benötigten Pakete aktuell sind. sudo apt-get update sudo apt-get upgrade
Schritt 2 - Installieren vom Python Paketmanager pip
Damit wir die Python Pakete spĂ€ter installieren können, mĂŒssen wir pip installieren. (Ggf. wird dieses bei Thonny auch installiert, weil dort Python3 mit installiert wird.) sudo apt install pip
Schritt 3 - Installieren von Thonny
Das Tool Thonny kannst du im Anschluss mit dem nachfolgenden Befehl installieren. sudo apt install thonny Auf einem System musste ich das Modul tkinter manuell mit nachfolgendem Befehl installieren. sudo apt-get install python3-tk
Schritt 4 - Benutzer der Gruppe dialout hinzufĂŒgen
Damit der aktuelle Benutzer auf den seriellen Port zugreifen kann, muss dieser der Gruppe dialout hinzugefĂŒgt werden.
Tumblr media
sudo usermod -a -G dialout $USER Im Anschluss muss der Rechner neu gestartet werden, erst damit werden diese Berechtigungen final gesetzt. Mit dem Befehl groups kann man sich die zugewiesenen Gruppen zum Benutzer anzeigen lassen. groups $USER
Tumblr media
Schritt 5 - Entfernen von BRLTTY
In meinem Fall wurde kein Port in Thonny aufgefĂŒhrt und ich musste zusĂ€tzlich noch das Dienstprogramm BRLTTY entfernen.
Tumblr media
sudo apt remove brltty
Tumblr media
BRLTTY ist ein Dienstprogramm im Hintergrund, das es blinden Personen ermöglicht, ĂŒber eine Braillezeile auf die Textkonsole von Linux/Unix zuzugreifen. Es steuert die Braillezeile und bietet umfassende Funktionen zur BildschirmĂŒberprĂŒfung.
Schritt 7 - Testen der Installation
Wenn alle Schritte ausgefĂŒhrt wurden, dann mĂŒssen wir noch kurz die Installation testen. Dazu stellen wir eine Verbindung her und geben im Editor ein kleines Script ein, welches "Hello World!" ausgibt. print("Hello World!") Wenn die grĂŒne Playtaste aus der Toolbar betĂ€tigt wird, dann wird das kleine Programm ausgefĂŒhrt und es sollte der Text "Hello World!" auf der Kommandozeile angezeigt werden.
Tumblr media
Thonny fehlerfreie installation mit Shellyscript
Nachfolgend nun das kleine Shellyscript zum automatischen Installieren von Thonny. Shellscript zum automatischen installieren von ThonnyHerunterladen Die SH-Datei musst du auf der Konsole jedoch ausfĂŒhrbar machen, dazu gibst du nachfolgenden Befehl im Terminal ein: chmod +x install_thonny.sh Im Anschluss kannst du dieses Script dann mit dem nachfolgenden Befehl starten: ./install_thonny.sh Hier nun das kleine Shellscript zum automatischen Installieren von Thonny: #!/bin/bash sudo apt-get update sudo apt-get upgrade sudo apt install pip sudo apt install thonny sudo usermod -a -G dialout $USER sudo apt remove brltty groups $USER sleep 6 sudo reboot Read the full article
0 notes