pepite Posté(e) le 27 avril 2016 Signaler Posté(e) le 27 avril 2016 La scene ne se declenche que sur un changement de valeur de 40 ou 46, ce qui evite de la faire tourner tout le temps, ce qui explique les "id value" dans l'entete Donc pour que la scene parte et que le debug existe, il faut appuyer sur le bouton d'1 des volets ;-) cela signifie : -- si la scene se declenche par un changement de value, c'est a dire une propriete alors ...
pepite Posté(e) le 2 mai 2016 Signaler Posté(e) le 2 mai 2016 Salut @Tomy34 Merci à D-GK et jojo ;-) Ceci devrait fonctionner, à tester J'ai commenté un peu le code --[[ %% properties 40 value 46 value %% globals --]] --- User Settings ------- local Volets = {40, 46} -- volets local Tempo = 10 -- Temporisation en secs, attente fin de course du volet déclencheur ---------------------------------- -- Limitation à 1 instance ------ if (fibaro:countScenes() > 1) then fibaro:abort() end ------------------------------- -- Declaration Variables ---- local source = fibaro:getSourceTrigger() local declencheur = source["deviceID"] local PositionVR ----- Declaration Fonctions ----------- function GetTrigger() for i = 1, #Volets do if (declencheur == Volets[i]) then PositionVR = fibaro:getValue(Volets[i], "value") fibaro:debug("Position du VR déclencheur : " ..PositionVR) return PositionVR end end end function CallVR() for i = 1, #Volets do if (declencheur ~= Volets[i]) then fibaro:call(Volets[i], "setValue", PositionVR) fibaro:debug("Volet Roulant modifié : " ..Volets[i].. " mis à la position - " ..PositionVR) end end end ----------------------------------- --=========================== --- Execution Programme ----== --=========================== --- Recuperation du Trigger dans le debug ---- fibaro:debug("ID du Déclencheur : " ..declencheur) -- Attente fin de course du volet déclencheur puis Synchro autre volet setTimeout( function() GetTrigger() CallVR() end, Tempo*1000)
Tomy34 Posté(e) le 2 mai 2016 Auteur Signaler Posté(e) le 2 mai 2016 Coucou Pepite, j'ai pas eu le temps de modifier le code que tu m'avais gentiment proposé mais j'ai pu testé quelques manip hier. En fait ma 1ère erreur était d'avoir pas tout copié : j'avais oublié les value en ligne 4 & 5 lol. Bon une fois cette erreur bête de ma part écartée, j'ai pu constater que le VR entrée (fictif) prenait bien la position du VR chambre. Par contre 2 secondes après avoir pris la même position, la scène reprend le VR entrée comme "module déclencheur" avec l'ancienne valeur (ancienne position) et du coup me remonte le VR chambre & et le VR entrée en suivant . Je testerai ce nouveau code ce soir, merci à vous 3 pour cette aide précieuse et enrichissante pour un noob comme moi.
pepite Posté(e) le 2 mai 2016 Signaler Posté(e) le 2 mai 2016 (modifié) ah oui, tres bonne remarque !! Faut certainement rajouter une variable pour que cela ne fasse qu'une fois, ou faire un test de la position du volet avant de le bouger. De cette facon, lorsque les 2 volets sont à la meme position, plus de soucis. Teste ce code et je vois la recup de la position du volet. J'ai pris 5 mins pour remodifier en rajoutant le test de la valeur du volet avant de le bouger ;-) Ca devrait le faire, en tout cas on s'approche de ton beosin --[[ %% properties 40 value 46 value %% globals --]] --- User Settings ------- local Volets = {40, 46} -- volets local Tempo = 10 -- Temporisation en secs, attente fin de course du volet déclencheur ---------------------------------- -- Limitation à 1 instance ------ if (fibaro:countScenes() > 1) then fibaro:abort() end ------------------------------- -- Declaration Variables ---- local source = fibaro:getSourceTrigger() local declencheur = source["deviceID"] local PositionVR ----- Declaration Fonctions ----------- function GetTrigger() for i = 1, #Volets do if (declencheur == Volets[i]) then PositionVR = fibaro:getValue(Volets[i], "value") fibaro:debug("Position du VR déclencheur : " ..PositionVR) return PositionVR end end end function CallVR() for i = 1, #Volets do if (declencheur ~= Volets[i]) then local Valeur = fibaro:getValue(Volets[i], "value") if (Valeur ~= PositionVR) then fibaro:call(Volets[i], "setValue", PositionVR) fibaro:debug("Volet Roulant modifié : " ..Volets[i].. " mis à la position - " ..PositionVR) end end end end ----------------------------------- --=========================== --- Execution Programme ----== --=========================== --- Recuperation du Trigger dans le debug ---- fibaro:debug("ID du Déclencheur : " ..declencheur) -- Attente fin de course du volet déclencheur puis Synchro autre volet setTimeout( function() GetTrigger() CallVR() end, Tempo*1000) Modifié le 2 mai 2016 par pepite
Tomy34 Posté(e) le 2 mai 2016 Auteur Signaler Posté(e) le 2 mai 2016 Re, alors en fait les 2 derniers codes rendent la même chose dans le debug : -j'actionne l'inter du VR chambre (id40) pour passer de la position 50 à 34 -résultat le VR entrée prend bien la modif puis reviens à sa position initiale [DEBUG] 19:00:32: ID du Déclencheur : 40 [DEBUG] 19:00:42: Position du VR déclencheur : 34 [DEBUG] 19:00:42: Volet Roulant modifié : 46 mis à la position - 34 [DEBUG] 19:00:42: ID du Déclencheur : 46 [DEBUG] 19:00:53: Position du VR déclencheur : 50 [DEBUG] 19:00:53: Volet Roulant modifié : 40 mis à la position - 50 [DEBUG] 19:00:53: ID du Déclencheur : 40 [DEBUG] 19:01:03: Position du VR déclencheur : 50 Bizarre il reprend l'ancienne valeur du VR entrée (fictif id46) qui était à 50 et remet alors le VR chambre à 50. Retour à zéro
Tomy34 Posté(e) le 2 mai 2016 Auteur Signaler Posté(e) le 2 mai 2016 De plus sans association, l'inter du VR entrée (fictif id46) ne pilote rien, aucun début non plus. Est-ce nécessaire de faire une association avec ce code pour pouvoir lui permettre de piloter l'autre volet ? Il me semblait que non en lisant le code comme ça. Il y a toujours aussi ce problème de vouloir stopper la course depuis l'inter VR entrée. En association ce n'est possible qu'en envoyant ordre et contre ordre rapidement, ce qui équivaut àappuyer successivement sur "monter""descendre" rapidement.
pepite Posté(e) le 3 mai 2016 Signaler Posté(e) le 3 mai 2016 SAlut, Dans ce cas, enleve le 46 de l'entete et tu ne pourras piloter que depuis le 40. Je ne comprends pas pourquoi ca repart et remet à zéro. Si tu ne veux gerer que depuis le 40 on peut peut-etre penser autrement, mais je croyais que c'etait pas du tout ce que tu voulais. C'est moi le boulet, ca vient des boucles, il fait le code pour les 2 VR mis dans la table, soit 40 et 46 j'améliore ;-)
pepite Posté(e) le 3 mai 2016 Signaler Posté(e) le 3 mai 2016 ca doit etre mieux comme ca, seul la valeur du declencheur est utilisee Pour stopper la course depuis le VR fictif 46, pet-etre qu'en monitorant avec une variable ca peu le faire, du genre : Si VR est 'en cours", (suite à montee/descente du VR chambre) ET appui sur bouton du 46 alors VG à STOP envoie commande STOP au volet Mais je ne sais pas si on peut envoyer une commande STOP à ton volet en lua désolé, tu vas etre oblige de faire plusieurs tests pour qu'on puisse arriver à répondre à ton besoin. --[[ %% properties 40 value 46 value %% globals --]] --- User Settings ------- local Volets = {40, 46} -- volets local Tempo = 10 -- Temporisation en secs, attente fin de course du volet déclencheur ---------------------------------- -- Limitation à 1 instance ------ if (fibaro:countScenes() > 1) then fibaro:abort() end ------------------------------- -- Declaration Variables ---- local source = fibaro:getSourceTrigger() local declencheur = source["deviceID"] local PositionVR ----- Declaration Fonctions ----------- function GetTrigger() for i = 1, #Volets do if (declencheur == Volets[i]) then PositionVR = fibaro:getValue(declencheur, "value") fibaro:debug("Position du VR déclencheur : " ..PositionVR) return PositionVR end end end function CallVR() for i = 1, #Volets do if (declencheur ~= Volets[i]) then local Valeur = fibaro:getValue(Volets[i], "value") if (Valeur ~= PositionVR) then fibaro:call(Volets[i], "setValue", PositionVR) fibaro:debug("Volet Roulant modifié : " ..Volets[i].. " mis à la position - " ..PositionVR) end end end end ----------------------------------- --=========================== --- Execution Programme ----== --=========================== --- Recuperation du Trigger dans le debug ---- fibaro:debug("ID du Déclencheur : " ..declencheur) -- Attente fin de course du volet déclencheur puis Synchro autre volet setTimeout( function() GetTrigger() CallVR() end, Tempo*1000)
Tomy34 Posté(e) le 3 mai 2016 Auteur Signaler Posté(e) le 3 mai 2016 Salut, je veux pouvoir gérer depuis les 2 inter mais le vrai problème est que depuis l'inter du VR fictif (46) on ne peut pas stopper naturellement la course en appuyant de nouveau sur le même bouton poussoir. Initialement c'est surtout pour ça que je souhaitais faire un code en LUA, c'était pour stopper la course depuis le VR fictif. Après ça a dévié sur : pourquoi ne pas avoir la même position sur les 2 VR afin de copier l'état en espérant que ça permette aussi de stopper lors de la course. Pour le moment ce nouveau code renvoie toujours la même chose : [DEBUG] 19:29:26: ID du Déclencheur : 40 [DEBUG] 19:29:36: Position du VR déclencheur : 81 [DEBUG] 19:29:36: Volet Roulant modifié : 46 mis à la position - 81 [DEBUG] 19:29:37: ID du Déclencheur : 46 [DEBUG] 19:29:47: Position du VR déclencheur : 50 [DEBUG] 19:29:47: Volet Roulant modifié : 40 mis à la position - 50 [DEBUG] 19:29:47: ID du Déclencheur : 40 [DEBUG] 19:29:57: Position du VR déclencheur : 50 ça revient à 50 alors que je veux mettre à 81. Sans association, aucun effet depuis le VR fictif (46) sur le VR chambre (40).
pepite Posté(e) le 4 mai 2016 Signaler Posté(e) le 4 mai 2016 salut, Ca tourne en boucle, peut-etre que la temporisation n'est pas assez longue et l'info n'est pas remontée assez vite, dans le debug il repere 2 triggers différents, 40 et 46 value dans l'entete. Je vais ecrire le code sans boucle pour vérifier le fonctionnement. Je viens de comprendre ce qu'il se passait en relisant le debug ;-) A 19:26:36, ok ca declenche avec le trigger (debut scene) Tempo de 10 A 19:29:36 : Recup de la valeur du trigger, puis call de l'autre volet, normal (fin de scene) A 19:29:37 : soit 1 sec apres il a relance la scene suite au call de 46 (debut scene) Un simple sleep pour permettre d'attendre la fin de position du 2eme VR va peut-etre fonctionner, la scene ne sera pas terminée, le changement de position du 2eme volet ne devrait pas la relancer A tester J'avoue que je ne vois pas comment gerer l'arret depuis le VR fictif. Quand ce code fonctionnera comme tu le souhaites on se creusera plus la tete avec une variable peut-etre Sinon, as tu la possibilité de changer l'interr ou d'en remettre un a cote. Tu connais celui la : c'est pe une idee https://www.domotique-store.fr/domotique/usages/eclairage-et-ambiances-par-domotique/boutons-interrupteur-emetteurs-sans-fil-domotique/520-philio-psr04-smart-color-button-bouton-rotatif-emetteur-mural-z-wave.html --[[ %% properties 40 value 46 value %% globals --]] --- User Settings ------- local Volets = {40, 46} -- volets local Tempo = 10 -- Temporisation en secs, attente fin de course du volet déclencheur ---------------------------------- -- Limitation à 1 instance ------ if (fibaro:countScenes() > 1) then fibaro:abort() end ------------------------------- -- Declaration Variables ---- local source = fibaro:getSourceTrigger() local declencheur = source["deviceID"] local PositionVR ----- Declaration Fonctions ----------- function GetTrigger() for i = 1, #Volets do if (declencheur == Volets[i]) then PositionVR = fibaro:getValue(declencheur, "value") fibaro:debug("Position du VR déclencheur : " ..PositionVR) return PositionVR end end end function CallVR() for i = 1, #Volets do if (declencheur ~= Volets[i]) then local Valeur = fibaro:getValue(Volets[i], "value") if (Valeur ~= PositionVR) then fibaro:call(Volets[i], "setValue", PositionVR) fibaro:debug("Volet Roulant modifié : " ..Volets[i].. " mis à la position - " ..PositionVR) fibaro:debug("Début Sleep du CallVR") fibaro:sleep(Tempo*1000) fibaro:debug("Fin Sleep du CallVR") end end end end ----------------------------------- --=========================== --- Execution Programme ----== --=========================== --- Recuperation du Trigger dans le debug ---- fibaro:debug("ID du Déclencheur : " ..declencheur) -- Attente fin de course du volet déclencheur puis Synchro autre volet setTimeout( function() GetTrigger() CallVR() end, Tempo*1000)
Tomy34 Posté(e) le 24 août 2016 Auteur Signaler Posté(e) le 24 août 2016 Coucou, bon après 3 mois de réflexion... non je rigole j'ai pas mis le nez dans la domotique depuis nos derniers échanges. Merci @pepite pour toute la réflexion que tu as mis dans ton code, mais celui-ci ne me donne rien de plus qu'une simple association. En gros ça permet de lancer l'ouverture complète ou la fermeture complète mais je ne sais pas pourquoi, le FGRM 222 du Volet Roulant fictif ne prend pas en compte la position. CQFD abandon de la solution codage, je me suis boosté de courage pour aller crawler dans mon faux plafond rempli de laine de verre et passer un cable pour doubler la commande (comme le disait @Doclpp ) Bref merci à tous pour vos échanges sur le sujet. Je me rends compte petit à petit que même si Fibaro est beau et assez flexible avec les scènes, il en reste pas moins que les limitations hardware &/ou software poussent à simplifier les branchements. Sujet résolu (ou abandonné c'est selon) 1
Messages recommandés