Transformer un blind en blind percent.

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 <\>.
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Transformer un blind en blind percent.

Message par landaisbenj »

Bonjour a tous.

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
    

Il me reste a reflechir sur le fait d'arreter le volet dans son changement avec la télécommande avant la fin du delai. Une autre question posé cette cette nuit c'est si la télécommande est utiliser plein de fois a la suite ex: je suis ouvert totalement (donc fermé a 0%) je ferme avec la télécommande et j'arret le volet avec la télécommande. Ici pas de probleme par ce que le calcul et les mises a jours peuvent etre faites. Par contre si je decide que le volet n'est pas a la bonne position je renvoi des ordres. Ici, comme je me base sur le lastupdate, je pense que je peux avoir un trou.
Dernière modification par landaisbenj le 12 mai 2018, 12:57, modifié 4 fois.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Transformer un blind en blind percent.

Message par papoo »

en mémorisant le dernier ordre (montée ou descente) via une (des?) variable(s) tu pourrais calculer le % d'ouverture/fermeture du volet
exemple
derniere position 80% de fermeture
si variable_utilisateur == descente and ordre_montée == 30% then position 20%_ouverture + 30%_ordre_montée end

si variable_utilisateur == descente and ordre_descente == 5% then position 80%_fermeture +5%_ordre_descente end

je sais pas si c'est très clair comme explication et si c'est ce que tu recherche
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Transformer un blind en blind percent.

Message par papoo »

une question, pk vouloir un volet modulant?
pk ne pas définir seulement une ou deux positions intermédiaire genre 25% et 75% ouverture?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Transformer un blind en blind percent.

Message par landaisbenj »

Parce que ça m'éclate xD. En vrai j'ai déjà une seule position juste au dessous du dossier du canapé après 15s ça me suffit. Mais c'est typiquement le genre de script que je peux développer alors je le fais lol xD

Merci beaucoup pour tes petites info je pense que c'est exactement le genre de point de vu qui va m'aider à avancer.

Par contre j'utiliserai pas une variable mais simplement le svalues du volet (qui existe sans vraiment exister). Ça fait économiser une variable lol
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Transformer un blind en blind percent.

Message par landaisbenj »

Bon voila. Vu le retour de tekkharibo, j'ai pu developper le passage d'un pourcentage a un autre !!!
tekkharibo a écrit :(22/100*PourcentagePositionDemande)-(22/100*PourcentagePostionActuel)
Si ton résultat est > 0 c'est ton temps de descente si il est < 0 c'est ton temps de monté et il faudra le multiplier par-1

Si je ne me trompe pas c'est ca

Envoyé de mon SM-G935F en utilisant Tapatalk

Code : Tout sélectionner

elseif 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)
    if pourcentageDummy < pourcentageVolet then
        
        commandArray[#commandArray+1]={[volet] = 'Off'}
        commandArray[#commandArray+1]={[volet] = 'Off AFTER '..temps}
        commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|1|0'}
        
    else
        
        commandArray[#commandArray+1]={[volet] = 'On'}
        commandArray[#commandArray+1]={[volet] = 'On AFTER '..temps}
    
    
    end
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
tekkharibo
Messages : 282
Inscription : 28 déc. 2017, 09:51
Localisation : Albi

Re: RE: Re: Transformer un blind en blind percent.

Message par tekkharibo »

landaisbenj a écrit :Bon voila. Vu le retour de tekkharibo, j'ai pu developper le passage d'un pourcentage a un autre !!!
tekkharibo a écrit :(22/100*PourcentagePositionDemande)-(22/100*PourcentagePostionActuel)
Si ton résultat est > 0 c'est ton temps de descente si il est < 0 c'est ton temps de monté et il faudra le multiplier par-1

Si je ne me trompe pas c'est ca

Envoyé de mon SM-G935F en utilisant Tapatalk

Code : Tout sélectionner

elseif 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)
    if pourcentageDummy < pourcentageVolet then
        
        commandArray[#commandArray+1]={[volet] = 'Off'}
        commandArray[#commandArray+1]={[volet] = 'Off AFTER '..temps}
        commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[dummy]..'|1|0'}
        
    else
        
        commandArray[#commandArray+1]={[volet] = 'On'}
        commandArray[#commandArray+1]={[volet] = 'On AFTER '..temps}
    
    
    end
Content que ça ai pu t'aider


Envoyé de mon SM-G935F en utilisant Tapatalk
Projet de domotique low-cost : Mon installation MAJ 01/05/2020
Dans le doute reboot !
Si vous êtes pas loin d'Albi on peut se rencontrer pour partager
Répondre