Aller au contenu

Scène Disfonctionnement: Gestion Lumière


MasterBT

Messages recommandés

Hello,
Voila j'ai une scène qui gère l'allumage automatique de ma cuisine.
 
Un motion sensor (n°150) pour le capteur de mouvement + luminosité
Les éclairages: Cuisine n°16 et plan de travail n°17 sont branché sur un IPX donc piloté via des VD.
L'allumage auto allume la cuisine mais l'arrête doit s'appliquer sur Cuisine + Plan de travail.
C'est une scène que j'avais copier de notre ami en Dordogne.
 
1er mouvement si luminosité < xx on allume
Puis temps qu'il y à  du mouvement on reste allumé
Si pas de mouvement pendant plus de xx seconde alors on stop tout.
 
Cette scène à  bien tournée pendant pas mal de temps et puis un jour, l'arrête auto ne marchait plus.
 
Etant assez fatigué et la tête dans le cul en se moment en temps que nouveau papa, j'ai cherché rapidement la cause (Capteur, VD, reboot, etc..)
Alors soit j'ai modifier la scène un jour où j'aurais pas du m'approcher du clavier soit...
Bref ca n'a rien d'urgent, mais des fois au lieu de chercher pendant pas mal de temps, un regard neuf peut apporter une réponse rapide:
 
 

--[[
%% properties
150 value
%% globals
--]]
 
 
fibaro:debug("Start");
 
local val = fibaro:getValue(150, "value");
local lumino = fibaro:getValue(152, "value");
local scenenum = fibaro:countScenes();
 
fibaro:debug("Etat "..val);
fibaro:debug("Luminosité "..lumino);
fibaro:debug("scene n "..scenenum);
 
-- premier déclanchement du détecteur
-- on allume et stop la scène
 
if (val == "1" and scenenum == 1 and tonumber(lumino) <= 55) then
  fibaro:debug("On allume")
  fibaro:call(16, "pressButton", "1")
  fibaro:abort();
end
 
-- déclanchements suivants on attend XXs
-- pour éteindre
 
setTimeout(function()
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(150, "value");
 
 
fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0);
 
if (( (tonumber(val) == 0) ) and (os.time()  - deviceLastModification0) >= 26) then
delayedCheck0 = true;
end
 
if ( delayedCheck0 == true ) then
       
fibaro:debug("On stop")
fibaro:call(16, "pressButton", "2")
fibaro:call(17, "pressButton", "2");
end
end, 20000)
 
fibaro:debug("End");
Lien vers le commentaire
Partager sur d’autres sites

Salut,

C'est le mec de la Dordogne sous un soleil de mois de mai :P

Ce qui me choque dans ta scène est que tu mets 26 secondes en ligne 38 et que le settimeout s'arrête au bout de 20 secondes.

Donc tu ne peux pas atteindre ton délai.

@jojo: settimeout n'est pas une fonction mais une instruction qui englobe une fonction. On n'appelle donc pas settimeout.

Lien vers le commentaire
Partager sur d’autres sites

Salut Berale,

Effectivement, j'étais à  16s, je sais qu'il faut pas toucher aux scènes la tête dans le #@çè, 

Avec 26s ca pouvait pas le faire.

Merci, tu m'a fais gagné du temps :).

 

Et encore merci pour la scène au fait.

J'ai plusieurs pièces en auto de cette façon

100% WAF  :60:

 

Par contre pour le coup dans certaines pièces, je rentre et j'attends comme un con que la lumière s'allume.. 

Puis au bout d'une seconde, je me dis: Appuis sur l'inter sinon ca va pas le faire ^^

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...