Aller au contenu

Messages recommandés

Posté(e)

Gestion simple des Variables Globale en LUA

 

 

Le script que je partage avec vous va vous permettre de gérer simplement les Variables globales et Variables globales prédéfinie en LUA. C'est une adaptation du code de STEVEN

 

Avantage :

  • Il permet de faire une sauvegarde des Variables globales ce qui est bien pratique lorsque l'on fait un recovery
  • Il permet de créé des variables globales prédéfinie ou pas très simplement à  partir d'une scène ou d'un VD sans avoir à  sortir artillerie lourde.

Voici le code a mettre dans une Scéne :

--[[
%% properties
%% globals
GestionVG
--]]
local trigger = fibaro:getSourceTrigger()
local variables = {}
local variablesASupprimer ={}

-- creation de ou des VG avec la variable GestionVG
if (trigger['type'] == 'global') then
   fibaro:debug('Global variable source = ' .. trigger['name'])
   variables = json.decode((fibaro:getGlobal('GestionVG')));
   if variables == nil then 
      fibaro:abort()
   end
-- creation de ou des VG manuellement ou par une autre scène ou un appel API
elseif (trigger['type'] == 'other') then 
    fibaro:debug('Global variable source = ' .. 'Other source.')
    variables = {
       {nom = "GestionVG", valeur = ""}, -- Gestion de VG
       -- Ex : Variable Globale predefini avec valeur1 pour valeur par default
       {nom = "Test1", valeur = "Valeur1", choix = {"Valeur2", "Valeur3"}},
       -- Ex : Variable Globale qui à  pour valeur 0
       {nom = "Test2", valeur = "0"},
   }
 
   variablesASupprimer = {
       {nom = "Test1"},
       {nom = "Test2"}
   }
end 
-------------------------------------------------
---- Merci a STEVEN pour ce code
-- -----------------------------------------------
-- Supprime une variable
-- -----------------------------------------------
function supprimer(nom)
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables/"..nom, { 
		options = { 
			method = 'DELETE'
		} ,
		success = function(response) fibaro:debug(nom .. " supprimée avec succès") end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Modifie une variable
-- -----------------------------------------------
function modifier(nom, valeur, choix)
	local variable = {}
	variable.value = valeur
	variable.isEnum = false
	if (type(choix) ~= "nil") then
		variable.isEnum = true
        table.insert(choix, 1, valeur)
		variable.enumValues = choix
	end
 
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables/"..nom, { 
		options = { 
			method = 'PUT', 
			data = json.encode(variable)
		},
		success = function(response) fibaro:debug(nom .. " modifiée avec succès") end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Ajoute une variable
-- -----------------------------------------------
function ajouter(nom, valeur, choix)
	local enum = 0
	if (type(choix) ~= "nil") then
		enum = 1
	end
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables", { 
		options = { 
			method = "POST", 
			data = json.encode({name=nom, isEnum=enum})
		},
		success = function(response) 
			fibaro:debug(nom .. " créé avec succès") 
			modifier(nom, valeur, choix)
		end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Voir si une variable existe ou non
-- et la modifier ou créer
-- -----------------------------------------------
function traiter(nom, valeur, choix)
	if (fibaro:getGlobalValue(nom) == nil) then
		ajouter(nom, valeur, choix)
	else
-- modifier(nom, valeur, choix)
	end
end
 
----------------------------------------------------
-- Execution du programme
----------------------------------------------------
for _,v in ipairs(variables) do
	traiter(v.nom, v.valeur, v.choix)
end
 
for _,v in ipairs(variablesASupprimer) do
	supprimer(v.nom)
end

Dans un premier temps il va falloir exécuter le script manuellement afin qu'il crée la VG GestionVG
cette VG va être utiliser pour crée les variables globale à  partir de n'importe quel script Lua

 

Exemple d'utilisation :

 

Création d'une variables globales "Test2" avec la valeur 0

local variables = {
   {nom = "Test2", valeur = "0"},
}
fibaro:setGlobal('GestionVG',json.encode(variables))

Création d'une variables globales prédéfinie "Test1" avec  Valeur1 , Valeur2 et Valeur3, vValeur1 sera la valeur par défaut dans cette exemple

local variables = {
   {nom = "Test1", valeur = "Valeur1", choix = {"Valeur2", "Valeur3"}},
}
fibaro:setGlobal('GestionVG',json.encode(variables))

Création de plusieurs variable globales prédéfinie ou pas en une seul fois

local variables = {
   {nom = "Test1", valeur = "Valeur1", choix = {"Valeur2", "Valeur3"}},
   {nom = "Test2", valeur = "0"},
}
fibaro:setGlobal('GestionVG',json.encode(variables))

Création et suppression de variables via la scéne

 

il faut modifier le code suivant, la méthode est la même que les exemples si dessus. Lors de l'exécution de la scene en mode manuel les variables seront créés si elle n'existe pas.

elseif (trigger['type'] == 'other') then 
    fibaro:debug('Global variable source = ' .. 'Other source.')
    variables = {
       {nom = "GestionVG", valeur = ""}, -- Gestion de VG
       -- Ex : Variable Globale predefini avec valeur1 pour valeur par default
       {nom = "Test1", valeur = "Valeur1", choix = {"Valeur2", "Valeur3"}},
       -- Ex : Variable Globale qui à  pour valeur 0
       {nom = "Test2", valeur = "0"},
   }
 
   variablesASupprimer = {
	   {nom = "Test1"},
           {nom = "Test2"},
   }

Ce code est fonctionnel chez moi, par manque de temps je ne pourrais vous aidez si vous avez des soucis de compréhension sur la création des VG ou leurs suppression

  • Upvote 3
Posté(e)

@Steven : merci pour l'inspiration que tu as donnée à  mprinfo

@mprinfo : merci pour le partage

 

Je ne vois pas de fonctionnalité de backup des variables ?

Posté(e)

C'est simple si tu les créé via la scène il suffit de sauvegarder la scène. Après un recovery par exemple tu lances la scène et la création des variables ce fait

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

La fonction première de ce script est la gestion des variables globale en lua

Il peut aussi permettre la sauvegarde si tu l'utilise en manuel de plus c'est très simple d'ajouter ou de supprimer une vg donc lors d'un recovery on a pas besoin de sauvegarder toutes les variables

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

Je trouve ce script gnial et d'un facilité enfantine pour ajouter et supprimer des variables. Il sera installé d'ici peu sur ma box.

Lors d'un recovery (cfr la dernière réinstallation complète que j'ai faite), j'étais très content d'avoir mon backup (principalement de la définition des variables et des valeurs possibles), il avait fait le restore en un click, et sans faute. Je m'étais d'ailleurs inspiré d'un de tes codes pour cela ...

Posté(e)

Oui il faut que je regarde ce que tu as fais

J'ai fais ce script car j'en avais marre d'avoir le même code dans pleins de scripts

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

ce script est INDISPENSABLE pour minimiser le code dans tous les scripts qui ont besoin de VG, MAIS du coup l'autre VD/Scène n'est plus autonome ...

Posté(e)

Oui on devrait demander a fibaro si on peut pas l'inclure dans une version futur lol Ils auraient pu créé une commande pour les VG mais bon c'est fibaro

Pour moi je trouve inutile d'écrire toujours la même chose dans un script j'ai donc plusieurs scène comme celle la qui sont indispensables car générique est cela ne pose aucun problème c'est un peu comme une fonction cela allège le code

Posté(e)

Arf vous allez trop vite, je comprends pas l'utilité.

ce script permet de créer rapidement plusieurs variables ok et ensuite ? je comprends pas ce que cela améliore au quotidien (comprendre quand les variables sont déjà  là ) ?

C'est uniquement à  mettre dans un VD pour gagner du temps dans la création des VG ?

 

D'ailleurs une question d'ordre générale, faut il que l'on se limite pour la santé de la box à  un certains nombres de VG ou prédéfinies? Ou c'est open bar ?

Car j'ai plutôt tendance à  tout faire avec des VG ..

Posté(e)

non,

tu crée cette scène, qui s'exécute à  chaque modif de la variableGestionVG.

 

Et dans chacun de tes scripts qui ont besoin d'une VG, tu mets le nom de la VG dont il a besoin dans la variable GestionVG (via fibaro:serglobal) et la variable est créée si nécessaire.

C'est trop vrai que pour y croire, mais c'est du Steven & mprinfo (quand ils s'y mettent ces deux là  ...)

Posté(e)

Sauf que si tu veux partager un VD à  la communauté, il faut que les gens installent d'abord cette scène, donc le VD est moins portable.

Perso je me suis créé ma propre routine que j'intègre directement dans mes VD, du coup le VD est totalement autonome et sais créer ses VG tout seul, sans l'assistance d'une tierce scène.

 

Disons que ce sont des usages différents.

  • Upvote 1
Posté(e)

ce script est INDISPENSABLE pour minimiser le code dans tous les scripts qui ont besoin de VG, MAIS du coup l'autre VD/Scène n'est plus autonome ...

Posté(e)

Sauf que si tu veux partager un VD àla communauté, il faut que les gens installent d'abord cette scène, donc le VD est moins portable.

Perso je me suis créé ma propre routine que j'intègre directement dans mes VD, du coup le VD est totalement autonome et sais créer ses VG tout seul, sans l'assistance d'une tierce scène.

Disons que ce sont des usages différents.

Oui c'est vrai que pour le partage c'est moins evident mais dans une logique de programmation c'est comme cela que l'on devrait faire.

Pourquoi ecrire x fois le même code alors qu'un script peu faire cela

En plus la scène permet de créé les vg en manuel ou via la vg

Je n'utilise plus le panneau des vg pour créé ou supprimer une vg

Envoyé de mon SM-G900F en utilisant Tapatalk

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

HELP !

Cela fait 3 heures que je cher à  créer un variable inexistante dans une scène avec ce code (inspiré de ci-dessus).

Il n'y a aucun message dans le debug

        local http = net.HTTPClient()
        http:request("http://127.0.0.1:11111/api/globalVariables", {
            options = {
                method = "POST",
                data = json.encode({name=Timer[i].variable, isEnum=0})
                },
            success = function(response)
                fibaro:debug(Timer[i].variable .. " créé avec succès")
                end,
            error = function(response) fibaro:debug(Timer[i].variable .. " ERROR !!!") end,
        })

 

Timer.variable est le nom de ma variable.

La variable que je veux créer doit être vide et non prédéfinie.

  1. Je désespère.
  • 1 an après...
Posté(e)

Petite question.

 

Je desire dans une scene modifier une variable prédéfinie (deja existante) "VarGlob1" dont les valeurs possibles sont "No" et "Yes";

J'aimerais faire en gros dans la scene VarGlob1="Yes" ...

 

Puis je le faire directement ou doit je intégrer le script de steven ?

 

il est top mais pour 3 lignes de codes dans la scene, c'est un peu lourd d'en rajouter 50... :)

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

Salut ! 

j'ai une question de syntaxe....

Quand je fais ça ....

 

fibaro:call(531, "sendPush", "La lumière du salon est allumée");

Est-il possible de remplacer 531 par une variable globale et pas locale... pour éviter les rechercher remplacer dans mes scènes ?

genre un truc   

fibaro:call((fibaro:getvalue:('TwentycentsID', value)), "sendPush", "La lumière du salon est allumée");

 

ça existe ça ? lol

Posté(e)

comme ça peut-être ? (pas testé)

fibaro:call(tonumber(fibaro:getGlobalValue('TwentycentsID')), "sendPush", "La lumière du salon est allumée")

attention avec le tonumber ! ne pas l‘utiliser pour des VG de type string...

Posté(e)

Ah j'ai trouvé ! 

merci jjaques de veiller si tard :p 

 

-- on veut récupérer la valeur de la variable globale nommée 'TwentycentsID'
local TwentycentsID = fibaro:getGlobalValue('TwentycentsID')

et du coup ça ça marche :)

fibaro:call(TwentycentsID, "sendPush", "La lumière du salon est allumée");
×
×
  • Créer...