das sieht sehr gut aus !
Sozusagen die All-in-One Variante, die schaue ich mir nochmal genauer an.
Folgendes Setup funktioniert jetzt gerade testweise bei mir:
- dein ursprüngliches Script mit den Laufzeiten jeweils Start in Minute 00 20 und 40
- zwei Jobs, einer für den Start des Scripts bei Sonnenaufgang und ein zweiter zum Stoppen bei Sonnenuntergang
Die neue Variante in einem Script wäre natürlich noch einfacher zu handeln und ohne die Jobs, Danke dafür!
Falls jemand Interesse hat hier das aktuelle Setup.
die Jobs:
Code
{
"jobs": [
{
"id": 4,
"enable": true,
"timespec": "@sunset+0h30m * * MON,TUE,WED,THU,FRI,SAT,SUN",
"calls": [
{
"method": "script.stop",
"params": {
"id": 1
}
}
]
},
{
"id": 5,
"enable": true,
"timespec": "@sunrise-0h30m * * MON,TUE,WED,THU,FRI,SAT,SUN",
"calls": [
{
"method": "script.start",
"params": {
"id": 1
}
}
]
}
],
"rev": 30
}
Alles anzeigen
und das Timer Script v1 (ohne die Astro Funktion):
Code
//GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
//More information: https://www.gnu.org/licenses/gpl-3.0.txt
//ABSOLUTELY NO WARRANTY!!!
//Made by Ostfriese
//############################## Config ############################
let CONFIG = {
on_times : ['00', '20', '40'],
off_times : ['10', '30', '50'],
// Maximum 5
ips : ['localhost']
}
//############################## Config end ############################
// Deliver the current minute
function get_minute() {
let time = Shelly.getComponentStatus("sys").time;
return time.slice(time.indexOf(":") + 1 ,time.length);
}
// Check if there is need to switch
function watcher() {
let min = get_minute();
// Turn on if min in CONFIG.on_times
for(let i=0; i<CONFIG.on_times.length; i++) {
if (min.indexOf(CONFIG.on_times[i]) > -1) {
// Switch on all Shelly in CONFIG.ips
for(let j=0; j<CONFIG.ips.length; j++) {
Shelly.call("http.get", {url:'http://' + CONFIG.ips[j] + '/relay/0?turn=on', timeout:30});
print(" > Turned ON:" + CONFIG.ips[j]);
}
return
}
}
// Turn off if min in CONFIG.off_times
for(let i=0; i<CONFIG.off_times.length; i++) {
if (min.indexOf(CONFIG.off_times[i]) > -1) {
// Switch off all Shelly in CONFIG.ips
for(let j=0; j<CONFIG.ips.length; j++) {
Shelly.call("http.get", {url:'http://' + CONFIG.ips[j] + '/relay/0?turn=off', timeout:30});
print(" > Turned OFF: " + CONFIG.ips[j]);
}
return
}
}
print("Minute: " + min + " - Nothing to do for now\r" );
}
// Wait for xx:00
function set_zero() {
let min = get_minute();
if (min !== start_min) {
// Set main timer for watcher (60 seconds)
Timer.set(60 * 1000, true, watcher);
print("Timer set to 60 seconds");
watcher()
return
}
// Start timer for set_zero again
print("Wait for new Full Minute (" + (min) + "+1)...")
Timer.set(1000, false, set_zero);
}
function start() {
print("Started Job!");
print("Wait for zero of new Minute...");
// Save the minute of script start
start_min = get_minute();
// Start timer for set_zero
Timer.set(1, false, set_zero);
}
// Delay script start to prevent trouble after reboot
let start_min
t = Timer.set(5 * 1000, false, start);
Alles anzeigen