Aller au contenu

Messages recommandés

Posté(e)

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  B) )

 

Merci de votre aide

Posté(e)

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

Posté(e)

J'utilise cette méthode :

 

local listeaction = {"-1°C", "-1h", "-1 jour", "+1 an (365 j)"}
local action

action = listeaction[1]  --listeaction[valeur de test]

 


fibaro:debug(action)

 

Je suis débutant, soyez indulgent. ;)

Posté(e)

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])

Posté(e)

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)

Posté(e)

Merci Bugsissmo,

ça marche impec, c'est bien plus performant que ce que j'avais évris. le CPU de ma HC2 te remercie  :13: 

Posté(e)

@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).

Posté(e)


if (maVar==0) then

texte = "Aucune"

elseif (maVar==1) then

texte = "4h30"

elseif (maVar==2) then

texte = "6h"

end

Posté(e)

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. :P

  • Upvote 1
Posté(e)

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,
  • Upvote 2
×
×
  • Créer...