Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe bei Script Timer

    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

    Hilfe bei Script Timer

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @mctom last edited by paul53

      @mctom sagte: Gibt es eine bessere Methode dafür ?

      In ein Array splitten:

      let arr = getState(pfad + '_beginn').val.split(':');
      
      if (timer) clearSchedule(timer);
      timer = schedule(arr[1] + ' ' + arr[0] + ' * * *', function() {
          log('Testeintrag');
      });
      
      M 1 Reply Last reply Reply Quote 0
      • M
        mctom @paul53 last edited by

        @paul53 vielen Dank für deine Hilfe.

        Da sind dann schon wieder ein paar Codezeilen weniger.

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

          @mctom sagte: ein paar Codezeilen weniger.

          ... und man kann in der Uhrzeit die führende 0 weglassen.

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

            @paul53 stimmt.

            vielleicht hast du noch eine Idee wie ich etwas umsetzen kann.
            Ich habe in diesem Script verschiedene Timer.

            Beispiel:

            Timer 1: 06:00
            Timer 2: 12:00
            Timer 3: 20:00
            Timer 4: 22:00

            Ich würde gerne prüfen welcher Timer der aktuell relevante ist.
            Heute mache ich das dann so:

            let Stundeaktuell   =   new Date().getHours()
                        let Minutenaktuell  =   new Date().getMinutes()
            
                        if (timerstunde <= Stundeaktuell){
                            if (timerminute <= Minutenaktuell){
                                log ("Test")
                            }                    
                        }
            

            Das Problem ist hier aber, dass der mehrere Logeinträge erscheinen.
            Ich würde aber nur den einen gültigen haben.

            Ich hoffe man kann verstehen was ich meine.

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

              @mctom sagte: Ich hoffe man kann verstehen was ich meine.

              ?? Die aktuelle Timer-Uhrzeit steht doch im Datenpunkt.

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

                @paul53 Vielleicht habe ich mich schlecht ausgedrückt.

                Ich würde in einer Schleife Datenpunkte checken.

                Beispiel:

                Timer 1: 06:00 => Wert1
                Timer 2: 12:00 => Wert 2
                Timer 3: 20:00 => Wert 3
                Timer 4: 22:00 => Wert 4

                Aktuell ist es so dass erst im Log Wert 1 steht und dann Wert 2.
                Ich würde aber gerne nur Wert 2 dort stehen haben.

                So verständlicher ?

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

                  @mctom sagte: So verständlicher ?

                  Nein.
                  Zeige mal die Schleife, die zwei Werte ausgibt.

                  Einen Uhrzeitvergleich macht man so:

                  let Minutenaktuell = new Date().getMinutes() + 60 * new Date().getHours();
                   
                  if(60 * timerstunde + timerminute <= Minutenaktuell) {
                      log ("Test")
                  }
                  
                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mctom @paul53 last edited by

                    Ja okay ich drücke mich etwas kompliziert aus daher hier noch mal der Versuch.

                    ab 06:00 Wert 1
                    ab 08:00 Wert 2
                    ab 15:00 Wert 3
                    ab 20:00 Wert 4
                    ab 22:00 Wert 5

                    Und ich möchte gerne wissen welcher Wert für die aktuelle Uhrzeit gültig ist.
                    Und meiner Methode taucht erst Wert 1 Wert2 Wert3 und dann der richtige Wert4 auf.
                    So besser ?

                    for (let countSlot = 0; countSlot < paProfileSlots[countRoom]; countSlot++) {
                                   
                                
                                let timerstunde = parseInt(getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.slice(0,2), 10)
                                let timerminute = parseInt(getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.slice(3,5), 10)
                    
                                let Stundeaktuell   =   new Date().getHours()
                                let Minutenaktuell  =   new Date().getMinutes()
                    
                                if (timerstunde <= Stundeaktuell){
                                    if (timerminute <= Minutenaktuell){
                                        setlocalTagetTemp(countRoom,profil,countSlot,'Timerset durchgeführt')
                                    }                    
                                }
                            }
                    
                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @mctom last edited by paul53

                      @mctom sagte: taucht erst Wert 1 Wert2 Wert3 und dann der richtige Wert4 auf.

                      Du möchtest den letzten countSlot der Schleife haben, bei dem die Bedingung erfüllt ist?

                      let Minutenaktuell = new Date().getMinutes() + 60 * new Date().getHours();
                      let last = 0;
                      for (let countSlot = 0; countSlot < paProfileSlots[countRoom]; countSlot++) {
                          let timer = getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.split(':');
                          let timerstunde = parseInt(timer[0], 10)
                          let timerminute = parseInt(timer[1], 10)
                        
                          if(60 * timerstunde + timerminute <= Minutenaktuell) {
                              last = countSlot;
                          }
                      }
                      setlocalTagetTemp(countRoom,profil,last,'Timerset durchgeführt');   
                      
                      M 1 Reply Last reply Reply Quote 0
                      • M
                        mctom @paul53 last edited by

                        @paul53
                        Hi, mir ist es im Altagstrubel durch die Lappen gegangen.
                        Danke für deine Hilfe. Es hat mir geholfen. Mein Script ist jetzt optimiert.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        845
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        2
                        11
                        493
                        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