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