Aller au contenu

Crée Une Variable Globale Ou Une Variable Globale Predefinie En Lua


Messages recommandés

Posté(e)

désolé j'ai une question bête, mais dans une variable global, on peut pas mettre de code ?

 

Pour le 2ieme code vous l'intégrer bien dans une variable définie, mais le premier du coup 

Posté(e) (modifié)

re à  tous,

 

j'ai créer la variable prédéfinis avec l'idée de chez moi

 

Sécurité (porte entrée et porte patio) ... bon !!

 

après j'ai créer un bouton virtuel ou j'ai intégrer le code et cela me donne bien deux bouton !

 

dans la boucle principale j'ai intégrer le code si c'est bien ça

 

Je continu ou je sort ? lol

 

-------

 

Est ce que l'on peut remplacer le sendPush afin de recevoir un sms plutôt ?

--[[
%% autostart
--]]
local IdTel = 166
local heure = os.date("%R");
local date = os.date("%d/%m/%Y");
local Message = "Votre Home center 2 à  démarrée le " ..date .." à  " ..heure
fibaro:debug(Message)
fibaro:call(IdTel, "sendPush", Message)
Modifié par cybersquat
Posté(e)

Merci d'avoir pris le temps d'écrire ce tuto qui je pense servira à  beaucoup de monde.

 

Je complète avec une petite fonction pratique pour créer une variable si elle n'existe pas

 

La version pour un Virtual Device (avec Net.FHttp)


function createGlobalIfNotExists(varName, defaultValue)
  if (fibaro:getGlobal(varName) == "") then
	fibaro:debug("Création de la variable "..varName.." avec comme valeur par défaut "..defaultValue)
 	newVar = {}
        newVar.name = varName
        newVar.value = defaultValue
	HC2 = Net.FHttp("127.0.0.1", 11111)
	HC2:POST("/api/globalVariables", json.encode(newVar))
  end
end
  
createGlobalIfNotExists("Gazous", "Oui c'est moi")

La version pour une Scène (avec net.HTTPClient)


function createGlobalIfNotExists(varName, defaultValue)
  if (fibaro:getGlobal(varName) == nil) then
	fibaro:debug("Création de la variable "..varName.." avec comme valeur par défaut "..defaultValue)
 	newVar = {}
        newVar.name = varName
        newVar.value = defaultValue
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables", { options = { method = 'POST', data = json.encode(newVar)}}) 
  end
end
  
createGlobalIfNotExists("Gazous", "Oui c'est moi")
  • Upvote 2
Posté(e)

pour un scéne je pense qu'il y a plus simple pour utiliser l'api

--[[
%% properties

%% globals
--]]
    local TousLesModules = api.get("/devices")
    local VoletsID = {}
     
    for i = 3, #TousLesModules do
       local theType = TousLesModules[i].type
       local Var_Name = TousLesModules[i].name
       -- Si égale à'blind'
       if (theType == 'com.fibaro.FGRM222') then
         table.insert(VoletsID, t_id)
         fibaro:debug('Volets ID ' ..i .." = "..Var_Name)
       end
    end

C'est un exemple pour scanner les FRGM222 dans une scène via l'api en v4 c'est très simple. J'ai eu l'info hier par un membre du forum que je remercie

Posté(e)

Oui, si tu as le prototype de "api.post()" on peut simplifier le code de la version pour une scène. Mais je n'ai pas trouvé de documentation làdessus.

Posté(e)
--Creation de Variable ---
function VG_Creation(VG_Nom, VG_isEnum, VG_Value, VG_enumValues)
  if (fibaro:getGlobal(VG_Nom) == "") then
   	  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))
      --Ajout de x valeurs àla Variable Gazous et modification avec une des 2 valeurs
      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 
    end
end
------------------  
 
VG_Creation("MPRInfo", "1", "MPRInfo1", '"MPRInfo2", "TOTO"'

Ne fonctionne que dans un Module Virtuel

0 = Variable globale

1 = Variable prédéfinie

Posté(e)

pour un scéne je pense qu'il y a plus simple pour utiliser l'api

--[[
%% properties

%% globals
--]]
    local TousLesModules = api.get("/devices")
    local VoletsID = {}
     
    for i = 3, #TousLesModules do
       local theType = TousLesModules[i].type
       local Var_Name = TousLesModules[i].name
       -- Si égale à  'blind'
       if (theType == 'com.fibaro.FGRM222') then
         table.insert(VoletsID, t_id)
         fibaro:debug('Volets ID ' ..i .." = "..Var_Name)
       end
    end

C'est un exemple pour scanner les FRGM222 dans une scène via l'api en v4 c'est très simple. J'ai eu l'info hier par un membre du forum que je remercie

 

 

Il y a plus simple encore:

/api/devices?type=com.fibaro.FGRM222

;)

  • Upvote 1
Posté(e)

comme cela ?

local text = api.get("/devices?type=com.fibaro.FGRM222")
  local VoletsID = {}
 
    for i = 1, #text do
       local theType = text[i].type
       local Var_Name = text[i].name
         table.insert(VoletsID, t_id)
         fibaro:debug('Volets ID ' ..i .." = "..Var_Name)
    end

par contre tu fais comment pour faire cela via l'api ?

local theType = string.sub(fibaro:getType(i), 12,15)

je recupere avec string.sub FRGM c'est ce qui ressemble le plus left$ mid$ right$ lol

  • 3 semaines après...
Posté(e)

Enfin, je prends le temps de mettre cela en place chez moi, mais je n'y arrive pas  :angry:

C'est parce que je serais en v3.600 ?

Car en fait cela m'aurait été bien utile pour préparer ma future ? migration vers 4.042 ou 4.1 ?

  • 4 semaines après...
Posté(e)

voilà , je suis passé en v4.x, et bien sur j'ai essayé ceci !!!!

Afin de gagner 10 min lors d'un prochain recovery, je viens de passer 3 heures à  faire un VD de tout ceci. (vous commencez à  me connaître, c'est plus fort que moi ...)

 

Le principe (suivant l'idée de mprinfo) est de recréer les variables (si elles n'existent pas).

 

Il y a 2 boutons :

  • Variable Globale
  • Variable Prédéfinie

Variable Globale

remplir une table (VarGlob) avec un nombre PAIR d'entrées : d'abord le nom de la variable, puis sa valeur par défaut.

 

Variable Prédéfinie

remplir une table (VarPred) avec : d'abord le nom de la variable, ensuite les valeurs prédéfinies, et enfin entre chaque variable la valeur "NewVar487" (cette dernière précise que l'on a fini de lire des valeurs prédéfinies, et que l'entrée suivante est un nom de variable)

Il n'est donc PAS nécessaire de terminer par cette valeur.

 

Les deux boutons fournissent en début de code un exemple de table à  remplir pour définir les variables.

  • 1 an après...
Posté(e)
--Creation de Variable ---
function VG_Creation(VG_Nom, VG_isEnum, VG_Value, VG_enumValues)
  if (fibaro:getGlobal(VG_Nom) == "") then
   	  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))
      --Ajout de x valeurs à  la Variable Gazous et modification avec une des 2 valeurs
      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 
    end
end
------------------  
 
VG_Creation("MPRInfo", "1", "MPRInfo1", '"MPRInfo2", "TOTO"'

Ne fonctionne que dans un Module Virtuel

0 = Variable globale

1 = Variable prédéfinie

 

J'utilisai le code ci-dessus à  priori sans problème  ( on ne crée pas des VG tout les jours)

Je viens de passer en 4.1 et lors d'un test je me rend compte qu'il y a des erreurs bizarre dans le debug .. "Assertion ...

Le pb viens de:

 if (fibaro:getGlobal(VG_Nom) == "") then 

 à  remplacer par 

 if (fibaro:getGlobal(VG_Nom) == nill) then

Dans mon cas cela à  corriger le pb et tout re fonctionne normalement

  • Upvote 2
  • 4 ans après...
Posté(e) (modifié)

Je viens de voir ce sujet sur les variable prédéfinie

Je ne connais rien en lua

Mais j'ai un VD netatmo qui utilise les variable prédéfini en table

Je voudrais récupérer une variable vent max

Voir le sujet ci dessous que j'ai ouvert ici

Si l'un d'entre vous pouvait m'aider

Merci par avance

 

 

Modifié par flacon030
×
×
  • Créer...