Ceci est une ancienne révision du document !


LUA / IDChanged

Vérifie si l'ID d'un module à changé suite à une mise à jour. \\L'astuce consiste à mettre son ID dans la description du module : [ID:XX]

--[[
%% autostart
--]]
 
local regex = "%[ID:%d+%]"
 
local receivePush = true		-- true pour recevoir une notification en cas de problème éventuel
local receiveEmail = false	-- true pour recevoir le rapport d'exécution par email
local portables_for_notification = {84}
local users_for_mail = {2}
 
--[[ ===========================================
NE PAS TOUCHER
--=========================================== ]]
-- toolbox c.f. https://gea.piccand.me/doku.php/minifier
local mailmsg = ""
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"
 
 
function findErrors()
	local devices = api.get("/devices")
  	local error = ""
	for k,v in ipairs(devices) do
  		if (type(v.properties.userDescription) == "string") then 
    		if (v.properties.userDescription ~= "") then
      			local id = string.match(v.properties.userDescription, regex)
      			if (id) then
      				local old = string.match(id, "%d+")
        			if (v.id ~= tonumber(old)) then
            			local msg = "Erreur l'ID " .. v.id .. " a changé (avant : " .. old .. ")"
          				tools.log(msg, "red", true)
            			error = error .. "\n" .. msg
          			end
        		end
    		end
  		end
	end
  	return error
end
 
tools.log("======================", "lightblue", true)
tools.log(" Starting IDChanged v."..version, "lightblue", true)
tools.log("======================", "lightblue", true)
tools.log("code couleur : ", "gray", true)
tools.log("#spaces5#rouge   = erreur ", "red", true)
tools.log("----------------------", "lightblue", true)
tools.log("", "gray", true)
local errors = findErrors()
if (string.len(errors)>0 and receivePush) then
	local ids = portables_for_notification or fibaro:getDevicesId({type="iOS_device", enabled=true})
	for _,v in ipairs(ids) do
		tools.log("Message d'avertissement envoyé à " .. fibaro:getName(v), "lightblue", true)
		fibaro:call(v, "sendPush", errors)
	end
	HomeCenter.PopupService.publish({
    	title = "Scénario IDChanged v." .. version,
        subtitle = os.date("%I:%M:%S %p | %B %d, %Y"),
        contentTitle = "Problème éventuel veuillez vérifier le scénario",
        contentBody = errors,
        img = "../img/topDashboard/warnings.png",
        type = "Warning",
        buttons = {{ caption = "Quitter", sceneId = 0 }}
    })  
    fibaro:setGlobal("Pushbullet", errors)
else
	tools.log("Rien à signaler", "lightblue", true)
  	tools.log("", "lightblue", true)
end
tools.log("--- Terminé ---", "lightblue", true)
if (type(users_for_mail) ~= "nil" and receiveEmail) then
    for _,v in ipairs(users_for_mail) do
      fibaro:call(v, "sendEmail", "HC2 Scénario IDChanged v." .. version, mailmsg)
    end
end