Aller au contenu

Suppression De Variable Globale Par Vd


Sebbrunie1

Messages recommandés

Bonjour,


 


Il existe des VD pour créer automatiquement des variables globales.


 


Mais est il possible de supprimer des variables automatiquement? Si elles n'ont pas été mise à  jour au bout d'1 mois par exemple et/ou si elle n'est lié à  aucune scène ou module, le VD la supprime automatiquement. 


 


C'est vrai que j'ai des VD que j'ai supprimés car ils ne me servaient plus et j'ai des tas de variables qui ne sont plus utile mais je ne sais plus les quelles..... J'aimerai faire le ménage :)


 


Merci


 


Sébastien


  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

avant d'automatiser la suppression, c'est bien dangereux, il faut bien réfléchir au process.

 

J'ai des variables qui ne sont utilisée que TRES rârement (Noà«l, Vacances, ...)

 

Faire un "where used" pour les variables, je ne pense pas que ce soit possible.

Je pense que ce qui couterait le moins d'effort, et serait le plus efficace, serait de documenter cela (et de tenir la doc à  jour), au moment de la création de la variable et de son utilisation dans un VD/Scène

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

@Sebbrunie1,

 

C'est vrai dommage qu'il manque un timestamp , tu peux toujours faire un ticket sur le bugtracker :D ...

 

Petite astuce ou "Bonne pratique" que j'utilise pour les variables: L'ajout d'un préfixe au nom de la variable permet d'identifier facilement la destination de la dite variable...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

merci pour vos commentaires et conseils. Il suffirait juste avoir l'info et supprimer le variables si on le souhaite. La suppression n'est pas obligatoirement automatique.

 

Bon je vois que c'est tout de même plus compliqué que cela en à  l'air....

 

Le bugtracker, je sais pas mais j'ai une vague impression que je ne serais pas en haut de la liste des priorités ....

 

Ca doit bien être tracé tout de même quelque part la date de dernière mise à  jour non?

 

Sébastien

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Pour savoir où les variables globales sont utilisées, je vous propose la scène ci-après qui permet de lister, dans la fenêtre de debug, les  variables globales et les endroits où elles sont utilisées :

--[[
This scene is used to list all the global variables and where they are used.
Its a kind of xref.
--]]

local globalVariables = api.get("/globalVariables"); -- Get all globals variables,
local scenes = api.get("/scenes");                   -- all the scenes
local devices = api.get("/devices");                 -- and all the devices

local txt = '<BR><BR><font color="yellow">Globals Xref on : ' .. os.date("%d/%m/%y à  %X") .. '</font><BR>';

for _, v in pairs(globalVariables) do -- For each global variable
    txt = txt .. '<BR><font color="Orange">' .. v.name .. ' :</font>';
    local used = false;
    
    for _, s in pairs(scenes) do -- For each scene
        local scene = api.get("/scenes/" .. s.id);

        if scene.triggers.globals ~= nil then
            for _, g in pairs(scene.triggers.globals) do -- We look each trigger
                if (g ~= nil) and (g == v.name) then
                    txt = txt .. '<BR><font color="lightgreen"> - trigger in scene "' .. s.name.. '"</font>';
                    used = true;
                end
            end
        end
        -- On inspecte le code lua
        if (scene.isLua ~= nil) and (scene.isLua == true) and (string.find(scene.lua, v.name) ~= nil) then
            txt = txt .. '<BR><font color="Chartreuse"> - used in scene "' .. s.name .. '"</font>';
            used = true;
        end
    end -- for _, s in pairs(scenes)
    
    for _,device in pairs(devices) do -- On parcourt les devices
        if device.type == "virtual_device" then -- For others types there is no lua code
            if (device.properties.mainLoop ~= nil) and (string.find(device.properties.mainLoop, v.name) ~= nil) then
                txt = txt .. '<BR><font color="DeepSkyBlue"> - used in VD "' .. device.name .. '" mainloop</font>';
                used = true;
            end
            local rows = device.properties.rows;
            for _, r in pairs(rows) do
                if (r ~= nil) and (r.elements ~= nil) then
                    for _,e in pairs(r.elements) do
                        if (e.lua ~= nil) and (e.lua == true) then
                            if (e.msg ~= nil) and (string.find(e.msg, v.name) ~= nil) then
                                txt = txt .. "<BR><font color='LightSkyBlue'> - used in " .. '"' .. e.name .. '" (id: ' .. e.id .. ') of "' .. device.name .. '" VD</font>';
                                used = true;
                            end
                        end
                    end
                end
            end
        end
    end -- for _,d in pairs(devices)
    if not used then
        txt = txt .. "<font color='Magenta'> unused</font>";
    end
end
fibaro:debug(txt);

  • Upvote 9
Lien vers le commentaire
Partager sur d’autres sites

 Merci @Barelle pour cet outil bien pratique.

J'ai donc fait le ménage dans mes variables et il m'en reste une que ton code m'indique comme utilisée dans GEA mais je ne la voie pas dans mes lignes GEA, elle a effectivement été utilisée pour des tests mais ces lignes sont effacées depuis longtemps (pas dans l'entête non plus).

Lien vers le commentaire
Partager sur d’autres sites

Ce script m'interpelle. Je ne connaissais pas la fonction api.get. Vous, oui ?

 

Cette ligne:

local globalVariables = api.get("/globalVariables")

est équivalente à :

local HC2 = Net.FHttp(127.0.0.1, 11111)
local response, status, errorCode = HC2:GET("/api/globalVariables")
local globalVariables = json.decode(response)
Lien vers le commentaire
Partager sur d’autres sites

Souvent, découvrant leur nouveau joujou, les débutants (en lua) sont amenés à  parcourir cet excellent forum à  la recherche de la bonne syntaxe, ainsi, j'ai découvert la fonction api.get dans le tutoriel http://www.domotique-fibaro.fr/index.php/topic/4439-cr%C3%A9e-une-variable-globale-ou-une-variable-globale-predefinie-en-lua/  dans une réponse de mprinfo. De part sa concision, celle-ci a eu ma préférence. Maintenant, j'ignorais qu'elle n'est pas disponible dans les VD, encore une curiosité dont la logique m'échappe.

 

@mprinfo, un tutoriel, pourquoi pas ? Mais je ne vois pas très bien quoi détailler, ce bout de code ne consiste qu'en l'analyse de la réponse de l'API, et pour un petit nouveau membre de moins de dix messages, publier un tutoriel serait quelque peu prétentieux...

 

A tous, merci de vos aimables commentaires.

Lien vers le commentaire
Partager sur d’autres sites

  • 6 mois après...
×
×
  • Créer...