NEWS
Zeitsteuerung geht nicht
-
Hallo
kann mir einer sagen, warum das Script nicht läuft?
var idTemp = "rflink.0.channels.Cresta_4.TEMP"/*Cresta_ 4 Temperature*/; var idAktor = "hue.0.Philips_hue.Sonoff2.on"/*Philips_hue.Sonoff2.on*/; var temp = getState(idTemp).val; var aktor = getState(idAktor).val; function Zeitschaltung() { var morgen = compareTime('05:00', '06:30', 'between'); var mittag = compareTime('10:00', '11:30', 'between'); var nachmittag = compareTime('14:00', '16:30', 'between'); var abend = compareTime('20:00', '22:00', 'between'); if(morgen || mittag || nachmittag || abend) { if(!aktor) setState(idAktor, true); } else if(aktor) setState(idAktor, false); } schedule('* * * * *', Zeitschaltung);
Der Aktor geht nichts an. Nur aus, wenn ich manuell anschalte.
Starte ich das Script in einem der Zeitfenster neu, geht der Aktor
auch an. Lasse ich ihn laufen, dann funktioniert es nicht.
Hier ein Fehler:
hue.0 2017-08-03 06:56:00.259 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:55:00.226 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:54:00.256 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:53:00.239 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:52:00.235 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:51:00.244 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:50:50.609 error Cannot get result for lightStatus1 hue.0 2017-08-03 06:50:50.608 error Error: timeout of 10000ms exceeded hue.0 2017-08-03 06:50:00.252 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:49:00.329 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:48:00.238 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:47:00.247 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:46:00.240 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:45:00.239 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:44:00.249 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:43:00.244 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:42:00.252 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:41:00.249 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:40:00.240 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:39:00.285 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:38:00.275 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:37:00.279 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:36:00.299 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:35:00.255 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:34:00.234 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:33:00.229 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:32:00.224 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:31:00.226 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:30:00.242 info final lightState for Philips_hue.Sonoff2:{"bri":0,"on":false,"level":0} hue.0 2017-08-03 06:29:48.226 error Cannot get result for lightStatus1 hue.0 2017-08-03 06:29:48.225 error Error: timeout of 10000ms exceeded
Nach Script Neustart gehts aber trotzdem
Ich habe das erste Zeitfenster nun zum Test auf 5:00 - 7:30 geändert, gespeichert und dann geht der Aktor auch sofort an (ist gerade 6:59)
hue.0 2017-08-03 06:58:00.334 info final lightState for Philips_hue.Sonoff2:{"bri":254,"on":true,"level":100}
-
Hallo,
Du musst in deiner Zeitfunktion wo die if abfragen stafinden immer mit````
getState(aktor).val -
Wird doch
var aktor = getState(idAktor).val;
Und in der if
if(!aktor) setState(idAktor, true);
Die Zeitfenster sind ja zb wir folgt definiert:
var morgen = compareTime('05:00', '07:30', 'between');
um 5:00 springt der Aktor aber nicht an. Mache ich einen Script Neustart um 5:01,
geht der Aktor an.
Als würde das Script gehen, aber der Cron nicht
schedule('* * * * *', Zeitschaltung);
-
Hier mal eingebautem Log.
Sollte nicht das LOG 3 angezeigt werden, wenn man ausserhalb des
Zeitfensters ist?
! ````
var idAktor = "hue.0.Philips_hue.Sonoff2.on"/Philips_hue.Sonoff2.on/;
! //var minOn = false;
var temp = getState(idTemp).val;
var aktor = getState(idAktor).val;
! function Zeitschaltung() {
log("LOG 1: " + idAktor + ": " + aktor);
var morgen = compareTime('05:00', '06:30', 'between');
var mittag = compareTime('10:00', '11:30', 'between');
var nachmittag = compareTime('14:00', '16:30', 'between');
var abend = compareTime('20:00', '22:00', 'between');
if(morgen || mittag || nachmittag || abend)
{
log("LOG 2: " + idAktor + ": " + aktor);
if(!aktor) setState(idAktor, true);
}
else if(aktor)
{
setState(idAktor, false);
log("LOG 3: " + idAktor + ": " + aktor);
}
}
! schedule('* * * * *', Zeitschaltung);09:19:26.046 [info] javascript.0 Stop script script.js.common.PoolPumpe
09:19:26.405 [info] javascript.0 Start javascript script.js.common.PoolPumpe
09:19:26.406 [info] javascript.0 script.js.common.PoolPumpe: registered 0 subscriptions and 1 schedule
09:20:00.406 [info] javascript.0 script.js.common.PoolPumpe: LOG 1: hue.0.Philips_hue.Sonoff2.on: false
09:21:00.398 [info] javascript.0 script.js.common.PoolPumpe: LOG 1: hue.0.Philips_hue.Sonoff2.on: false -
kann mir einer sagen, warum das Script nicht läuft? `
Die Variablen temp und aktor werden nur beim Start des Skriptes gesetzt und dann nicht mehr aktualisiert. Es fehlton({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; }); on(idTemp, function(dp) { temp = dp.state.val; });
-
Danke, wo muss das hin, an den Anfang?
Gesendet von meinem GT-I9195 mit Tapatalk
-
wo muss das hin, an den Anfang? `
Das ist völlig egal. Ich bevorzuge es am Ende. -
kann mir einer sagen, warum das Script nicht läuft? `
Die Variablen temp und aktor werden nur beim Start des Skriptes gesetzt und dann nicht mehr aktualisiert. Es fehlton({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; }); on(idTemp, function(dp) { temp = dp.state.val; }); ```` `
Ich schätze deine Skriptkünste sehr, aber ich glaube hier hast du dich vermacht, oder?
Er lässt ja per schedule triggern.
Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. (Leider nur Handy zur hand gehabt)
Aus meiner Sicht müsste folgender Code gehen:
var idTemp = "rflink.0.channels.Cresta_4.TEMP"/*Cresta_ 4 Temperature*/; var idAktor = "hue.0.Philips_hue.Sonoff2.on"/*Philips_hue.Sonoff2.on*/; function Zeitschaltung() { var temp = getState(idTemp).val; var aktor = getState(idAktor).val; var morgen = compareTime('05:00', '06:30', 'between'); var mittag = compareTime('10:00', '11:30', 'between'); var nachmittag = compareTime('14:00', '16:30', 'between'); var abend = compareTime('20:00', '22:00', 'between'); if(morgen || mittag || nachmittag || abend) { if(!aktor) setState(idAktor, true); } else if(aktor) setState(idAktor, false); } schedule('* * * * *', Zeitschaltung);
-
doppelt
-
seit mir beide was vorraus, ihr versteht was der andere meint
bisher scheint das von paul53 zu gehen, teste aber nun auch deins.
danke
gruß
-
aber ich glaube hier hast du dich vermacht, oder? `
Das glaube ich nicht.
@blauholsten:Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. `
Das müssen sie nicht, wenn die globalen Skriptvariablen (aktor, temp) bei jeder Wertänderung des zugehörigen Datenpunktes aktualisiert werden.Deine Version funktioniert ebenfalls, belastet aber die CPU stärker, da jede Minute 2 getState(id)-Operationen ausgeführt werden.
-
aber ich glaube hier hast du dich vermacht, oder? `
Das glaube ich nicht.
@blauholsten:Ich hatte ja heute morgen schon geschrieben, das getState der variablen in der Zeitschaltung() nochmal per getState().val abgefragt werden müssen. `
Das müssen sie nicht, wenn die globalen Skriptvariablen (aktor, temp) bei jeder Wertänderung des zugehörigen Datenpunktes aktualisiert werden.Deine Version funktioniert ebenfalls, belastet aber die CPU stärker, da jede Minute 2 getState(id)-Operationen ausgeführt werden. `
Als ich den Rechner aus gemacht habe, ist mir deine Logik auch klar geworden….. :shock: