Aller au contenu

Messages recommandés

  • 8 mois après...
  • 5 mois après...
Posté(e)

@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é".

Posté(e)

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
Posté(e)

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.

Posté(e)

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.

Posté(e)

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
Posté(e)

Merci Steven et sorry d'avoir attendu si longtemps pour le mettre en application et répondre

P.S. : as-tu vu ceci ? Merci.

  • 4 semaines après...
Posté(e)

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
Posté(e)

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.

Posté(e)

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 

Posté(e)

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
Posté(e)

T'es un violent  :P

 

Le soucis c'est que cela ne va pas stopper le sleep mais tuer la scène ce qui n'est pas ce que souhaite 971jmd.

  • Upvote 1
  • 4 semaines après...
Posté(e)

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

Posté(e)

cela fonctionne très bien, mais il faut mettre les instructions lua àpartir de la ligne 24 (bouton 1) et 25 (bouton 2)

×
×
  • Créer...