Aller au contenu

Scene Lua Pour Gérer La Détection De Mouvement


angelz

Recommended Posts

bonjour,

 

j'aimerais l'avis des gourou du lua que vous êtes :-)

 

pour le moment j'utilise 2 scènes pour chaque pièce ou il y a un détecteur de mouvement mais j'aimerais rassemblé tout ça dans Une seule scène mais étant nul en lua je galère

 

voici la une scene ON : 

--[[
%% autostart
%% properties
53 value
%% globals
--]]

local luminosite_min = 2000;
local action = 108;
local mvt_device  = 53;
local mvt = fibaro:getValue(53, "value");
local luminosite = fibaro:getValue(67, "value");

setTimeout(function()
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(mvt_device, "value");
if (( tonumber(fibaro:getValue(mvt_device, "value")) > 0 ) and (os.time() - deviceLastModification0) >= 1) then
	delayedCheck0 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
 ( delayedCheck0 == true )
and
 ( tonumber(luminosite) < tonumber(luminosite_min) )
or
startSource["type"] == "other"
)
then
	fibaro:call(action, "turnOn")
end
end, 2000)

et voici une scène off :

--[[
%% properties
53 value
%% globals
--]]

local action = 108;
local mvt_device  = 53;
local mvt = fibaro:getValue(53, "value");
local luminosite = fibaro:getValue(67, "value");;


local val = fibaro:getValue(mvt_device, "value");
 
setTimeout(function() 
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(mvt_device, "value");
 
fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0);
 
if (( (tonumber(val) == 0) ) and (os.time() - deviceLastModification0) >= 120) then
delayedCheck0 = true;
end
 
if ( delayedCheck0 == true ) then
fibaro:call(action, "turnOffMouvement");
end
end, 120000) ------- fin de lafonction avec delai de 120 secondes
 
--fibaro:debug("End");

tout les avis, aide, commentaire, exemple sont les bien venu :-)

 

 

merci pour votre aide

 

ps : si quelqu'un a une idée pour avec une seule  scène gérer la détection de mouvement dans toutes les pièces il serait mon roi ^^

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

je suis interessé aussi. J'aimerais sur le meme principe avoir une seule scene, qui allume certaines lumières en fonction de différentes variables (jour/nuit, ...) et qui éteint après un certain laps de temps sans detection du capteur.

Lien vers le commentaire
Partager sur d’autres sites

Sur le même principe aussi j'aimerai que FIBARO nous rende la fonction detecteur ...

Un simple detecteur de mvt chez casto allume le spot en question et l'éteint quelques secondes après (définies par les petites vis de reglages en dessous.

Et nous avec notre truc à60 € on est pas foutu d'avoir la même chose !!! Ou alors avec des scripts qui pour moi ressemble àdes "conditions générales de vente" ... !!

C'était mon petit coup de gueule du samedi soir ...!!

Lien vers le commentaire
Partager sur d’autres sites

j'ai essayer avec un if 

si lampe allumé on va a la fonction off

si lampe eteinte on va a la fonction on

 

mais ca passe pas 

 

voici le code

-- Scene Mouvement Hall Entree On with delai
--[[
%% autostart
%% properties
53 value
%% globals
--]]

local luminosite_min = 2000;
local action = 108;
local mvt_device  = 53;
local mvt = fibaro:getValue(53, "value");
local luminosite = fibaro:getValue(67, "value");

local state_action = fibaro:getValue(action, "value");
fibaro:debug("mvt = " .. mvt .. " et la lampe est : " .. state_action);

if(state_action == 0 ) then
	fibaro:debug("lampe off donc on allume ");
	setTimeout(function()
		local delayedCheck0 = false;
		local tempDeviceState0, deviceLastModification0 = fibaro:get(mvt_device, "value");
		if (( tonumber(fibaro:getValue(mvt_device, "value")) > 0 ) and (os.time() - deviceLastModification0) >= 1) then
			delayedCheck0 = true;
		end

		local startSource = fibaro:getSourceTrigger();
		if (
		( delayedCheck0 == true )
		and
		( tonumber(luminosite) < tonumber(luminosite_min) )
		or
		startSource["type"] == "other"
		)
		then
			fibaro:call(action, "turnOnMouvement")
		end
	end, 2000)
end


if(state_action == 1 ) then
	fibaro:debug("lampe off donc on eteint ");
 	setTimeout(function() ------ début de la fonction
		local delayedCheck0 = false;
		local tempDeviceState0, deviceLastModification0 = fibaro:get(mvt_device, "value");
	 
		fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0);
	 
		if (( (tonumber(val) == 0) ) and (os.time() - deviceLastModification0) >= 120) then
			delayedCheck0 = true;
		end
	 
		if ( delayedCheck0 == true ) then
			fibaro:call(action, "turnOffMouvement");
		end
	end, 30000) ------- fin de lafonction avec delai de 30 secondes
end

encore une fois je suis plus que débutant en lua donc ...

Lien vers le commentaire
Partager sur d’autres sites

Sur le principe, il faut bien utiliser un if. Cela fait que quelques semaines que j'ai une HC2 donc je n'aurais pas forcément la réponse directement à  ta question.

 

En revanche, tu peux simuler un débogueur à  défaut d'en avoir un. Essaye de mettre des fibaro:debug comme tu as fait pour avoir la valeur de tes variables avant de rentrer dans le if, en particulier pour le state_action dans ton cas. Peux-tu essayer et nous dire ce qu'il en est ?

Lien vers le commentaire
Partager sur d’autres sites

voila j'ai réussi (je crois a voir a l'usage) a regrouper dans 1 seul script / pièce s'est déjà  ça grace au script : http://www.domotique-fibaro.fr/index.php/topic/4933-settimeout/ de Berale24 (merciiii) 

--[[
%% properties
53 value
53 armed
%% globals
--]]

-- Variable a modifier
local luminosite_min = 2000;
local action_device = 108;
local mvt_device  = 53;
local luminosite_device  = 67;

local mvt = fibaro:getValue(mvt_device, "value");
local luminosite = fibaro:getValue(luminosite_device, "value");

-- La Luminosité est suffisante donc on STOP 
if (tonumber(luminosite) > tonumber(luminosite_min)) then
  fibaro:debug("Luminosite Suffisante : " .. luminosite);
  fibaro:abort();
end
 
fibaro:debug("Start");

local val = fibaro:getValue(mvt_device, "value");
local arm = fibaro:getValue(mvt_device, "armed");
local scenenum = fibaro:countScenes();
 
fibaro:debug("Etat "..val.."  "..arm);
fibaro:debug("scene n "..scenenum);
 
-- premier déclanchement du détecteur
-- on allume et stop
 
if (val == "1" and scenenum == 1) then
  fibaro:call(action_device, "turnOn");
  fibaro:abort();
end
 
-- déclanchements suivants on attend 120s
-- pour éteindre
 
setTimeout(function()
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(mvt_device, "value");
 
 
fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0);
 
if (( (tonumber(val) == 0 and tonumber(arm) == 0) ) and (os.time() - deviceLastModification0) >= 120) then
	delayedCheck0 = true;
end
 
if ( delayedCheck0 == true ) then
	fibaro:call(action_device, "turnOff");
end
end, 120000) 
 
fibaro:debug("End");

 si vous avez des remarque pour optimisé :-)

 

 

est-il possible de faire cela en GEA

 

j'ai parcouru pas mal de sujet sur le GEA et ça a l'air pas mal mais est-ce que cette fonctionnalité :

 

détection -- on allume -- après X min si personne on éteint

 

merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

En gea, cela donnerai sa :

-- Conditions
-- Extinction des spots de facade après 1mn si allumés en Automatique "JOUR_NUIT","NUIT" --
local wcspot = GEA.add( {{"Value", id["SPOT_SALON"], 10}, nuit}, 60,"",{{"turnOff",id["SPOT_SALON"]}}) 
GEA.add({PRESENCEIR, DESARME, nuit}, -1,"",{{"Value", id["SPOT_SALON"], 10}, {"RestartTask", wcspot}})

--Ne se lance que si alarme désarmé et nuit--
Lien vers le commentaire
Partager sur d’autres sites

bonjour,  

 

je me suis mis a gea :-) et s'est pas mal (même si encore un peu obscure pour le moment :-))

 

voila ou j'en suis pour une detection de mouvement 

    -- Détecteur Cuisine (id 40) avec allumage de lampe (id 75)
    -- Chaque détection redémarre le time de la lampe
    GEA.add(id["MVT_CUISINE"], -1, "", {{"turnOn",id["LUSTRE_CUISINE"]}})
    local mvtBuanderie = GEA.add(id["LUSTRE_CUISINE"], 2*60, "", {{"turnOff"}})
    GEA.add(id["MVT_CUISINE"], -1, "", {{"RestartTask", mvtBuanderie}})
  

maintenant j'aimerais faire 2 chose en plus avant d'allumer :

 

1 au lieu de réagir a la chaque détection, vérifier si pendant par exemple 2 sec que le détecteur soit armer (pour éviter les faux positif)

2 vérifier si la luminosité de la pièce est supérieure a une valeur 

 

mais je ne vois pas comment écrire cela

 

merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je sais pas si vous êtes au courant, mais j'ai posté ça dans les tutos :

http://www.domotique-fibaro.fr/index.php/topic/6151-smart-lights-gestion-auto-de-votre-eclairage/

 

A la lecture de ton post angelz et de celui de arnaud.poub, ça a l'air d’être ce que vous cherchez.

Lien vers le commentaire
Partager sur d’autres sites

bonjour, 

 

merci pour l'info j'ai jeter un coup d'oeil mais je ne compremds pas tout pour le moment je vais me pencher la dessus

 

par contre j'ai ca avec le script gea 

To many instances | Scene: GEA
il y a 12 minutes

Number of instances of scene has been reduced due to exceeding limit.

voici ce que j'ai rajouter dans le script pour le moment 

-------------------------
    -- Detection de Mouvement
    -------------------------
	-- Détecteur Hall (id 42 = id["MVT_HALL_ENTREE"]) lampe (id 73 = id["SPOT_HALL_ENTREE"])
    GEA.add(id["MVT_HALL_ENTREE"], -1, "", {{"turnOn",id["SPOT_HALL_ENTREE"]}})
    local mvtHall = GEA.add(id["SPOT_HALL_ENTREE"], 1*60, "", {{"turnOff"}})
    GEA.add(id["MVT_HALL_ENTREE"], -1, "", {{"RestartTask", mvtHall}})
  
  	-- Détecteur WC (id 41 = id["MVT_WC"]) lampe (id 74 = id["LUMIERE_WC"])
    GEA.add(id["MVT_WC"], -1, "", {{"turnOn",id["LUMIERE_WC"]}})
    local mvtWC = GEA.add(id["LUMIERE_WC"], 2*60, "", {{"turnOff"}})
    GEA.add(id["MVT_WC"], -1, "", {{"RestartTask", mvtWC}})
  
    -- Détecteur WC (id 43 = id["MVT_BUANDERIE"]) lampe (id 72 = id["LUMIERE_BUANDERIE"])
    GEA.add(id["MVT_BUANDERIE"], -1, "", {{"turnOn",id["LUMIERE_BUANDERIE"]}})
    local mvtBuanderie = GEA.add(id["LUMIERE_BUANDERIE"], 2*60, "", {{"turnOff"}})
    GEA.add(id["MVT_BUANDERIE"], -1, "", {{"RestartTask", mvtBuanderie}})
  
  	-- Détecteur WC (id 44 = id["MVT_PTIT_BUANDERIE"]) lampe (id 76 = id["LUMIERE_PTIT_BUANDER"])
    GEA.add(id["MVT_PTIT_BUANDERIE"], -1, "", {{"turnOn",id["LUMIERE_PTIT_BUANDER"]}})
    local mvtBuanderie = GEA.add(id["LUMIERE_PTIT_BUANDER"], 2*60, "", {{"turnOff"}})
    GEA.add(id["MVT_PTIT_BUANDERIE"], -1, "", {{"RestartTask", mvtBuanderie}})
  
    -- Détecteur WC (id 40 = id["MVT_CUISINE"]) lampe (id 75 = id["LUSTRE_CUISINE"])
  	GEA.add(id["MVT_CUISINE"], -1, "", {{"turnOn",id["LUSTRE_CUISINE"]}})
    local mvtBuanderie = GEA.add(id["LUSTRE_CUISINE"], 2*60, "", {{"turnOff"}})
    GEA.add(id["MVT_CUISINE"], -1, "", {{"RestartTask", mvtBuanderie}})
  
  

est-ce mal formuler ?

 

merci

Lien vers le commentaire
Partager sur d’autres sites

salut @Angelz,

 

Petit conseil va voir le support GEA plutot pour poser les questions ;-) tu auras plus de chance d'avoir une réponse.

 

sinon, pour l'extinction de lampe avec detection tu peux aussi l'ecrire en 2 lignes plus simples

-- allumage
 GEA.add(id["MVT_HALL_ENTREE"], -1, "", {{"turnOn",id["SPOT_HALL_ENTREE"]}})

-- extinction si plus de mouvement après 1 minute
 GEA.add(id["MVT_HALL_ENTREE"], 1*60, "", {{"Inverse"}, {"turnOff",id["SPOT_HALL_ENTREE"]}})

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...