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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    824

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    680

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Hilfe bei Script Timer

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 2 Kommentatoren 832 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 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 Offline
      M Offline
      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 Offline
          M Offline
          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 Offline
              M Offline
              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 Offline
                  M Offline
                  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 Offline
                      M Offline
                      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

                      351

                      Online

                      32.6k

                      Benutzer

                      81.9k

                      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