Aller au contenu

Messages recommandés

Posté(e)

ah je me disais aussi.. et ces instructions à  insérer ce sont lesquelles ? 

 

De ce genre

local httpClient = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = httpClient:POST("/api/settings/reboot", "data=reboot");
if errorCode == 0 then
fibaro:debug("status:"..status);
else
fibaro:debug("Error code is "..errorCode..", response is ["..response.."]");
end
Posté(e)

les instructions sont ce que tu veux faire faire au script en cas de validation ou d'annulation du double clic.

 

Dans le cas d'un reboot, le code que tu proposes est correct et à  mettre à  partir de la ligne 25 du second bouton

  • Upvote 2
Posté(e)

en fait je remarque que je n'ai pas besoin de confirmation. Je suis le seul à  avoir accès à  ce VD et quand je veux la rebooter. Je sais que je veux le faire alors je n'ai fait qu'un bouton reboot et ça fonctionne... 

 

Merci Jojo pour ton aide

Posté(e)

@Yannick,

 

L'inconvenient de le faire sans confirmation de mon point de vue, bien que tu sois le seul à  y accéder. 

 

Une fausse manip sur du tactile est vite arrivée..et hop tu redemarres ta box  sans le vouloir à  un moment inopportun..mouais le WAF ;-).

Du genre t'es en vacs, tu la rebootes involontairement, le reboot se passe mal..tu n'as plus accès à  distance..Ca sent la petite montée d'adrenaline  ;-)

Posté(e)

Salut @pepite

 

Ouais tu n'as pas tord, le truc c'est que quand je mets le code pour reboot dans le bouton 1, ça fonctionne, la box reboot mais je n'ai rien qui apparaît dans le label (aucun commentaire)

 

Si je glisse le reboot dans le second bouton, j'ai l'impression que mon bouton 1 ne donne rien et du coup le bouton 2 est inopérant.

 

Je te glisse mon code du bouton 1 et du bouton 2 pour que tu puisses me dire (ou un autre bien sà»r) ce qui se passe. 

 

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é")  
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é") 

local httpClient = Net.FHttp("127.0.0.1", 11111);
local response, status, errorCode = httpClient:POST("/api/settings/reboot", "data=reboot");
if errorCode == 0 then
fibaro:debug("status:"..status);
else
fibaro:debug("Error code is "..errorCode..", response is ["..response.."]");
end
 
end
 

Merci les gars

Posté(e)

Yannick,

La première chose : tu as créé un VD spécifique pour le reboot avec confirmation, ou tu as modifié le VD du HC2 diagnostique.

Perso, je remplacerais le bouton unique du reboot du VD HC2 diagnostic par deux boutons l'un àcôté de l'autre tels que décrit plus haut.

Ensuite vérifie bien que dans les 2 boutons du as bien le bon ID du label message

Posté(e)

Oubli @pepite, 

 

Je viens de révérifier et faire des modif et ça fonctionne...

 

J'ai bien mes 2 boutons maintenant

 

Merci

  • 1 mois après...
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.

@steven

Tu n'aime pas les VG, ok, moi non plus :P :P

Mais pourquoi pas utiliser un label dans le VD pour stocker la valeur ? Il y a de toute façon déjà  un label pour afficher le status du double click.

Tu avais fais un post je ne sais plus ou qui expliquait très bien que en fait un label avait tout les attributs d'une VG...

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

Voici ma proposition de code pour double click, juste un label et un bouton.

Mise en place:

- creez un label et donnez lui un nom. label utilisé dans cet exemple: "maintenance"

- copiez le code ci-dessous au dessus de votre code actuel d'un bouton

- enlevez le end (ligne 28) et placez le tout àla fin de votre code

-- Double click by sebcbien --
local msg = "Ré-appuyer pour confirmer" -- Confirm message
local action_msg = "ACTION !!" -- message when double click activated
local labelId = "maintenance" -- ID of the label hosting the messages
local secondes = 2 -- maximum time between two clicks for the action to be validated
-- do not modify below and place your action in line 25
local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
local action
if (current == "") then
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg.." ("..string.sub(os.time(),-4)..")")
	fibaro:debug("First Click")
	action = false
elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) <= secondes then
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", action_msg)
	fibaro:debug("Double click Validated !")
	fibaro:sleep(2*1000)
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
	action = true
elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) > secondes then
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
	fibaro:debug("Cleaning")
	action = false
end

if action then
  -- PLACE YOUR CODE HERE --
end
  • Upvote 1
Posté(e)

@sebcbien

Tu as pu tester ? Car on avait du changer le système pour la raison suivante :

 

Si tu clique sur un bouton ... tu ne peux pas recliquer dessus tant que le code du précédent click n'est pas terminé. Et comme tu as un sleep() cela ne fonctionnait pas.

 

En outre, si cela refonctionne en version > 4.080 alors le code original doit fonctionner.

Posté(e)

oui oui bien testé ça fonctionne  :)

Et oui je confirme aussi que on ne peut toujours pas re-cliquer sur le bouton tant que le précédent code n'est pas terminé.

 

Le sleep n'est pas un sleep d'attente, mais un sleep de display uniquement pour afficher la confirmation de double click.

L'astuce c'est que j'utilise le label pour stocker un timestamp unix (4 derniers chiffres) et je n'attends pas x secondes, j'exit tout de suite.

Au second click, il lit le timestamp du label, le compare a l'actuel et si la différence est de moins de x secondes alors il exécute.

 

La seule chose améliorable est que si on ne clique que une seule fois, le message demandant le 2e click reste, il ne s'efface pas tout seul (réalisé par la partie cleaning).

Il suffirait de mettre un petit code dans le main loop qui efface le message après x secondes d'attente, mais je n'en vois pas vraiment l'utilité.

Posté(e)

Mis en place, ca marche super ;-) dans le VD Diagnostics pour reboot à  distance au cas où ;-)

Merci @sebcbien

 

J'adore le coup du timestamp ;-)

  • Upvote 1
Posté(e)

j'ai fait une erreur de frappe

Je voulais dire, c'est PAS pour les débutantS

Tout ça pour dire que je comprend pas trop la mise en place du script

Envoyé de mon iPhone en utilisant Tapatalk

  • 1 mois après...
Posté(e)

Bonsoir tout le monde,

 

J'ai un bug sur le "double-clic" de @sebcbien base sur le Timestamp.

 

Et je n'arrive pas à debugguer..

 

L'erreur

[ERROR] 17:10:06: line 15: attempt to perform arithmetic on a nil value
[ERROR] 17:10:07: line 15: attempt to perform arithmetic on a nil value


 

La ligne 15

 

elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) <= secondes then

Une idée svp ?

Posté(e)

Je pense que "current" est null. Il y aurait donc un soucis avec le nom de ton label :

local labelId = "maintenance" -- ID of the label hosting the messages

 

Mais c'est impossible d'être 100% sûre sans avoir le VD complet.

  • Upvote 1
Posté(e)

Merci @Steven

J'avais effectivement une faute d'orthographe, d'où vient elle, bizarre, j'avais deja utilisé le code sans souci particulier.

 

Ca crée une autre erreur :

[ERROR] 18:10:50: line 15: bad argument #1 to 'sub' (string expected, got nil)
[ERROR] 18:12:37: line 15: bad argument #1 to 'sub' (string expected, got nil)

 

le code du bouton


 

-- Double click by sebcbien --
local msg = "Ré-appuyer pour confirmer" -- Confirm message
local action_msg = "ACTION !!" -- message when double click activated
local labelId = "Reboot" -- ID of the label hosting the messages
local secondes = 3 -- maximum time between two clicks for the action to be validated


-- do not modify below and place your action in line 25
local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
local action
if (current == "") then
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg.." ("..string.sub(os.time(),-4)..")")
    fibaro:debug("First Click")
    action = false
elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) <= secondes then
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", action_msg)
    fibaro:debug("Double click Validated !")
    fibaro:sleep(2*1000)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
    action = true
elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) > secondes then
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "")
    fibaro:debug("Cleaning")
    action = false
end
 
if action then
  -- PLACE YOUR CODE HERE --
  -- Scene cachee de reboot de la HC2 --
  fibaro:startScene(13)
  fibaro:log("Reboot en cours")
end

 

Ligne 15, je ne comprends pas l'erreur  ce sont bien des nombres qui sont comparés

Posté(e)

Essaye de comprendre avec des debug

par exemple:

fibaro:debug(current)

Sinon parfois quand ça a planté, le fibaro bugge et y'a d'anciennes instances qui tournent en "background" avec l'ancien code et qui fout la grouille...

 

un bon reboot peut aider, quand je développe (et que je fais beaucoup de fautes), ça m'est déjà arrivé quelques fois, ça aide à "nettoyer"...

Posté(e)

merci @sebcbien, mais c'est ton code, ce n'est pas moi qui ai ecrit cela lol

 

si je mets un debug et ca tourne, je vais entendre le WAF ce soir ;-), vais attendre un peu hihi

Posté(e)

bah chez moi il tourne toujours, il sers 4 fois par jour ;)

Si tu refais un nouveau VD, que tu crée un nouveau bouton et un nouveau label "Reboot" et que tu colle le code, ça DOIT marcher.

Sinon, bah c'est les chats noir de @jojo, change de BOX :2:

  • Upvote 1
×
×
  • Créer...