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.
// 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 });
Alles anzeigen
Ich habe die Variante "localhost" gewählt um dem Code einfacher zu erweitern.
Um mehrere Raffstores gleichzeitig zu steuern kann diese Funktion benutzt werden.
/*
####################################################################
# 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");
Alles anzeigen
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.