[LUA] Activer une lumière sur détection de présence

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
WileCoyote93
Messages : 8
Inscription : 27 juil. 2021, 14:34

[LUA] Activer une lumière sur détection de présence

Message par WileCoyote93 »

Bonjour

J'ai des détecteurs qui allument les appareils sur présence, et l'éteignent quand le détecteur signale qu'il n'y a plus personne.

Un seul script où on spécifie pour chaque détecteur l'appareil à allumer. Je l'utilise depuis un moment. Attention, il allume même en plein jour, j'ai un autre script qui tient compte de l'intensité lumineuse pour ça, ça vient. Mais si vous êtes débutant, il vaut mieux commencer par celui-ci. Chez moi, il allume des lampes en sous-sol, peu dépendant de la lumière ambiante.

Donc pour l'installer, vous créez un script LUA, en Trigger type Device, vous mettez le code suivant, adapté à vos noms d'appareils, et ça devrait rouler. Vos appareils, détecteurs comme lampes, doivent être activés (dans Configuration >> Dispositifs, la petite flèche verte).

N'hésitez pas à me poser vos questions ici, ou à commenter.

Code : Tout sélectionner

-- Ce script LUA active un appareil lorsqu'un détecteur de présence détecte.
-- On peut spécifier plusieurs couples détecteur x Appareil
-- On peut également activer une scène plutôt qu'un appareil en spécifiant 
--     Scene:LaScène à la place du nom de l'appareil
-- Lorsque le détecteur ne détecte plus rien, l'appareil est arrêté
-- Si un détecteur doit activer plusieurs appareils, il suffit de le dupliquer dans la définition de detector_devices
commandArray = {}

detectors_devices = {
--  {"Détecteur de Présence", "Appareil à Activer, ou Scene:NomDeLaSceneAActiver"},
    {"Zigbee - Detecteur Muscu", "Zigbee - Lampe Muscu Entrée"},
    {"Zigbee - Detecteur Muscu", "Zigbee - Lampe Muscu Fond"},
    {"[PrSs] Zigbee - Détecteur SdB", "[EcSs] Zigbee - Lampe Salle de Bains"} -- ,
};


-- loop through all the changed devices
for detectorName,detectorValue in pairs(devicechanged) do
    -- print ("Script Lua Sous-Sol:DEBUG:detectorName= '"..detectorName.."', detectorValue='"..detectorValue.."'");
    
    for i, j in pairs(detectors_devices) do
        detector_name = j[1];
        device_name = j[2];
        -- print ("Script Lua Sous-Sol:DEBUG:detectorName='"..detectorName.."', detector_name='"..detector_name.."'");
        if (detector_name==detectorName) then
            --print ("Script Lua Sous-Sol:DEBUG:corresponds to device '"..device_name.."'");
            -- print ("Script Lua Sous-Sol:DEBUG:Detector value = "..detectorValue);
            -- print ("Script Lua Sous-Sol:DEBUG:timeofday[Nighttime]="..tostring(timeofday["Nighttime"]));
            if (detectorValue=="On") then
                --print ("Script Lua Sous-Sol:DEBUG: Switching '"..device_name.."' ON");
                commandArray[device_name] = "On"
            else
                --print ("Script Lua Sous-Sol:DEBUG: Switching '"..device_name.."' OFF");
                commandArray[device_name] = "Off"
            end
        end
    end
end

return commandArray
Dernière modification par WileCoyote93 le 20 déc. 2022, 18:40, modifié 1 fois.
WileCoyote93
Messages : 8
Inscription : 27 juil. 2021, 14:34

[LUA] Allumage sur détection de présence, quand il fait sombre. Multi-device.

Message par WileCoyote93 »

Bonjour

J'ai des détecteurs qui allument les appareils sur présence, et l'éteignent quand le détecteur signale qu'il n'y a plus personne. Cette version ajoute une contrainte de luminosité. L'appareil ne sera allumé que si la luminosité mesurée par un "luxmètre" est inférieure à un seuil que l'on fixe pour chaque appareil. Ainsi votre couloir ne s'allumera pas quand il fait jour.

Un seul script où on spécifie pour chaque détecteur l'appareil à allumer, le luxmètre, et le niveau de lumière. Je l'utilise depuis un moment.

Donc pour l'installer, vous créez un script LUA, en Trigger type Device, vous mettez le code suivant, adapté à vos noms d'appareils, et ça devrait rouler. Vos appareils, détecteurs comme lampes, doivent être activés (dans Configuration >> Dispositifs, la petite flèche verte).

N'hésitez pas à me poser vos questions ici, ou à commenter.

Code : Tout sélectionner

-- En fonction de la présence et de l'intensité lumineuse mesurée, on active ou 
-- désactive un appareil.
-- Ce script gère autant de pièces que vous voulez.
-- Si un même détecteur de présence doit allumer plusieurs appareils, on peut 
-- avoir autant de lignes avec le même détecteur de présence.
-- le tableau detectors_devices contient pour chaque ligne 4 valeurs
-- *1* Le nom du détecteur de présence
-- *2* Le niveau de luminosité mesuré en dessous duquel l'on allumera l'Appareil
-- *3* Le nom du luxmètre
-- *4* Le nom de l'appareil à activer/désactiver, ou Scene:LaScène

commandArray = {}

detectors_devices = {
--  {"Nom du détecteur de présence", "Niveau de lumière de déclenchement", "Luxmètre", "Appareil à allumer/éteindre"},    
    {"[PrTr] Zigbee - Motion Sensor Toilettes RdC", 10, "Zigbee - LightLevel Toilettes RdC", "Zigbee - Toilettes RdC"},
    {"[PrCr] Zigbee - Détecteur Présence Couloir",  10, "Zigbee - LightLevel Couloir RdC", "[EcCr]Zigbee - Douille On/Off 01"},
    {"Zigbee - Presence Salon", 30, "Zigbee Lumi Salon", "Zigbee - Globe Salon"}, 
    {"Zigbee - Presence Salon", 35, "Zigbee Lumi Salon", "Zigbee - Lampe Cuisine 01"},
    {"Zigbee - Presence Bedroom", 20, "Zigbee - LightLevel Bedroom", "Prise Connectée Chevet Bedroom"},
    {"Zigbee - Presence Musique", 35, "Zigbee - LightLevel Musique", "Zigbee - On/Off Musique"},
    {"Zigbee - Presence Buanderie", 10, "Zigbee - LightLevel Buanderie", "Zigbee - On/Off light Buanderie"},
    {"Zigbee - Presence EscalierSS", 35, "Zigbee - LightLevel EscalierSS", "Zigbee - On/Off EscalierSS"}
};

-- loop through all the changed devices
for detectorName,detectorValue in pairs(devicechanged) do
    print ("DEBUG:detectorName='"..detectorName.."', detectorValue='"..detectorValue.."'");
    
    for i, j in pairs(detectors_devices) do
        detector_name = j[1];
        lightlev_limit = tonumber(j[2])
        lightlev_meter=j[3];
        device_name = j[4];
        
        -- print ("DEBUG:otherdevices["..tostring(lightlev_meter).."]='"..tostring(otherdevices[lightlev_meter]).."'");
        -- if (otherdevices[lightlev_meter]==nil) then
        --    print("DEBUG:otherdevices["..otherdevices[lightlev_meter].."]=nil, go to <domoticzurl>/#/Devices, and \"add\" the device, the right arrow in a gren disc...");
        -- end
        lightlev_actual=tonumber(otherdevices[lightlev_meter]);
        -- print ("DEBUG:lightlev_meter='"..lightlev_meter.."', lightlev_actual="..tostring(lightlev_actual)..", lightlev_limit="..tostring(lightlev_limit));
        -- print ("DEBUG:detectorName='"..detectorName.."', detector_name='"..detector_name.."'");
        if (detector_name==detectorName) then
            -- print ("DEBUG:corresponds to device '"..device_name.."'");
            -- print ("DEBUG:Detector value = "..detectorValue);
            -- print ("DEBUG:timeofday[Nighttime]="..tostring(timeofday["Nighttime"]));
            if (detectorValue=="On") then
                if (lightlev_actual <= lightlev_limit) then 
                    --print ("DEBUG: Switching '"..device_name.."' ON");
                    commandArray[device_name] = "On"
                else
                    -- print ("DEBUG:lightlev_actual="..tostring(lightlev_actual));
                end
            else
                print ("DEBUG: Switching '"..device_name.."' OFF");
                commandArray[device_name] = "Off"
            end
        end
    end
end

return commandArray
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Modération

Message par Keros »

Merci pour tes scripts.

Je viens de les regrouper dans un même sujet, car je pense que c'est une évolution du premier script.
WileCoyote93
Messages : 8
Inscription : 27 juil. 2021, 14:34

Re: [LUA] Activer une lumière sur détection de présence

Message par WileCoyote93 »

Ben pas forcément.
Chez moi j'utilise les deux.
Répondre