Aller au contenu

Messages recommandés

Posté(e)

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 ...

Posté(e)

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)

 

Posté(e)

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é  :P : 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 :huh: .

Je testerai ce nouveau code ce soir, merci à  vous 3 pour cette aide précieuse et enrichissante pour un noob comme moi.

Posté(e) (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é par pepite
Posté(e)

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  :mellow:

Posté(e)

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.

Posté(e)

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 ;-)

Posté(e)

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)


 

Posté(e)

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).

Posté(e)

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)


 

  • 3 mois après...
Posté(e)

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)

  • Upvote 1
×
×
  • Créer...