jojo Posté(e) le 10 février 2015 Signaler Partager Posté(e) le 10 février 2015 Bonjour, Je cherche la commande de type case en LUA. Case (maVariable) case (maVariable == "A") then ..... case (maVariable == "B") then ... ... end case Voici ce que je voudrais faire. Je vous ai donné un exemple dans le langage Jojo (très bien connu de tous ) Merci de votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 10 février 2015 Auteur Signaler Partager Posté(e) le 10 février 2015 après des recherches avec mon copain Google, je n'ai rien trouvé. J'ai donc continué dans le langage Jojo, qui reste lisible if action == 1 -- action = Aut then else if action == 2 -- action = -1°C then else if action == 3 -- action = 18°C then else if action == 4 -- action = 20°C then else if action == 5 -- action = +1°C then else if action == 11 -- action = -1h then else if action == 12 -- action = +5h then else if action == 13 -- action = +1h then else if action == 14 -- action = -1 jour then else if action == 15 -- action = +1 jour then else if action == 16 -- action = -1 mois (30 j) then else if action == 17 -- action = +1 mois (30 j) then else if action == 18 -- action = -1 an (365 j) then else if action == 19 -- action = +1 an (365 j) then end -- action = 19 end -- action = 18 end -- action = 17 end -- action = 16 end -- action = 15 end -- action = 14 end -- action = 13 end -- action = 12 end -- action = 11 end -- action = 5 end -- action = 4 end -- action = 3 end -- action = 2 end -- action = 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Et en utilisant un tableau cela ne ferait pas l'affaire? Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 11 février 2015 Auteur Signaler Partager Posté(e) le 11 février 2015 je ne sais pas comment. Que proposes-tu ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 On en as parlé récemment. Je chercherais tout àl'heure car la sur mobile c'est pas pratique. Lien vers le commentaire Partager sur d’autres sites More sharing options...
trainkill666 Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 J'utilise cette méthode : local listeaction = {"-1°C", "-1h", "-1 jour", "+1 an (365 j)"}local actionaction = listeaction[1] --listeaction[valeur de test] fibaro:debug(action) Je suis débutant, soyez indulgent. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 oui c'est a peut près cela mais pour comparer 2 valeurs: http://www.domotique-fibaro.fr/index.php/topic/2607-plugin-qubino-fil-pilote-zmnhja2/?p=50538 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
trainkill666 Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Où dans le cas de comparaison de chaine de caractères : local listeicones = {CArret=1040,HorsGel=1041,Eco=1043,Confort=1042, Desactive = 1049, Arret = 1052, Vitesse1 = 1050, Vitesse2 = 1051} fibaro:debug(listeicones[etatencours]) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 11 février 2015 Auteur Signaler Partager Posté(e) le 11 février 2015 Merci Bugsissmo, Je vais essayer ton code ce soir. Je crois que c'est ce qu'il me faut, car ce que je veut faire, c'est exécuter une certain code en fonction de la valeur d'une variable, pas retourner un longtext en fonctiond'un id, comme dans un tableau (vlookup dans xls) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 11 février 2015 Auteur Signaler Partager Posté(e) le 11 février 2015 Merci Bugsissmo, ça marche impec, c'est bien plus performant que ce que j'avais évris. le CPU de ma HC2 te remercie Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Avec plaisir. C'est sur que ce sera plus facile pour la HC2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
trainkill666 Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 @jojo Comment as-tu procédé pour effectuer le code sans passer par un tableau ? Je n'ai pas trouvé dans le lien de Bugsissimo. J'ai 15 lignes qui me gênent et que je voudrais simplifier. Avec la méthode que j'utilise, je n'arrive à effectuer qu'une seule action comme par exemple : action = listeaction[valeur de test] , avec en retour de tableau un string ou un number, mais pas une ligne de commande voire 2 (ça m'arrangerai). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Exactement le code est la: http://www.domotique-fibaro.fr/index.php/topic/2607-plugin-qubino-fil-pilote-zmnhja2/?p=50538 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 11 février 2015 Auteur Signaler Partager Posté(e) le 11 février 2015 if (maVar==0) then texte = "Aucune" elseif (maVar==1) then texte = "4h30" elseif (maVar==2) then texte = "6h" end Lien vers le commentaire Partager sur d’autres sites More sharing options...
trainkill666 Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Merci à vous 2, mais je me suis mal exprimé, je connaissais déjà la méthode du lien dans les scènes comme je l'ai cité précédemment : local listeaction = {"-1°C", "-1h", "-1 jour", "+1 an (365 j)"} local action action = listeaction[1] --listeaction[valeur de test] avec comme variable de test un chiffre et en retour un numéro ou une valeur texte que j'utilise juste après pour l'intégrer dans une ligne de commande pour lancer une fonction comme par exemple : actualisation(listeaction[valeurtest]) ou comme variable de test un "Texte", avec comme valeurtest -> etatencours : --ID icônes modules virtuels local listeicones = {CArret=1040,HorsGel=1041,Eco=1043,Confort=1042, Desactive = 1049, Arret = 1052, Vitesse1 = 1050, Vitesse2 = 1051} --changement icône local changeicone = function(nom, etatencours) fibaro:call(listemodules[nom], "setProperty", "currentIcon", listeicones[etatencours]) end Cette méthode peut renvoyer comme la précédente un chiffre ou un texte que j'utilise dans une ligne de commande. ou comme Bugsissimo dans son lien. J'utilise également les elseif comme JoJo. Ce que je souhaiterai pour être plus précis, c'est de contourner les elseif dans cette situation, ou en retour je ne lance pas 1 mais parfois 2 lignes de commande et qui sont de plus parfois totalement différentes : if choix == "actionmodule" then actionmodule(nom, Envoiaction) elseif choix == "variable" then verifvariable(nom, Envoiaction) elseif choix == "affichage" then position = nom:find("&") --trouve l'emplacement de & changeaffichage(nom:sub(1,position-1), nom:sub((position)+1), Envoiaction) elseif choix == "verif" then verifeclairage(nom, Envoiaction) elseif choix == "appui" then appuimv(nom, Envoiaction) elseif choix == "scanZwave" then ScanReseau(nom) end Il y a probablement moyen de simplifier. J'espère avoir été assez précis, ce n'est pas très évident à expliquer. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 12 février 2015 Signaler Partager Posté(e) le 12 février 2015 Dans un tableau LUA tu peux y mettre tout et n'importe quoi .. donc pourquoi ne pas créer un tableau d'actions local actions = { actionmodule = function() actionmodule(nom, Envoiaction) end, variable = function() verifvariable(nom, Envoiaction) end, affichage = function() position = nom:find("&") --trouve l'emplacement de & changeaffichage(nom:sub(1,position-1), nom:sub((position)+1), Envoiaction) end, verif = function() verifeclairage(nom, Envoiaction) end, appui = function() appuimv(nom, Envoiaction) end, scanZwave = function() ScanReseau(nom) end, } local status, err, value = pcall(actions[choix]) if (status) then print("OK") else print("ERREUR") end Cela devient donc facile de le faire évoluer, 2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
trainkill666 Posté(e) le 12 février 2015 Signaler Partager Posté(e) le 12 février 2015 Merci Steven, c'est exactement ce que je cherchais , je vais étudier ça ce soir au calme. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés