Aller au contenu
Franco268

Les tableaux de variables

Recommended Posts

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

 

Partager ce message


Lien à poster
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"]

 

Partager ce message


Lien à poster
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?

 

Partager ce message


Lien à poster
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/

Partager ce message


Lien à poster
Partager sur d’autres sites

Break

Tout simplement

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
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é?

 

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

et surtout (comme on est des gros fainéants) si on veut adapter le code (optimisation, bug, nouvelle fonctionnalité, ...) il faut le faire qu'à un seul endroit !

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci messieurs pour vos remarques et conseils, c’est plus clair, je teste ce soir.

Partager ce message


Lien à poster
Partager sur d’autres sites

×