Aller au contenu
mprinfo

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

Recommended Posts

Voici une solution pour créer une variable globale en LUA

 

 

il existe 8 types de base:

 

 

nil, boolean, number, string, userdata, function, thread, et table

 

 

Je remercie Gazous pour son aide

 

Ce code va crée une variable globale Pascal

-- Creation de Variable Pascal Merci Gazous

json = '{"name":"Pascal", "isEnum":0}'
HC2 = Net.FHttp("127.0.0.1", 11111)
HC2:POST("/api/globalVariables", json)

Voici une solution pour créer une variable globale prédéfinie

 

ce code appartient entièrement a Gazous

 

il va crée une variable prédéfinie Gazous qui aura comme valeur Gazous1 ou Gazous2

-- Creation de Variable Gazous
json = '{"name":"Gazous", "isEnum":1}'
HC2 = Net.FHttp("127.0.0.1", 11111)
HC2:POST("/api/globalVariables", json)
 
-- Ajout de 2 valeurs à  la Variable Gazous et modification avec une des 2 valeurs
json = '{"value":"Gazous1","isEnum":true,"enumValues":["Gazous1", "Gazous2"]}'
HC2:PUT("/api/globalVariables/Gazous", json)

ou comme cela avec des variables :

local VG_Nom = "MPRInfo"
local VG_Value = "MPRInfo1"
local VG_enumValues = '["'..VG_Value..'", "MPRInfo2"]'
--Creation de Variable Gazous
json = '{"name":"'..VG_Nom..'", "isEnum":1}'
fibaro:debug(json)
HC2 = Net.FHttp("127.0.0.1", 11111)
HC2:POST("/api/globalVariables", json)
--Ajout de 2 valeurs à  la Variable Gazous et modification avec une des 2 valeurs
json = '{"value":"'..VG_Value..'","isEnum":true,"enumValues":'..VG_enumValues..'}'
fibaro:debug(json)
HC2:PUT("/api/globalVariables/"..VG_Nom, json)

Il ne vous reste plus qu'a vérifier dans le panneau des variables globales.

 

Je pense que je vais crée un Module Virtuel avec toutes mes variables comme cela lors d'un recovery je clic sur le bouton de VD et mes variables sont crées.

 

Code réalisé par Gazous 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")

La doc ce trouve ICI : http://xxx.xxx.xxx.xxx/docs/#!/globalVariables/getGVariables

 

Il faut remplacer les xxx.xxx.xxx.xxx par l'adresse IP du Home Center 2

 

 

:60: Un Petit Merci ou un Petit J'aime fais toujours plaisir..... :60:

 

 

Comme d’habitude voici un petit Bonus

 

Cette Scéne permet d'envoyer une notification lorsqu'il y a un démarrage de la box

 

Le message contient la date et l'heure de démarrage

 

Il faut juste mettre l'ID du portable (Téléphone ou GSM pour nos amis Belge :D )

--[[
%% autostart
--]]
local IdTel = 181
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 mprinfo
  • Upvote 12

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis toujours en 3.60, je n'ai donc pas la doc qui va bien.

Merci de partager tes découvertes !!!

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci voisin :) !

Partager ce message


Lien à poster
Partager sur d’autres sites

De rien cousin

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@Gazous merci j'ajoute cela au post 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Pfff trop fort lol merci par contre blind ne fonctionne pas en v4

Envoyé avec mon SmartPhone

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

jojo ça ne marche qu'avec la v4 :D

Partager ce message


Lien à poster
Partager sur d’autres sites

moque toi seulement ...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×