Voilà ma solution (je suis un peu ému, c'est la première fois que je publie, j'ai reçu ma HC2 il y a une semaine )
Je n'utilise pas de scènes mais un module virtuel uniquement. L'objectif est de piloter un éclairage (via wallplug) soit par un détecteur soit par un bouton sur l'interface avec un timer d'extinction qui se prolonge aussi longtemps qu'il y a une détection (ou bien que l'on éteigne par le bouton).
J'ai 2 variables globales :
- LampeSalonTV_Duree
- LampeSalonTV_Timer
J'ajoute un bouton à ce module qui contient le code suivant :
-- Wallplug : id6
local selfId = fibaro:getSelfId();
if (fibaro:getValue(6, "value")=='0') -- lampe éteinte
then
-- modif icone allumé
fibaro:call(selfId, "setProperty", "currentIcon", 1011);
-- allumage lampe
fibaro:call(6, "turnOn");
-- initialisation du timer
fibaro:setGlobal("LampeSalonTV_Timer", fibaro:getGlobalValue("LampeSalonTV_Duree") * 60);
else
-- modif icone éteint
fibaro:call(selfId, "setProperty", "currentIcon", 1012);
-- extinction lampe
fibaro:call(6, "turnOff");
-- affichage message
fibaro:log("Lampe éteinte.");
end
puis dans le main loop je mets :
-- Wallplug : id6
-- Détecteur : id15
-- déclaration des variables
local selfId = fibaro:getSelfId();
local Seuil = 10; -- seuil de luminosité en lux
local Maintenant = os.date("*t");
-- Gestion de l'extinction
if (fibaro:getValue(6, "value") == '1' ) -- lampe allumée
then
-- décrémentation du compteur (par pas de 3s car mainloop toutes les 3s)
fibaro:setGlobal("LampeSalonTV_Timer", tonumber(fibaro:getGlobalValue("LampeSalonTV_Timer")) - 3);
-- affichage du temps restant
fibaro:log("Extinction dans " ..fibaro:getGlobalValue("LampeSalonTV_Timer") .." s");
-- si timer vidé => extinction de la lampe
if (tonumber(fibaro:getGlobalValue("LampeSalonTV_Timer")) <= 0)
then
fibaro:call(selfId, "setProperty", "currentIcon", 1012); -- modif icone éteint
fibaro:call(6, "turnOff"); -- extinction lampe
fibaro:log("Lampe éteinte."); -- affichage message
end
end
-- Gestion d'une détection de mouvement
if (fibaro:getValue(15, "value") == '1' -- mouvement détecté
and tonumber(fibaro:getValue(17, "value")) <= Seuil -- luminosité faible
and (Maintenant['hour'] >= 16 or Maintenant['hour'] <= 1)) -- heure > 19 h et heure < 1 h du matin
then
-- initialisation du timer
fibaro:setGlobal("LampeSalonTV_Timer", fibaro:getGlobalValue("LampeSalonTV_Duree") * 60);
-- modif icone allumé
fibaro:call(selfId, "setProperty", "currentIcon", 1011);
-- allumage lampe
fibaro:call(6, "turnOn");
end
Bon, je laisse aux experts le soin de me dire si cette solution est nickel ou pas.
En attendant elle fonctionne parfaitement.