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. [gelöst]Anfänger: Variable über Uhrzeit

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst]Anfänger: Variable über Uhrzeit

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
7 Beiträge 3 Kommentatoren 367 Aufrufe 3 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.
  • Johannes BauerstatterJ Offline
    Johannes BauerstatterJ Offline
    Johannes Bauerstatter
    schrieb am zuletzt editiert von Johannes Bauerstatter
    #1

    Hallo,

    habe folgenden Code für meine Türklingel erstellt. Bei Betätigung eines Taster zwischen 06:00 - 09:00 und 14:00 - 19:45 soll nicht nur ein Telegram versendet werden, sondern auch die Glocke läuten:

    var Zeit;
    schedule('0 6 * * *', function () 
    {Zeit = '1'});
    schedule('0 9 * * *', function () 
    {Zeit = '0'});
    schedule('0 14 * * *', function () 
    {Zeit = '1'});
    schedule('45 19 * * *', function () 
    {Zeit = '0'});
    
    
    on
    ('mqtt.0.ESP_Tuerklingeltaster.Glocke.State', function (obj) 
    {
        if (obj.state.val == 1 && Zeit =='1') 
        setState('sonoff.0.Sonoff_Bridge_.RfKey3', "555503" )
        sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}); 
        sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'});   
        if (obj.state.val == 1 && Zeit =='0') 
        {sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}) 
        sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'})};  
    });
    

    Was passiert mit bei einem Reboot mit meiner Variable Zeit? Ist der Status dann undefinied bzw. wie sollte der Code aussehen, damit es besser funktioniert?

    T 1 Antwort Letzte Antwort
    0
    • Johannes BauerstatterJ Johannes Bauerstatter

      Hallo,

      habe folgenden Code für meine Türklingel erstellt. Bei Betätigung eines Taster zwischen 06:00 - 09:00 und 14:00 - 19:45 soll nicht nur ein Telegram versendet werden, sondern auch die Glocke läuten:

      var Zeit;
      schedule('0 6 * * *', function () 
      {Zeit = '1'});
      schedule('0 9 * * *', function () 
      {Zeit = '0'});
      schedule('0 14 * * *', function () 
      {Zeit = '1'});
      schedule('45 19 * * *', function () 
      {Zeit = '0'});
      
      
      on
      ('mqtt.0.ESP_Tuerklingeltaster.Glocke.State', function (obj) 
      {
          if (obj.state.val == 1 && Zeit =='1') 
          setState('sonoff.0.Sonoff_Bridge_.RfKey3', "555503" )
          sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}); 
          sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'});   
          if (obj.state.val == 1 && Zeit =='0') 
          {sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}) 
          sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'})};  
      });
      

      Was passiert mit bei einem Reboot mit meiner Variable Zeit? Ist der Status dann undefinied bzw. wie sollte der Code aussehen, damit es besser funktioniert?

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @Johannes-Bauerstatter

      Die Variable Zeit is solange undefiniert bis sie die erste Zuweisung erhält.

      Frage es doch direkt in der "on" Funktion ab.?

      var Zeit;
      var currentTime = new Date();
      var cH = currentTime.getHours()
      var cM = currentTime.getMinutes();
      var cS = currentTime.getSeconds();
      
      if ((cM>=6 && cM<9) || (cM>14 && (cM<19 || (cM==19 && cS<45)))) Zeit=1;
      else Zeit=0;
      console.log(Zeit);
      

      oder damit es übersichtlicher ist:

      if (cM>19 || (cM==19 && cS>=45)){
      
      } else if (cM>=14) {
      
      } else if (cM>=9) {
      
      } else if (cM>=6) {
      
      } else {
      
      }
      

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      Johannes BauerstatterJ 1 Antwort Letzte Antwort
      0
      • T ticaki

        @Johannes-Bauerstatter

        Die Variable Zeit is solange undefiniert bis sie die erste Zuweisung erhält.

        Frage es doch direkt in der "on" Funktion ab.?

        var Zeit;
        var currentTime = new Date();
        var cH = currentTime.getHours()
        var cM = currentTime.getMinutes();
        var cS = currentTime.getSeconds();
        
        if ((cM>=6 && cM<9) || (cM>14 && (cM<19 || (cM==19 && cS<45)))) Zeit=1;
        else Zeit=0;
        console.log(Zeit);
        

        oder damit es übersichtlicher ist:

        if (cM>19 || (cM==19 && cS>=45)){
        
        } else if (cM>=14) {
        
        } else if (cM>=9) {
        
        } else if (cM>=6) {
        
        } else {
        
        }
        
        Johannes BauerstatterJ Offline
        Johannes BauerstatterJ Offline
        Johannes Bauerstatter
        schrieb am zuletzt editiert von Johannes Bauerstatter
        #3

        @ticaki Vielen Dank für deine Hilfe.

        Ich glaube du hast cH, cM, cS vertauscht:

        var Zeit;
        var currentTime = new Date();
        var cH = currentTime.getHours()
        var cM = currentTime.getMinutes();
        var cS = currentTime.getSeconds();
         
        if ((cH>=6 && cH<12) || (cH>14 && (cH<19 || (cH==19 && cM<45)))) Zeit=1;
        else Zeit=0;
        console.log(Zeit);
        

        So sollte es aussehen.

        T 1 Antwort Letzte Antwort
        0
        • Johannes BauerstatterJ Johannes Bauerstatter

          @ticaki Vielen Dank für deine Hilfe.

          Ich glaube du hast cH, cM, cS vertauscht:

          var Zeit;
          var currentTime = new Date();
          var cH = currentTime.getHours()
          var cM = currentTime.getMinutes();
          var cS = currentTime.getSeconds();
           
          if ((cH>=6 && cH<12) || (cH>14 && (cH<19 || (cH==19 && cM<45)))) Zeit=1;
          else Zeit=0;
          console.log(Zeit);
          

          So sollte es aussehen.

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von ticaki
          #4

          @Johannes-Bauerstatter
          Du hast recht. Cron.... :)

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          T 1 Antwort Letzte Antwort
          0
          • T ticaki

            @Johannes-Bauerstatter
            Du hast recht. Cron.... :)

            T Offline
            T Offline
            Tictactoo
            schrieb am zuletzt editiert von Tictactoo
            #5

            @ticaki Hier ist nochmal ne alternative, die vielleicht ein klein wenig übersichtlicher ist, da nicht Stunden und Minuten separat abgefragt werden. Sie jetzt nur voraus, dass dein Value von "mqtt.0.ESP_Tuerklingeltaster.Glocke.State" immer nur 0 oder 1 ist. Sonst müsste man die if-Abfrage nochmal anpassen.

            on({id: 'mqtt.0.ESP_Tuerklingeltaster.Glocke.State', change: 'any'}, function (obj) {
            
                //Falls Value gleich 0, Funktion abbrechen
                if(obj.state.val == 0)
                    return;
            
                //Aktuelle Dates generieren
                var currentTime = new Date();   
                var t06_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 6,0,0);
                var t09_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 9,0,0);
                var t14_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 14,0,0);
                var t19_45 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 19,45,0);
            
                // Abfragen, ob Zeit innerhalb der gewünschten Zeitspanne liegt
                if( (currentTime >= t06_00 && currentTime < t09_00) ||
                    (currentTime >= t14_00 && currentTime < t19_45)  )
                {
                    setState('sonoff.0.Sonoff_Bridge_.RfKey3', "555503" );
                }
            
                //Telegrammnachricht immer senden
                sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}); 
                sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'});  
            });
            
            T 1 Antwort Letzte Antwort
            0
            • T Tictactoo

              @ticaki Hier ist nochmal ne alternative, die vielleicht ein klein wenig übersichtlicher ist, da nicht Stunden und Minuten separat abgefragt werden. Sie jetzt nur voraus, dass dein Value von "mqtt.0.ESP_Tuerklingeltaster.Glocke.State" immer nur 0 oder 1 ist. Sonst müsste man die if-Abfrage nochmal anpassen.

              on({id: 'mqtt.0.ESP_Tuerklingeltaster.Glocke.State', change: 'any'}, function (obj) {
              
                  //Falls Value gleich 0, Funktion abbrechen
                  if(obj.state.val == 0)
                      return;
              
                  //Aktuelle Dates generieren
                  var currentTime = new Date();   
                  var t06_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 6,0,0);
                  var t09_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 9,0,0);
                  var t14_00 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 14,0,0);
                  var t19_45 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDay(), 19,45,0);
              
                  // Abfragen, ob Zeit innerhalb der gewünschten Zeitspanne liegt
                  if( (currentTime >= t06_00 && currentTime < t09_00) ||
                      (currentTime >= t14_00 && currentTime < t19_45)  )
                  {
                      setState('sonoff.0.Sonoff_Bridge_.RfKey3', "555503" );
                  }
              
                  //Telegrammnachricht immer senden
                  sendTo('telegram.0', 'send', {text: 'Es hat an der Haustüre geläutet'}); 
                  sendTo('telegram.1', 'send', {text: 'Es hat an der Haustüre geläutet'});  
              });
              
              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von
              #6

              @Tictactoo
              kann es sein das du anstatt getSeconds() getDay() schreiben wolltest?

              Aber schönes Beispiel danke :)

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              T 1 Antwort Letzte Antwort
              0
              • T ticaki

                @Tictactoo
                kann es sein das du anstatt getSeconds() getDay() schreiben wolltest?

                Aber schönes Beispiel danke :)

                T Offline
                T Offline
                Tictactoo
                schrieb am zuletzt editiert von
                #7

                @ticaki Ja, natürlich.^^ Sry, war vorher wohl etwas verpeilt.^^

                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

                566

                Online

                32.6k

                Benutzer

                82.1k

                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