Erkläre mal genauer was du vorhast. Willst du per Script auf die Daten zugreifen und sie verarbeiten?
Evtl. per HTTPServer.registerEndpoint an einen anderen Shelly senden und empfangen?
Wenn der Sensor am Uni Plus korrekt angezeigt wird ist das per Script machbar.
Beiträge von Viedotraum
-
-
Hast du den Haken im Slat Control Menü bei Retrain Slat Position gesetzt? Wenn ja, ist das verhalten so korrekt. Es wird immer die Slat Pos. vom der letzten Position wieder gesetzt nach der Auf oder Abfahrt.
-
Ich denke das du noch "alte" Raffstores hast. Die Beim Hochfahren sich komplett umdrehen? Neuere machen das nicht. Sie kippen die Lamellen immer nur zu einer Richtung. Von Wagerecht zu Senkrecht. Egal ob hoch oder runter gefahren wird. Solltest versuchen in den Slat Pos Einstellungen die Zeiten von Auf nach Zu und von zu nach auf unterschiedlich einzustellen. Bei mir waren die vorgegebenen 1,5 Sekunden zu lang.
ThemaShelly 2PM Gen3 - Raffstore Scripting Steuerung - examples
Für alle die sich mit dem Thema Raffstore Beschattung und Steuerung beschäftigen, werde ich hier mein Script examples mit euch teilen.
Da der Shelly 2PM Gen3 ganz neu auf dem Markt ist und das Scripting sich von den anderen unterscheidet, wird es vielleicht dem ein oder anderen eine Hilfe sein, die Raffstore per Script zu steuern.
Vorraussetzungen: Shelly 2PM Gen3 ist auf Cover eingerichtet und die Raffstore sind kalibriert worden.
(Quelltext, 13 Zeilen)
Ich habe die Variante "localhost"…Viedotraum10. November 2024 um 19:23 -
The script runs on the Shelly with the IP 192.168.178.150 and accesses the Shelly with the IP 192.168.178.155 to which the temperature sensor is connected via the AddOn.
Code
Alles anzeigen// Script on Shelly with iP 192.168.178.150 function readTemperaturSensor(id) { //print ("readTemperaturSensor..."); Shelly.call( "HTTP.GET", { url: "http://192.168.178.155/rpc/Temperature.GetStatus?id=" + id}, // Call to other Shelly function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let jsonData = JSON.parse(result.body); let tempHome = jsonData.tC; //print ("Temp Home: " + tempHome); } }); } // Call: readTemperaturSensor(100); readTemperaturSensor(101);
If you want to query the script on the Shelly with AddOn and temperature sensor you have to change the line:
to line.
-
Nehme doch einfach den AddOn. Da kannst du einfach einen Fotowiderstand anschließen. Habe 2 für Außenlicht Abfrage positioniert. Funktioniert sehr gut.
Externer Inhalt www.pollin.deInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt. -
Um die Lamellen ohne Positionsfahrt auszuführen kann diese Script Zeilen benutzt.
Code// #### Nur Lamellen Position set. #### // Info: Bei Fahrt Close wird gestoppt und Slat-Pos 100 ausgeführt. D.h. Lamellen Position Winkel offen. // Bei Fahrt Open wird nicht gestoppt, egal welche Slat-Pos gesetzt wird. let urlMovedOnlySlat = "http://127.0.0.1/rpc/Cover.GoToPosition?id=0&slat_pos=100"; Shelly.call("http.get", { url: urlMovedOnlySlat });
-
Raffstore Steuerung von der Shelly App:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Webinterface Einstellungen Slat Control:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Raffstore Steuerung und Lamellen Kippsteuerung per Script
Wichtig:
Im Webinterface des Shelly 2PM Gen3 muss die Jalousie-Kippsteuerung aktiviert und die Zeiten für die Kippsteuerung korrekt eingestellt sein.
Über die App geht das bei der SW Version 1.4.99 nicht.Code
Alles anzeigen// Slat_Pos_ 0 = Lamellen zu -> Slat_Pos_ 100 = Lamellen offen // Position Raffstore, sowie Lamellen Position wird korrekt ausgeführrt let urlMovedPosAndSlat = "http://127.0.0.1/rpc/Cover.GoToPosition?id=0&pos=0&slat_pos=100"; Shelly.call("http.get", { url: urlMovedPosAndSlat }); // Close wird ausgeführt aber Lamellen Position nicht. let urlMovedPosAndSlat = "http://127.0.0.1/rpc/Cover.Close?id=0&slat_pos=100"; Shelly.call("http.get", { url: urlMovedPosAndSlat }); // Close per Position wird ausgeführt, sowie Lamellen Position let urlMovedPosAndSlat = "http://127.0.0.1/rpc/Cover.GoToPosition?id=0&pos=0&slat_pos=100"; Shelly.call("http.get", { url: urlMovedPosAndSlat });
Das Script fertige Script:
Code
Alles anzeigen// ########################################################################## // # Raffstore Steuerung per Script mit Lamellen Verstellung # // #. -> für einen oder mehrere zu steuern # // ########################################################################## let CONFIG = { // Hier die IPs der eizelnen Raffstores festlegen. // oder ["self","192.168.178.200"]; oder ["192.178.90.200","192.168.178.201"]; // oder ["SELF","192.178.178.200","192.168.178.201"]; coverControlDevices: ["self"], // oder ["self","192.168.178.200"]; } var DATA = { lastCoversCall: "", lastSlatPos: -1 } function coverMoved(openClosePosSet, slatPos) { if (typeof openClosePosSet !== 'string') { openClosePosSet = String(openClosePosSet)}; // Int to String // Wandelt "CLOSE" in "Close" oder "open" in "Open" um. let openClosePos = openClosePosSet.charAt(0).toUpperCase() + openClosePosSet.slice(1).toLowerCase(); if (DATA.lastCoversCall === openClosePos && DATA.lastSlatPos === slatPos) return; // Verhindere doppelte Aufrufe for (let device of CONFIG.coverControlDevices) { // Alle Covers im Array call callDevices(device, openClosePos, slatPos); } } function callDevices(device, openClosePosSet, slatPos) { const isPosAnumber = !isNaN(openClosePosSet); // Prüfe, ob es eine Zahl ist -> set: isPosAnumber = true or false let deviceName = device.toLowerCase(); // Wandeln in Kleinschreibung const url = (deviceName === "self") ? "http://127.0.0.1/rpc/Cover." : "http://" + deviceName + "/rpc/Cover."; // wird angehängt an url je nachem ob es eine Nummer oder eine Text ist. url += isPosAnumber ? "GoToPosition?id=0&pos=" + openClosePosSet + "&slat_pos=" + slatPos: openClosePosSet + "?id=0"; DATA.lastCoversCall = openClosePosSet; DATA.lastSlatPos = slatPos; Shelly.call("http.get", { url: url }, logResponse); } // Hilfsfunktion für die Log-Ausgabe function logResponse(response, error_code, error_message) { // print(JSON.stringify(error_code)); } // Slat_Pos_ 0 = Lamellen zu -> Slat_Pos_ 100 = Lamellen offen // Call coverMoved(0,100); // Raffstore geschlossen, Lamellen Position offen. coverMoved("Close",100); // Raffstore geschlossen, Lamellen Position wird ignoriert. coverMoved(50,50); // Raffstore 50% geschlossen, Lamellen 50% Position offen.
-
Für alle die sich mit dem Thema Raffstore Beschattung und Steuerung beschäftigen, werde ich hier mein Script examples mit euch teilen.
Da der Shelly 2PM Gen3 ganz neu auf dem Markt ist und das Scripting sich von den anderen unterscheidet, wird es vielleicht dem ein oder anderen eine Hilfe sein, die Raffstore per Script zu steuern.
Vorraussetzungen: Shelly 2PM Gen3 ist auf Cover eingerichtet und die Raffstore sind kalibriert worden.Code
Alles anzeigen// Script ruft eigenen Shelly 2PM Gen3 der als Cover eingerichtet auf. // Öffnen let urlOpen = "http://127.0.0.1/rpc/Cover.Open?id=0"; Shelly.call("http.get", { url: urlOpen }); // Stop let urlStop = "http://127.0.0.1/rpc/Cover.Stop?id=0"; Shelly.call("http.get", { url: urlStop }); // Position anfahren -> 70% let urlMovedPos = "http://127.0.0.1/rpc/Cover.GoToPosition?id=0&pos=70"; Shelly.call("http.get", { url: urlMovedPos });
Ich habe die Variante "localhost" gewählt um dem Code einfacher zu erweitern.
Um mehrere Raffstores gleichzeitig zu steuern kann diese Funktion benutzt werden.
Code
Alles anzeigen/* #################################################################### # Script um mehrere Raffstores gleichzeitig zu bedienen. # #################################################################### Call Varianten -> Die Schreibweise wird per Script umgewandelt. -------------------------------------------------------------------- coverMoved(90); coverMoved("90"); coverMoved("OPEN"); coverMoved("open"); coverMoved("Open"); coverMoved("CLOSE"); coverMoved("close"); coverMoved("Close"); coverMoved("STOP"); coverMoved("stop"); coverMoved("Stop"); */ let CONFIG = { // Hier die IPs der eizelnen Raffstores festlegen. // oder ["self","192.168.178.200"]; oder ["192.178.90.200","192.168.178.201"]; // oder ["SELF","192.178.90.200","192.168.178.201"]; coverControlDevices: ["Self"] } var DATA = { lastCoversCall: "" // Variable für doppeltes Ausführen verhindern. } function coverMoved(openClosePosSet) { if (typeof openClosePosSet !== 'string') { openClosePosSet = String(openClosePosSet)}; // Int to String // Wandelt "CLOSE" in "Close" oder "open" in "Open" um. let openClosePos = openClosePosSet.charAt(0).toUpperCase() + openClosePosSet.slice(1).toLowerCase(); if (DATA.lastCoversCall === openClosePos) return; // Verhindere doppelte Aufrufe mit dem gleichen Befehl for (let device of CONFIG.coverControlDevices) { // Alle Covers im Array call callDevices(device, openClosePos); } } function callDevices(device, openClosePosSet) { const isPosAnumber = !isNaN(openClosePosSet); // Prüfe, ob es eine Zahl ist -> set: isPosAnumber = true or false let deviceName = device.toLowerCase(); // Wandeln in Kleinschreibubg const url = (deviceName === "self") ? "http://127.0.0.1/rpc/Cover." : "http://" + deviceName + "/rpc/Cover."; // wird angehängt an url je nachem ob es eine Nummer oder eine Text ist. url += isPosAnumber ? "GoToPosition?id=0&pos=" + openClosePosSet : openClosePosSet + "?id=0"; DATA.lastCoversCall = openClosePosSet; Shelly.call("http.get", { url: url }, logResponse); } // Hilfsfunktion für die Log-Ausgabe function logResponse(response, error_code, error_message) { // print(JSON.stringify(error_code)); } coverMoved("open");
Ich werde das Script noch erweitern um für die Kippsteuerung der Lamellen anzusteuern.
Sobald das getestet und lauffähig ist werde ich es hier veröffentlichen. -
Mt der neusten Firmenware kannst du in der Shelly App -> "Anwendungseinstellungen" -> die neue "Gerätekartenanpassung" aufrufen. Dort mal schauen ob man es ändern kann.
-
Wenn ich das richtig verstanden habe, willst du die Temperatur in der App angezeigt haben? Dafür ist kein Script nötig.
1. Home Dashboard wählen.
2. Dashboard bearbeiten -> Neues Dashboard anlegen (Pen Symbol) -> Name z.B. Temperatur3. Shelly mit dem Add-On dem neuen Dashboard hinzufügen.
4. Burger Menü (Anpassen) wählen und alle Hacken aus.
Dann wird nur die Temperatur angezeigt.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Hello,
This script can be used to control one or more Roller at the same time.
The script must still be adapted for the SHELLY PRO DUAL COVER/SHUTTER PM. The ID must still be specified.
https://shelly-api-docs.shelly.cloud/gen2/Component…dpoint-rollerid
Code
Alles anzeigen// Script for Shelly Plus 2.5 PM //Important: The shutters must be calibrated beforehand in order to be able to approach 0 - 100% //------------------- Jalousie: On / Off / Position ------------------ // Info: // If the script controls itself, then: ["self"] // If there are several to control: ["Self", 192.168.xxx.xxx] let CONFIG = {coverControlDevices: ["self"]}; // Examples // let CONFIG = {coverControlDevices: ["self","192.168.90.154"]}; // let CONFIG = {coverControlDevices: ["192.168.90.153","192.168.90.154"]}; function openCloseOrSetPositionAllRollers(openClosePosSet) { // Call: 50, "open", "close" for (let device of CONFIG.coverControlDevices) { //print ("Call Beschattung Start Motor", openClosePosSet, " %"); // +++++ This Device +++++ if (device == "self") { if(isNaN(openClosePosSet)){ // is not a number Shelly.call( "Cover." + openClosePosSet, // oder "Cover."Close"" { id: 0 }, function (response, error_code, error_message) { //print(JSON.stringify(error_code)); } ); } else { // is a number Shelly.call( "Cover.GoToPosition", { id: 0, pos: openClosePosSet }, function (response, error_code, error_message) { //print(JSON.stringify(error_code)); } ); } } else { // +++++ Other Devices +++++ if(isNaN(openClosePosSet)){ // is not a number Shelly.call( "http.get", { url: "http://" + device + "/roller/0?go=" + openClosePosSet}, function (response, error_code, error_message, ud) { //print(JSON.stringify(error_code)); }, null ); }else{ // is a number Shelly.call( "http.get", { url: "http://" + device + "/roller/0?go=to_pos&roller_pos=" + openClosePosSet}, function (response, error_code, error_message, ud) { //print(JSON.stringify(error_code)); }, null ); } } } } // CALL: openCloseOrSetPositionAllRollers("close"); // Examples: // openCloseOrSetPositionAllRollers("open"); // openCloseOrSetPositionAllRollers("50"); // 0 - 100
-
Du meinst ?
[Press Button / Start = On] < 30 Sek. > [Ende = Off]
----------------------------------------------------------------------------------------------------------------------------------------- > Time
(is On) <10 Sek.> [Press Button / Start = On] < 30 S > [Ende = Off]
Wäre hach dem Beispiel 40 Sek. dann On.
habe ich das Richtig verstanden?
-
Habe es hinbekommen.
Auf der HomeBridge -> PlugIn: {Homebridge Webhooks} installiert.
Einen Schalter hinzufügen und dieser wie unten angezeigt einrichten.
Code"webhook_port": "51828", "switches": [ { "id": "UrlaubSwitch", "name": "Jalousie Urlaub", "on_method": "GET", "off_method": "GET" },
Unter PlugIns -> Homebridge Webhooks -> :
Icon Schraubenschlüssel -> Bridge Einstellungen -> HttpWebHooks -> Anschalten. QR-Code mit HomeKit scannen und den Schalter hinzufügen.
Shelly Script:
Code
Alles anzeigenfunction readHomeKitSwitch() { // (HomeBridbge) HomeKit Button JALOUSIE URLAUB auslesen Shelly.call( "HTTP.GET", { url: "http://<IP_HomeBridge>1:51828/?accessoryId=UrlaubSwitch" }, function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let jsonData = JSON.parse(result.body); print ("Switch Status: ", jsonData.state); // true or false } } ); }
Schalter kann nun per Script abgefragt werden.
-
Hallo zusammen,
gibt es eine Möglichkeit per Script auf einen Virtuellen Schalter, der in HomeBridge erstellt wurde, zuzugreifen? Also den Status auszulesen? On / Off?
So zum Beispiel abzufragen?
Codefunction readDummySwitch() { Shelly.call( "HTTP.GET", { url: "http://192.168.178.31/****" }, // HomeBridge IP function(result, error_code, error_message) { ...
Habe auf HomeBridge -> Homebridge Webhooks installiert. Schalter eingerichtet und auf Apple HomeKit schaltbar.
Wer von euch hat damit Erfahrungen?
-
Wäre nett wenn du deine Ausgangsfrage im Post 1 nicht einfach änderst 😎
da stand nicht Shelly 1+ und auch nicht Gen2 !
Wenn du dort etwas änderst wäre ein „Edit:“ schon toll
Und mich jetzt in meiner Antwort in Beitrag 2 so dazustellen finde ich nicht OK
Viel Spaß noch
OK, mache ich!
Hätte besser schreiben sollen: Shelly 1 Plus + AddOn.... -
Nach vielen probieren habe ich den Temperatursensor per Script auslesen können.
Code
Alles anzeigenShelly.call( "HTTP.GET", { url: "http://192.168.90.152/rpc/Temperature.GetStatus?id=100" }, function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let jsonData = JSON.parse(result.body); // Hier können Sie auf die Temperaturdaten zugreifen print("DS18B20 Temperature Data:", jsonData); let temperatureCelsius = jsonData.tC; print("Temperatur (°C):", temperatureCelsius); } } );
Console:
DS18B20 Temperature Data: { "id": 100, "tC": 17.9, "tF": 64.2 }
21:53:17Temperatur (°C): 17.9
-
Ich benötige mal Eure Hilfe.
Das Script soll auf einem Shell 2PM laufen. Ich möchte von einem Shelly 1+ mit AddOn (Gen 2) den Temperaturfühler : ds18b20 auslesen.
Leider ist meiner URL Eingabe/Abfrage falsch.Wer hat so etwas schon einmal programmiert und kann mir helfen?
Code
Alles anzeigenShelly.call( "HTTP.GET", { //url: "http://192.168.90.152/rpc/SensorAddon.GetTemperature?sensor=D.temperature:100" url: "http://192.168.90.152/rpc/D.temperature:100/GetTemperature" }, function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let response = JSON.parse(result.body); let temperature = response.value; print("Temperature: " + temperature + " °C"); } } );
Die Ausgabe in der Console: Temperature: undefined °C
Mit: url: "http://192.168.90.152/rpc/SensorAddon.GetPeripherals"
Zeigt er mir den Typ + Adr. an - schaffe es aber nicht die Temperatur auszulesen.