Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

finder [03.03.2017 17:03] (Version actuelle)
Steven Piccand créée
Ligne 1: Ligne 1:
 +====== LUA / Finder ======
 +Recherche un ID / Texte dans toutes les scènes / VD de la HC2
 +\\ 
 +\\ 
 +<code lua>
 +--[[
 +%% autostart
 +--]]
  
 +-- ===========================================
 +-- FINDER ...
 +-- Recherche dans tous le code de la HC2
 +-- ===========================================
 +
 +local checkDisabled = false -- true pour vérifier aussi les scènes et VD désactivés
 +
 +-- Tableau contenant les mots à trouvé dans le code de la HC2
 +local findWhat = {"​127"​}
 +
 +
 +--[[ ===========================================
 +NE PAS TOUCHER
 +--=========================================== ]]
 +-- toolbox c.f. https://​gea.piccand.me/​doku.php/​minifier
 +if not tools then tools={log=function(a,​b,​c)a=tools.tostring(a) mailmsg = mailmsg .. a .. "​\n"​ for d,e in string.gmatch(a,"​(#​spaces(%d+)#​)"​)do local f=""​for g=1,e do f=f.."​."​end;​a=string.gsub(a,​d,"<​span style=\"​color:​black;​\">"​..f.."</​span>"​)end;​if debug or c then fibaro:​debug("<​span style=\"​color:"​..(b or"​white"​)..";​\">"​..a.."</​span>"​)end end,​error=function(a,​b)tools.log(a,​b or"​red",​true)end,​warning=function(a,​b)tools.log(a,​b or"​orange",​true)end,​info=function(a,​b)tools.log(a,​b or"​white",​true)end,​debug=function(a,​b)tools.log(a,​b or"​gray",​false)end,​tostring=function(h)if type(h)=="​boolean"​then if h then return"​true"​else return"​false"​end elseif type(h)=="​table"​then if json then return json.encode(h)else return"​table found"​end else return tostring(h)end end,​split=function(i,​j)local j,k=j or":",​{}local l=string.format("​([^%s]+)",​j)i:​gsub(l,​function(m)k[#​k+1]=m end)return k end,​trim=function(n)return n:​gsub("​^%s*(.-)%s*$","​%1"​)end,​deep_print=function(o)for g,p in pairs(o)do if type(p)=="​table"​then deep_print(p)else print(g,​p)end end end,​getStringTime=function(q)if q then return os.date("​%H:​%M:​%S"​)end;​return os.date("​%H:​%M"​)end,​toTime=function(r)local s,​t=string.match(r,"​(%d+):​(%d+)"​)local u=os.date("​*t"​)local v=os.time{year=u.year,​month=u.month,​day=u.day,​hour=s,​min=t,​sec=0}if v<​os.time()then v=os.time{year=u.year,​month=u.month,​day=u.day+1,​hour=s,​min=t,​sec=0}end;​return v end,​getStringDate=function()return os.date("​%d/​%m/​%Y"​)end,​isNil=function(w)return type(w)=="​nil"​end,​isNotNil=function(w)return not tools.isNil(w)end}end
 +
 +local version = "​1.0"​
 +
 +--[[ ===========================================
 +      Parcours les mots à chercher
 + w : mot à comparer
 +      ===========================================]]
 +function isSearched(w) ​
 +  for _,v in ipairs(findWhat) do
 +    if (string.lower(w) == string.lower(v) ) then
 +      return true
 +    end
 +  end
 +  return false
 +end
 +
 +--[[ ===========================================
 +      Cherche un mot dans le header d'une scène
 + paramètres :
 + scene : la scène à analyser
 +      ===========================================]]
 +function checkheader(scene)
 +  local found = false
 +  for header in string.gmatch(scene.lua,​ "​%-%-%[%[(.-)%-%-%]%]"​) do
 +    for w, device in string.gmatch(header,​ "(%a+) (%d+)"​) do
 +      if (isSearched(w)) then
 +        tools.warning(w .. " trouvé"​)
 +        found = true
 +      end
 +      if (isSearched(device)) then
 +        tools.warning(device .. " trouvé"​)
 +        found = true
 +      end
 +    end
 +  end
 +  return found
 +end
 +
 +
 +--[[ ===========================================
 +      Cherche un mot dans le code
 + paramètres :
 + code : le code a analyser
 + part : la partie analysée (pour le log)
 +      ===========================================]]
 +function checkWords(code,​ part)
 +  local found = false
 +  local position = 0
 +  if (findWhat) then
 +    for _,v in ipairs(findWhat) do
 +      if string.match(code,​ v) then
 +        tools.warning("​ found " .. v .. " in ".. part)
 +        found = true
 +      end
 +    end
 +  end
 +  return found
 +end
 +
 +--[[ ===========================================
 +      Analyse les scénarios
 +      ===========================================]]
 +function findWordsInScenes() ​
 +  local found = false
 +  tools.log("​--------------------------------------------",​ "​lightblue",​ true)
 +  tools.log("​Checking scenes ... ", "​lightblue",​ true)
 +  tools.log("​--------------------------------------------",​ "​lightblue",​ true)
 +  local scenes = api.get("/​scenes"​)
 +  for k,v in ipairs(scenes) do
 +    local scene = __fibaro_get_scene(v.id)
 +    if (tools.isNotNil(scene) and (scene.runConfig ~= "​DISABLED"​ or checkDisabled)) then
 +      tools.log("​checking scene : [" .. scene.id .. "] " .. scene.name, "​gray",​ true)
 +      if (string.find(scene.lua,​ "​findWordsInScenes()"​)) then
 +        -- on ignore car il s'agit de cette même scène
 +      else 
 +        if (checkheader(scene)) then found = true end
 +        if (checkWords(scene.lua,​ "​code"​)) then found = true end
 +      end
 +    end
 +  end
 +  tools.log("​... done ", "​lightblue",​ true)
 +  return problem
 +end
 +
 +--[[ ===========================================
 +      Analyse les virtual devices
 +      ===========================================]]
 +function findWordsInVirtual() ​
 +  local found = false
 +  tools.log("​--------------------------------------------",​ "​lightblue",​ true)
 +  tools.log("​Checking virtual devices ... ", "​lightblue",​ true)
 +  tools.log("​--------------------------------------------",​ "​lightblue",​ true)
 +  local filter = {type="​virtual_device",​ enabled = true}
 +  if (checkDisabled) then
 +    filter = {type="​virtual_device"​}
 +  end
 +  local ids = fibaro:​getDevicesId(filter)
 +  for k,v in ipairs(ids) do
 +    vd = __fibaro_get_device(v)
 +    if (tools.isNotNil(vd)) then
 +      tools.log("​checking vd : [" .. vd.id .. "] " .. vd.name, "​gray",​ true)
 +      if (tools.isNotNil(vd.properties.mainLoop)) then 
 +        tools.log("​ --> checking mainLoop",​ "​gray"​)
 +        if (checkWords(vd.properties.mainLoop,​ "​mainloop"​)) then found = true end
 +        for l,w in ipairs(vd.properties.rows) do
 +          if (w.type=="​button"​) then
 +            for m,x in ipairs(w.elements) do
 +              if (x.lua) then
 +                tools.log("​ --> checking " .. x.caption .. " ["​..x.name.."​]",​ "​gray"​)
 +                if (checkWords(x.msg,​ x.caption .. " ["​..x.name.."​]"​) ) then found = true end
 +              end
 +            end
 +          end
 +        end
 +      end
 +    end
 +  end
 +  tools.log("​... done ", "​lightblue",​ true)
 +  return found
 +end
 +
 +--[[ ===========================================
 +   ​  ​ Lancement du code
 +   ​ ===========================================]]
 +function run()
 +  mailmsg = ""​
 +  tools.log("​======================",​ "​lightblue",​ true)
 +  tools.log("​ Starting FINDER v."​..version,​ "​lightblue",​ true)
 +  tools.log("​ Cet outil ESSAIE de trouver des mots dans le code LUA", "​lightblue",​ true)
 +  tools.log("​======================",​ "​lightblue",​ true)
 +  tools.log("",​ "​gray",​ true)
 +
 +  findWordsInScenes()
 +  findWordsInVirtual()
 +  tools.log("​--- Terminé ---", "​lightblue",​ true)
 +end
 +run()
 +
 +</​code>​