Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Hilfe bei Script Timer

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Hilfe bei Script Timer

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 2 Kommentatoren 820 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Online
    M Online
    mctom
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich bin zur Zeit mal wieder ein wenig mit meine Anfänger Wissen am Programmieren.
    Benötige jetzt noch mal eure Hilfe.

    Ich lege in einem Script folgende Datenpunkte an:

    createState(pfad + '_beginn', "",{read: true, write: true, name: Info Start, type: "string", unit: "hh:mm"})
    

    Innerhalb des Scriptes möchte ich diese Uhrzeit dann nutzen um einen Timer zu setzen.

    let timerstunde = parseInt(getState(pfad + '_beginn').val.slice(0,2), 10)
    let timerminute = parseInt(getState(pfad + '_beginn').val.slice(3,5), 10)
    
    if (timer) clearSchedule(timer)
                timer = on({
                    time: {
                        hour: timerstunde,
                        minute: timerminute
                        }
                }, function () {
                   log (Testeintrag)
                     });
    

    Irgendwie fühlt es sich nicht so gut an hier den Weg um einen String zu gehen und diesen zu zerlegen.
    Gibt es eine bessere Methode dafür ?

    Gruß
    Michael

    paul53P 1 Antwort Letzte Antwort
    0
    • M mctom

      Hallo zusammen,

      ich bin zur Zeit mal wieder ein wenig mit meine Anfänger Wissen am Programmieren.
      Benötige jetzt noch mal eure Hilfe.

      Ich lege in einem Script folgende Datenpunkte an:

      createState(pfad + '_beginn', "",{read: true, write: true, name: Info Start, type: "string", unit: "hh:mm"})
      

      Innerhalb des Scriptes möchte ich diese Uhrzeit dann nutzen um einen Timer zu setzen.

      let timerstunde = parseInt(getState(pfad + '_beginn').val.slice(0,2), 10)
      let timerminute = parseInt(getState(pfad + '_beginn').val.slice(3,5), 10)
      
      if (timer) clearSchedule(timer)
                  timer = on({
                      time: {
                          hour: timerstunde,
                          minute: timerminute
                          }
                  }, function () {
                     log (Testeintrag)
                       });
      

      Irgendwie fühlt es sich nicht so gut an hier den Weg um einen String zu gehen und diesen zu zerlegen.
      Gibt es eine bessere Methode dafür ?

      Gruß
      Michael

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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');
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      M 1 Antwort Letzte Antwort
      0
      • paul53P 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 Online
        M Online
        mctom
        schrieb am zuletzt editiert von
        #3

        @paul53 vielen Dank für deine Hilfe.

        Da sind dann schon wieder ein paar Codezeilen weniger.

        paul53P 1 Antwort Letzte Antwort
        0
        • M mctom

          @paul53 vielen Dank für deine Hilfe.

          Da sind dann schon wieder ein paar Codezeilen weniger.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @mctom sagte: ein paar Codezeilen weniger.

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

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          M 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @mctom sagte: ein paar Codezeilen weniger.

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

            M Online
            M Online
            mctom
            schrieb am zuletzt editiert von
            #5

            @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.

            paul53P 1 Antwort Letzte Antwort
            0
            • M mctom

              @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.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

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

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

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              M 1 Antwort Letzte Antwort
              0
              • paul53P paul53

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

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

                M Online
                M Online
                mctom
                schrieb am zuletzt editiert von
                #7

                @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 ?

                paul53P 1 Antwort Letzte Antwort
                0
                • M mctom

                  @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 ?

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #8

                  @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")
                  }
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  M 1 Antwort Letzte Antwort
                  0
                  • paul53P 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 Online
                    M Online
                    mctom
                    schrieb am zuletzt editiert von
                    #9

                    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')
                                    }                    
                                }
                            }
                    
                    paul53P 1 Antwort Letzte Antwort
                    0
                    • M mctom

                      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')
                                      }                    
                                  }
                              }
                      
                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #10

                      @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');   
                      

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      M 1 Antwort Letzte Antwort
                      0
                      • paul53P 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 Online
                        M Online
                        mctom
                        schrieb am zuletzt editiert von
                        #11

                        @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 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        727

                        Online

                        32.5k

                        Benutzer

                        81.7k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe