Aller au contenu
Madmyke

Aide détecteur de fumée Fibaro

Recommended Posts

Bonjour

 

N'ayant pas eu de réponse à mes précédentes question je tente une dernière fois ce forum.  (merci de me dire si je fais les choses de travers)

 

J'ai une scène qui fonctionne et qui fait gueuler deux alarmes si un des détecteurs (6) se met en alarme.

 

La question est: je souhaiterai faire une "temporisation" sur la détection de fumée.  A savoir ne déclencher l'alarme que si le détecteur de fumée Fibaro est en alerte plus de 3 secondes consécutives. Pour éviter les fausse alertes.

 

Est ce possible ?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

en LUA, bien-sûr que c'est possible.

La scène se déclenche comme actuellement.

Puis tu fais un sleep (ou slip :P en fonction de ton humeur) de 3 sec.

tu re-testes si un des 6 déclencheurs est toujours activé.

Si oui => sirènes

Si non => re-dodo

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, il arrive que nous rations des messages. Nous ne sommes que des êtres humains en période estivale ;-)
Oui tu peux, et je dirais meme sleep ou setTimeout :+)

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à vous deux pour la réponse :-)

 

C'est bien ce que je "craignais", solution en lua que je ne maitrise pas encore. Depuis j'ai "découvert" à quoi sert (en mode bloc) le paramètre en "rouge" il semble que je puisse m'en servir pour ça. je vais tester ça pour voir si ça peut fonctionner.

N'étant pas du tout programmeur le mode bloc me permet d'avancer et quand ça marche, je fais un copy de la scène, puis je converti en lua juste pour lire le contenu. Progressivement je pense que j'arriverai à comprendre ce fameux lua.

 

Bon WE

Partager ce message


Lien à poster
Partager sur d’autres sites

si tu utilises le rouge du mode bloc, tu vas simplement faire un délais pour déclencher ta sirène, mais il ne refera pas le test => si entretemps le détecteur n'est plus déclenché, ça va crié. Et tu n'auras pas solutionné ton problème ... (en fait ce que je viens de dire, c'est si tu utilises le rouge dans les actions)

Ty devrais utiliser le rouge dans les conditions, et là ça pourrait fonctionner

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Jojo

 

Question: le rouge n'existe pas dans les conditions mais dans les actions ou alors je ne sais pas ou :-)  Du coup c'est mort ou j'ai raté quelque chose ?  ;)

Si oui, tu as raison je pensais que si je mettais 3 secondes sur une détection (action ?)

 

Exemple simple non pas du scénario mais pour montrer ce qui est disponible

 

Du coup que ce passerait-il si je le joue comme ça ?

2017-013.png

 

Modifié par Madmyke

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà ce que ça donnerait en conversion lua

 

--[[
%% autostart
%% properties
100 value
%% weather
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local startSource = fibaro:getSourceTrigger();
if(startSource["type"] == "other") then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 60000)
else
if (( tonumber(fibaro:getValue(100, "value")) > 0 ) and ( tonumber(fibaro:getValue(100, "value")) > 0 )) then
local currentDate = os.date("*t");
local delayedCheck0 = false;
if ( tonumber(fibaro:getValue(100, "value")) > 0 ) then
    delayedCheck0 = true;
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(100, "value");
if (( tonumber(fibaro:getValue(100, "value")) > 0 ) and (os.time() - deviceLastModification1) >= 3) then
    delayedCheck1 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and os.date("%H:%M", os.time()-45*60) == fibaro:getValue(1, "sunsetHour")) )
and
 ( delayedCheck0 == true  and  delayedCheck1 == true )
)
then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 60000)
end
end, 3000)
end
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else

local startSource = fibaro:getSourceTrigger();
if(startSource["type"] == "other") then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 60000)
else
if (( tonumber(fibaro:getValue(100, "value")) > 0 ) and ( tonumber(fibaro:getValue(100, "value")) > 0 )) then
local startSource = fibaro:getSourceTrigger();
if(startSource["type"] == "other") then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 60000)
else
if (( tonumber(fibaro:getValue(100, "value")) > 0 ) and ( tonumber(fibaro:getValue(100, "value")) > 0 )) then
local currentDate = os.date("*t");
local delayedCheck0 = false;
if ( tonumber(fibaro:getValue(100, "value")) > 0 ) then
    delayedCheck0 = true;
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(100, "value");
if (( tonumber(fibaro:getValue(100, "value")) > 0 ) and (os.time() - deviceLastModification1) >= 3) then
    delayedCheck1 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and os.date("%H:%M", os.time()-45*60) == fibaro:getValue(1, "sunsetHour")) )
and
 ( delayedCheck0 == true  and  delayedCheck1 == true )
)
then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 60000)
end

end

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je l'ai refait en plus simple pour la lecture lua: Sans timing

 

Que dit lua ?  Merci pour l'aide

 

2017-014.png

 

--[[
%% properties
18 value
%% weather
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if(startSource["type"] == "other") then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 30000)
else
if (( tonumber(fibaro:getValue(18, "value")) > 0 ) and ( tonumber(fibaro:getValue(18, "value")) > 0 )) then
local delayedCheck0 = false;
if ( tonumber(fibaro:getValue(18, "value")) > 0 ) then
    delayedCheck0 = true;
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(18, "value");
if (( tonumber(fibaro:getValue(18, "value")) > 0 ) and (os.time() - deviceLastModification1) >= 3) then
    delayedCheck1 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
 ( delayedCheck0 == true )
and
 ( delayedCheck1 == true )
or
startSource["type"] == "other"
)
then
    fibaro:call(76, "turnOn");
    setTimeout(function()
        fibaro:call(76, "turnOff");
    end, 30000)
end
end, 3000)
end
end

Modifié par Madmyke

Partager ce message


Lien à poster
Partager sur d’autres sites

donc, tu vois qu'on peut mettre du rouge dans les conditions? Ca fonctionne comme tu veux ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ha bon ? Pour moi on était pas dans les conditions mais actions, question de vocabulaire j'imagine.

 

Le second lua semble correct à tes yeux ?

 

Pas encore testé (faut que je fasse ça quand madame n'est pas là au risque de lui casser les oreilles.  Ha oui mais non je peux tester en remplaçant la sirène par une lampe :-)

Je vais regarder ça cet après midi, merci

Partager ce message


Lien à poster
Partager sur d’autres sites

les 2 premières lignes (avant le alors) sont les conditions.

Après le alors, ce sont les actions.

Cela fait 7 mois que je n'ai vu une ligne de LUA, et je n'ai jamais aimé le code généré par la box, c'est trop complexe (je n'ai plus de HC2 depuis janvier 2017)

Partager ce message


Lien à poster
Partager sur d’autres sites

Sur le code je ne peux pas me prononcer :-)

 

Merci pour les précisions et je confirme, je viens de tester mon petit scénario Bloc et de fait ça marche très bien, si je mets le détecteur en alarme avec un délai de 15 secondes entre les 2 conditions et que je laisse en alerte, mon lampadaire s'allume et si je stoppe l'alarme avant les 15 secondes rien ne se passe.

Voilà donc ma réponse à ma question: oui on peut le faire en bloc  sans aucun soucis:-)

 

Merci à tous

 

PS: pour la complexité je suis d'accord , il faut quasi être programmeur alors que le mode bloc est accessible mais pas assez complet, j'avais un système X10 il y a quelque années et le module qui permettait de programmer des actions en mode graphique était mieux foutu que celui de fibaro.

Mais bon pour le reste Fibaro a des atout dans les miniaturisations et je ne vais pas réinvestir dans un autre système, ce serait trop cher.

 

Merci pour ton aide, c'est les différentes réponses qui me poussent à réfléchir parfois sous un autre angle :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

×