Aller au contenu

Double-Clique Pour Confirmer


Steven

Recommended Posts

  • 8 months later...
  • 5 months later...

@Steven,

Comme tu sais, j'use et abuse de ce code.

Il me semble que depuis la 4.082b (en tout cas en 4.063b, ça fonctionnait) que ce code ne fonctionne plus.

Il prend bien en compte le 1° clic (il y a le message), mais pas le second. Il affiche au bout du délais imparti "Annulé".

Lien vers le commentaire
Partager sur d’autres sites

Je confirme. Cela ne fonctionne plus. On dirait qu'il n'y a plus qu'une seule instance du "click" qui tourne à  la fois. Tant que le 1er click n'a pas fini d'exécuter sont code les autres click ne sont pas déclenche rien.

 

Vu que le 1er click fait un sleep ... c'est mort.

 

:4:

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

A part une solution à  2 boutons .. .ce qui serait pas pratique, je vois pas.

 

Sinon il y a le VD de Krikroff avec le code pin mais on est plus vraiment dans le même usage.

Lien vers le commentaire
Partager sur d’autres sites

je crois en effet que le 2 boutons est mieux, car l'objectif du double click était d'éviter les fautes de frappe.

Je l'utilise pour un restart de ma HC2, de mon modem, de mon Syno, ...

Le code pin, c'est vraiment trop.

Lien vers le commentaire
Partager sur d’autres sites

Voilà  mon ami, c'est pas magnifique mais cela fonctionne :

 

Bouton 1 : 

 
-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg)
    fibaro:sleep(secondes*1000)
    local result = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == ""
  	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","")
	return result
end
 
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local message = "Ré-appuyer pour confirmer" -- le message de confirmation
local label_id = "Label1"               -- l'ID du label qui recevra le message
local duree = 3                             -- la durée max entre 2 clique (en seconde)
 
if (not confirm(message, label_id, duree)) then
  fibaro:log("Annulé")  
  -- ton code d'annulation si besoin
end
 

Bouton 2 : 

 
-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
    if (current == msg) then
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
    	return true
    else
    	return false
    end
end
 
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local message = "Ré-appuyer pour confirmer" -- le message de confirmation
local label_id = "Label1"               -- l'ID du label qui recevra le message
local duree = 3                            -- la durée max entre 2 clique (en seconde)
 
if ( confirm(message, label_id, duree) ) then
      fibaro:log("Confirmé") 
      -- ton code ici en cas de confirmation
end
  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

  • 4 weeks later...

salut @Steven

 

pense-tu qu'il serai possible d'un triple clique, une sorte de sceneactivation virtuel  

 

1 clique action  1  (ouvre le volet chambre)

2 clique action  2 (ouvre le volet salon)

3 clique action  3 (ouvre tout les volet)....

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Il y a une solution qui fonctionne à  95%. Il faut créer un scène avec le code suivant :

params = {
  
   duree_max_entre_click = 1000,		-- en millisecondes  
  
   clicks = {
        {name = 'Click 1', action = function(num_click) fibaro:debug("Click " .. num_click) end},
  	{name = 'Click 2', action = function(num_click) fibaro:debug("Click " .. num_click) end},
  	{name = 'Click 3', action = function(num_click) fibaro:debug("Click " .. num_click) end}
   },
  
   started = function() 
      fibaro:debug("Processus started")
   end,
  
   ended = function()
      fibaro:debug("Too late ")
   end
}


local num_click = fibaro:countScenes();

if (params.clicks[num_click]) then 
   if (num_click == 1) then
      params.started()
   end
   params.clicks[num_click].action(num_click) 
   fibaro:sleep(params.duree_max_entre_click)
   while (fibaro:countScenes() > num_click and num_click == 1) do
      fibaro:sleep(params.duree_max_entre_click)
   end
   if (fibaro:countScenes() == 1) then
      params.ended()
   end
end

Modifié les functions relatives au click 1, click 2, ...

 

Puis derrière le bouton d'un VD, mettre le code suivant

fibaro:startScene(<ID de la scène>)

Pourquoi 95% et non pas 100%.

 

Pour obtenir le 100% il faut utiliser une variable globale, hors, j'aime pas cela donc j'ai joué sur le nombre d'instance de la scène en cours et dans ce cas, il se peux que la fin du 2ème click se croise avec le début du 3ème click ... mais c'est rare.

Lien vers le commentaire
Partager sur d’autres sites

salut Steven

 

tu pense qu'il est possible de stoper un fibaro:sleep en cours

 

exemple

 

1 clic  alors dans 3s passe la variable à   A,  si 2eme clic avant les 3s, alors  passe le variable à  B   etc 

Lien vers le commentaire
Partager sur d’autres sites

Salut @Steven,

 

je n'ai pas essayé mais un os.exit() ou os.exit(0) pourrait faire le job, l' idée est de tuer le bac à  sable qui héberge la scène.

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

  • 4 weeks later...

Voilà  mon ami, c'est pas magnifique mais cela fonctionne :

 

Bouton 1 : 

 
-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg)
    fibaro:sleep(secondes*1000)
    local result = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == ""
  	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","")
	return result
end
 
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local message = "Ré-appuyer pour confirmer" -- le message de confirmation
local label_id = "Label1"               -- l'ID du label qui recevra le message
local duree = 3                             -- la durée max entre 2 clique (en seconde)
 
if (not confirm(message, label_id, duree)) then
  fibaro:log("Annulé")  
  -- ton code d'annulation si besoin
end
 

Bouton 2 : 

 
-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
    if (current == msg) then
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
    	return true
    else
    	return false
    end
end
 
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local message = "Ré-appuyer pour confirmer" -- le message de confirmation
local label_id = "Label1"               -- l'ID du label qui recevra le message
local duree = 3                            -- la durée max entre 2 clique (en seconde)
 
if ( confirm(message, label_id, duree) ) then
      fibaro:log("Confirmé") 
      -- ton code ici en cas de confirmation
end

Salut @steven, 

 

je viens de modifier mon VD en apposant les 2 boutons et en collant ton code dedans. Mais je n'ai aucun effet. 

 

Désolé mais je suis un peu nul

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...