sebcbien Posté(e) le 28 novembre 2015 Signaler Posté(e) le 28 novembre 2015 Bon, voici ma dernière version, rien de très léché mais ça marche depuis deux jours... Le double click pour reboot déconne (1 click et la box reboote !!) mais je pense que vous préférez l'avoir comme ça ;-) J'ai aussi ajouté des notifications pour les dépassements Pour la V2, voir ici: http://www.domotique-fibaro.fr/index.php/topic/3719-module-virtuel-hc2-diagnostics/page-4#entry122558 HC2_Diagnostics.vfib 2
sebcbien Posté(e) le 28 novembre 2015 Signaler Posté(e) le 28 novembre 2015 Pouir le setup emon cms 1) récupérer votre clef de l'api 2) le VD crée tout seul des inputs. 3) pour mémoriser ces inputs dans emoncms, il faut créer un feed SETUP/INPUTS->clef à molette à droite de l'input->en haut de la page log to feed/create new/feedengine=fixed interval with average/30s -> add 4) si vous allez dans SETUP/FEED, après quelques minutes vous devriez voir des graphiques en cliquant sur l'oeil de chaque feed 5)pour crée un multigraphe (superposition de plusieurs graphes) allez dans EXTRA/VISUALISATIONS - select visualisation: multigraph - new multigraph - ajouter les feeds sur l'échelle de gauche et le uptime sur l'échelle de droite 6) ensuite SETUP/DASHBOARD - new - editez le - ensuite visualisation/multigraph - selectionnez l'emplacement - selectionnez le - configure - selectionnez le bon - save - save - puis le petit oeil en haut à droite pour passer en visualisation Et voilà 2
sebcbien Posté(e) le 28 novembre 2015 Signaler Posté(e) le 28 novembre 2015 Sa fonctionne, j'ai un tableau avec des données, mais comment faire pour changer la partie de gauche comme toi? partie de gauche ? les deux échelles ? Il faut associer les inputs à left et le uptime à right
sebcbien Posté(e) le 28 novembre 2015 Signaler Posté(e) le 28 novembre 2015 note: dans le dernier, j'ai aussi rajouté des notifications pour une valeur X de la ram. lazer way, as usual -> sms email push
Sakkhho Posté(e) le 29 novembre 2015 Signaler Posté(e) le 29 novembre 2015 super. Possible d avoir le code du VD? Je voudrais pas forcément le réimporter. Merci!
sebcbien Posté(e) le 29 novembre 2015 Signaler Posté(e) le 29 novembre 2015 Le code àbesoin du vd car les noms et nombre de boutons àchangé... Sent from my Note4
sebcbien Posté(e) le 3 décembre 2015 Signaler Posté(e) le 3 décembre 2015 Voici ce que ça donne sur une petite semaine: Ce qui m'étonne le plus c'est la constance de la diminution de la mémoire... Que la box soit utilisée ou non, la nuit, le jour, backup etc, la diminution semble constante... J'ai rajouté les lignes vert fluo pour bien illustrer cette tendance.
Lazer Posté(e) le 3 décembre 2015 Signaler Posté(e) le 3 décembre 2015 Je constate la même augmentation régulière sur mon embryon de graphique, et cela ne fait que confirmer ce que je pense: fuite mémoire, on ne peut rien y faire...
sebcbien Posté(e) le 3 décembre 2015 Signaler Posté(e) le 3 décembre 2015 si je ne me trompe pas, faire un backup relance les services fibaro non ? Apparement ça ne change rien àla ram... Donc même un watchdog sur les process ne servirait pas àgrand chose, seul un reboot permet de repartir sur des bases saines...
Lazer Posté(e) le 3 décembre 2015 Signaler Posté(e) le 3 décembre 2015 Le backup ne redémarre pas tous les services, seulement certains. Un watchdog au niveau de Linux a la possibilité de redémarrer tous les services, et donc de libérer la mémoire. Testé et approuvé 2
Lazer Posté(e) le 4 décembre 2015 Signaler Posté(e) le 4 décembre 2015 Pour info j'ai ouvert un ticket sur le bugtracker Fibaro pour demander l'ajout du swap à l'API : http://bugzilla.fibaro.com/view.php?id=3718 N'hésitez pas à plussoyer le sujet
mprinfo Posté(e) le 4 décembre 2015 Signaler Posté(e) le 4 décembre 2015 C'est bien parce que c'est toi je viens de mettre un +1 car je vais jamais chez fibaro ils ne parlent pas français. merci pour avoir ouvert ce ticket 1
sebcbien Posté(e) le 23 décembre 2015 Signaler Posté(e) le 23 décembre 2015 20 jours plus tard... Toujours pas planté, mais j'arrive à 30% de ram libre ... En tout cas, belle constance dans la perte mémoire...
Plap3014 Posté(e) le 27 février 2016 Signaler Posté(e) le 27 février 2016 Bonjour, si je veux utiliser GEA pour refaire avec le reboot automatiquement la nuit si RAM a moins de 10%. je edevrais inscrire quoi comme commande vu le double click? Merci,
kioneoranga Posté(e) le 28 février 2016 Signaler Posté(e) le 28 février 2016 Je viens de mettre en place ce VD et son pendant sur Emoncms Bonnes explications et aucune difficulté pour la mise en place. Merci Concernant la gestion de la RAM, je peux enfin la surveiller au travers d'un graphe, mais la fuite est constatée depuis quelques temps sans cela. Je suis preneur d'une solution pour mettre en place un reboot auto, une fois atteint un seuil critique de mémoire libre comme 10% ou 5 % via GEA ou autre. Encore une fois merci pour le partage.
Domodial Posté(e) le 6 mars 2016 Signaler Posté(e) le 6 mars 2016 Merci sbcbien pour le VD et le tuto explicatif emoncms ! (car pas évident) Question : Combien de temps pour avoir une remonté de graphs quand ont a jamais utilisé emoncms ? EDIT : En appuyant sur D (day) je commence à avoir des données. Merci Pouir le setup emon cms 1) récupérer votre clef de l'api 2) le VD crée tout seul des inputs. 3) pour mémoriser ces inputs dans emoncms, il faut créer un feed SETUP/INPUTS->clef à molette à droite de l'input->en haut de la page log to feed/create new/feedengine=fixed interval with average/30s -> add 4) si vous allez dans SETUP/FEED, après quelques minutes vous devriez voir des graphiques en cliquant sur l'oeil de chaque feed 5)pour crée un multigraphe (superposition de plusieurs graphes) allez dans EXTRA/VISUALISATIONS - select visualisation: multigraph - new multigraph - ajouter les feeds sur l'échelle de gauche et le uptime sur l'échelle de droite 6) ensuite SETUP/DASHBOARD - new - editez le - ensuite visualisation/multigraph - selectionnez l'emplacement - selectionnez le - configure - selectionnez le bon - save - save - puis le petit oeil en haut à droite pour passer en visualisation Et voilà 1
kioneoranga Posté(e) le 7 mars 2016 Signaler Posté(e) le 7 mars 2016 Bonjour L'outil Emoncms stocke et affiche les données sur une semaine Est-il envisageable d'avoir une mémorisation des valeurs sur une plus longue durée?
Domodial Posté(e) le 7 mars 2016 Signaler Posté(e) le 7 mars 2016 Ben tu clics sur le bouton en haut àdroite non ? (D, W,Y)
kioneoranga Posté(e) le 7 mars 2016 Signaler Posté(e) le 7 mars 2016 Ben tu clics sur le bouton en haut à droite non ? (D, W,Y) Cela fait maintenant 4 semaines que j'ai mis en place ce monitoring technique. Et lorsque je clique sur l'icone W, M, je n'ai que la dernière semaine.
Domodial Posté(e) le 7 mars 2016 Signaler Posté(e) le 7 mars 2016 haaaa ok ! Moi ça fait depuis hier seulement Je pensais que ces boutons fonctionnaient.
sebcbien Posté(e) le 10 avril 2016 Signaler Posté(e) le 10 avril 2016 Voici la "V2" avec variable globale ramfree pour utilisation avec GEA entre autres. En plus des instruction de la V1: - http://www.domotique-fibaro.fr/index.php/topic/3719-module-virtuel-hc2-diagnostics/page-3#entry98130 - http://www.domotique-fibaro.fr/index.php/topic/3719-module-virtuel-hc2-diagnostics/page-3#entry98131 Créez une Variable Globale RamFree et importez le VD V2 attaché à ce post. HC2_Diagnostics V2.vfib Code GEA pour reboot automatique: -------------SURVEILLANCE MEMOIRE-------------- GEA.add({{"Global-", "RamFree", 35}}, 30, "RAM inférieure à #value# - Reboot prévu cette nuit à 2h45", {{"Time", "21:00", "21:01"}}) -- Push si Ram faible GEA.add({{"Global-", "RamFree", 35}}, 30, "Reboot HC2 car RAM inférieure à 35% (#value#)", {{"Time", "02:45", "02:46"},{"VirtualDevice", id["HC2_DIAGNOSTICS"], 15},{"Function", function() fibaro:sleep(1000) end},{"VirtualDevice", id["HC2_DIAGNOSTICS"], 15}}) -- Reboot HC2 si RAM faible code du bouton raffraichir: local thismodule = fibaro:getSelfId(); local HC2 = Net.FHttp("127.0.0.1",11111); EmonCMS = {}; EmonCMS.EmonCMS_Prefix = "HC2_DIAG_"; EmonCMS.PushToEmonCMS = true; -- true = push to emoncms - false = do not push EmonCMS.get = Net.FHttp("emoncms.org",80); EmonCMS.emoncms_api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; -- your EMONCMS WRITE api Key EmonCMS.emoncms_ok = true HcDiag = {}; -- notifications HcDiag.notifications = true; -- send notifications --HcDiag.notificationTypes = {"push", "email"};--notification types {"push", "email", "sms"} HcDiag.notificationTypes = {"email"};--notification types {"push", "email", "sms"} HcDiag.smartphoneID = {1347}; -- Smartphone Id to send push to. {id1, id2, id3} HcDiag.userID = {2}; -- User Id to send email to. {id1, id2, id3} HcDiag.sms = { ["VD_ID"] = 0, -- Virtual Device ID ["VD_Button"] = "1", -- Virtual Device Button ["VG_Name"] = "SMS"}; -- Global Variable Name HcDiag.debug_messages = false; -- Global Variable Name local debug_messages = false; -- Diplay debug for notifications local ram_treshold = 15 -- limit of freeram to send notification Debug = function (color, message) if color and color ~= "" then fibaro:debug('<span style="color:'..color..';">'..message..'</span>'); else fibaro:debug(message); end end round = function(num) local a = math.floor(num*100 + 0.5)/ 100; return a,string.format("%.2f",a); end EmonCMS.Push = function(payloademon) fibaro:debug("Payload: " .. payloademon) ; if EmonCMS.emoncms_ok then payloademon = "/input/post.json?json={" .. EmonCMS.EmonCMS_Prefix .. payloademon .. "}&apikey=" .. EmonCMS.emoncms_api_key; response, status, errorCode = EmonCMS.get:GET(payloademon); if status ~= "200" then EmonCMS.emoncms_ok = false fibaro:debug("error response, aborting all push. - ".."response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ; end fibaro:sleep(500); end end HcDiag.notification = function(message, subject, param) local message = message or "<vide>"; if HcDiag.debug_messages then Debug("yellow", "Notification : "..message); end if param then for _, notif in ipairs(param) do if HcDiag.debug_messages then Debug("grey", notif); end -- Envoi Push if notif == "push" and HcDiag.smartphoneID then for _, id in ipairs(HcDiag.smartphoneID) do if HcDiag.debug_messages then Debug("grey", "Send Push smartphone ID : "..id); end fibaro:call(id, "sendPush", message); end -- Envoi Email elseif notif == "email" and HcDiag.userID then for _, id in ipairs(HcDiag.userID) do if HcDiag.debug_messages then Debug("grey", "Send Email user ID : "..id); end fibaro:call(id, "sendEmail", subject, message); end -- Envoi SMS elseif notif == "sms" and HcDiag.sms then if HcDiag.debug_messages then Debug("grey", "Send SMS : VD_ID="..(HcDiag.sms["VD_ID"] or 0).." VD_Button="..(HcDiag.sms["VD_Button"] or "0").." VG_Name="..(HcDiag.sms["VG_Name"] or "")); end fibaro:setGlobal(HcDiag.sms["VG_Name"], message); if HcDiag.sms["VD_ID"] and tonumber(HcDiag.sms["VD_ID"])>0 and HcDiag.sms["VD_Button"] and tonumber(HcDiag.sms["VD_Button"])>0 then fibaro:call(HcDiag.sms["VD_ID"], "pressButton", HcDiag.sms["VD_Button"]); end end end else Debug("orange", "Warning : no notification options given"); end end timestampToDate = function(nTimestamp) -- Convertit un Timestamp en date lisible return os.date("%d/%m/%y à %X", nTimestamp) end SecondsToClock = function(sSeconds) -- Convertit un Timestamp en durée (code krikoff) local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours.."H "..nMins.."Min "..nSecs.. "s" end end Minutes = function(sSeconds) -- Convertit un Timestamp en durée (code krikoff) local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00"; else nMinutes = string.format("%02.f", math.floor(nSeconds/60)); return nMinutes end end local response, status, errorCode = HC2:GET("/api/settings/info"); if tonumber(status) == 200 then local result = json.decode(response); --fibaro:debug("Timestamp de boot: " .. result.serverStatus) --fibaro:debug("Date de boot: " .. timestampToDate(result.serverStatus)) --fibaro:debug("HC2 allumée depuis " ..SecondsToClock(os.time()-result.serverStatus)) fibaro:debug("HC2 allumée depuis " .. Minutes(os.time()-result.serverStatus).." minutes. Soit "..SecondsToClock(os.time()-result.serverStatus)) fibaro:call(thismodule,"setProperty","ui.time.value", "Up: ".. SecondsToClock(os.time()-result.serverStatus).." (at " .. os.date("%H:%M", os.time())..")"); end --fibaro:call(thismodule,"setProperty","currentIcon","1267"); local response, status, errorCode = HC2:GET("/api/diagnostics"); if tonumber(status) == 200 then local result = json.decode(response); --Utilisation de la RAM --local ramused = tonumber(result.memory) local ramused = tonumber(result.memory.used); local ramfree = 100 - ramused; ramused_pct = ramused .. "%"; ramfree_pct = ramfree .. "%"; fibaro:call(thismodule,"setProperty","ui.vlRAM0.value", "Utilisé : " .. ramused_pct); fibaro:call(thismodule,"setProperty","ui.vlRAM1.value", "Disponible : " .. ramfree_pct); if ramfree <= ram_treshold then HcDiag.notification("Ram used: ".. ramused_pct.. "Ram free: ".. ramfree_pct, "HC2 Ram Usage High !", HcDiag.notificationTypes); -- Send Alert end --Partition système local sused = tonumber(result.storage.internal[1].used); local sfree = 100 - sused; sused = sused .. "%"; sfree = sfree .. "%"; fibaro:call(thismodule,"setProperty","ui.vlSystem0.value", "Utilisé : " .. sused); fibaro:call(thismodule,"setProperty","ui.vlSystem1.value", "Disponible : " .. sfree); --Partition recovery local rused = tonumber(result.storage.internal[2].used); local rfree = 100 - rused; rused = rused .. "%"; rfree = rfree .. "%"; fibaro:call(thismodule,"setProperty","ui.vlRecovery0.value", "Utilisé : " .. rused); fibaro:call(thismodule,"setProperty","ui.vlRecovery1.value", "Disponible : " .. rfree); --Charge CPU local cpu0_puser = tonumber(result.cpuLoad[1].cpu0.user); local cpu1_puser = tonumber(result.cpuLoad[2].cpu1.user); local cpu0_pnice = tonumber(result.cpuLoad[1].cpu0.nice); local cpu1_pnice = tonumber(result.cpuLoad[2].cpu1.nice); local cpu0_psystem = tonumber(result.cpuLoad[1].cpu0.system); local cpu1_psystem = tonumber(result.cpuLoad[2].cpu1.system); local cpu0_pidle = tonumber(result.cpuLoad[1].cpu0.idle); local cpu1_pidle = tonumber(result.cpuLoad[2].cpu1.idle); local cpu0_PREVTOTAL = (cpu0_puser + cpu0_pnice + cpu0_psystem + cpu0_pidle); local cpu1_PREVTOTAL = (cpu1_puser + cpu1_pnice + cpu1_psystem + cpu1_pidle); --fibaro:debug("PREV TOTAL cpu_0: " .. cpu0_PREVTOTAL); --fibaro:debug("PREV TOTAL cpu_1: " .. cpu1_PREVTOTAL); fibaro:sleep(1000); local response1, status1, errorCode1 = HC2:GET("/api/diagnostics"); if tonumber(status1) == 200 then local result1 = json.decode(response1); local cpu0_user = tonumber(result1.cpuLoad[1].cpu0.user); local cpu1_user = tonumber(result1.cpuLoad[2].cpu1.user); local cpu0_nice = tonumber(result1.cpuLoad[1].cpu0.nice); local cpu1_nice = tonumber(result1.cpuLoad[2].cpu1.nice); local cpu0_system = tonumber(result1.cpuLoad[1].cpu0.system); local cpu1_system = tonumber(result1.cpuLoad[2].cpu1.system); local cpu0_idle = tonumber(result1.cpuLoad[1].cpu0.idle); local cpu1_idle = tonumber(result1.cpuLoad[2].cpu1.idle); local cpu0_TOTAL = (cpu0_user + cpu0_nice + cpu0_system + cpu0_idle); local cpu1_TOTAL = (cpu1_user + cpu1_nice + cpu1_system + cpu1_idle); --fibaro:debug("TOTAL cpu_0 : " .. cpu0_TOTAL); --fibaro:debug("TOTAL cpu_1 : " .. cpu1_TOTAL); local cpu0_Percentage = ( ( (cpu0_TOTAL - cpu0_PREVTOTAL) - (cpu0_idle - cpu0_pidle) ) / (cpu0_TOTAL - cpu0_PREVTOTAL) ) * 100; local cpu1_Percentage = ( ( (cpu1_TOTAL - cpu1_PREVTOTAL) - (cpu1_idle - cpu1_pidle) ) / (cpu1_TOTAL - cpu1_PREVTOTAL) ) * 100; cpu0_Percentage = round(cpu0_Percentage); cpu1_Percentage = round(cpu1_Percentage); cpu0_Percentage_pct = cpu0_Percentage .. "%"; cpu1_Percentage_pct = cpu1_Percentage .. "%"; fibaro:call(thismodule,"setProperty","ui.vlCPU0.value", "Coeur 1 : " .. cpu0_Percentage_pct); fibaro:call(thismodule,"setProperty","ui.vlCPU1.value", "Coeur 2 : " .. cpu1_Percentage_pct); --fibaro:debug(cpu0_Percentage_pct); --fibaro:debug(cpu1_Percentage_pct); if EmonCMS.PushToEmonCMS then payloademon = "CPU_0:" .. cpu0_Percentage; -- /1000 = convert to m3 EmonCMS.Push(payloademon); payloademon = "CPU_1:" .. cpu1_Percentage; -- /1000 = convert to m3 EmonCMS.Push(payloademon); payloademon = "RAM_USED:" .. ramused; EmonCMS.Push(payloademon); payloademon = "RAM_FREE:" .. ramfree; EmonCMS.Push(payloademon); payloademon = "MINUTES_UP:" .. nMinutes; EmonCMS.Push(payloademon); end fibaro:setGlobal("RamFree", ramfree); end else fibaro:debug("Try again "..deviceID.. " "..status) end 1
domo Posté(e) le 11 avril 2016 Signaler Posté(e) le 11 avril 2016 merci pour l'amélioration de ce VD j'ai juste un petit souci avec le GEA, le chiffre après "HC2 Diagnostics" c'est le numéro de ton VD ?
pepite Posté(e) le 11 avril 2016 Signaler Posté(e) le 11 avril 2016 salut domo, non, c'est le numéro du bouton du VD pour lancer le Reboot ;-)
domo Posté(e) le 11 avril 2016 Signaler Posté(e) le 11 avril 2016 Merci pepite pour la réponse , bon GEA sa fonctionne pas chez moi
Messages recommandés