NEWS
Gelöst: IF Logik gesucht
-
Hey,
wie baue ich eine IF-Abfrage auf, die folgendes prüfen soll:
es ist eine Startstunde für Tagbetrieb und eine für Nachtbetrieb gegeben.
nun soll geprüft werden ob ein Wert innerhalb des Tagbereiches liegt oder im Nachtbereichein:
if (Wert>=TagStartStunde && Wert < Nachtstartstunde){reaktion}
funktioniert nur bedingt, da der Übergang nach 23 Uhr auf 0 Uhr hier mit einfließt.
Wenn der Wert bspw. 15 ist bei Nachtstart 2 und Tagstart 10, stimmt zwar die erste Teilbedingung, aber die zweite nicht.Nehme ich stattdessen eine ODER Verknüpfung springt er zwar bei allen Werten richtig in die Bedingung (auch für Wert = 1 bspw.), aber wenn (warum auch immer) Tag und Nachtstart vertauscht wären, also Tagstart bei 2 liegt und Nachtstart bei 10 würde Wert 18 die IF-Bedingung (mit ODER) erfüllen, obwohl bei 18 schon Nacht wäre.
Hat jemand eine Idee oder gar fertige Logik um das korrekt zu prüfen?
Grüße
Stephan
-
@BigStephan da gabe es schon mal ein Script für. Hier mal ein Link dazu. Funktion: Prüfen, ob innerhalb eines Zeitfensters
ich hatte das mal für meine Weihnachtsbeleuchtung um eine Schaltzeit erweitert.
var von1 = getState('javascript.0.Variablen.Schaltzeit_on_1').val; // '06:00:00' var bis1 = getState('javascript.0.Variablen.Schaltzeit_off_1').val; var von2 = getState('javascript.0.Tageszeit.Sonnenuntergang').val; var bis2 = getState('javascript.0.Variablen.Schaltzeit_off_2').val; function main() { function currentDate() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); } function addTime(strTime) { var time = strTime.split(':'); var d = currentDate(); d.setHours(time[0]); d.setMinutes(time[1]); d.setSeconds(time[2]); return d; } function isTimeInRange(strLower, strUpper) { var now = new Date(); var lower = addTime(strLower); var upper = addTime(strUpper); var inRange = false; if (upper > lower) { // opens and closes in same day inRange = (now >= lower && now <= upper) ? true : false; } else { // closes in the following day inRange = (now >= upper && now <= lower) ? false : true; } return inRange; } if (isTimeInRange(von1, bis1) || isTimeInRange(von2, bis2)) {if (getState('scene.0.Licht_X-Mas_innen').val === false) { setState('scene.0.Licht_X-Mas_innen', true); } } else{ setState('scene.0.Licht_X-Mas_innen', false); } } schedule("*/1 * * * *", main); main();
-
oder die interne funktion
if(isAstroDay()){ }
//Returns true if the current time is between the astro sunrise and sunset.
Link Text
die prüft zwar nur auf Sonnenaufgang und untergang aber im link steht weiter unten wie man mit einem offset arbeitet.
viele grüße -
@BigStephan: Versuche es mal so:
if(TagStartStunde < Nachtstartstunde) { if(Wert >= TagStartStunde && Wert < Nachtstartstunde) {reaktion} } else { if(Wert >= TagStartStunde || Wert < Nachtstartstunde) {reaktion} }
-
OK Danke.
Habs mit der verschachtelten IF Funktion hinbekommen!Grüße
Stephan
-
@BigStephan sagte:
Habs mit der verschachtelten IF Funktion hinbekommen!
Dann markiere bitte das Thema in der Überschrift als [gelöst].