Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    688

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

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

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
7 Beiträge 3 Kommentatoren 378 Aufrufe 3 Beobachtet
  • Ä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

                Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                Registrieren Anmelden
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                524

                Online

                32.7k

                Benutzer

                82.6k

                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