mprinfo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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 GestionVGcette 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 3
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 @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 ?
mprinfo Posté(e) le 6 décembre 2015 Auteur Signaler Posté(e) le 6 décembre 2015 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
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 ok, je garde mon script qui est dans ma signature, il s'en fou de comment on a créé la variable.
mprinfo Posté(e) le 6 décembre 2015 Auteur Signaler Posté(e) le 6 décembre 2015 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
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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 ...
mprinfo Posté(e) le 6 décembre 2015 Auteur Signaler Posté(e) le 6 décembre 2015 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
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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 ...
mprinfo Posté(e) le 6 décembre 2015 Auteur Signaler Posté(e) le 6 décembre 2015 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
Sakkhho Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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 ..
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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à ...)
Lazer Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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. 1
jojo Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 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 ...
Lazer Posté(e) le 6 décembre 2015 Signaler Posté(e) le 6 décembre 2015 Pris en flagrant délit de lecture en diagonale
mprinfo Posté(e) le 7 décembre 2015 Auteur Signaler Posté(e) le 7 décembre 2015 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
jojo Posté(e) le 19 décembre 2015 Signaler Posté(e) le 19 décembre 2015 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. Je désespère.
jojo Posté(e) le 20 décembre 2015 Signaler Posté(e) le 20 décembre 2015 bon, ne vous cassez pas la tête, Lazer a répondu ici àma question
schwinny Posté(e) le 28 août 2017 Signaler Posté(e) le 28 août 2017 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...
pepite Posté(e) le 29 août 2017 Signaler Posté(e) le 29 août 2017 Bonjour, fibaro:setGlobal("VarGlob1", "Yes") en 1 ligne ;-)
Twentycents Posté(e) le 15 janvier 2020 Signaler Posté(e) le 15 janvier 2020 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
jjacques68 Posté(e) le 15 janvier 2020 Signaler Posté(e) le 15 janvier 2020 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...
Twentycents Posté(e) le 15 janvier 2020 Signaler Posté(e) le 15 janvier 2020 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");
jjacques68 Posté(e) le 15 janvier 2020 Signaler Posté(e) le 15 janvier 2020 voilà c‘est ça du coup tu glisses ton ID tu téléphone dans cette VG, c‘est très pratique 1
jjacques68 Posté(e) le 15 janvier 2020 Signaler Posté(e) le 15 janvier 2020 mais dans ce cas, pense à mettre le “tonumber“
Messages recommandés