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; }); -
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
-
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:
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden