angelz Posté(e) le 23 janvier 2016 Signaler Posté(e) le 23 janvier 2016 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 ^^
arnaud.poub Posté(e) le 23 janvier 2016 Signaler Posté(e) le 23 janvier 2016 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.
Rem's Posté(e) le 23 janvier 2016 Signaler Posté(e) le 23 janvier 2016 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 ...!!
angelz Posté(e) le 25 janvier 2016 Auteur Signaler Posté(e) le 25 janvier 2016 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 ...
D-GK Posté(e) le 25 janvier 2016 Signaler Posté(e) le 25 janvier 2016 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 ?
mprinfo Posté(e) le 25 janvier 2016 Signaler Posté(e) le 25 janvier 2016 Cela pourrait aussi t intéressé http://www.domotique-fibaro.fr/index.php?/topic/7313-Vd---Visualisation-Ouverture,-Detection-De-Mouvements,-Variable-Globale Envoyé de mon SM-G900F en utilisant Tapatalk
angelz Posté(e) le 25 janvier 2016 Auteur Signaler Posté(e) le 25 janvier 2016 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
D-GK Posté(e) le 25 janvier 2016 Signaler Posté(e) le 25 janvier 2016 Ca me semble bien plus optimisé (et lisible). Et en plus ça marche ! Pour le GEA, je laisse les spécialistes, j'ai pour ma part fait le choix de ne pas l'utiliser. 1
Berale64 Posté(e) le 25 janvier 2016 Signaler Posté(e) le 25 janvier 2016 J'avais fait un tuto sur le sujet. http://www.domotique-fibaro.fr/index.php/topic/4933-settimeout/?p=74497 Attention au nombre d'instance dans ce genre d'exercice ! 1
Syris Posté(e) le 25 janvier 2016 Signaler Posté(e) le 25 janvier 2016 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--
angelz Posté(e) le 31 janvier 2016 Auteur Signaler Posté(e) le 31 janvier 2016 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
Ez3kiel Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 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.
angelz Posté(e) le 31 janvier 2016 Auteur Signaler Posté(e) le 31 janvier 2016 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
pepite Posté(e) le 2 février 2016 Signaler Posté(e) le 2 février 2016 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"]}})
Messages recommandés