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. Licht vergessen funktioniert nicht mehr korrekt

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Licht vergessen funktioniert nicht mehr korrekt

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 743 Aufrufe 2 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.
  • F fuchs1978

    Hallo,
    ich habe mir ein Skript geschrieben, welches das Licht in den Zimmern ausschaltet wenn keine Bewegung mehr erkannt wird. Hat auch immer super funktioniert. Nun bin ich auf die neue Node JS 16 Version, nun schaltet das Licht auch aus, wenn noch Bewegung vorhanden ist. Erkennt ihr einen Fehler im Skript der mit der aktuellen Version erst auftritt?

    // Script zum automatischen Ausschalten wenn das Licht vergessen wurde.
    
    // Variablen
    var melder=       "knx.0.Bewegungsüberwachung.OG.Anwesend_K_Kind_1"/*Anwesend K Kind 2*/; // Melder der die Bewegung im Raum überwacht
    var raum=         "Kind 1"; // Bezeichung des Raumes für die Logausgaben
    var schalten=     "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Schalten"/*Licht Kind 1 Schalten*/; // Schaltobjekt des Lichtes
    var schaltenruck= "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Rück"/*Licht Kind 1 Rück*/; // Rückmeldeobjekt des Lichtes falls vorhanden sonst wie schalten
    var schalten2=     "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Wand_Schalten"/*Licht Kind 1 Wand Schalten*/; // Schaltobjekt des Lichtes
    var schaltenruck2= "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Wand_Rück"/*Licht Kind 1 Wand Rück*/; // Rückmeldeobjekt des Lichtes falls vorhanden sonst wie schalten
    //var zeit=60*60*1000; // 1h Verzögerung, nach der das Licht ausgeschaltet werden soll
    var zeit=10*60*1000; // 5min Verzögerung, nach der das Licht ausgeschaltet werden soll
    //var zeit=30*1000; // 30s zum Testen
    var loggen=false; // Logausgaben aktiveren
    var anwesend=false; // Variable die die Anwesenheit darstellt
    var timer=false;
    
    // Bewegung wurde im Raum erkannt, Ausschalttimer wird gelöscht
    on ({id: melder, val: true}, function () {
         if (loggen) {log("Bewegung wurde erkannt ("+raum+"), Ausschalttimer gelöscht")}
         anwesend=true;
         if (timer) {
             clearTimeout(timer);
             timer = false;
             if (loggen) {log("Erneute Bewegung erkannt Ausschalttimer gelöscht")}
         } else {
             if (loggen) {log("Bewegung erkannt Timer war nicht vorhanden")}
         }
    });
    
    // Keine Bewegung im Raum erkannt, Ausschalttimer wird gestartet
    on ({id: melder, val: false}, function () {
         if (loggen) {log("Keine Bewegung ("+raum+") mehr erkannt, starte Ausschalttimer " + zeit)}
         timer = setTimeout(function () {
             timer = false;
             if (loggen) {log("Ausschalttimer abgelaufen ("+raum+")")}
             anwesend=false;
             licht();
         }, zeit);
    });
    licht();
    
    // Licht wird ausgeschaltet
    function licht(){
    if (loggen) {log("Wert Anwesend: "+anwesend)}
    if (loggen) {log("Wert Rückmeldung: "+(getState(schaltenruck).val==true))}
    if ((anwesend==false) && (getState(schaltenruck).val==true)) {
         log("Licht ("+raum+") wurde vergessen und ausgeschaltet","warn");
         setState(schalten,false);
    } else {
             if (loggen) {log("Licht ("+raum+") war bereits aus")}
         }
    if ((anwesend==false) && (getState(schaltenruck2).val==true)) {
         log("Licht2 ("+raum+") wurde vergessen und ausgeschaltet","warn");
         setState(schalten2,false);
    } else {
             if (loggen) {log("Licht2 ("+raum+") war bereits aus")}
         }
    }
    
    T Offline
    T Offline
    TT-Tom
    schrieb am zuletzt editiert von TT-Tom
    #2

    @fuchs1978
    Bin zwar nicht der Profi, aber ich würde die Variable „timer“ nicht zweimal verwenden. Den Timer würde ich z.B. „Wartezeit“ nennen. Zeile 22 und 33

    Gruß Tom
    https://github.com/tt-tom17
    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

    NSPanel Script Wiki
    https://github.com/joBr99/nspanel-lovelace-ui/wiki

    NSPanel Adapter Wiki
    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

    1 Antwort Letzte Antwort
    0
    • F fuchs1978

      Hallo,
      ich habe mir ein Skript geschrieben, welches das Licht in den Zimmern ausschaltet wenn keine Bewegung mehr erkannt wird. Hat auch immer super funktioniert. Nun bin ich auf die neue Node JS 16 Version, nun schaltet das Licht auch aus, wenn noch Bewegung vorhanden ist. Erkennt ihr einen Fehler im Skript der mit der aktuellen Version erst auftritt?

      // Script zum automatischen Ausschalten wenn das Licht vergessen wurde.
      
      // Variablen
      var melder=       "knx.0.Bewegungsüberwachung.OG.Anwesend_K_Kind_1"/*Anwesend K Kind 2*/; // Melder der die Bewegung im Raum überwacht
      var raum=         "Kind 1"; // Bezeichung des Raumes für die Logausgaben
      var schalten=     "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Schalten"/*Licht Kind 1 Schalten*/; // Schaltobjekt des Lichtes
      var schaltenruck= "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Rück"/*Licht Kind 1 Rück*/; // Rückmeldeobjekt des Lichtes falls vorhanden sonst wie schalten
      var schalten2=     "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Wand_Schalten"/*Licht Kind 1 Wand Schalten*/; // Schaltobjekt des Lichtes
      var schaltenruck2= "knx.0.Beleuchtungssteuerung_OG.Kind_1.Licht_Kind_1_Wand_Rück"/*Licht Kind 1 Wand Rück*/; // Rückmeldeobjekt des Lichtes falls vorhanden sonst wie schalten
      //var zeit=60*60*1000; // 1h Verzögerung, nach der das Licht ausgeschaltet werden soll
      var zeit=10*60*1000; // 5min Verzögerung, nach der das Licht ausgeschaltet werden soll
      //var zeit=30*1000; // 30s zum Testen
      var loggen=false; // Logausgaben aktiveren
      var anwesend=false; // Variable die die Anwesenheit darstellt
      var timer=false;
      
      // Bewegung wurde im Raum erkannt, Ausschalttimer wird gelöscht
      on ({id: melder, val: true}, function () {
           if (loggen) {log("Bewegung wurde erkannt ("+raum+"), Ausschalttimer gelöscht")}
           anwesend=true;
           if (timer) {
               clearTimeout(timer);
               timer = false;
               if (loggen) {log("Erneute Bewegung erkannt Ausschalttimer gelöscht")}
           } else {
               if (loggen) {log("Bewegung erkannt Timer war nicht vorhanden")}
           }
      });
      
      // Keine Bewegung im Raum erkannt, Ausschalttimer wird gestartet
      on ({id: melder, val: false}, function () {
           if (loggen) {log("Keine Bewegung ("+raum+") mehr erkannt, starte Ausschalttimer " + zeit)}
           timer = setTimeout(function () {
               timer = false;
               if (loggen) {log("Ausschalttimer abgelaufen ("+raum+")")}
               anwesend=false;
               licht();
           }, zeit);
      });
      licht();
      
      // Licht wird ausgeschaltet
      function licht(){
      if (loggen) {log("Wert Anwesend: "+anwesend)}
      if (loggen) {log("Wert Rückmeldung: "+(getState(schaltenruck).val==true))}
      if ((anwesend==false) && (getState(schaltenruck).val==true)) {
           log("Licht ("+raum+") wurde vergessen und ausgeschaltet","warn");
           setState(schalten,false);
      } else {
               if (loggen) {log("Licht ("+raum+") war bereits aus")}
           }
      if ((anwesend==false) && (getState(schaltenruck2).val==true)) {
           log("Licht2 ("+raum+") wurde vergessen und ausgeschaltet","warn");
           setState(schalten2,false);
      } else {
               if (loggen) {log("Licht2 ("+raum+") war bereits aus")}
           }
      }
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #3

      @fuchs1978 sagte: Erkennt ihr einen Fehler im Skript

      Es muss auf Änderung getriggert werden, da sonst mehrere Timer gestartet werden können, die sich nicht mehr löschen lassen. Außerdem verwendet man nur einen Trigger pro Datenpunkt (Ressourcen).

      on (melder, function (dp) { // Trigger auf Wertänderung
          if (dp.state.val) {
              // Aktionen bei Bewegung
          } else {
              // Aktionen ohne Bewegung
          }
      });
      

      @tt-tom sagte in Licht vergessen funktioniert nicht mehr korrekt:

      Variable „timer“ nicht zweimal verwenden.

      Sie wird nur einmal verwendet: In einem Teil gesetzt und in einem anderen Teil gelöscht. Da Timer-Variablen spezielle Objekte sind, setzt man Timer-Variablen auf null anstatt auf false.

      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

      T F 2 Antworten Letzte Antwort
      0
      • paul53P paul53

        @fuchs1978 sagte: Erkennt ihr einen Fehler im Skript

        Es muss auf Änderung getriggert werden, da sonst mehrere Timer gestartet werden können, die sich nicht mehr löschen lassen. Außerdem verwendet man nur einen Trigger pro Datenpunkt (Ressourcen).

        on (melder, function (dp) { // Trigger auf Wertänderung
            if (dp.state.val) {
                // Aktionen bei Bewegung
            } else {
                // Aktionen ohne Bewegung
            }
        });
        

        @tt-tom sagte in Licht vergessen funktioniert nicht mehr korrekt:

        Variable „timer“ nicht zweimal verwenden.

        Sie wird nur einmal verwendet: In einem Teil gesetzt und in einem anderen Teil gelöscht. Da Timer-Variablen spezielle Objekte sind, setzt man Timer-Variablen auf null anstatt auf false.

        T Offline
        T Offline
        TT-Tom
        schrieb am zuletzt editiert von
        #4

        @paul53

        @tt-tom sagte in Licht vergessen funktioniert nicht mehr korrekt:

        Variable „timer“ nicht zweimal verwenden.

        Sie wird nur einmal verwendet: In einem Teil gesetzt und in einem anderen Teil gelöscht. Da Timer-Variablen spezielle Objekte sind, setzt man Timer-Variablen auf null anstatt auf false.

        Dann habe ich da noch eine Verständnisfrage: Zeile 21-23
        Das If bezieht sich doch auf die Variable timer, die in 23 auf false gesetzt wird. Um das Objekt timer in 22 zu löschen.

        Sollte nicht Objekt und Variable unterschiedliche Namen haben?

        Gruß Tom
        https://github.com/tt-tom17
        Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

        NSPanel Script Wiki
        https://github.com/joBr99/nspanel-lovelace-ui/wiki

        NSPanel Adapter Wiki
        https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

        paul53P 1 Antwort Letzte Antwort
        0
        • T TT-Tom

          @paul53

          @tt-tom sagte in Licht vergessen funktioniert nicht mehr korrekt:

          Variable „timer“ nicht zweimal verwenden.

          Sie wird nur einmal verwendet: In einem Teil gesetzt und in einem anderen Teil gelöscht. Da Timer-Variablen spezielle Objekte sind, setzt man Timer-Variablen auf null anstatt auf false.

          Dann habe ich da noch eine Verständnisfrage: Zeile 21-23
          Das If bezieht sich doch auf die Variable timer, die in 23 auf false gesetzt wird. Um das Objekt timer in 22 zu löschen.

          Sollte nicht Objekt und Variable unterschiedliche Namen haben?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          @tt-tom sagte: Variable timer, die in 23 auf false gesetzt wird. Um das Objekt timer in 22 zu löschen.

          clearTimeout(timer) stoppt den Timer mit der Referenz timer, setzt aber nicht die Variable zurück. Damit man mit if(timer) die Variable abfragen kann, wird sie nach dem Stoppen auf false (besser null) gesetzt.

          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

          T 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @tt-tom sagte: Variable timer, die in 23 auf false gesetzt wird. Um das Objekt timer in 22 zu löschen.

            clearTimeout(timer) stoppt den Timer mit der Referenz timer, setzt aber nicht die Variable zurück. Damit man mit if(timer) die Variable abfragen kann, wird sie nach dem Stoppen auf false (besser null) gesetzt.

            T Offline
            T Offline
            TT-Tom
            schrieb am zuletzt editiert von
            #6

            @paul53

            Okay so weit verstanden. Müssen also beide den gleichen Namen timer haben, oder?

            Gruß Tom
            https://github.com/tt-tom17
            Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

            NSPanel Script Wiki
            https://github.com/joBr99/nspanel-lovelace-ui/wiki

            NSPanel Adapter Wiki
            https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

            paul53P 1 Antwort Letzte Antwort
            0
            • T TT-Tom

              @paul53

              Okay so weit verstanden. Müssen also beide den gleichen Namen timer haben, oder?

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #7

              @tt-tom sagte: Müssen also beide den gleichen Namen timer haben, oder?

              Ja, es gibt nur ein setTimeout(), das die Variable timer setzt.

              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

              T 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @tt-tom sagte: Müssen also beide den gleichen Namen timer haben, oder?

                Ja, es gibt nur ein setTimeout(), das die Variable timer setzt.

                T Offline
                T Offline
                TT-Tom
                schrieb am zuletzt editiert von
                #8

                @paul53

                Danke, wieder etwas dazu gelernt. Schönes Wochenende

                Gruß Tom
                https://github.com/tt-tom17
                Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                NSPanel Script Wiki
                https://github.com/joBr99/nspanel-lovelace-ui/wiki

                NSPanel Adapter Wiki
                https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @fuchs1978 sagte: Erkennt ihr einen Fehler im Skript

                  Es muss auf Änderung getriggert werden, da sonst mehrere Timer gestartet werden können, die sich nicht mehr löschen lassen. Außerdem verwendet man nur einen Trigger pro Datenpunkt (Ressourcen).

                  on (melder, function (dp) { // Trigger auf Wertänderung
                      if (dp.state.val) {
                          // Aktionen bei Bewegung
                      } else {
                          // Aktionen ohne Bewegung
                      }
                  });
                  

                  @tt-tom sagte in Licht vergessen funktioniert nicht mehr korrekt:

                  Variable „timer“ nicht zweimal verwenden.

                  Sie wird nur einmal verwendet: In einem Teil gesetzt und in einem anderen Teil gelöscht. Da Timer-Variablen spezielle Objekte sind, setzt man Timer-Variablen auf null anstatt auf false.

                  F Offline
                  F Offline
                  fuchs1978
                  schrieb am zuletzt editiert von
                  #9

                  @paul53 said in Licht vergessen funktioniert nicht mehr korrekt:

                  @fuchs1978 sagte: Erkennt ihr einen Fehler im Skript

                  Es muss auf Änderung getriggert werden, da sonst mehrere Timer gestartet werden können, die sich nicht mehr löschen lassen. Außerdem verwendet man nur einen Trigger pro Datenpunkt (Ressourcen).

                  on (melder, function (dp) { // Trigger auf Wertänderung
                      if (dp.state.val) {
                          // Aktionen bei Bewegung
                      } else {
                          // Aktionen ohne Bewegung
                      }
                  });
                  

                  Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden. Wir würdest du den Rest aufbauen. Komisch nur, das es erst seit kurzem nicht mehr korrekt funktioniert. Ich meine Seite node 16

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • F fuchs1978

                    @paul53 said in Licht vergessen funktioniert nicht mehr korrekt:

                    @fuchs1978 sagte: Erkennt ihr einen Fehler im Skript

                    Es muss auf Änderung getriggert werden, da sonst mehrere Timer gestartet werden können, die sich nicht mehr löschen lassen. Außerdem verwendet man nur einen Trigger pro Datenpunkt (Ressourcen).

                    on (melder, function (dp) { // Trigger auf Wertänderung
                        if (dp.state.val) {
                            // Aktionen bei Bewegung
                        } else {
                            // Aktionen ohne Bewegung
                        }
                    });
                    

                    Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden. Wir würdest du den Rest aufbauen. Komisch nur, das es erst seit kurzem nicht mehr korrekt funktioniert. Ich meine Seite node 16

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #10

                    @fuchs1978 sagte: Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden.

                    Nein. Wenn ein zweiter Trigger mit val: false kommt ohne vorherige Wertänderung?

                    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

                    F 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @fuchs1978 sagte: Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden.

                      Nein. Wenn ein zweiter Trigger mit val: false kommt ohne vorherige Wertänderung?

                      F Offline
                      F Offline
                      fuchs1978
                      schrieb am zuletzt editiert von
                      #11

                      @paul53 said in Licht vergessen funktioniert nicht mehr korrekt:

                      @fuchs1978 sagte: Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden.

                      Nein. Wenn ein zweiter Trigger mit val: false kommt ohne vorherige Wertänderung?

                      Also dort noch eine Abfrage rein If Timer und damit nicht auf zwei reagieren

                      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

                      724

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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