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. [Vorlage] Automatisches Licht

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    456

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

[Vorlage] Automatisches Licht

Geplant Angeheftet Gesperrt Verschoben JavaScript
1 Beiträge 1 Kommentatoren 1.3k Aufrufe 9 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.
  • PeoplesP Offline
    PeoplesP Offline
    Peoples
    schrieb am zuletzt editiert von Peoples
    #1

    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

    Ich beantworte keine Fragen zu Themen via PN

    1 Antwort Letzte Antwort
    2
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    904

    Online

    32.6k

    Benutzer

    81.9k

    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