NEWS
Zeitsteuerung geht nicht
-
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: