Je cherche a faire une modification d'un blind pour le rendre en blind percent. En passant par un dummy et en gerant via le temps d'ouverture du volet.
Je peux le coder mais je n'arrive pas, mathematiquement, a reflechir entre un volet qui est deja semi ouvert et qui change pour une autre semi ouverture etc...
Enfin bref je pense que je ne suis pas clair, alors je fourni le debut de mon code ici en esperant avoir vos propositions de simplification et de reflexion, pour les integrer (en mode timeline quoi)...
Pour le code je sépare en deux.
La partie du dummy:
Code : Tout sélectionner
local delai=22
local volet='Volet Baie'
local dummy='Volet'
-- Je securise pour le moment l'utilisation du dummy:
-- Comme il s'agit d'un mouvement chronophage, il ne faut pas qu'il soit modifié avant sa fin.
if lastSeen(dummy) > (otherdevices_svalues[volet]*22)/100 then
-- Si le demande de changement sur le dummy est un pourcentage
if devicechanged[dummy]:match('(%a+) ', 0)=='Set' then
--local valeur = devicechanged['Volet']:match('(%d+)')
local pourcentageDummy = otherdevices_svalues[dummy]
local pourcentageVolet = otherdevices_svalues[volet]
local difference = math.abs(pourcentageDummy - pourcentageVolet)
local temps = math.floor((difference*22)/100)
-- Si la position demandée est inferieur a la position du volet
if pourcentageDummy < pourcentageVolet then
-- J'ouvre le volet et je renvoi l'ordre d'ouvrir apres la difference de pourcentage en temps
commandArray[#commandArray+1]={[volet] = 'Off'}
commandArray[#commandArray+1]={[volet] = 'Off AFTER '..temps}
-- Puis je met a jour le device pour qu'il soit toujours en etat fermé
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[volet]..'|1|0'}
else -- Sinon je referme le volet et je renvoi l'ordre de fermeture apres la difference de pourcentage en temps
commandArray[#commandArray+1]={[volet] = 'On'}
commandArray[#commandArray+1]={[volet] = 'On AFTER '..temps}
end
else
if devicechanged[dummy]=='Open' then
commandArray[#commandArray+1]={[volet] = 'Off'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[volet]..'|2|0'}
else
commandArray[#commandArray+1]={[volet] = 'On'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[volet]..'|2|100'}
end
end
end
En ce qui concerne la partie du volet, je voulais aussi securiser dans le cas ou j'utilise le device du volet sans utiliser le dummy (la télécommande par exemple (WAF)). Soit j'empeche de l'utiliser, soit je detecte les changements et je calcul les pourcentage. Si c'est ouvert depuis plus du delai c'est facile. Mais dans le cas inverse...
Il faut que les valeurs de pourcentage se mettent a jour que quand la télécommande est utilisé(il faudra donc surement l'inclure avec le dummy). Le debut du code:
Code : Tout sélectionner
local delai=22
local volet='Volet Baie'
local dummy='Volet'
--Aux changements via la télécommande, il faut que je change le pourcentage du volet, du dummy et l'etat du dummy
if devicechanged[volet] then
if lastSeen(volet)>delai then
if otherdevices[volet]=='Open' then
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[volet]..'|2|0'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|0|0'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|2|0'}
else
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[volet]..'|2|100'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|1|0'}
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|2|100'}
end
else--probleme ici le calcul fonctionnera si depart depuis 0 ou 100 mais en cas d'inverse
local svalues = otherdevices_svalues[volet]
if svalues~=0 or svalues~=100 then
local calcul = math.floor((lastSeen(volet)*100)/delai)
commandArray['UpdateDevice']=otherdevices_idx[dummy]..'|2|'..calcul
end
end
end