Yannick Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 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
jojo Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 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 2
Yannick Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 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
pepite Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 @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 ;-)
Yannick Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 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
jojo Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 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
Yannick Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 Oubli @pepite, Je viens de révérifier et faire des modif et ça fonctionne... J'ai bien mes 2 boutons maintenant Merci
pepite Posté(e) le 5 août 2016 Signaler Posté(e) le 5 août 2016 Parfait, Et la manip est donc, clic sur le bouton 1, puis confirmation sur le bouton 2 ;-)
sebcbien Posté(e) le 21 septembre 2016 Signaler Posté(e) le 21 septembre 2016 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 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...
sebcbien Posté(e) le 3 octobre 2016 Signaler Posté(e) le 3 octobre 2016 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 1
pepite Posté(e) le 4 octobre 2016 Signaler Posté(e) le 4 octobre 2016 Super sebcbien, Merci je mettrai en place ce soir pour un petit reboot àdistance au cas où 2
Steven Posté(e) le 4 octobre 2016 Auteur Signaler Posté(e) le 4 octobre 2016 @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.
sebcbien Posté(e) le 4 octobre 2016 Signaler Posté(e) le 4 octobre 2016 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é.
Steven Posté(e) le 4 octobre 2016 Auteur Signaler Posté(e) le 4 octobre 2016 J'ai relu le code .. en effet, je comprends mieux :-)
kioneoranga Posté(e) le 4 octobre 2016 Signaler Posté(e) le 4 octobre 2016 Intéressant je vais tester cela dans les prochains jours.
pepite Posté(e) le 4 octobre 2016 Signaler Posté(e) le 4 octobre 2016 Mis en place, ca marche super ;-) dans le VD Diagnostics pour reboot à distance au cas où ;-) Merci @sebcbien J'adore le coup du timestamp ;-) 1
971jmd Posté(e) le 5 octobre 2016 Signaler Posté(e) le 5 octobre 2016 pouuuu c'est pour les débutants
pepite Posté(e) le 5 octobre 2016 Signaler Posté(e) le 5 octobre 2016 ? @971JMD, suis pas bien connecté àta réponse ;-) ??? 1
971jmd Posté(e) le 5 octobre 2016 Signaler Posté(e) le 5 octobre 2016 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
pepite Posté(e) le 29 novembre 2016 Signaler Posté(e) le 29 novembre 2016 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 ?
Steven Posté(e) le 29 novembre 2016 Auteur Signaler Posté(e) le 29 novembre 2016 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. 1
pepite Posté(e) le 29 novembre 2016 Signaler Posté(e) le 29 novembre 2016 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
sebcbien Posté(e) le 29 novembre 2016 Signaler Posté(e) le 29 novembre 2016 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"...
pepite Posté(e) le 29 novembre 2016 Signaler Posté(e) le 29 novembre 2016 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
sebcbien Posté(e) le 29 novembre 2016 Signaler Posté(e) le 29 novembre 2016 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 1
Messages recommandés