Surveillance Free Memory HC2
Voici un VD qui va vous permettre de connaitre la taille maximum et minimum de la mémoire libre de votre HC2 ainsi que la taille libre en temps réel
C'est un VD très simple, il permet de connaitre les piques de mémoire maximum et minimum.
Cela ne veut pas dire que les problémes de RAM que certains connaissent sont du à la RAM
Le SWAP (fichier échange n'est pas pris en compte dans ce VD) car il n'est pas accessible via l'api de la box. De plus il n'est utilisé que lorsque RAM libre est inférieur a 5%.
Le cache et le Buffers sont considéré comme de la RAM utilisé.
Codes des différents Boutons :
Bouton UPDATE
local SelfId = fibaro:getSelfId()
local pause = fibaro:get(SelfId, 'IPAddress')
local NivAlerte = fibaro:get(SelfId, 'TCPPort')
local IdTel = fibaro:getGlobal("TelPascal")
local HC2 = Net.FHttp("127.0.0.1",11111)
local response, status, errorCode = HC2:GET("/api/diagnostics")
local result = json.decode(response)
local RamFree = tonumber(result.memory.free)
local RamCache = tonumber(result.memory.cache)
local RamBuffers = tonumber(result.memory.buffers)
local heure = os.date("%H:%M:%S", os.time())--os.date("%T")
local date = os.date("%d/%m")
local RamMax = tonumber(string.sub(fibaro:getValue(SelfId, "ui.labMax.value"), -4, -2))
local RamMini = tonumber(string.sub(fibaro:getValue(SelfId, "ui.labMini.value"),-4, -2))
-----------------------------------------------------------------
--- Message d'alerte Push
-----------------------------------------------------------------
local push = tonumber(fibaro:getValue(SelfId, "ui.labPush.value"))
if RamFree < tonumber(NivAlerte) then
if push == nil then
push = 0
end
if push > 0 then
push = push - tonumber(pause)
fibaro:debug("difference"..push)
else
local Message = string.format("HC2 Espace Memoire faible %s le %s a %s", RamFree, os.date("%d/%m/%Y"), os.date("%R"))
fibaro:call(IdTel, "sendPush", Message)
push = 600 -- 10mn
end
else
push = ""
end
------------------------------------------------------------------
if RamMax == nil or RamMini == nil then
RamMax = 0
RamMini = 0
end
if RamFree > RamMax then
RamMax = string.sub("0"..RamFree.." %", -4)
fibaro:call(SelfId,"setProperty","ui.labMax.value", date.." à "..heure.." - "..RamMax)
end
if RamFree < RamMini or RamMini == 0 then
RamMini = string.sub("0"..RamFree.." %", -4)
fibaro:call(SelfId,"setProperty","ui.labMini.value", date.." à "..heure.." - "..RamMini)
end
------------------------------------------------------------------
-- Mise a jour de label
------------------------------------------------------------------
fibaro:call(SelfId,"setProperty","ui.labPush.value", push)
fibaro:call(SelfId,"setProperty","ui.labFreeRam.value", heure.." - "..RamFree.." %")
fibaro:call(SelfId,"setProperty","ui.labSwap.value", heure.." - "..RamCache .." %")
fibaro:call(SelfId,"setProperty","ui.labelBuffers.value", heure.." - "..RamBuffers .." %")
Bouton RESET
local SelfId = fibaro:getSelfId()
local heure = os.date("%T")
fibaro:call(SelfId,"setProperty","ui.labMini.value", "")
fibaro:call(SelfId,"setProperty","ui.labMax.value", "")
Bouton REBOOT
function confirm(msg, labelId, secondes)
local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
if (current == msg) then
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ")
return true
else
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg)
fibaro:sleep(secondes*1000)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","")
return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " "
end
end
-- -----------------------------
-- A vous de jouer by Steven ---
-- -----------------------------
local message = "Ré-appuyer pour confirmer" -- le message de confirmation
local label_id = "lblMessage" -- l'ID du label qui recevra le message
local duree = 3 -- la durée max entre 2 clique (en seconde)
if ( confirm(message, label_id, duree) ) then
fibaro:log("Confirmé")
local SelfId = fibaro:getSelfId()
local HC2 = Net.FHttp("127.0.0.1",11111)
response, status, errorCode = HC2:POST("/api/settings/reboot", "data=shutdown -h");
if errorCode == 0 then
fibaro:log(status);
else
fibaro:log("error");
end
else
fibaro:log("Annulé")
message = "Demande Annulée..."
confirm(message, label_id, 10)
message = ""
confirm(message, label_id, 1)
end
Main Loop
local SelfId = fibaro:getSelfId()
local pause = fibaro:get(SelfId, 'IPAddress')
-----------------------------------------------------------------
fibaro:call(fibaro:getSelfId(), "pressButton", "6")
fibaro:sleep(pause*1000)
Utilisation :
il va falloir renseigner 3 valeurs
Le temps de rafraichissement des valeurs, ce temps sera exprimé en seconde. Pour renseigner cette valeur il suffit de rentrer un chiffre a la place de Adresse IP:Exemple :
Pour une mise a jour toute les 3 mn
Adresse IP : 180
Le % de mémoire libre restants à partir du quel je veux être averti par push. Pour renseigner cette valeur il suffit de rentrer un chiffre a la place de Port TCP:
Exemple :
Pour recevoir un push lorsque la mémoire vive libre est inférieur à 25 %
PortTCP: 25
L'ID de votre SmartPhone ou Apple Phone
local IdTel = fibaro:getGlobal("TelPascal") --si votre tel est enregistré dans une VG
ou
local IdTel = 69 -- id du telephone
Cette ligne ce trouve dans le bouton UPDATE ligne 4
Prochaine évolution : amélioration de la boucle pour l'envoi de push
Icône du VD réalisé par notre amis DID
Voici le VD a importer sur votre HC2 : Free_Memory_v1.10.vfib