jojo Posté(e) le 21 mars 2015 Signaler Posté(e) le 21 mars 2015 Bonjour, Je commence ce sujet pour continuer la discussion par rapport aux améliorations proposées pour le tuto "Afficher Les Valeurs D'une Variable Dans Un Vd sous HC2". Ainsi, on garde le tuto plus clean. Je remercie déjà mprinfo pour ses bonnes idées et sa proposition d'encore en donner plus. Mais bon, je devrais essayer de me retenir de trop y travailler d'ici le 20 avril ...
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 @mprinfo, je n'ai pas le droit de travailler sur la domotique, mais c'est trop dur. Voici ce que je pense qu'on pourrait faire 1- créer une table avec les variables à mettre à jour : local variables = { "Variable 1", 123, "Oui", 3, "Variable 1", 123, "Non", 4, "Variable 2", 124, "Autorisé", 3, "Variable 2", 124, "Interdit", 4, "Variable 3", 125, "1", 3, "Variable 3", 125, "2", 4, "Variable 3", 125, "3", 5 } Donc ce tableau à 4 champs : Le nom de la variable, l'ID du VD qui affiche l'icône, la valeur de la variable, et le bouton qui doit être appelé 2) ensuite il faut faire un petit code qui parcoure le tableau, et appuye sur le bon bouton du bon VD en fonction de la valeur testée. Je dois m'interdire de le faire ... mais ça va être dur 1
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 je suppose que le oui - non ou autorisé - interdit ce trouve dans une variable global ?
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 En effet, il lit la variable globale qui se trouve dans le tableau, et on teste sa valeur qui est également dans le tableau mais je ne peux pas ...
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 pour pouvoir traiter le code il faut faire comme cela local variables = { "Variable 1", 123, "Oui","Non", 3, 4}
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 Contre une bonne biére je peux te faire cela ce soir Car ma fille est la jusqu’à19h. tu sais comment sont les femmes lol, et je veux aussi en profiter car je ne l'ai que tout les 15 jours
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 je préférais 1 ligne par valeur possible de la variable, comme ça c'est ok, pour 2, 3, 4 ou plus de valeurs possibles
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 oui je vois les choses plutôt comme cela pour traiter facilement l'information Nom de la variable globale = "Variable 1" Id du module virtuel = 123 Bouton début = 3 Bouton Fin = 4 Valeur de la variable globale =, "Oui" Valeur de la variable globale =,"Non" Nombres de bouton = Bouton Fin - Bouton début avec cela on peut avoir autant de bouton que l'on veut dans le VD il faut juste que les boutons ce suivent Si ce n'est pas le cas c'est une solution un peu différente
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 et comment tu le présenterais dans un tableau ? Il y aurait 2 tableaux ? 1 pour la définition de la VD et 1 pour les valeurs possibles ?
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 non bien plus simple je pense que steven nous fera un truc avec Fonction Return mais en attendant je te propose cela c'est un debut j'ai pas encore fini local Table = {"Variable1", 3, 5, "OUI", "NON", "Autre"} local i = 1 while Table[i] ~= nil do local NomVariableGlobale=tostring(Table[i]) fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale) local BoutonDebut = tonumber(Table[i+1]) local BoutonFin = tonumber(Table[i+2]) local NombreValeur = (BoutonFin - BoutonDebut) + 1 i = i + 3 fibaro:debug("Valeur de I = " ..i) fibaro:debug("----------------------------") for j = 1,NombreValeur do fibaro:debug(Table[i]) i=i+1 end end
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 vu que nous avons a peut prêt le même age je pense que tu as connu le BASIC j'utilise un tableau a une seul entré comme on faisait en BASIC avec le commande Read et data je me déplace dans le tableau grâce a la valeur de "i" exemple en basic 10 for i = 1 to 5 20 a=read(i) 30 print a 20 next 1000 data 1, 2, 3, 4, 5
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 oui, je vois où tu veux en venir, et je regarde avec 2 variables p.exple local Table = {"Variable1", 3, 5, "OUI", "NON", "Autre", "Variable2", 3, 4, "Autorisé", "Interdit"} local i = 1 while Table[i] ~= nil do local NomVariableGlobale=tostring(Table[i]) fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale) local BoutonDebut = tonumber(Table[i+1]) local BoutonFin = tonumber(Table[i+2]) local NombreValeurs = (BoutonFin - BoutonDebut) + 1 i = i + 3 fibaro:debug("Valeur de I = " ..i) fibaro:debug("----------------------------") for j = 1,NombreValeurs do fibaro:debug(Table[i+j-1]) -- test de la valeur de NomVariableGolbale == Table[i+j-1] j=j+1 end i = i + NombreValeurs end On va laisser Stven tranquille, on va trouver un beau code comme des grands
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 je crois que c'est bon. Voici le code local Table = {"Variable1", 3, 5, "OUI", "NON", "Autre", "Variable2", 3, 4, "Autorisé", "Interdit"} local i = 1 while Table[i] ~= nil do local NomVariableGlobale=tostring(Table[i]) fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale) local BoutonDebut = tonumber(Table[i+1]) local BoutonFin = tonumber(Table[i+2]) local NombreValeurs = (BoutonFin - BoutonDebut) + 1 i = i + 3 for j = 1,NombreValeurs do fibaro:debug(NomVariableGlobale.. "== "..Table[i+j-1]) -- test de la valeur de NomVariableGolbale == Table[i+j-1] j=j+1 end i = i + NombreValeurs fibaro:debug("----------------------------") end et le résultat du debug [DEBUG] 15:36:32: Nom de la variable Globale = Variable1 [DEBUG] 15:36:32: Variable1== OUI [DEBUG] 15:36:32: Variable1== NON [DEBUG] 15:36:32: Variable1== Autre [DEBUG] 15:36:32: ---------------------------- [DEBUG] 15:36:32: Nom de la variable Globale = Variable2 [DEBUG] 15:36:32: Variable2== Autorisé [DEBUG] 15:36:32: Variable2== Interdit [DEBUG] 15:36:32: ---------------------------- Qu'en penses-tu ? P.S. on est de la même génération, j'ai connu le BASIC, mais je n'ai jamais été programeur
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 non, je dois encore rajouter l'ID du VD. Je le fais
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 local Table = {50, "Variable1", 3, 5, "OUI", "NON", "Autre"} local i = 1 while Table[i] ~= nil do local IdModule = Table[i] local NomVariableGlobale=tostring(Table[i+1]) fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale) fibaro:debug("ID du Module Virtuel = " ..IdModule) local BoutonDebut = tonumber(Table[i+2]) local BoutonFin = tonumber(Table[i+3]) local NombreValeur = (BoutonFin - BoutonDebut) + 1 i = i + 4 fibaro:debug("----------------------------") for j = 1,NombreValeur do local ValeurVariableGlobale = fibaro:getGlobalValue(NomVariableGlobale) if ValeurVariableGlobale == Table[i] then fibaro:debug("Il faut appuyer sur le bouton : " ..BoutonDebut) end BoutonDebut = BoutonDebut + 1 i=i+1 end end voila le code juste a modifier la ligne debug par l'appui sur le bouton
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 Attention on ne peut incrémenté la valeur de i dans un for do end le for do incrémente a chaque passage de 1 mais un i = i+1 ne changera rien
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 Voici local Table = {"Variable1", 215, 3, 5, "OUI", "NON", "Autre", "Variable2", 216, 3, 4, "Autorisé", "Interdit"} local i = 1 while Table[i] ~= nil do local NomVariableGlobale=tostring(Table[i]) fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale) local VDid = tostring (Table[i+1]) local BoutonDebut = tonumber(Table[i+2]) local BoutonFin = tonumber(Table[i+3]) local NombreValeurs = (BoutonFin - BoutonDebut) + 1 i = i + 4 for Bouton = 1,NombreValeurs do fibaro:debug(NomVariableGlobale.. "== "..Table[i+Bouton-1].. ' ? VDid = ' ..VDid.. ' - Bouton = ' ..BoutonDebut+Bouton-1) Bouton = Bouton + 1 end i = i + NombreValeurs fibaro:debug("----------------------------") end et le résultat [DEBUG] 15:50:38: Nom de la variable Globale = Variable1 [DEBUG] 15:50:38: Variable1== OUI ? VDid = 215 - Bouton = 3 [DEBUG] 15:50:38: Variable1== NON ? VDid = 215 - Bouton = 4 [DEBUG] 15:50:38: Variable1== Autre ? VDid = 215 - Bouton = 5 [DEBUG] 15:50:38: ---------------------------- [DEBUG] 15:50:38: Nom de la variable Globale = Variable2 [DEBUG] 15:50:38: Variable2== Autorisé ? VDid = 216 - Bouton = 3 [DEBUG] 15:50:38: Variable2== Interdit ? VDid = 216 - Bouton = 4 [DEBUG] 15:50:38: ----------------------------
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 Attention on ne peut incrémenté la valeur de i dans un for do end le for do incrémente a chaque passage de 1 mais un i = i+1 ne changera rien effectivement, on ne peut pas faire d'incrémentation comme on veut dans un for do end, mais bien dans un while do end. C'est d'ailleurs ce que tu as fais, très bonne astuce de programeur
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 ok pour toi ? Si oui, je renommerai certaines variables, histoire qu'elles soient plus courtes et que le code soit plus lisible. Je met àjour dans le tuto et fait référence ànotre travail collectif ?
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 utilise plutot cela pour la fin du code plus simple a comprendre local NombreValeur = (BoutonFin - BoutonDebut) + 1 i = i + 4 fibaro:debug("----------------------------") for j = 1,NombreValeur do local ValeurVariableGlobale = fibaro:getGlobalValue(NomVariableGlobale) if ValeurVariableGlobale == Table[i] then fibaro:debug("Il faut appuyer sur le bouton : " ..BoutonDebut) end BoutonDebut = BoutonDebut + 1 i=i+1 end
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 voici le code complet commenté --[[ %% properties %% globals --]] -- Nom du Programme + id des volets ex : {"RDC", 8, 15, 23} local Table = {50, "Variable1", 3, 5, "OUI", "NON", "Autre", 25, "Variable1", 4, 5, "OUI", "NON"} local i = 1 -- Traitement de la Table while Table[i] ~= nil do local IdModule = Table[i] -- Id Module Virtuel local NomVariableGlobale=tostring(Table[i+1]) -- Nom de la variable Globale fibaro:debug("Nom de la variable Globale = " ..NomVariableGlobale .." ID du Module Virtuel = " ..IdModule) local BoutonDebut = tonumber(Table[i+2]) -- 1er Bouton du Module VD local BoutonFin = tonumber(Table[i+3]) -- Dernier Bouton deu module VD local NombreValeur = (BoutonFin - BoutonDebut) + 1 -- Nombres de Bouton dans le VD i = i + 4 fibaro:debug("-----------------------------------------------------") -- Traitement pour selectionner un bouton du VD -- par raport au la valeur de la variable Globale for j = 1,NombreValeur do local ValeurVariableGlobale = fibaro:getGlobalValue(NomVariableGlobale) if ValeurVariableGlobale == Table[i] then fibaro:debug("Il faut appuyer sur le bouton : " ..BoutonDebut) fibaro:call(IdModule, "pressButton", BoutonDebut) --Appui sur le bouton end BoutonDebut = BoutonDebut + 1 -- bouton suivant i=i+1 -- valeur suivante de la table end end
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 Voilà , je pense que maintenant c'est bon : le code : local Table = {"ECS", 215, 3, 4, "Oui", "Non", "Chauffage", 216, 3, 5, "0", "1", "2"} local i = 1 while Table[i] ~= nil do local VG_Nom = tostring(Table[i]) fibaro:debug("----------------------------") fibaro:debug("Nom de la variable Globale = " ..VG_Nom) local VD_id = tostring(Table[i+1]) local Btn_Deb = tonumber(Table[i+2]) local Btn_Fin = tonumber(Table[i+3]) local NbrVal = (Btn_Fin - Btn_Deb) + 1 fibaro:debug('NbrVal = ' ..NbrVal) i = i + 4 local VG_Val = fibaro:getGlobalValue(VG_Nom) fibaro:debug('Valeur de la variable Globale = ' ..VG_Val) for j = 1,NbrVal do if VG_Val == Table[i+j-1] then fibaro:debug(VG_Nom.. ' = ' ..VG_Val) fibaro:debug("Il faut appuyer sur le bouton : " ..Btn_Deb.. " de la VD_id " ..VD_id) end Btn_Deb = Btn_Deb + 1 end -- for i = i + NbrVal end -- while le debug : [DEBUG] 16:40:19: ---------------------------- [DEBUG] 16:40:19: Nom de la variable Globale = ECS [DEBUG] 16:40:19: NbrVal = 2 [DEBUG] 16:40:19: Valeur de la variable Globale = Non [DEBUG] 16:40:19: ECS = Non [DEBUG] 16:40:19: Il faut appuyer sur le bouton : 4 de la VD_id 215 [DEBUG] 16:40:19: ---------------------------- [DEBUG] 16:40:19: Nom de la variable Globale = Chauffage [DEBUG] 16:40:19: NbrVal = 3 [DEBUG] 16:40:19: Valeur de la variable Globale = 2 [DEBUG] 16:40:19: Chauffage = 2 [DEBUG] 16:40:19: Il faut appuyer sur le bouton : 5 de la VD_id 216 Etant donné qu'on faisait des vrai tests, j'ai mis des vrais noms de variable, avec des vrais valeurs.
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 pour moi il y a une erreur ligne 24
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 oups pas vu lol moi je préfére i=i+1 mais bon c'est tout bon a mon avis
mprinfo Posté(e) le 22 mars 2015 Signaler Posté(e) le 22 mars 2015 i+j-1 ça fais i tu te complique bien les choses il faut savoir que i et l'endroit ou on est dans le tableau donc il faut resté simple
Messages recommandés