Ouverture volet en pourcentage

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Répondre
drabo
Messages : 47
Inscription : 17 oct. 2015, 14:15
Localisation : Fiji
Contact :

Ouverture volet en pourcentage

Message 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
manu663
Messages : 103
Inscription : 06 août 2016, 14:35

Re: Ouverture volet en pourcentage

Message 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.
Image
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Ouverture volet en pourcentage

Message par Wolfen38 »

et le fait de renvoyer la meme commande bloc le volet ? c'est etrange
manu663
Messages : 103
Inscription : 06 août 2016, 14:35

Re: Ouverture volet en pourcentage

Message par manu663 »

Oui en 433Mhz les commandes identiques successives arrêtent le mouvement.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Ouverture volet en pourcentage

Message par Wolfen38 »

ah ok
drabo
Messages : 47
Inscription : 17 oct. 2015, 14:15
Localisation : Fiji
Contact :

Re: Ouverture volet en pourcentage

Message 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
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Ouverture volet en pourcentage

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
drabo
Messages : 47
Inscription : 17 oct. 2015, 14:15
Localisation : Fiji
Contact :

Re: Ouverture volet en pourcentage

Message 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.
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Ouverture volet en pourcentage

Message 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
Dernière modification par denis_brasseur le 31 déc. 2020, 08:07, modifié 1 fois.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
drabo
Messages : 47
Inscription : 17 oct. 2015, 14:15
Localisation : Fiji
Contact :

Re: Ouverture volet en pourcentage

Message 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...
Répondre