Aller au contenu

Messages recommandés

Posté(e)

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
Posté(e)

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
Posté(e)

Le "where used" serait faisable en lisant /api/devices et en faisant un gros string.match() pour retrouver le nom de la variable. Un peu bourrin, mais efficace.

Posté(e)

@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...

Posté(e)

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

Posté(e)

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
Posté(e)

Bonjour,

 

merci, c'est super. Ca me suffit. Il suffit de le faire tourner et d'aller supprimer la variable qui n'est pas utilisée. Dans mon cas, j'en ai 5, et hop, ma box est plus propre :)

 

Merci beaucoup

 

Sébastien

Posté(e)

 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).

Posté(e)

Et dans une ligne en commentaire ?

 

Ce qui est sà»r, c'est que le nom de la variable fait partie des informations retournées par l'API.

Posté(e)

moi qui voulait attendre d'avoir épuisé tous mes topics pour le mettre dans mon todo.

Je n'ai pas su résister.

C'est grandiose, et en plus bien présenté avec de belles couleurs :13:

Posté(e)

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)
Posté(e)

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.

Posté(e)

Un tuto ce n'est pas forcément une grande explication. C'est aussi pour mettre en avant un bout code bien pratique afin qu'il ne soit pas perdu dans un post au milieu d'un topic

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

Exact, d'accord avec @mprinfo, le nombre de messages publiés n'a pas d'importance, ce petit bout de code est tres pratique et un tuto permet de retrouver très facilement sur le forum ;-)

Posté(e)

Super Merci.

Ils sont dur sur ce forum lol

Doucement qu'en même sur les couleurs lol j'ai cru en regardant le résultat du code que j'étais sous Apple mdr

Envoyé de mon SM-G900F en utilisant Tapatalk

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