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. Script Licht vergessen / Bewegungsmelder

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Script Licht vergessen / Bewegungsmelder

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 880 Aufrufe
  • Ä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 Offline
    F Offline
    fuchs1978
    schrieb am zuletzt editiert von
    #1

    Hallo,

    da die Kinder häufig das Licht vergessen, habe ich ein kleines Script geschrieben und genau dies zu tun. Getriggert wird dieses durch den Bewegungmelder der beim verlassen des Raumes eine 0 sendet.

    Solange ich die Zeit auf 30Sekunden, also 30000 habe läuft es auch. Nun wollte ich es aber auf 15Minuten stellen, und dann geht es nicht mehr. Ich kann auch so keinen Fehler erkennen. Wäre toll wenn ihr mal einen Blick auf das Script werft und mir eine Rückmeldung gebt.

    // Script zum automatischen Ausschalten wenn das Licht vergessen wurde.
    
    // Variablen
    var melder=       "knx.0.Bewegungsüberwachung.EG.Anwesend_K_WC"/*Anwesend K WC*/; // Melder der die Bewegung im Raum überwacht
    var raum=         "WC"; // Bezeichung des Raumes für die Logausgaben
    var schalten=     "knx.0.Beleuchtungssteuerung_EG.WC.Licht_WC_Schalten"/*Licht WC Schalten*/; // Schaltobjekt des Lichtes
    var schaltenruck= "knx.0.Beleuchtungssteuerung_EG.WC.Licht_WC_Rück"/*Licht WC 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=5*60*1000; // 5min Verzögerung, nach der das Licht ausgeschaltet werden soll
    //var zeit=30*1000; // 30s zum Testen
    var loggen=true; // Logausgaben aktiveren
    var anwesend=false; // Variable die die Anwesenheit darstellt
    
    // Bewegung wurde im Raum erkannt, Ausschalttimer wird gelöscht
    on ({id: melder, val: 1}, function () {
         if (loggen) {log("Bewegung wurde erkannt ("+raum+"), Ausschalttimer gelöscht")}
         anwesend=true;
         if (timer) {
             clearTimeout(timer);
             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: 0}, 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");
         setState(schalten,false);
    } else {
             if (loggen) {log("Licht ("+raum+") war bereits aus")}
         }
    }
    
    1 Antwort Letzte Antwort
    0
    • BuZZyB Offline
      BuZZyB Offline
      BuZZy
      schrieb am zuletzt editiert von
      #2

      Was funktioniert denn nicht?

      Licht wird ausgeschaltet obwohl Bewegung im Raum ist?

      Licht wird gar nicht ausgeschaltet?

      Gruß

      1 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        fuchs1978
        schrieb am zuletzt editiert von
        #3

        @BuZZy:

        Was funktioniert denn nicht?

        Licht wird ausgeschaltet obwohl Bewegung im Raum ist?

        Licht wird gar nicht ausgeschaltet?

        Gruß `

        ich müsste nach Ablauf der Zeit ja eine Log Rückmeldung der Funktion Licht bekommen. Und falls vergessen müsste das Licht ausgehen. Ich bekomme aber weder einen Log Eintrag noch geht das Licht aus. So als ob die Funktion Licht nicht ausgeführt wird. Bei 30 sekunden klappt alles wie es soll

        1 Antwort Letzte Antwort
        0
        • BuZZyB Offline
          BuZZyB Offline
          BuZZy
          schrieb am zuletzt editiert von
          #4

          Bekommst du denn die Logmeldung "Ausschattimer abgelaufen in raum …."??

          Ich kann da eigentlich keine großartigen Fehler feststellen..

          Variablen die in mehreren Funktionen verwendet würden, sollten aber immer global deklariert werden.. Wenn man eine Variable gegen true oder false checkt verwendet man besser === statt == ..

          Desweiteren würde ich "timer" in der Funktion Licht auf false setzen, und nicht in der Timeout Funktion selber..

          Ungefähr so:

          // Script zum automatischen Ausschalten wenn das Licht vergessen wurde.
          
          // Variablen
          var melder=       "knx.0.Bewegungsüberwachung.EG.Anwesend_K_WC"/*Anwesend K WC*/; // Melder der die Bewegung im Raum überwacht
          var raum=         "WC"; // Bezeichung des Raumes für die Logausgaben
          var schalten=     "knx.0.Beleuchtungssteuerung_EG.WC.Licht_WC_Schalten"/*Licht WC Schalten*/; // Schaltobjekt des Lichtes
          var schaltenruck= "knx.0.Beleuchtungssteuerung_EG.WC.Licht_WC_Rück"/*Licht WC 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=5*60*1000; // 5min Verzögerung, nach der das Licht ausgeschaltet werden soll
          //var zeit=30*1000; // 30s zum Testen
          var loggen=true; // Logausgaben aktiveren
          var anwesend=false; // Variable die die Anwesenheit darstellt
          var timer=null;		// Timer Variable wird global deklariert
          
          // Bewegung wurde im Raum erkannt, Ausschalttimer wird gelöscht
          on ({id: melder, val: 1}, function () {
              if (loggen) {
          		log("Bewegung wurde erkannt ("+raum+"), Ausschalttimer gelöscht");
          	}
              anwesend=true;
              if (timer) {
                  clearTimeout(timer);
                  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: 0}, function () {
              if (loggen) {
          		log("Keine Bewegung ("+raum+") mehr erkannt, starte Ausschalttimer " + zeit);
          	}
              timer = setTimeout(function () {
                  if (loggen) {
          			 log("Ausschalttimer abgelaufen ("+raum+")");
          		}
                  anwesend=false;
                  licht();
          	}, zeit);
          });
          licht();
          
          // Licht wird ausgeschaltet
          function licht(){
          	timer=false;
          	if (loggen) {
          		log("Funktion Licht ANFANG!");
          		log("Wert Anwesend: "+anwesend);
          		log("Wert Rückmeldung: "+getState(schaltenruck).val);
          	}
          	if ((anwesend===false) && (getState(schaltenruck).val===true)) {
          		log("Licht ("+raum+") wurde vergessen und ausgeschaltet");
          		setState(schalten,false);
          	} else {
                  if (loggen) {
          			log("Licht ("+raum+") war bereits aus.");
          		}
              }
          	if (loggen) {
          		log("Funktion Licht ENDE!");
          	}
          }
          

          Gruß

          1 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            fuchs1978
            schrieb am zuletzt editiert von
            #5

            Es kam gar nichts, so als ob das timeout vergessen wurde. Habe es nun auf 5 Minuten, also 5601000 und es geht wieder

            1 Antwort Letzte Antwort
            0
            • BuZZyB Offline
              BuZZyB Offline
              BuZZy
              schrieb am zuletzt editiert von
              #6

              Hast du es mal mit dem Script versucht das ich gepostet habe?

              Habe nicht viel verändert außer if boolean abfragen mit === auszustatten, die timer Variable als global deklariert und ein paar fehlende ; hinzugefügt.

              Gruß

              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

              756

              Online

              32.6k

              Benutzer

              82.2k

              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