Aller au contenu

Les tableaux de variables


Franco268

Messages recommandés

Hello,

 

Je m'emmêle les pinceaux... Pouvez vous me donner un coup de pouce?

Je comprends bien que mon code ne peut pas fonctionner, que j'ai créé un string à la place d'appeler ma variable, mais je n'arrive pas à trouver la correction. Pouvez vous m'éclairer?

 

	VoletCouloirCave = {	--Il existe plusieurs variables définies comme celle ci
		["Nom"] = "VoletCouloirCave",
		["DemandeFraicheur"] = "FraichCoulCave",
		["Position"] = "Derrière",
		["Id"] = "IdVoletCouloirCave",
		["ValeurVoletFraicheur"] = "ValVolCoulCaveFr",
		["EtatFraicheur"] = "EtaVolCoulCaveFr",
		["EtatAlarme"] = "EtaVolCoulCaveAl"
		}
		
function QuickApp:onSliderChanged(event)
    local name = "Volet" ..string.sub(event.elementName, 3)   --création de name = "VoletCouloirCave"
	local value = event.values[1]
	
	hub.setGlobalVariable(name.ValeurVoletFraicheur, tostring(value))

end

 

Lien vers le commentaire
Partager sur d’autres sites

pour les tableaux "normaus:

local id = {
--Cuisine
CUISINE_NUKI = 833, ALARME_CUISINE = 407, CUISINE_LUM = 566, LEDSFRIGO_PRISE = 569, CUISINETABLE_LUM = 567, SONOS_CUISINE = 773, CUISINE_TMP = 23, LAVEVAISSELLE_PRISE = 745,
--Salon
EST_NOEL = 839, ALARME_PETITSALON = 444, ALARME_SALONTV = 443, SALLEMANGER_LUM = 574, SALON_HUM =  ...}

utilisation : 
id["CUISINE_NUKI"] retourne 833

Pour les matrices :

Table matricielle :
   Thermostats = {
        {Room = "SdJ",     Name = "CHAUF_SDJ_THERM",     Variables = false},
        {Room = "Bureau",  Name = "CHAUF_BUREAU_PID",    Variables = true},
        {Room = "Pauline", Name = "CHAUF_PAULINE_THERM", Variables = false},
        {Room = "Max",     Name = "CHAUF_MAX_THERM",     Variables = false},
        {Room = "SdBEta",  Name = "CHAUF_SDBETA_THERM",  Variables = false},
        {Room = "Biblio",  Name = "CHAUF_BIBLIO_THERM",  Variables = false},
        {Room = "SdBRdC",  Name = "CHAUF_SDBRDC_THERM",  Variables = false},
        {Room = "ECS",     Name = "CHAUF_ECS_THERM",     Variables = false},
                  }
 
ThermostatsRows = # Thermostats  -- # de lignes / d'entrées
ThermostatName = Thermostats [i]["Name"]

 

Lien vers le commentaire
Partager sur d’autres sites

En lisant ta réponse, je me rends compte que dans mes codes, il aurait été plus simple de faire une table matricielle avec toutes mes variables...

Volets {
		{["Nom"] = "VoletCouloirCave",
		["DemandeFraicheur"] = "FraichCoulCave",
		["Position"] = "Derrière",
		["Id"] = "IdVoletCouloirCave",
		["ValeurVoletFraicheur"] = "ValVolCoulCaveFr",
		["EtatFraicheur"] = "EtaVolCoulCaveFr",
		["EtatAlarme"] = "EtaVolCoulCaveAl"},

		{["Nom"] = "VoletSDB",
		["DemandeFraicheur"] = "FraichSDB",
		["Position"] = "Derrière",
		["Id"] = "IdVoletSDB",
		["ValeurVoletFraicheur"] = "ValVolSDBFr",
		["EtatFraicheur"] = "EtaVolSDBFr",
		["EtatAlarme"] = "EtaVolSDB"}
		}

Si je reprends mon exemple, et que je déclare ma variable volets comme ci dessus. Suis je obligé de "dérouler" et tester toute la matrice pour trouver quelle est l'entrée qui correspond, puis de changer la variable en question. Ou bien y a t il quelque chose de plus direct?

 

Lien vers le commentaire
Partager sur d’autres sites

avec un for tu testes chaque ligne individuellement, et j'imagine qu'il doit y avoir une instruction LUA pour interrompre la boucle (cherche sur Google)

 

P.S. : ne site pas le message qui précède, ça alourdit inutilement la lecture/

Lien vers le commentaire
Partager sur d’autres sites

Ce n'était pas une citation mais la mise à jour de ma variable :D.

 

Du coup, s'il n'y a pas de façon plus direct et qu'il faut obligatoirement parcourir le tableau, avec un for par ex.... j'ai une question plus profonde...

 

Au début, j'ai écrit mon programme, qui contient 10 sliders et pour chaque slider, une fonction/évènement dédiée était lancée.

Puis je me suis dit qu'il serait mieux que tous les boutons déclenchent le même évènement, dans lequel mon action utiliserait le nom du bouton pour s'adapter. C'est pour celà que je voulais faire quelque chose du genre: 

hub.setGlobalVariable(name.ValeurVoletFraicheur, tostring(value))

Maintenant que je comprend qu'il n'y a pas de façon plus direct d'écrire ma fonction et qu'il faut que je fasse une boucle pour "tester" chaque enregistrement. 

Quelle est la meilleur écriture pour une meilleur exploitation des ressources de ma machine et une meilleur lecture du programme?

 

10 fonctions propres à chaque slider?

ou

Une seule fonction pour tous les sliders avec une boucle à l'intérieur pour adapter les actions en fonction du nom du slider qui a changé?

 

Lien vers le commentaire
Partager sur d’autres sites

Dans le code de ton premier message, je pense que c'est plutôt un truc comme ça que tu voulais faire :

hub.setGlobalVariable(_G[name].ValeurVoletFraicheur, tostring(value))

 

Même si je ne suis pas fan de l'utilisation d'un tableau déclaré en variable globale, c'est un détail...

Tu ne pouvais pas simplement utiliser name comme un tableau, puisque c'est une chaine de caractère, donc indexer son élément ValeurVoletFraicheur est impossible.

Du coup name qui doit servir d'index à _G, qui est la super variable globale de type tableau qui contient toutes les variables globales de ton code.

Lien vers le commentaire
Partager sur d’autres sites

comme il n'est pas possible (à ma connaissance - en fait je n'ai jamais testé) pour un bouton d'appeler une fonction avec un paramètre), chaque bouton (slider) appelle une fonction différente, qui elle même appelle une fonction générales avec les valeurs paramètrées.

Lien vers le commentaire
Partager sur d’autres sites

Oui et .... non !

Ce qu'il a fait est très bien, le code LUA du bouton "décode" le nom du bouton, pour en extraire l'info utile et appeler un tableau de fonction.
Sa logique est bonne, c'est sur la mise en oeuvre qu'il a fait une faute de syntaxe (et globalement sa gestion des tableaux est perfectible)

C'est la technique que j'ai employé dans certains de mes QA (Kodi et MusicCast je crois) afin de factoriser le code et ne pas multiplier les codes LUA répétés dans les boutons.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...