Madmyke Posté(e) le 5 août 2017 Signaler Posté(e) le 5 août 2017 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
jojo Posté(e) le 5 août 2017 Signaler Posté(e) le 5 août 2017 en LUA, bien-sûr que c'est possible. La scène se déclenche comme actuellement. Puis tu fais un sleep (ou slip 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
pepite Posté(e) le 6 août 2017 Signaler Posté(e) le 6 août 2017 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
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 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
jojo Posté(e) le 6 août 2017 Signaler Posté(e) le 6 août 2017 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
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 (modifié) 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 ? Modifié le 6 août 2017 par Madmyke
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 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
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 (modifié) Je l'ai refait en plus simple pour la lecture lua: Sans timing Que dit lua ? Merci pour l'aide --[[ %% 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é le 6 août 2017 par Madmyke
jojo Posté(e) le 6 août 2017 Signaler Posté(e) le 6 août 2017 donc, tu vois qu'on peut mettre du rouge dans les conditions? Ca fonctionne comme tu veux ?
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 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
jojo Posté(e) le 6 août 2017 Signaler Posté(e) le 6 août 2017 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)
Madmyke Posté(e) le 6 août 2017 Auteur Signaler Posté(e) le 6 août 2017 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 :-)
Messages recommandés