Zum abrunden der Möglichkeiten eine Zusammenstellung, die
- die Schreibzugriffe in den nichtflüchtigen Speicher auf das notwendige Maß reduziert,
- sehr einfachen Skriptcode enthält und
- sehr zuverlässig arbeitet.
- Alle Schedule Jobs auflisten lassen, auch und insbesondere solche, die nicht per WebUI konfiguriert wurden. Insbesondere der Web Browser Firefox listet diese Jobs (JSON-Format) übersichtlich auf.
http://<shelly_ip-address>/rpc/schedule.list - Das einfache Skript:
Es beinhaltet- die globale Variable Status zur Speicherung des Status des digitalen Eingangs für synchronen Zugriff,
- das Eventhandling zu Änderungen des digitalen Eingangssignals,
- die Funktion switch_conditional() zum bedingten Einschalten des Ausgangs.
let Status = { // kann leicht erweitert werden
DigInp : null
};
Shelly.addEventHandler( // kann leicht erweitert werden
function(e) {
let comp = e.info.component;
if (comp==="input:100") {
print("Digital Input: ", e.info.state); // kann entfallen, nur Kontrollausgabe
Status.DigInp = e.info.state;
}
}
);
function switch_conditional() { // schaltet den Ausgang nur dann ein, wenn digitaler Input ein (true) ist
if(Status.DigInp!==null && Status.DigInp) Shelly.call("switch.set", {id:0, on:true});
}
Alles anzeigen
Um dieses Skript nutzen zu können, sind Möglichkeiten von Schedule Jobs zu nutzen, die nicht in der WebUI zur Verfügung gestellt sind.
Ein geeigneter Schedule Job kann wie folgt angelegt werden:
http://<shelly_ip-address>/rpc/schedule.create?enable=true×pec="0 15 17 * * *"&calls=[{"method":"script.eval","params":{"id":1,"code":"switch_conditional()"}}]
Dieser Job ruft täglich um 17:15 Uhr die Funktion switch_conditional() im Skript mit der Id 1 auf. enable=true kann auch weggelassen werden, weil dies die default Einstellung ist.
Die Syntax zu timespec ist hier zu finden: https://github.com/mongoose-os-libs/cron
Ich setzte für weiteres voraus, dass dieser Schedule Job die Id 1 besitzt.
Wenn die Schaltzeit geändert werden soll, kann die Methode Schedule.Update verwendet werden:
http://<shelly_ip-address>/rpc/schedule.update?id=1×pec="0 30 12 * * *"
Dies ändert den Schedule Job mit der Id 1 so, dass täglich um 12:30 Uhr die Funktion switch_conditional() aufgerufen wird.
Man kann einen Schedule Job leicht Wochentags spezifisch einrichten. Soll bspw. der obige Schedule Job (Id 1) nur montags und mittwochs aktiv sein, ist folgendes Update zielführend:
http://<shelly_ip-address>/rpc/schedule.update?id=1×pec="0 30 12 * * Mon,Wed"
Auch kann sunrise und sunset in timespec verwendet werden.
Da diese URLs etwas kryptisch sind, kann die usability per passend zusammengestellter Website unterstützt werden.
In diese können die variierbaren Parameter für timespec per Eingabefelder eingegeben oder per Auswahllisten selektiert werden.
Eine solche Website kann
- lokal auf dem Benutzer-Endgerät (Notebook, Tablet, Smartphone) oder
- im world wide web platziert werden.
Ich betone, dass dies eine Implementationsvariante ist, welche nicht von der derzeitigen WebUI-Konfiguration unterstützt wird, aber technische Vorteile gegenüber der interessanten Lösung von ostfriese besitzt.
Dessen Variante hat den Vorteil, dass die per WebUI konfigurierbaren Schedule Jobs (höhere usability) genutzt werden können. Es sind aber dieselben Schedule Jobs wie die per RPC (s.o.) eingerichteten. Diese Konfiguration ist nur eingeschränkt und nutzt nicht alle Möglichkeiten des in der Firmware enthaltenen Betriebssystems.
Edit:
Skript für den Zweck des TE geringfügig korrigiert.