Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

@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
Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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 ? 

Posté(e)

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
Posté(e)

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
Posté(e)

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

Posté(e)

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

Posté(e)
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

Posté(e)

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

Posté(e)

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: ----------------------------
Posté(e)

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:  

Posté(e)

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 ?

Posté(e)

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
Posté(e)

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

Posté(e)

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.

Posté(e)

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

×
×
  • Créer...