Page 1 sur 1
Ouverture volet en pourcentage
Publié : 28 déc. 2020, 09:14
par drabo
Bonjour,
J'aurais aimé ouvrir mes volets en pourcentage.
Mon installation : Par du RFXCom je pilote des chacon pour les volets roulants. Ces Chacon n'ont pas de retour d'information et pas de possibilité de donner un pourcentage par l'intermédiaire d'un interrupteur "Blind Pourcentage Inverted".
Même si cela n'est pas précis au millimètre, j'aurais aimé calculer le temps que met le volet pour monter en entier et appliquer, un calcul pour émettre deux fois la commande au bout de x secondes.
Pensez vous que cela soit possible ? et comment faire ?
Merci de votre aide
Re: Ouverture volet en pourcentage
Publié : 28 déc. 2020, 11:17
par manu663
Bonjour,
Oui bien sûr c'est possible!
Pour ma part, j'ai fait ça en blocky. J'envoie une impulsion "ON" pour commencer la fermeture du volet puis je renvoie la même impulsion "ON" au bout de 10 secondes (quand mon volet à atteint la position désirée).
A ton chrono !
A noter que sur l'image ci dessous les premières commandes sont en % car tous les accès exterieurs sont gérés en Z wave.

Re: Ouverture volet en pourcentage
Publié : 28 déc. 2020, 11:32
par Wolfen38
et le fait de renvoyer la meme commande bloc le volet ? c'est etrange
Re: Ouverture volet en pourcentage
Publié : 28 déc. 2020, 11:34
par manu663
Oui en 433Mhz les commandes identiques successives arrêtent le mouvement.
Re: Ouverture volet en pourcentage
Publié : 28 déc. 2020, 11:40
par Wolfen38
ah ok
Re: Ouverture volet en pourcentage
Publié : 29 déc. 2020, 11:02
par drabo
Bonjour et merci pour votre aide.
Cependant j'ai un problème : j'ai fait un script lua sur "device" que je n'ai pas terminé. je vous joins le code ici :
Code : Tout sélectionner
commandArray = {}
local volet='Fenêtre cuisine'
local tempsOuverture = 12
local varPosition = 'PosVoletCuisine'
-- for i, v in pairs(devicechanged) do print(i, v) end
-- print('########Test_volet_roulant')
if (devicechanged[volet])
then
valeur = tonumber(otherdevices_svalues[volet])
if devicechanged[volet] == 'Open'
then
pourcentage = 100
else
if devicechanged[volet] == 'Closed'
then
pourcentage = 0
else
pourcentage = valeur *100 /15
end
end
print ("Récupération du dernier pourcentage du volet "..volet.." : "..uservariables[varPosition])
print ("Valeur en pourcentage : "..pourcentage.."%")
if pourcentage > uservariables[varPosition]
then
-- Calcul du temps d'ouverture
tempsOuverture = (pourcentage - uservariables[varPosition]) * tempsOuverture / 100
commandArray[volet] = "On"
commandArray[volet] = "On AFTER "..tempsOuverture
commandArray ['Variable:PosVoletCuisine'] = tostring(pourcentage)
print "Il faut ouvir :"
else
if pourcentage < uservariables[varPosition]
then
-- Calcul du temps de fermeture
tempsOuverture = (uservariables[varPosition] - pourcentage) * tempsOuverture / 100
commandArray[volet] = "Off"
commandArray[volet] = "Off AFTER "..tempsOuverture
commandArray ['Variable:PosVoletCuisine'] = tostring(pourcentage)
print "Il faut fermer :"
else
print "On ne fait rien"
end
end
end
return commandArray
Mon problème est que lorsque je lance les commandes On ou Off, je perds la position du volet car il y a en fait trois évènements qui sont exécutés. Avez vous une idée de ce que je pourrais faire ?
Merci de votre aide
Re: Ouverture volet en pourcentage
Publié : 30 déc. 2020, 06:23
par denis_brasseur
Pas sur de comprendre ce que tu entend par
je perds la position du volet car il y a en fait trois évènements qui sont exécutés
Une chose de sur, en utilisant ceci
Code : Tout sélectionner
commandArray[volet] = "On"
commandArray[volet] = "On AFTER "..tempsOuverture
seul le dernier ordre sera exécuté. Utilise plutot ceci
Code : Tout sélectionner
commandArray[#commandArray+1] = {[volet] = 'On'}
commandArray[#commandArray+1] = {[volet] = 'On AFTER '..tempsOuverture}
Idem pour la commande Off
Re: Ouverture volet en pourcentage
Publié : 30 déc. 2020, 09:54
par drabo
Bonjour,
Merci pour le renseignement. Effectivement, il faut indexer la 'CommandArray' si plusieurs instructions sur le même device.
Je me suis mal expliqué : je précise :
j'utilise un dispositif de type "Blind pourcentage inverted" pour avoir la barre permettant de sélectionner le pourcentage. Lorsque je positionne cette barre à 50%, mon script lua se lance, il ouvre (ou ferme suivant le cas) et le fait d'envoyer "On" (ou "Off") repositionne la barre à 100% (ou à 0%).
Je suis donc passé par des variables utilisateur afin sauvegarder ma position du volet pour indiquer au script la dernière position du volet. je n'ai pas trouvé la solution pour ce problème là.
De plus, comme je l'indiquais, trois évènements sont lancés... ce qui faisait que mon script se lançait trois fois. Du coup, je suis passé par une autre variable utilisateur, initialisée à zéro, j'ajoute 1 à chaque fois, et si je n'ai pas zéro (donc 1, 2 ou 3) je ne fais rien. A trois, je repositionne à zéro. Du coup, mon script semble fonctionner.
si vous voyez des choses à optimiser... je suis preneur :
Code : Tout sélectionner
commandArray = {}
local volet='Fenêtre cuisine'
local tempsOuverture = 13
local varPosition = 'PosVoletCuisine'
local varNbrePassage = 'NbPassvoletCuisine'
-- for i, v in pairs(devicechanged) do print(i, v) end
if (devicechanged[volet])
then
print ('==============================================================>'..uservariables[varNbrePassage])
if uservariables[varNbrePassage] == 0
then
print('###############################################################')
print('#############################Test_volet_roulant################')
print('###############################################################')
if devicechanged[volet] == 'Open'
then
pourcentage = 100
else
if devicechanged[volet] == 'Closed'
then
pourcentage = 0
else
valeur = tonumber(otherdevices_svalues[volet])
pourcentage = valeur *100 /15
end
end
print ("Récupération du dernier pourcentage du volet "..volet.." : "..uservariables[varPosition])
print ("Valeur en pourcentage : "..pourcentage.."%")
if pourcentage > uservariables[varPosition]
then
-- Calcul du temps d'ouverture
tempsOuverture = (pourcentage - uservariables[varPosition]) * tempsOuverture / 100
print ('Temps d ouveerture : '..tempsOuverture)
commandArray ['Variable:PosVoletCuisine'] = tostring(pourcentage)
commandArray[#commandArray+1]={[volet] = 'On'}
commandArray[#commandArray+1]={[volet] = 'On AFTER '..tempsOuverture}
commandArray ['Variable:NbPassvoletCuisine'] = tostring(1)
print "Il faut ouvir :"
else
if pourcentage < uservariables[varPosition]
then
-- Calcul du temps de fermeture
tempsOuverture = (uservariables[varPosition] - pourcentage) * tempsOuverture / 100
print ('Temps de fermeture : '..tempsOuverture)
commandArray ['Variable:PosVoletCuisine'] = tostring(pourcentage)
commandArray[#commandArray+1]={[volet] = 'Off'}
commandArray[#commandArray+1]={[volet] = 'Off AFTER '..tempsOuverture}
commandArray ['Variable:NbPassvoletCuisine'] = tostring(1)
print "Il faut fermer :"
else
commandArray ['Variable:NbPassvoletCuisine'] = tostring(0)
print "On ne fait rien"
end
end
else
print ('On ajoute 1 au nombre de passage')
nombreDePassage = uservariables[varNbrePassage] + 1
print ('On a ajouté 1 on est à combien ? '..nombreDePassage)
if nombreDePassage == 3
then
commandArray ['Variable:NbPassvoletCuisine'] = tostring(0)
print ('On se remet à écouter')
else
commandArray ['Variable:NbPassvoletCuisine'] = tostring(nombreDePassage)
print ('Passage n° : '..nombreDePassage)
end
end
end
return commandArray
Merci de votre aide.
Re: Ouverture volet en pourcentage
Publié : 31 déc. 2020, 07:51
par denis_brasseur
Si ton volet 'Fenêtre cuisine' n'a que 2 états (Open et Closed), je ne comprend pas l'interet de la 3eme condition dans la partie du code ci dessous :
Code : Tout sélectionner
if devicechanged[volet] == 'Open'
then
pourcentage = 100
else
if devicechanged[volet] == 'Closed'
then
pourcentage = 0
else
valeur = tonumber(otherdevices_svalues[volet])
pourcentage = valeur *100 /15
end
end
Dans quel cas vas tu obtenir ?
pourcentage = valeur *100 /15
Pourquoi ne pas écrire plus simplement :
Code : Tout sélectionner
if devicechanged[volet] == 'Open' then
pourcentage = 100
else
pourcentage = 0
end
Tu peux également simplifier ta syntaxe (meme si cela ne changera rien au fonctionnement, juste à rendre le code plus lisible), je n'ai modifié que les conditions, et pas reporter les actions :
Code : Tout sélectionner
if pourcentage > uservariables[varPosition] then
-- Calcul du temps d'ouverture
print "Il faut ouvir :"
elseif pourcentage < uservariables[varPosition] then
-- Calcul du temps de fermeture
print "Il faut fermer :"
else
print "On ne fait rien"
end
Re: Ouverture volet en pourcentage
Publié : 31 déc. 2020, 08:04
par drabo
Bonjour,
Je ne reçois pas que Open ou Close. Je reçois également "Set Level" lorsque je positionne le volet à x%. C'est pour cela la séquence de "if".
En fait après avoir installé mon script je me rend compte que cela ne peut pas marcher. En fait, si j'appuie sur la télécommande pour ouvrir mais que j'appuis à nouveau pour l'arrêter, je ne peux pas récupérer la position du volet. Voire même avec le script lorsqu'on appuie deux fois sur la télécommande, cela ne fonctionne pas.
Je vais réfléchir encore mais je pense que cela est insoluble...
Tant pis...