Page 1 sur 1

Comment gerer le "Double Click" sur un switch ?

Publié : 11 févr. 2018, 15:31
par rafal98
Bonjour,

Je souhaiterais qu'un bouton d'une telecommande RF433 puisse gerer le simple et double click dans DZ.
En cherchant dans le forum, j'ai vu qu'il y avait le type "selector", mais c'est un type custom, ou l'on met ce qu'on veut. Comment indiquer a DZ qu'on veut non pas un simple ON/OFF mais un OFF/Click/Double Click ?

A terme si je trouve une solution je voudrais l'appliquer a des interrupteurs EnOcean que je possede

Merci d'avance

Re: Comment gerer le "Double Click" sur un switch ?

Publié : 11 févr. 2018, 18:12
par Neutrino

Re: Comment gerer le "Double Click" sur un switch ?

Publié : 11 févr. 2018, 21:48
par thier
Voila comment je fais

Code : Tout sélectionner

--[[
Script qui gère l'éclairage dans l'escalier.
Nécessite le fichier module.lua

]]--
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local debug = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

commandArray = {}
--1er cas on veut allumer la lumière avec l'extinction par la minuterie switchOnFor
if (devicechanged['lumiere escalier']=='On' and lastSeen('lumiere escalier') > 2 ) then
    log('allumage lumière escalier. Arrêt par minuterie',debug)
    log ('lastseen(lumiere escalier)= '..lastSeen('lumiere escalier'),debug)
    switchOnFor('lumiere escalier', 15)
--2ième cas on ne veut pas d'arrêt par la minuterie. On détecte la bascule On/Off en moins de 2 secondes
elseif (devicechanged['lumiere escalier']=='Off' and lastSeen('lumiere escalier') < 2 ) then
    log('allumage lumière escalier. Arrêt par minuterie shuntée',debug)
    log ('lastseen(lumiere escalier)= '..lastSeen('lumiere escalier'),debug)  
    commandArray['lumiere escalier']='On'
end
return commandArray

Re: Comment gerer le "Double Click" sur un switch ?

Publié : 13 févr. 2018, 22:52
par rafal98
Merci pour vos reponses, j'ai pas eu de notification par mail, je viens juste de les voir !

Sur le 1er script, il me semble qu'il y a un bug, car on mesure la difference entre le click n-2 et n-1 au lieu de n-1 et n
Du coup ca pourrait marcher sur un triple click ;-)
J'ai rajouté des traces dans le script qui affiche "Off !!!!! ..." puis la difference puis le delai.
Il est facile avec les timestamp de voir que ca marche pas. Si je clique 2 fois rapidement, puis que j'attend 2 minutes et que je reclick on me donne le delta des 2 1er click. Voir a la fin des logs

2018-02-13 22:29:23.116 LUA: Off !!!!!!!!!!!!!
2018-02-13 22:29:23.116 LUA: 20
2018-02-13 22:29:23.116 LUA: 5
2018-02-13 22:29:23.117 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_double.lua
2018-02-13 22:29:23.125 (RFXCOM) Lighting 2 (test selector)
2018-02-13 22:29:29.779 LUA: Off !!!!!!!!!!!!!
2018-02-13 22:29:29.779 LUA: 14
2018-02-13 22:29:29.779 LUA: 5
2018-02-13 22:29:29.780 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_double.lua
2018-02-13 22:29:29.789 (RFXCOM) Lighting 2 (test selector)
2018-02-13 22:29:35.661 LUA: Off !!!!!!!!!!!!!
2018-02-13 22:29:35.661 LUA: 6
2018-02-13 22:29:35.661 LUA: 5
2018-02-13 22:29:35.662 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_double.lua
2018-02-13 22:29:35.670 (RFXCOM) Lighting 2 (test selector)
2018-02-13 22:29:39.673 LUA: Off !!!!!!!!!!!!!
2018-02-13 22:29:39.673 LUA: 6
2018-02-13 22:29:39.673 LUA: 5

...

2018-02-13 22:31:58.721 LUA: Off !!!!!!!!!!!!!
2018-02-13 22:31:58.721 LUA: 4
2018-02-13 22:31:58.721 LUA: 5
2018-02-13 22:31:58.722 LUA: doubleTape_test selector_Off: 4s

Ceci dit, si je fais un vrai double click (c'est a dire rapide dans la meme seconde), le script n'est appéle qu'une seule fois :-(


Concernant le scripts de "thier", je ne retrouve plus le modules.lua. Pourtant je l'avais trouvé l'autre jour. Et la recherche retire le mot script et lua, et donc me trouve des centaines/milliers d'occurences sur modules ^^

Encore merci, ca me donne des bases pour avancer en tout cas

EDIT: je viens de trouver le scripts modules.lua ici https://raw.githubusercontent.com/vil1d ... odules.lua

Re: Comment gerer le "Double Click" sur un switch ?

Publié : 14 févr. 2018, 21:25
par rafal98
J'ai fait marcher le 2eme script. Il reste a le raffiner car un On/Off rapide equivaut a un Off/Off. Apres comme je disais, si je suis trop rapide, le RFXComm ou Domoticz a l'air de supprimer des trames. J'imagine qu'avec des techno simple comme le RF433 l'emetteur doit envoyer plusieurs fois le signal pour tenter qu'il passe, mais le recepteur doit filtrer pour n'en prendre qu'un seul

Et pour le 1er script il marche aussi en changeant ca:

Code : Tout sélectionner

t0 = os.time()
t1 = os.time{year=year1, month=month1, day=day1, hour=hour1, min=minutes1, sec=seconds1}
--t2 = os.time{year=year2, month=month2, day=day2, hour=hour2, min=minutes2, sec=seconds2}
--difference = os.difftime (t1, t2)
difference = os.difftime (t0, t1)
au lieu de

Code : Tout sélectionner

t1 = os.time{year=year1, month=month1, day=day1, hour=hour1, min=minutes1, sec=seconds1}
t2 = os.time{year=year2, month=month2, day=day2, hour=hour2, min=minutes2, sec=seconds2}
difference = os.difftime (t1, t2)
Du coup ca n'utilise plus la variable utilisateur

Re: Comment gerer le "Double Click" sur un switch ?

Publié : 14 févr. 2018, 23:09
par vil1driver
Salut,

Hummm,

Le script de Thier comme ta modification fonctionnent sur le même principe.

Tout tien sur le temps que met le système à exécuter le script (en espérant qu'il en lance d'autre avant) et la probabilité d'arriver à passer le 2ème clic avant la fin du script...

Je suis vraiment surpris que ça puisse fonctionner.

Mon script tien compte du temps qui sépare les 2 clics
double clic = 2 clics rapprochés
Il fonctionne très bien tel qu'il est et ne souffre d'aucun bug.

2 appuis successifs sans se presser et hop ;)
rafal98 a écrit : J'imagine qu'avec des techno simple comme le RF433 l'emetteur doit envoyer plusieurs fois le signal pour tenter qu'il passe, mais le recepteur doit filtrer pour n'en prendre qu'un seul
Exactement, c'est pour cela que tenter un truc rapide est plus qu' hasardeux