NEWS

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


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


  • @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 {
    
    }
    

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


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


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

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

    Aber schönes Beispiel danke 🙂


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

Suggested Topics

  • 13
  • 10
  • 10
  • 12
  • 2
  • 4
  • 4
  • 3

1.7k
Online

38.4k
Users

43.9k
Topics

613.1k
Posts