NEWS
[Vorlage] Automatisches Licht
-
Hi Leute,
hier ein weiterer Script-Schnippsel.
Der Raumlichter bei Bewegungserkennung für eine gewünschte Zeit einschaltet.
Wenn während der "Einschaltzeit" wieder Bewegung erkannt wird, beginnt die Einschaltzeit von vorne.Lichter die über einen Schalter vor Bewegungserkennung eingeschaltet wurden, werden nicht erfasst und somit auch nicht automatisch ausgeschalten.
Um das Script zu nutzen müssen die Bewegungsmelder sowie die Lichter die Ihr verwenden möchtet jeweils einer enum.function zugewiesen sein. Alternativ könnt ihr auch jeden Datenpunkt der ausgewertet werden soll einzeln beobachten.
Wie immer wenn Fragen sind einfach schreiben
// ******************************************************************************************************* // // Automatiklicht-Script // Autor: Peoples // // // Funktionen: 1. Das Licht wird bei Bewegungserkennung eingeschalten // Zuweisung Bewegungsmelder -> Licht -> Helligkeitssensor in Konfig möglich // 2. Einschaltzeit jedes Lichts konfigurierbar // // V1.0.0 Initiale Version // ******************************************************************************************************* // ----------------------------------------------------------------------------- // allgemeine Variablen // ----------------------------------------------------------------------------- var timer = []; //Array für die verschiedenen Timer var automaticLightsArray = []; //Array zum auswerten ob das Licht automatisch oder manuel eingeschalten wurde var logging = true; //Logging Ein/Aus var lightingLimit = 60; //Beleuchtungswert in Lux ab wann das Licht eingeschalten wird var autolightList = [ // Automatic-Licht Geräteliste /*Auslösender Bewegungsmelder*/ /*Verwendeter Licht Sensor*/ /*Zu schaltendes Licht*/ /*An Zeit*/ /*Treppenhaus DG*/ {'mdetID':'zigbee.0.XXXXXXXXX.occupancy', 'luxdetID':'hm-rpc.1.XXXXXXXXX.1.CURRENT_ILLUMINATION', 'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE', 'time':5}, /*Treppenhaus EG*/ {'mdetID':'zigbee.0.XXXXXXXXX.occupancy', 'luxdetID':'hm-rpc.1.XXXXXXXXX.1.CURRENT_ILLUMINATION', 'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE', 'time':5}, /*Treppenhaus KG*/ {'mdetID':'hm-rpc.0.XXXXXXXXX.3.MOTION', 'luxdetID':'hm-rpc.0.XXXXXXXXX.3.BRIGHTNESS', 'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE', 'time':5}, /*Keller Gang*/ {'mdetID':'zigbee.0.XXXXXXXXX.occupancy', 'luxdetID':'hm-rpc.0.XXXXXXXXX.3.BRIGHTNESS', 'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE', 'time':5} ]; // ############################################################################# // # # // # Funktion zum automatischen Einschalten des Lichts # // # # // ############################################################################# function autoLight(gID){ for(var i = 0; i < Object.keys(autolightList).length; i++) { if(autolightList[i].mdetID == gID) { if(logging) log('Geräteindex wurde an Stelle:' + i + ' gefunden'); var searchIndex = automaticLightsArray.indexOf(autolightList[i].lightID); if(searchIndex == '-1' && getState(autolightList[i].lightID).val === false && getState(autolightList[i].luxdetID).val < lightingLimit) { automaticLightsArray.push(autolightList[i].lightID); setState(autolightList[i].lightID, true); } checkAutoOff(i); } } } // ############################################################################# // # # // # Funktion zum Prüfen und automatischen Auschalten des Lichts # // # # // ############################################################################# function checkAutoOff(i){ var sI = automaticLightsArray.indexOf(autolightList[i].lightID); if(sI != '-1'){ if(logging) log('Geräteindex '+sI+' wurde in Auto Off Liste gefunen'); var value=i; if(timer[i]) clearTimeout(timer[i]); timer[i] = setTimeout(function () { log(autolightList[value].lightID); setState(autolightList[value].lightID, false); automaticLightsArray.splice(sI, 1); }, (autolightList[value].time * 60000)); } } // ############################################################################# // # # // # Funktion zur Licht-Array bereinigung # // # # // ############################################################################# function checkArray(gID){ for(var i = 0; i < Object.keys(autolightList).length; i++) { if(autolightList[i].lightID == gID) { if(logging) log('Geräteindex '+gID+' wurde in Auto Off Array gefunen und gelöscht'); var si = automaticLightsArray.indexOf(autolightList[i].lightID); if(si != '-1' && getState(autolightList[i].lightID).val === false) { automaticLightsArray.splice(si, 1); } } } } // Beobachten der enum.functions "Bewegungsmelder" $('state(functions=Bewegungsmelder)').on(function(dp) { if(dp.state.val === true) { autoLight(dp.id); if(logging)log('Auslösender Sensor: ' + dp.id + ': ' + dp.state.val); } }); // Beobachten der enum.functions "Beleuchtung" $('state(functions=Beleuchtung)').on(function(dp) { if(dp.state.val === false) { checkArray(dp.id); } });Gruß
Steffen
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