Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]Anfänger: Variable über Uhrzeit

    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

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • Johannes Bauerstatter
      Johannes Bauerstatter last edited by 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 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @Johannes Bauerstatter last edited by 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 Bauerstatter 1 Reply Last reply Reply Quote 0
        • Johannes Bauerstatter
          Johannes Bauerstatter @ticaki last edited by 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 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @Johannes Bauerstatter last edited by ticaki

            @Johannes-Bauerstatter
            Du hast recht. Cron.... 🙂

            T 1 Reply Last reply Reply Quote 0
            • T
              Tictactoo @ticaki last edited by 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 1 Reply Last reply Reply Quote 0
              • T
                ticaki Developer @Tictactoo last edited by

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

                Aber schönes Beispiel danke 🙂

                T 1 Reply Last reply Reply Quote 0
                • T
                  Tictactoo @ticaki last edited by

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

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  626
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  310
                  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