Aller au contenu
jojo

Afficher Les Valeurs D'une Variable Dans Un Vd

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

je suppose que le oui - non ou autorisé - interdit ce trouve dans une variable global ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

pour pouvoir traiter le code il faut faire comme cela

local variables = {
"Variable 1", 123, "Oui","Non", 3, 4}

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

non, je dois encore rajouter l'ID du VD. Je le fais

Partager ce message


Lien à poster
Partager sur d’autres sites
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :13:  

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

pour moi il y a une erreur ligne 24

Partager ce message


Lien à poster
Partager sur d’autres sites

oups pas vu lol moi je préfére i=i+1 mais bon c'est tout bon a mon avis

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×