jojo Posté(e) le 10 février 2015 Signaler 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
jojo Posté(e) le 10 février 2015 Auteur Signaler 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
Bugsissimo Posté(e) le 11 février 2015 Signaler Posté(e) le 11 février 2015 Et en utilisant un tableau cela ne ferait pas l'affaire?
jojo Posté(e) le 11 février 2015 Auteur Signaler Posté(e) le 11 février 2015 je ne sais pas comment. Que proposes-tu ?
Bugsissimo Posté(e) le 11 février 2015 Signaler 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.
trainkill666 Posté(e) le 11 février 2015 Signaler 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.
Bugsissimo Posté(e) le 11 février 2015 Signaler 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
trainkill666 Posté(e) le 11 février 2015 Signaler 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])
jojo Posté(e) le 11 février 2015 Auteur Signaler 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)
jojo Posté(e) le 11 février 2015 Auteur Signaler 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
Bugsissimo Posté(e) le 11 février 2015 Signaler Posté(e) le 11 février 2015 Avec plaisir. C'est sur que ce sera plus facile pour la HC2
trainkill666 Posté(e) le 11 février 2015 Signaler 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).
Bugsissimo Posté(e) le 11 février 2015 Signaler 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
jojo Posté(e) le 11 février 2015 Auteur Signaler 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
trainkill666 Posté(e) le 11 février 2015 Signaler 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
Steven Posté(e) le 12 février 2015 Signaler 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
trainkill666 Posté(e) le 12 février 2015 Signaler Posté(e) le 12 février 2015 Merci Steven, c'est exactement ce que je cherchais , je vais étudier ça ce soir au calme.
Messages recommandés