Aller au contenu

Module Virtuel - Crée Automatiquement Des Variables Globales


mprinfo

Recommended Posts

Ce module virtuel va crée automatiquement

 

les variables si elles n'existent pas.

 

 

 

Comment utiliser la table :

 

"Nom de la variable", "1" (si prédéfinie) ou "0" (Variable Globale), "Valeur par défault", '"Valeur Prédéfinie"'

-- Table variable Globale
local VG_Table = {
   "Mode", "1", "Absent", '"Maison", "Vacances"', -- Variable Prédéfinie Mode
   "MPRInfo", "0", "100",                         -- Variable MPRInfo
   "Jour", "1", "Oui", '"Non"'                    -- Variable Prédéfinie Jour
  }

Création des Variables Globales et Prédéfinies

--************************
--Creation de Variable ---
--************************
function VG_Creation(VG_Nom, VG_isEnum, VG_Value, VG_enumValues)
  if (fibaro:getGlobal(VG_Nom) == "") then
      fibaro:debug(VG_Nom.." "..VG_isEnum.." "..VG_Value)
   	  newVar = {}
      newVar.name = VG_Nom
      newVar.isEnum = tonumber(VG_isEnum)
      if tonumber(VG_isEnum) == 0 then
         newVar.value = VG_Value
      end
      HC2 = Net.FHttp("127.0.0.1", 11111)
      HC2:POST("/api/globalVariables", json.encode(newVar))
      ---------------------------------------------
      -- création des valeurs prédéfinies si Besoin
      ---------------------------------------------
      if tonumber(VG_isEnum) == 1 then
          VG_Predefinie = '{"value":"'..VG_Value
          ..'","isEnum":true,"enumValues":'..'["'..VG_Value..'", '..VG_enumValues..']'
          ..'}'
          HC2:PUT("/api/globalVariables/"..VG_Nom, VG_Predefinie)
        
      end 
    end
end

Lecture du tableaux et création si besoin des variables

----------------------------------------------------
-- Execution du programme
----------------------------------------------------

local j = 1
local NbreVG = 0
while VG_Table[j] ~= nil do
   
   if tonumber(VG_Table[j+1]) == 0 then
      fibaro:debug((NbreVG+1).." - Variable Globale")
      VG_Creation(VG_Table[j], VG_Table[j+1], VG_Table[j+2])
      j=j+3
   elseif tonumber(VG_Table[j+1]) == 1 then
      fibaro:debug((NbreVG+1).." - Variable prédéfinie")
      VG_Creation(VG_Table[j], VG_Table[j+1], VG_Table[j+2], VG_Table[j+3])
      j=j+4
   else
     fibaro:debug("Erreur dans la table VG")
   end
  NbreVG = NbreVG + 1
end

fibaro:debug("Nombres de variable dans le tableau : " ..NbreVG)

J'ai simplement ajouter un bouton aux VD Variables Globales de STEVEN comme cela on voit de suite si la variable n'est pas crée

 

Petit Exercice :

 

Optimiser ce code qui et fonctionnel mais pas très académique, il permet de crée les valeurs de la variable prédéfinie :

      if tonumber(VG_isEnum) == 1 then
          VG_Predefinie = '{"value":"'..VG_Value
          ..'","isEnum":true,"enumValues":'..'["'..VG_Value..'", '..VG_enumValues..']'
          ..'}'
          fibaro:debug(VG_Predefinie)
          HC2:PUT("/api/globalVariables/"..VG_Nom, VG_Predefinie)
        
      end

Variables_Globales.vfib

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Pascal,

function ajoutvariable(Nom, typevariable, Valeurbase, Valeurspredef)
    if (fibaro:getGlobal(Nom) == "") then
        composants = {}
        composants.name = Nom
        composants.isEnum = typevariable
        composants.value = Valeurbase
        HC2 = Net.FHttp("127.0.0.1", 11111)
        HC2:POST("/api/globalVariables", json.encode(composants))
        if composants.isEnum == 1 then
              composants.enumValues = '[' .. Valeurspredef .. ']'
              HC2:PUT("/api/globalVariables/"..Nom, json.encode(composants))
        end
    end
end

ajoutvariable("Test1", 0, "1")
ajoutvariable("Test2", 1, "2", '"1", "2", "3", "4"')

Peux-tu stp me dire où est l'erreur de syntaxe qui fait que la variable prédéfinie est vide.

Lien vers le commentaire
Partager sur d’autres sites

Pour les variables globales il faut les crées en 2 fois

tu dois avoir des soucis de "" sur value et isEnum et surtout le enumValues qui est en réalité un tableau de chaque valeur possible.

J'ai pas ma galéré aussi sur cette partie heureusement que j'avais mon correcteur de code lol

if tonumber(VG_isEnum) == 1 then
             newVar1 = {}
             fibaro:debug("VG_Nom "..VG_Nom)
             newVar1.value = VG_Value
             newVar1.isEnum = true
             newVar1.enumValues = {"Absent", "Maison"}
             HC2:PUT("/api/globalVariables/"..VG_Nom, json.encode(newVar1))
          endif tonumber(VG_isEnum) == 1 then
             newVar1 = {}
             fibaro:debug("VG_Nom "..VG_Nom)
             newVar1.value = VG_Value
             newVar1.isEnum = true
             newVar1.enumValues = {"Absent", "Maison"}
             HC2:PUT("/api/globalVariables/"..VG_Nom, json.encode(newVar1))
          end
Lien vers le commentaire
Partager sur d’autres sites

  • 4 months later...
  • 5 months later...
  • 1 year later...
  • 2 years later...

J'ai rencontré un problème de création automatique de Variable avec Un Virtual device  inspiré  de "Variables_Globales.vfib"

 

Depuis la version 4.550 on obtient une erreur ( si on la teste  !! ) du style isNum expected

 

J'ai solutionné en modifiant le code de création

Avant  (4.550)       
        newVar = {}
        newVar.name = VG_Nom
        newVar.isEnum = tonumber(VG_isEnum)
        if tonumber(VG_isEnum) == 0 then
 	         newVar.value = VG_Value
        end
        HC2 = Net.FHttp("127.0.0.1", 11111)
        HC2:POST("/api/globalVariables", json.encode(newVar))

Correction pour (4.550)
        newVar = {}
        newVar.name = VG_Nom
        if tonumber(VG_isEnum) == 0 then
			newVar.isEnum = tonumber(false)
 	        newVar.value = VG_Value
     	else
      		newVar.isEnum = tonumber(true)
        end
        HC2 = Net.FHttp("127.0.0.1", 11111)
        HC2:POST("/api/globalVariables", json.encode(newVar))

 

Modifié par henri-allauch
  • Like 3
Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Ce module de test fonctionne chez moi tu peux l'essayer TestVG.vfib

 

@Steven a aussi fait une correction dans GEA pour la création des VG, il a peut être utilisé une méthode plus efficace ?

Modifié par henri-allauch
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Encore après la bataille ;-) en retard en ce moment, ce n'est pas avec moi que vous pourriez gagner une guerre ;-)

 

Pour la création :
 

api.post("/globalVariables", {name="Avant455", isEnum=0})

api.post("/globalVariables", {name="A_Partir455", isEnum=false})

 

@henri-allauch dans GEA cela teste la version du firmware de la HC2 et en fonction met 0 ou false

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...