Franco268 Posté(e) le 8 mai 2023 Signaler Posté(e) le 8 mai 2023 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
jojo Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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"]
Franco268 Posté(e) le 9 mai 2023 Auteur Signaler Posté(e) le 9 mai 2023 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?
jojo Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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/
mprinfo Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 BreakTout simplement Envoyé de mon BLA-L29 en utilisant Tapatalk
Franco268 Posté(e) le 9 mai 2023 Auteur Signaler Posté(e) le 9 mai 2023 Ce n'était pas une citation mais la mise à jour de ma variable . 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é?
Lazer Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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.
jojo Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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.
Lazer Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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.
jojo Posté(e) le 9 mai 2023 Signaler Posté(e) le 9 mai 2023 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 !
Franco268 Posté(e) le 10 mai 2023 Auteur Signaler Posté(e) le 10 mai 2023 Merci messieurs pour vos remarques et conseils, c’est plus clair, je teste ce soir.
Messages recommandés