Dogwhite Posté(e) le 30 décembre 2017 Signaler Posté(e) le 30 décembre 2017 Bonjour à tous, J'ai lu et décortiqué plusieurs posts (Smart light, Very Smart light...Trop compliqués) sur la thématique du déclenchement de l'éclairage suite à détection de mouvement et j'ai testé un script trouvé sur le forum mais cela ne fonctionne pas. Voici les composants : FGMS001 et l'interrupteur Neo Coolcam sur 2 lampes extérieures en série. La cible : Etre en capacité de vérifier le statut de l'interrupteur pour ne pas déclencher la scène s'il est au statut : Allumé Etre en capacité de jouer la scène mais uniquement si le PIR est activé : Paramètre 8 Etre en capacité de déclencher l'éclairage de ces lampes sur détection de mouvements, uniquement si la luminosité est inférieure à X Lux. Etre en capacité d'éteindre ces lampes si pas de détection de mouvements pendant X secondes. Les paramètres du FMGS001 : Capteur exclu du système d'alarme : Coché 1/ 50 2/ 2 3/ 2 impulsions 4/ 2-12 s 6/ 5 s 8/ 2 - Le capteur PIR est actif uniquement durant la nuit pour sauvegarder la longévité de la pile. 9/ 50 Lux 12/ 0 14/ 25 s 16/ 0 20/ 15 22/ 30 s 24/ 0 26/ 0 40/ 25 lux 42/ 1800 s Le reste sans impact sur le script, je pense. Optimisation : Dans ce script, il est fait mention a des horaires mais si le paramètre 8 est à nuit, ils ne sont plus nécessaires, correct ? Le script que j'ai modifié sans succès : --[[ %% properties 64 value 66 value %% globals --]] local id_lampe = 71 local id_mouv_garage = 64 local id_lux_garage = 66 local delayedCheck0 = false; local tempDeviceState0, deviceLastModification0 = fibaro:get(64, "value"); local HeureActuelle = os.date("*t"); -- si il y a plus d'une instance en route alors on arrête if (fibaro:countScenes() > 1) then fibaro:abort() end; -- entre 17h et 8h du matin s'il y a un mouvement et que les lux < à40 alors on allume tant qu'il y a du mouvement -- sinon on éteint après 1 minute de calme if ((HeureActuelle['hour']>= 17 or HeureActuelle['hour'] <= 8) and ( tonumber(fibaro:getValue(id_mouv_garage, "value")) > 0 ) and ( tonumber(fibaro:getValue(id_lux_garage, "value")) <= 40 ) ) then fibaro:call(id_lampe, "turnOn"); fibaro:sleep(60*1000); end if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60) then delayedCheck0 = true; end if ( delayedCheck0 == true ) then fibaro:call(id_lampe, "turnOff") end Mes ID : Merci d'avance pour votre aide.
Dogwhite Posté(e) le 1 janvier 2018 Auteur Signaler Posté(e) le 1 janvier 2018 Bonne année à tous et toutes, Je remonte cette demande d'aide en haut de la pile. Merci pour l'aide
Dogwhite Posté(e) le 2 janvier 2018 Auteur Signaler Posté(e) le 2 janvier 2018 Bonjour, J'ai fait celui-là en créant une variable sur l’état de l'interrupteur pour empêcher le déclenchement de la scène si l'interrupteur est en mode forcé. Je vais le tester ce soir en arrivant à la maison. Si d'ici là vous avez des remarques, je suis preneur. je ne suis, par exemple, pas sur de la position des points virgules. --[[ %% properties 64 value 66 value %% globals --]] local id_lampe = 71 local id_mouv_garage = 64 local id_lux_garage = 66 local delayedCheck0 = false; local tempDeviceState0, deviceLastModification0 = fibaro:get(id_mouv_garage, "value"); local Etat_Inter = fibaro:getValue(71, 'value') -- S'il y a plus d'une instance en route alors on arrête local num = fibaro:countScenes() if num > 1 then fibaro:abort() end; -- Si la lampe est allumée alors on arrête if (Etat_Inter == '1') then fibaro:abort() end; -- Si detection de mouvement, moins de 40 lux alors on allume. if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) > 0 ) and ( tonumber(fibaro:getValue(id_lux_garage, "value")) <= 40 ) ) then fibaro:call(id_lampe, "turnOn"); -- Si pas de detection pendant 1 minute alors on modifie la variable delayedcheck if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60) then delayedCheck0 = true; end -- Si la variable delayedcheck a changée pour valeur "true" alors on eteint if ( delayedCheck0 == true ) then fibaro:call(id_lampe, "turnOff") end; end
Cmoi20 Posté(e) le 2 janvier 2018 Signaler Posté(e) le 2 janvier 2018 (modifié) perso, j'ai crée 2 scénarios : - 1 qui stop le 2nd scénario si en cour et le relance si le nombre de lux est inférieur a une valeur et qu'un mouvement est détecté - le 2nd qui allume la lampe, attends 15 minutes puis l'éteint on pourrait ajouter : - éteindre le 2nd scénario si la lampe est éteinte manuellement. - bypasser l'exécution du 2nd scénario si celui-ci n'était pas en cours d’exécution et que la lampe est déjà allumée. Modifié le 2 janvier 2018 par Cmoi20
Dogwhite Posté(e) le 2 janvier 2018 Auteur Signaler Posté(e) le 2 janvier 2018 @Cmoi20 L'idée de 2 scénarios est séduisante. peux-tu me les envoyer par MP que je jette un coup d’œil ? Cdlt
Dogwhite Posté(e) le 2 janvier 2018 Auteur Signaler Posté(e) le 2 janvier 2018 Résultat des tests : La lampe s'allume sur détection de mouvement mais ne s'éteint pas après 1 minute de calme. Question : delayedCheck0 est une variable qui être créer ? J'ai essayé avec cette variable intégrée dans le panneau mais cela ne change rien au résultat. Où ai-je commis une erreur pour que la lampe de s’éteigne pas ?
Cmoi20 Posté(e) le 2 janvier 2018 Signaler Posté(e) le 2 janvier 2018 (modifié) Voici mes scénarios : Mouvement : --[[ %% killOtherInstances %% properties 244 value 264 value %% weather %% events %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( fibaro:countScenes(20) < 1 ) and ( tonumber(fibaro:getValue(253, "value")) > 0) ) then fibaro:debug("mode forcé") fibaro:abort() end fibaro:debug("Mouvement 1 : " .. tonumber(fibaro:getValue(244, "value"))) fibaro:debug("Mouvement 2 : " .. tonumber(fibaro:getValue(264, "value"))) fibaro:debug("Luminosité 1 : " .. tonumber(fibaro:getValue(246, "value"))) fibaro:debug("Luminosité 2 : " .. tonumber(fibaro:getValue(265, "value"))) fibaro:debug("Lumière : " .. tonumber(fibaro:getValue(253, "value"))) if ( ( ( tonumber(fibaro:getValue(244, "value")) > 0 ) or ( tonumber(fibaro:getValue(264, "value")) > 0 ) ) and ( ( tonumber(fibaro:getValue(246, "value")) < 20 ) or ( fibaro:countScenes(20) > 0 ) ) ) then if (fibaro:countScenes(20) > 0) then fibaro:debug("Kill Scene Lumière") fibaro:killScenes(20) end fibaro:debug("Run Scene Lumière") fibaro:startScene(20); setTimeout(function() fibaro:startScene(19); end, 240000) end Lumière : --[[ %% properties %% weather %% events %% globals --]] fibaro:call(253, "turnOn"); setTimeout(function() fibaro:call(253, "turnOff"); end, 300000) Lumière Stop : --[[ %% properties 253 value %% events %% globals --]] if (tonumber(fibaro:getValue(253, "value")) < 1) then if (fibaro:countScenes(20) > 0) then fibaro:debug("Kill Scene Lumière") fibaro:killScenes(20) end end j'en ai profité pour y inclure les 2 idées évoquées cet après-midi. merci de m'y avoir fait penser. Modifié le 4 janvier 2018 par Cmoi20 correction de bug
Cmoi20 Posté(e) le 2 janvier 2018 Signaler Posté(e) le 2 janvier 2018 j'oubliais, ces idées et bout de codes sont probablement tirés de message d'une ou plusieurs personnes de ce forum. mais je ne sais plus ou j'ai trouvé ces informations exactement. ce forum étant très riche, tout ce que j'utilise vient d'ici.
Dogwhite Posté(e) le 2 janvier 2018 Auteur Signaler Posté(e) le 2 janvier 2018 @Cmoi20 Je vois que ta scène lumière s'éteint seule après 5 minutes, pourquoi avoir une scène Lumière stop ? A quoi te sert l'information Luminosité 2 de ton détecteur de mouvement ID 265 ? Donc en résumé ce n'est pas 2 mais 3 scènes que tu as crées. Très sympa mais un peu lourd à gérer non ? je voyais bien une scène assez simple moi En tout cas merci pour ce retour, je découvre de nouvelles fonctions et suis admiratif du travail produit. Félicitations Si je n'ai pas de retour, j'essayerai les tiennes
Cmoi20 Posté(e) le 3 janvier 2018 Signaler Posté(e) le 3 janvier 2018 Bonjour, la scène lumière stop permet de gérer le fait que l'on a éteint la lumière manuellement dans le cas d'une nouvelle action avant l'expiration des 5 minutes. la luminosité 2 n'est pas utilisée actuellement. cette scène a évoluée dans le temps et j'ai constaté qu'il était préférable de se baser sur une seule luminosité. elle n'est plus la que pour le log. avec les dernières évolutions, oui j'ai du mettre en place une 3eme scène. je ne penses pas que ce soit gênant.
Dogwhite Posté(e) le 3 janvier 2018 Auteur Signaler Posté(e) le 3 janvier 2018 Toutes tes scènes sont en automatiques avec Run 2 instances ?
Cmoi20 Posté(e) le 3 janvier 2018 Signaler Posté(e) le 3 janvier 2018 oui, sauf la scène lumière qui est en run 1 instance.
Dogwhite Posté(e) le 3 janvier 2018 Auteur Signaler Posté(e) le 3 janvier 2018 @Cmoi20 J'ai intégré tes scènes en supprimant le module de détection supplémentaire. Cela fonctionne vraiment bien. Super boulot. Il va falloir que je continue a étudier le LUA
Cmoi20 Posté(e) le 4 janvier 2018 Signaler Posté(e) le 4 janvier 2018 Content que cela te plaise. suite a quelques mises a jour le système ne fonctionnait plus bien chez moi. j'ai donc mis a jour mon poste précédent avec quelques corrections de bug sur le fonctionnement. j'ai ajouté une ligne dans l'entête et un bloc a la fin de la première scène pour rappeler la scène elle-même et éviter que la lumière ne s'éteigne quand le mouvement est toujours actif.
Messages recommandés