Aller au contenu

Vd - Surveillance Free Memory Hc2


Messages recommandés

Posté(e)

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

 

 

med_gallery_374_242_627.png

 

  • 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

 

  • post-43-0-80618300-1448828702_thumb.png
 
Voici le VD a importer sur votre HC2 : Free_Memory_v1.10.vfib

 

 
 
 
  • Upvote 5
Posté(e)

merci

Reset c'est Reboot de la box ? D'ailleurs c'est quoi le bout de code pour faire cela ?

Free RAM, c'est Free + Cache ou seulement la memoire libre ?

Posté(e)

MPRInfo,

Je me permetterais la suggestion suivante : afficher la Free et la Cache (car perso, je considère la cache comme de la free)

 

FREE

RAM actuel : hh:mm:ss - 50%

RAM Max : jj/mm hh:mm - 50%

RAM Min : jj/mm hh:mm - 50%

 

CACHE

RAM actuel : hh:mm:ss - 50%

RAM Max : jj/mm hh:mm - 50%

RAM Min : jj/mm hh:mm - 50%

 

Je pense que rajouter la date des valeurs min/max pourrait être utilie.

 

Super en tout cas !

Posté(e)

je pense juste à  un truc:

tu fais des requêtes http toutes les 3 sec dans la main loop. Ca va planter un jour.

 

2 solutions :

  • on inclut ça dans le Watchdog de Lazer mais alors il faut mettre un fibaro:debug avec un message dans la main loop
  • on encapsule le tout comme dans le module Surveillance Station de Lazer (toujours lui ...)
Posté(e)

A mon humble avis, toutes les 3s ça n'a pas de sens.

Le but est, si j'ai bien compris, de détecter une augmentation régulière de l'occupation mémoire.

Quand on regarde le graphe Fibaro, il n'y a pas de pics soudains.

Donc un requête toute les 3mn me semble largement suffisant.

 

Si Fibaro code avec les pieds, raison de plus pour ne pas en rajouter !!! :)

Posté(e)

oui je suis d'accord.

Moi je ce que je souhaite faire c'est si RAM > XX % alors REBOOT de la HC2.

mais pas besoin de connaitre cela toutes les 3s.

 

Le VD Diagnostics je le rafraichis toutes les 10mn ou à  la demande.

Posté(e)

C'est juste pour connaître l'espace libre de la ram avec li mini et maxi

J'ai pas mis de sleep mais cest prévu car je veux déjàvoir comment ca évolue et cela dépend aussi des scripts qui sont installés je peux te faire un script qui en moins de 30s plante ta box

Oui je vais mettre un sleep réglable pour que chacun puisse adapté àson besoin

Vous êtes pas cool les copains c'est mes premières ligne lua depuis au moins 5 mois

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

mprinfo,

Ce que tu as fait est bien mieux que ce que tu m'avais demandé jeudi. Moi j'ai rien sorti. Toi au moins tu es venu avec quelque-chose. Il fallait que quelqu'un se lance.

Et on partage pour l'améliorer ensemble.

  • Upvote 1
Posté(e)

Petit question je fais une demande http sur le serveur interne avez vous déjàeu un plantage via le serveur interne

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

une petite remarque si je puis me permettre,

Mettre le bouton par défaut sur Update et pas sur Reboot, car si on appuye par mégarde sur le bouton par défaut de l'interface, il reboot la HC2.

Un petit double click éventuellement sur ce bouton ? Que je trouve utile mais dangereux

Posté(e)

MDR tu es mon traducteur préféré

 

Merci jojo pour ton aide 

 

Tu peux te permettre j'ai un peu de temps en ce moment car il pleut lol en plus tu n'es pas comme berale24 tu es gentil avec moi lol

 

Tu peux me donner le code pour le double clic STP

×
×
  • Créer...