Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Gelöst: IF Logik gesucht

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Gelöst: IF Logik gesucht

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      BigStephan last edited by BigStephan

      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 Nachtbereich

      ein:

      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

      Lenny.CB paul53 2 Replies Last reply Reply Quote 0
      • Lenny.CB
        Lenny.CB Most Active @BigStephan last edited by

        @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();
        
        1 Reply Last reply Reply Quote 0
        • N
          Nahasapee last edited by

          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

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @BigStephan last edited by

            @BigStephan: Versuche es mal so:

            if(TagStartStunde < Nachtstartstunde) {
               if(Wert >= TagStartStunde && Wert < Nachtstartstunde) {reaktion}
            } else {
               if(Wert >= TagStartStunde || Wert < Nachtstartstunde) {reaktion}
            }
            
            1 Reply Last reply Reply Quote 0
            • B
              BigStephan last edited by

              OK Danke.
              Habs mit der verschachtelten IF Funktion hinbekommen!

              Grüße

              Stephan

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @BigStephan last edited by

                @BigStephan sagte:

                Habs mit der verschachtelten IF Funktion hinbekommen!

                Dann markiere bitte das Thema in der Überschrift als [gelöst].

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                494
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                4
                6
                291
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo