Hier eine Skript-Lösung (Auf aktuellste Firmware updaten):
In der Config:
lock_start: Begin der Sperre
lock_end:Ende der Sperre
urls: Befehle zum schalten. Die Erste wird später mit 0 bezeichnet, die Zweite mit 1, usw.
Wenn du das Skript startest, wird, z.B., folgendes ausgegeben:
22:56:33 Your possible urls are:
22:56:33 http://192.168.178.104/script/9/switch?0 --> http://127.0.0.1/relay/0?turn=off
22:56:33 http://192.168.178.104/script/9/switch?1 --> http://127.0.0.1/relay/0?turn=on
Hier sind die vorderen Urls die Urls für Alexa, die hinter dem Pfeil sind die aus der Config.
Hier sieht man auch die Zuordnung: Die erste Url wird beim Aufruf mit 0 ausgeführt, die zweite mit 1, usw.
Stand: 26.01.24 23:15.
Hier noch die Vorgehensweise auf dem Skript-Shelly (Alles im Browser mit WebUi machen):
1.) Firmware auf aktuellen Stand bringen.
2.) Unter Settings --> Debug Websecket debug aktivieren. Reboot.
3.) Unter Scripts --> Add Script einen Skript Namen vergeben, das komplette Skript mit Copy/Paste einfügen und --> Save.
4.) Die Config auf deine Werte anpassen. --> Save
5.) Das Skript mit Start ausführen und die Ausgabe im unteren Fenster (Console) beachten.
6.) Dafür Sorge tragen, dass Alexa die Befehle aus der Ausgabe in der Console verwendet.
7.) Testen, ob alles, wie gewünscht, funktioniert.
8.) Unter Scripts den Schiebeschalter neben dem Skriptnamen nach rechts, das bewirkt, dass das Skript nach einem Reboot automatisch startet.
// GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
// More information: https://www.gnu.org/licenses/gpl-3.0.txt
// ABSOLUTELY NO WARRANTY AT ALL!!!
// Made by ostfriese.
// Config
let Config = {
lock_start : '00:00',
lock_end : '05:00',
urls : ['http://127.0.0.1/relay/0?turn=off','http://127.0.0.1/relay/0?turn=on']
}
// Config end. No changes below this row.
function time_to_number(time_str) {
return parseInt(time_str.split(":")[0]) * 3600 + parseInt(time_str.split(":")[1]) * 60;
}
function watch(request,response) {
if(lock) {
return;
}
lock = true;
i = parseInt(request.query);
try {
response.body = 'Asked: http://' + ip + '/script/' + id + '/switch?' + i;
t_now = time_to_number(Shelly.getComponentStatus("sys").time);
t_night = time_to_number(Config.lock_start);
t_day = time_to_number(Config.lock_end);
if(t_now > t_night && t_now < t_day || t_night > t_day && (t_now < t_day || t_now > t_night)) {
response.body += ' --> Locked. No action';
}
else {
response.body += ' --> ' + Config.urls[i];
Shelly.call("http.get", {url:Config.urls[i]});
}
} catch(e){};
response.code = 200;
response.send();
print(response.body);
Timer.set(1000, false, function(){lock = false;});
}
function start() {
HTTPServer.registerEndpoint('switch',watch);
print('Your possible urls are:');
for(let i=0; i < Config.urls.length; i++) {
print('http://' + ip + '/script/' + id + '/switch?' + i + ' --> ' + Config.urls[i]);
}
print('\n')
}
let lock = false;
let ip = Shelly.getComponentStatus("wifi").sta_ip;
let id = Shelly.getCurrentScriptId();
Timer.set(1000,false,start);
Alles anzeigen