TitiXsi Posté(e) 8 février Signaler Share Posté(e) 8 février il y a 19 minutes, Lazer a dit : D'ailleurs ta question n'a rien à voir avec les QuickApp directement, mais plutôt aux possibilités du langage LUA en général. Là tu as raison... J'en reviens donc au sujet de base les QA... J'essaie de faire une QA avec un switch ON/OFF Je voudrais que suivant l'état du switch il exécute ou n'exécute pas le code ON : Je lance le code avec une boucle de 5min OFF : je stoppe la boucle Malheureusement, le switch n'est pas actif lorsque la boucle est en attente.. Voici mon code local function loop() -- Chanel_1 Get_HC3_Values_send_to_ThingSpeak(Key_Chanel_1,ids_for_Chanel_1) -- loop if (hub.getValue(plugin.mainDeviceId,"state") == true) then setTimeout(loop,60*1000*loop_value_min) --- minutes --setTimeout(loop,1000*loop_value_min) -- secondes for debug end end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) loop() end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) end --================================================================================================-- -- MAIN -- --================================================================================================-- function QuickApp:onInit() self:debug("onInit") self:turnOn() end Note : Désolé, le coloring n'est pas présent... dès que je sélectionne le langage lua dans le champs codage, je n'ai plus rien dans mon post... 3 fois que je perds tout... Grrrr Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) 8 février Signaler Share Posté(e) 8 février (modifié) Alors je développe pas mal en Shell à mes heures perdues, mais le backquote (ou le $(...)) ne sert pas à évaluer le nom d'une variable sous forme de chaine de caractère, mais à évaluer une commande complète. Ou alors je veux bien un exemple où tu manipules le nom d'une variable, car il ne me semble jamais avoir vu ça en Shell. EDIT : après les scripts Shell ne sont pas compilés, mais interprétés, donc ça change beaucoup de choses, les possibilités peuvent être différentes. Modifié 8 février par Lazer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) 8 février Signaler Share Posté(e) 8 février (modifié) Ça permet d'évaluer et de donner la valeur d'une commande qui peut être passée en string. Je me suis sûrement mal exprimé... Bref.. le backquote est très utile dans ces cas là . [Hors sujet off] Édit suite à ton édit, c'est claire que ç'est différents Modifié 8 février par TitiXsi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) 8 février Signaler Share Posté(e) 8 février Oui voilà tu l'as dit, "une commande" passée en string, pas un "nom de variable" manipulé en string Le truc, c'est que quelque soit le langage de programmation, tu ne peux pas jouer avec le nom des variables qui est défini lors de la compilation du programme, c'est à dire avant son lancement. Durant l'exécution du programme, le nom des variables n'existe même pas, ce sont juste des emplacements mémoires, à des adresses bien précises, que le CPU va aller lire/écrire. C'est pour cela que je t'ai indiqué qu'on utilise les Tables en LUA, on peut manipuler leur contenu à loisir avec des index. Ces index peuvent être de type numérique (entier à partir de 1 en LUA, ou à partir de 0 dans de nombreux autres langages), ou bien de type chaine de caractère (string) Et là, cet index de type string, on peut le manipuler, c'est tout à fait possible. Par ex : local myTable = { myIndex_1 = "Hello", myIndex_2 = "World", } for i = 1, 2 do local ton_index_en_string_devant_le_prisunic = "myIndex_" .. i print("nom de l'index : ", ton_index_en_string_devant_le_prisunic) local value = myTable[ton_index_en_string_devant_le_prisunic] print("valeur de l'index : ", value) end Ce qui se rapproche un peu de ce que tu cherchais à faire initialement, un peu plus lourd à manipuler, mais fonctionnel (j'ai pas testé ce bout de code donc j'espère qu'il n'y a pas d'erreur de syntaxe, mais c'est pour expliquer le principe) Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) 8 février Signaler Share Posté(e) 8 février Sympa la référence au prisunic . J'ai utilisé la table indiquée plus haut et ça fonctionne impeccablement. Je passe juste 2 paramètres au lieu d'un seul, pas dramatique. Merci Sinon pour en revenir au sujet, si tu as une idée pour la qa déclarée en device de type Switch, je suis preneur, sinon, ça restera comme ça sans arrêt possible. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) 8 février Signaler Share Posté(e) 8 février Ah désolé j'ai loupé ton message concernant le QA switch J'ai regardé, mais je ne comprends pas ce qui te pose problème ? Je ne sais pas si j'ai compris ce que tu cherches à faire, mais j'aurais procédé différemment : - Une loop infinie - les fonctions turnOn et turnOff activent une variable true/false - lors de chaque exécution, la loop vérifie la valeur de la variable, et si true, alors effectue l'action. Plus simple et efficace ainsi je pense. Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) 9 février Signaler Share Posté(e) 9 février (modifié) C'est ce que j'ai fait en premier, mais je me suis rendu compte que lorsque la fonction est sur le Time Out, le bouton du device n'est pas opérant... Je referai des tests demain avec un truc plus simple et je posterai le fichier. Modifié 9 février par TitiXsi Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) 9 février Signaler Share Posté(e) 9 février Il y a 8 heures, TitiXsi a dit : C'est ce que j'ai fait en premier, mais je me suis rendu compte que lorsque la fonction est sur le Time Out, le bouton du device n'est pas opérant... Je referai des tests demain avec un truc plus simple et je posterai le fichier. Je viens de comprendre.. Quel buse... La case "Appareil désactivé" était cochée... Punaise, je comprenais pas pourquoi avec un nouveau device tout propre c'était ok, mais pas avec l'autre ... Bref, si ca peut aider, je partage un morceau de code qui fait le job local loop_value_sec = 5 ---------------------------------------------------------------------------------------------------- -- check locales variables ---------------------------------------------------------------------------------------------------- print("----------------START-".._ID.."_"..Main_Device.."--------------------") --================================================================================================-- -- Functions -- --================================================================================================-- local function loop() if (hub.getValue(plugin.mainDeviceId,"state") == true) then tools:trace("Run Loop") -- loop then setTimeout(loop,1000*loop_value_sec) -- secondes end end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) loop() end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) end --================================================================================================-- -- MAIN -- --================================================================================================-- function QuickApp:onInit() self:debug("onInit") self:turnOn() end Lien vers le commentaire Partager sur d’autres sites More sharing options...
jang Posté(e) 10 février Signaler Share Posté(e) 10 février Problems: 1. You set 'value' but test 'state' 2. If you click 'off' -> 'on' quickly you may end up with 2 running loops... I think @laser meant something like this (but here we use the property instead of a local var) local function loop() if (hub.getValue(plugin.mainDeviceId,"value") == true) then print("Run Loop action") end -- loop setTimeout(loop,1000*loop_value_sec) -- secondes end loop() function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) end 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) 10 février Signaler Share Posté(e) 10 février Jang, you have torally right! It's m'y Bad Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts