Aller au contenu
mprinfo

Module Virtuel - Crée Automatiquement Des Variables Globales

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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Je viens de tester en 4.056 et la methode POST ne semble pas disponible sur ma box !!???

 

est-ce que ca marche pour vous ?

 

Merci

Zoe

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

 

est il possible de supprimer des variables. Si elles n'ont pas été mise à  jour au bout d'1 mois par exemple ça la supprime ou alors si elle n'est lié à  aucune scène ou module?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir a vous,

 

ce VD ne me créé plus les variables. Ca marche vous?

 

Merci

 

Sébastien

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, moi même avec la correction ça marche plus :(

Ça vient pas de la disparition du POST cette histoire ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

×