Doudoubidou Posté(e) le 3 janvier 2020 Signaler Posté(e) le 3 janvier 2020 (modifié) Hello tous, Tout d'abord merci à la communauté car sans vous, je crois que la gestion domotique en générale ne serait vraiment pas simple :p J'aurais besoin d'un petit coup de pouce ... pour me corriger ou me proposer quelque chose de plus simple ^^ J'explique ce que je souhaite faire : - J'ai une lumiere géré par un FGD212 - J'ai un détecteur avec l'Oeil - lorsque quelqu'un entre dans la pièce, la lumière s'allume ... bon jusque là rien de sorcier meme moi j'y arrive Ca se complique pour éteindre ... je voudrais que la lumière reste tant que l'oeil perçoit de l'activité et que ca s'éteigne par exemple 5 min après la dernière activité perçue. D'une manière "simple" j'ai pas réussi. J'ai donc créé 2 scènes : - La première vérifie si l'oeil s'active et si c'est le cas, il donne la valeur "1" a une variable globale : --[[ %% properties 102 value %% events %% globals --]] local VALUE_SENSOR_C = fibaro:getValue(102, 'value') -- Si le détecteur des combles est activé, -- alors on applique la valeur 1 à la variable globale Detect_Combles_Val if (VALUE_SENSOR_C == '1') then fibaro:setGlobal('Detect_Combles_Val', 1) end - la deuxième scène attend 1 min après la dernière détection de l'oeil et affecte la valeur 0 à la variable global. Si la variable global est inchangée par l'autre scene (donc les deux variables sont à 0) on éteint, sinon on laisse allumé. J'ai pris soin de mettre la variable global dans %% globals pour que la scène s'active en cas de changement de la variable globale --[[ %% properties 121 value 102 value %% events %% globals Detect_Combles_Val --]] local VALUE_SENSOR_C = fibaro:getValue(102, 'value') local LUM_COMBLES = fibaro:getValue(121, 'value') local D_Combles_Val = fibaro:getGlobalValue('Detect_Combles_Val') -- Si détecteur combles s'active, j'attends 1 min et je met la Var Globale à 0 if (VALUE_SENSOR_C == '1') then fibaro:sleep(60000) -- attend 1 min fibaro:setGlobal('Detect_Combles_Val', 0) end -- Dans le cas ou il n'y plus d'activité, on éteint. -- Si activité, la Scène "Check Detect Combles" remettra la Var Globale à 1 dans -- l'autre scene if (VALUE_SENSOR_C == '0') then D_Combles_Val = fibaro:getGlobalValue('Detect_Combles_Val') if (D_Combles_Val == '0') then fibaro:call(121, 'turnOff') end end Modifié le 3 janvier 2020 par Doudoubidou
Doudoubidou Posté(e) le 3 janvier 2020 Auteur Signaler Posté(e) le 3 janvier 2020 oups ... ... la fin Mais voila, ca ne s'éteint pas Une idée ? et surtout, y a t-il pas plus simple ? Merci pour votre aide !
Barelle Posté(e) le 3 janvier 2020 Signaler Posté(e) le 3 janvier 2020 J'entrevois une cause : Dans les ordres fibaro:setGlobal, la valeur est numérique, et lors du test sur la valeur (if (D_Combles_Va l == '0') then) il s'agit d'une chaîne de caractères.
Doudoubidou Posté(e) le 3 janvier 2020 Auteur Signaler Posté(e) le 3 janvier 2020 Hello, mmmh, j'ai testé mais c'est bien avec '0' qu'il faut mettre ... D'ailleurs ma scene fonctionne bien, lorsque je sors de la piece, et que j'attends assez, la Var global repasse bien a 0. Et si j'execute ma scene manuellement, la lampe s'éteint correctement. Le problème est que la scène ne se rééxecute pas toute seule !? Pourtant en mettant ca je pensais que la scene se lançait toute seul lors du changement de la var globale ? : %% globals Detect_Combles_Val
Barelle Posté(e) le 3 janvier 2020 Signaler Posté(e) le 3 janvier 2020 Je maintiens mon diagnostic 0 et '0' ! fibaro:setGlobal('Detect_Combles_Val', 0) ... D_Combles_Val = fibaro:getGlobalValue('Detect_Combles_Val') if (D_Combles_Val == '0') then Ta scène s'exécute bien deux fois, ajoute un fibaro:debug en tête pour t'en assurer. Lors du passage de la variable globale à 0, une nouvelle scène est lancée, et la scène continue à s'exécuter mais suite à la confusion entre '0' et 0, le test échoue. Pour la même raison la nouvelle scène ne fait rien.
Doudoubidou Posté(e) le 3 janvier 2020 Auteur Signaler Posté(e) le 3 janvier 2020 Merci pour ton retour Barelle, je viens de tester et le résultat est : La valeur de la variable globale est bien changée dans les 2 cas et le renvoie Fibaro:debug donne le meme résultat. Mais la scene ne se relance pas. Par contre si je fais "démarrer" sur la scene manuellement, alors elle s'execute correctement et éteint les lumières avec le '0' mais ne le fait pas avec 0 sans cote. Donc il interprète apparement correctement avec les cotes. Mais toujours pas de relance de la scène :'(
Barelle Posté(e) le 3 janvier 2020 Signaler Posté(e) le 3 janvier 2020 Oups, j'ai été soumis à une certaine confusion qui m'a fait écrire de fausses assertions. La scène ayant été déclenchée par un changement de valeur de la variable globale ne sera pas redéclenchée par un changement de la valeur de la même variable globale, il me semble bien, mais sans être catégorique, que dans des versions précédentes nous n'avions pas ce comportement. Pour ton cas précis, je ne vois pas très bien en quoi cela altère le comportement attendu.
Barelle Posté(e) le 3 janvier 2020 Signaler Posté(e) le 3 janvier 2020 Tu avais évoqué la possibilité de faire plus simplement, je te propose une seule scène que je n'ai pas testé : --[[ %% properties 102 value --]] local lumComblesId = 121; local sensorComblesId = 102; local delai = 60; -- en secondes if fibaro:getValue(lumComblesId, 'value') == "0" then -- C'est éteint fibaro:abort(); -- Il n'y a rien à faire, on sort end if fibaro:countScenes() > 1 then -- Une seule scène active fibaro:abort(); end fibaro:sleep(delai * 1000); -- On attend le delai exprimé en secondes local temps = os.time() - fibaro:getModificationTime(sensorComblesId, 'value'); -- temps écoulé depuis la dermière modification if temps > delai then fibaro:call(lumComblesId, 'turnOff'); -- alors on éteint end
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 (modifié) moi j‘utilise ça : Le principe est que tant qu‘il voit l’œil est à 1, elle boucle sur elle-même. Il faut bien rapamétrer l’œil car c’est lui qui : - va déterminer la durée où la lumière est allumée : paramètre 6 - Alarme cancellation delay (le temps que tu veux en secondes) - autorise une nouvelle détection après la précédente : paramètre 2 - blind time (2 secondes dans mon cas) J’ai toute la maison qui fonctionne comme ça. Marche nickel. Cette scène peut être utilisée pour plusieurs pièces (j’en ai une pour toute la maison) Il suffit d‘ajouter : - l‘ID du capteur dans les trigger (XXX value). - une ligne dans la liste “Device“ pour connaître le l‘ID du FGD ou autre. Et mettre le nombre d‘instance de la scène au maximum (10). Je pense pas que 10 capteurs vont passer à 1 simultanément, donc on est tranquille --[[ %% properties XXX value YYY value --]] local Device = { --[ID_PIR] = {ID = ID_Actuator, NAME = "Room Name"} [XXX] = {ID = zzz, NAME = "Pièce 1"}, [YYY] = {ID = www, NAME = "Pièce 2"}, } local Trigger = fibaro:getSourceTrigger() --si PIR = ON if tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 then print("PIR", Trigger.deviceID, " = ON") --allumage fibaro:call(Device[Trigger.deviceID].ID, "turnOn") --boucle tant qu'il y a de l'activité (ça rajoute max 3 secondes au temps du paramètre 6) while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do fibaro:sleep(3*1000) end --extinction fibaro:call(Device[Trigger.deviceID].ID, "turnOff") print("PIR", Trigger.deviceID, " = OFF") end Possibilité de rajouter une marche forcée gérée par un VD et une VG par pièce. Modifié le 4 janvier 2020 par jjacques68
Doudoubidou Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 Je viens de me réveiller ^^ Je regarde et teste tout ca et vous reviens ! Merci.
Doudoubidou Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 (modifié) Merci à vous deux J'ai repris la scène de Jacques68 qui me semble intéressante et permet de réduire le nombre de mes scènes ... J'ai modifié comme suit : --[[ %% properties 102 value --YYY value %% events %% globals --]] local Device = { ---[ID_PIR] = {ID = ID_Actuator, NAME = "Room Name"} [102] = {ID = 121, NAME = "Combles"}, ---[YYY] = {ID = www, NAME = "Pièce 2"}, } local Trigger = fibaro:getSourceTrigger() --si PIR = ON if tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 then print("PIR", Trigger.deviceID, " = ON") --allumage fibaro:call(Device[Trigger.deviceID].ID, "turnOn") --boucle tant qu'il y a de l'activité (ça rajoute max 3 secondes au temps du paramètre 6) while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do fibaro:sleep(3*1000) end --extinction fibaro:call(Device[Trigger.deviceID].ID, "turnOff") print("PIR", Trigger.deviceID, " = OFF") end Et j'ai configuré mon Oeil avec les param suivant : paramètre 6 : 1 min paramètre 2 : valeur 3 (doit correspondre à 2 sec) Mais lorsque j'exécute la scène, il me renvoie ce message : [DEBUG] 10:29:35: 2020-01-04 10:29:35.811984 [ fatal] Unknown exception: /opt/fibaro/FibaroSceneAPI.lua:116: attempt to concatenate local 'deviceId' (a nil value) Modifié le 4 janvier 2020 par Doudoubidou
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 ah attend ... je regarde (j‘ai fais un copié collé...)
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 oui alors en fait tu peux pas l‘exécuter manuellement ! il faut que le PIR déclenche lui-même la scène !
Doudoubidou Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 J'ai réessayé en mettant le param 6 à 30 sec pour que ca soit moins long. Ca marche niquel !! C'est top Merci. Je vais y ajouter une condition pour que ça ne s'active pas dans la journée. Merci pour votre aide c'est top et comme ca j'ai appris un peu plus du code et des paramètres de ma Fibaro Bonne journée à vous
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 ben pour la condition, tu peux l’utiliser le seuil des lux dans les paramètres du PIR
Doudoubidou Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 ah oui, c'est une bonne option en effet ... je vais voir comment ca marche
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 Paramètre 9 il me semble... Bon moi je le gère par code dans la même scène... Je sais plus trop pourquoi...
Doudoubidou Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 Paramètre 8 et 9 ... ca marche niquel 1
Doudoubidou Posté(e) le 5 janvier 2020 Auteur Signaler Posté(e) le 5 janvier 2020 Re, Mon retour d'expériences après quelques jours ... Bon, en fait mon détecteur de luminosité marche bizarrement et me renvoie des valeurs pas très cohérentes En cherchant sur les forum, j'ai l'impression que beaucoup de monde se plaignent du même genre de pb Je vais revenir sur les conditions a base d'horaires (dommage :/) Mais bien dommage que la luminosité ne marche pas bien
jjacques68 Posté(e) le 5 janvier 2020 Signaler Posté(e) le 5 janvier 2020 Oui je constate aussi que les valeurs sont pas toujours fiables...Envoyé de mon iPhone en utilisant Tapatalk Pro
Messages recommandés