Aller au contenu

Messages recommandés

Posté(e)

Quick App - Diagnostics HC3 version 2.10

 

 

Module Virtuel "hc2 - Diagnostics" par @razowski  

lien : https://www.domotique-fibaro.fr/topic/3719-module-virtuel-hc2-diagnostics/

QA pour Home Center 3 (ne fonction pas sur HC2 ou HCL) r

éalisé par mprinfo

 

  • Suppression du bouton Arret de la box (cette commande n'est plus disponible)
  • Ajout d'un Bouton pour passer en mode recovery
  • Ajout de l'encodage Base64 pour le mot de passe
  • Ajout de 3 Childs
  • le child CPU indique la moyen des 4 Cores du CPU
 

 

1.jpg.07ac950413127c8946fce3dd91f1f3da.jpg

 

 

2.thumb.jpg.61968380248e9de09c7f93d409ed075f.jpg

 

 

3.thumb.jpg.0afac5b03dd3051f1f015b5f8818bcee.jpg

 

Quick App - Diagnostics HC3 - V2.10 - 27/11/2022

 

Lien : HC3_Diagnostics_V2.10.fqa

 

HC3_Diagnostics_1.png

 

HC3_Diagnostics_2.png

 

 

 

 

 

 

 

  • Like 7
  • Thanks 1
Posté(e)

Dis donc tu es certain du calcul du CPU ?

Car ça me parait super élevé tes valeurs, parce que si ton CPU est chargé à 20% pendant 1 minutes sur une box neuve qui ne fait rien, il y a un gros problème.

Je suis à moins de 5% chez moi (sans utiliser ton QA, c'est ma version de DomoCharts en cours de développement qui m'indique ça)

  • Like 1
Posté(e) (modifié)

@mprinfo & @Lazer

Je vous laisse vous mettre d'accord pour le calcul du CPU.

Je vais vous donnez un autre sujet de discorde, laquelle des deux icônes choisiriez-vous?:2:

HC3_Diagnostics_1.png

HC3_Diagnostics_2.png

 

EDIT: mprinfo tu peux les mettre dispo avec ton QA si tu veux.

Modifié par fredokl
  • Like 2
Posté(e)
Dis donc tu es certain du calcul du CPU ?
Car ça me parait super élevé tes valeurs, parce que si ton CPU est chargé à 20% pendant 1 minutes sur une box neuve qui ne fait rien, il y a un gros problème.
Je suis à moins de 5% chez moi (sans utiliser ton QA, c'est ma version de DomoCharts encours de développement qui m'indique ça)
Alors j'ai repris le calcul de celui de la hc2
Par contre je compare par défaut sur 60s au lieu de 1s
Je sais pas si c'est la bonne méthode ?

Envoyé de mon BLA-L29 en utilisant Tapatalk

Posté(e)

Faudra que je jette un oeil à ton code, mais l'idée c'était de faire le calcul entre 2 passages dans la boucle de rafraichissement (donc 60s par défaut)

Ca me semble pas normal des valeurs aussi élevées sur une bonne neuve.

Remarque tu es peut être en train de miner du bitcoin ?

Posté(e)

1.thumb.jpg.8284f3d2f7c6dcc0492a212841d55171.jpg

 

Je fais 1 passage toutes les 60s
Tu veux que je post le code ?
j'avais fais la capture juste après avoir sauvegardé

-- Generic device type have no default actions to handle
-- Module Virtuel "hc2 - Diagnostics" par razowski
-- lien : https://www.domotique-fibaro.fr/topic/3719-module-virtuel-hc2-diagnostics/
-- HC3-V2.00 - 24/05/2020 
-- QA pour Home Center 3 (ne fonction pas sur HC2 ou HCL) réalisé par mprinfo
-- www.domotique-fibaro.fr
-- Lien Topic : https://www.domotique-fibaro.fr/topic/14346-quick-app-diagnostics-hc3/


function QuickApp:onInit()
    self:debug("onInit")
    --__TAG = "QA"..plugin.mainDeviceId.."_Diagnostics HC3"
    self:updateView("Version", "text", "Version : HC3-V2.00 - www.domotique-fibaro.fr")
    if self:getVariable("Rafraichissement") == nil then
       self:setVariable("Rafraichissement", "60")
   end
    self.refresh    = tonumber(self:getVariable("Rafraichissement"))
    self.DoubleClic = 0          -- variable double lic
    self.NomBouton  = {"0", "0"} -- variables double click
    self:loop(self.refresh)      -- Boucle principale
end
----------------------------------------------------------------------------------------------
--- Boucle loop
----------------------------------------------------------------------------------------------
function QuickApp:loop(refresh)
      self:trace("Le QA Diagnostics a été mise a jour : Prochane mise a jours dans ",refresh,"mn--")
      self:diagnostics()
      --fibaro.setTimeout(refresh * 60 * 1000, function() 
         self:loop(refresh)
      --end)
end
----------------------------------------------------------------------------------------------
-- bouton "button" avec double clic
----------------------------------------------------------------------------------------------
-- Bouton Reboot
function QuickApp:RebootClic()
     local message1clic =  "Ré-appuyer pour confirmer"  -- Message de confirmation
     local messageBouton = "Redemarrage HC3"            -- Message bouton default
     local duree = 2                                   -- la durée max entre 2 clique (en seconde)
     local NomBouton = "Reboot"                         -- ID du bouton qui doit avoir un double clic
     local time = os.time()
     if ( self:confirmDoubleClick(message1clic, messageBouton, duree, time, NomBouton) ) == true then -- Si double clic
        self:updateView(NomBouton, "text", messageBouton)
         -----------------------------------------
         -- code exécuté suite a un double click
         -----------------------------------------
        self:startReboot(NomBouton, messageBouton)
        self:updateView(NomBouton, "text", "Votre HC3 va Redemarrée....")
        self.message = string.format("Redemarrage : %s", os.date("%d/%m/%Y à %Hh %Mmn %Ss"))
        self:updateView("label1", "text", self.message)
        print("-----------------------------------Reboot")
        self:Reboot()
     end
 end
-- Bouton Arret
 function QuickApp:ArretClick()
     local message1clic =  "Ré-appuyer pour confirmer"  -- Message de confirmation
     local messageBouton = "Arret HC3"                  -- Message bouton default
     local duree = 2                                   -- la durée max entre 2 clique (en seconde)
     local NomBouton = "Arret"                          -- ID du bouton qui doit avoir un double clic
     local time = os.time()
     if ( self:confirmDoubleClick(message1clic, messageBouton, duree, time, NomBouton) ) == true then -- Si double clic
         self:updateView(NomBouton, "text", messageBouton)
         -----------------------------------------
         -- code exécuté suite a un double click
         -----------------------------------------
      self:updateView(NomBouton, "text", "Votre HC3 va S'arrêtée....")
      self.message = string.format("Arret : %s", os.date("%d/%m/%Y à %Hh %Mmn %Ss"))
      self:updateView("label1", "text", self.message)
      print("-----------------------------------Arret")
      self:Arret()
     end
 end
----------------------------------------------------------------------------------------------
-- confirmation d un double click
----------------------------------------------------------------------------------------------
function QuickApp:confirmDoubleClick(message1clic, messageBouton, duree, time, NomBouton)
    if NomBouton ~= self.NomBouton[1] then
       self:updateView(self.NomBouton[1], "text", self.NomBouton[2])
       self.NomBouton = {NomBouton, messageBouton}
       self:updateView(NomBouton, "text", message1clic)
       fibaro.setTimeout(duree*1000, function() 
          self:updateView(NomBouton, "text", messageBouton)
       end)
       self.DoubleClic = os.time()
       return false
    end
    if time > self.DoubleClic + duree then
       self.DoubleClic = os.time()
       self:updateView(NomBouton, "text", message1clic)
       fibaro.setTimeout(duree*1000, function() 
          self:updateView(NomBouton, "text", messageBouton)
          self.DoubleClic = 0
       end)
       return false
    end
    self.DoubleClic = 0
    return true 
end
----------------------------------------------------------------------------------------------
-- arrondi 2 chiffres apres la virgule
----------------------------------------------------------------------------------------------
function QuickApp:round(num)
     local a = math.floor(num*100 + 0.5)/ 100
     return a,string.format("%.2f",a)
end
----------------------------------------------------------------------------------------------
-- creation de la table avec les donnees des CPU
----------------------------------------------------------------------------------------------
function QuickApp:GetTableCPU()
         local reponse, status = api.get("/diagnostics")
         -- print (json.encode(reponse))
         if tonumber(status) == 200 then
            local TableCPU ={}
            for i = 0, 3 do
                TableCPU[i] = {
                    ["cpu_user"]    = tonumber(reponse.cpuLoad[i+1].user),
	                ["cpu_nice"]    = tonumber(reponse.cpuLoad[i+1].nice),
	                ["cpu_system"]  = tonumber(reponse.cpuLoad[i+1].system),
	                ["cpu_idle"]    = tonumber(reponse.cpuLoad[i+1].idle)
                }
                TableCPU[i]["cpu_TOTAL"] = (TableCPU[i].cpu_user + TableCPU[i].cpu_nice + TableCPU[i].cpu_system + TableCPU[i].cpu_idle)
            end
            --print (json.encode(TableCPU))
            return(TableCPU)
         end
end
-----------------------------------
-- Reboot HC3 
-----------------------------------
function QuickApp:Reboot()
    local http = net.HTTPClient({ timeout = 2000 })
    local payload = {recovery=false}
    return http:request("http://localhost/api/service/reboot",{
    options={ 
        headers = {
            ["content-type"] = "application/json;charset=UTF-8",
            ["Authorization"] = "Basic YWRtaW46YWRtaW4=",              
            ["X-Fibaro-Version"] = "2"
        }, 
        method = "POST",
        data =  json.encode(payload)
        }
    })
end-----------------------------------
-- Mise en veille HC3 
-----------------------------------
function QuickApp:Veille()
end
-----------------------------------
-- Arret HC3 
-----------------------------------
function QuickApp:Arret()
    local http = net.HTTPClient({ timeout = 2000 })
    return http:request("http://localhost/api/service/shutdown",{
    options={ 
        headers = {
            ["X-Fibaro-Version"] = "2"
        }, 
        method = "POST",
        }
    })
end

----------------------------------------------------------------------------------------------
-- fonction principale
----------------------------------------------------------------------------------------------
function QuickApp:diagnostics()
     local data, status = api.get("/settings/info")
     local Version = data.softVersion
     local Serial = data.serialNumber
     local heure = os.date("%R")
     local date = os.date("%d/%m/%Y")
     local Message = string.format("Diagnostics : %s Firmware : %s ", Serial, Version)
     self:updateView("Titre", "text", Message)
     local Message = string.format("Mise a jour le %s à %s ", date, heure)
     self:updateView("update", "text", Message)
     local result, status = api.get("/diagnostics")
     --print(json.encode(result))
     if tonumber(status) == 200 then
         ---------------------------------------------------------------
         --Utilisation de la RAM----------------------------------------
         ---------------------------------------------------------------
         local ramused = tonumber(result.memory.free)
         local ramfree = 100 - ramused;
   	     ramused = ramused .. " %";
  	     ramfree = ramfree .. " %";
	     self:updateView("vlRAM0", "text", "Utilisé : " .. ramused) 
         self:updateView("vlRAM1", "text", "Disponible : " .. ramfree) 
         ---------------------------------------------------------------
         --Partition système--------------------------------------------
         ---------------------------------------------------------------
	     local sused = tonumber(result.storage.internal[1].used)
  	     local sfree = 100 - sused;
         sused = self:round(sused)
         sfree = self:round(sfree)
	     sused = sused .. " %";
  	     sfree = sfree .. " %";
	     self:updateView("vlSystem0", "text", "Utilisé : " .. sused) 
         self:updateView("vlSystem1", "text", "Disponible : " .. sfree) 
         ---------------------------------------------------------------         
	     --Charge CPU---------------------------------------------------
         ---------------------------------------------------------------
         if TablePREV_CPU == nil then            
            TablePREV_CPU = self:GetTableCPU()
         end
         fibaro.sleep(self.refresh*1000)
         local TableCPU = self:GetTableCPU()
         ----------------------
         -- affichage CPU
         ----------------------
         for i = 0, 3 do
             local CPU_TOTAL = TableCPU[i]["cpu_TOTAL"]-TablePREV_CPU[i]["cpu_TOTAL"]
             local CPU_idle = TableCPU[i]["cpu_idle"] - TablePREV_CPU[i]["cpu_idle"]
             local CPU_Pourcentage = (CPU_TOTAL-CPU_idle)/CPU_TOTAL*100
		     CPU_Pourcentage = self:round(CPU_Pourcentage)
             CPU_Pourcentage = CPU_Pourcentage .. " %"
             self:updateView("vlCPU"..i, "text", CPU_Pourcentage)
          end
          TablePREV_CPU = TableCPU
      else
	      self:debug("Try again "..status)
      end
end

 

  • 9 mois après...
Posté(e) (modifié)

Ben quand j'appuie ça ne fonctionne pas. 

Mais du coup j'ai lu une note que reboot et arrêt ne fonctionne plus a partir de je ne sais quel version. 

Modifié par Domodial
Posté(e)

Ah oui le reboot, OK j'avais pas compris.

 

En effet, il faut mettre le login administrateur et le mot de passe associé dans la requête HTTP, du coup ce n'est pas sécurisé (ça veut dire qu'on laisse le mot de passe en clair dans le code LUA)

 

Mais de toute façon, je pense que le reboot de la HC3 est un peu inutile, elle est bien plus stable que la v4 betastable de la HC2.

 

L'intérêt de ce QA c'est surtout de surveiller l'utilisation des ressources. Normalement ça ne devrait jamais exploser.

  • 1 an après...
  • 2 mois après...
Posté(e)

en cours de développement une nouvelle version

1.jpg.07ac950413127c8946fce3dd91f1f3da.jpg

 

2.thumb.jpg.61968380248e9de09c7f93d409ed075f.jpg

 

@lazer pour le type des childs c'est com.fibaro.multilevelSensor que j'ai choisi c'est bien ce type la ou il faut un choisir un autre

  • Like 1
  • 1 an après...
Posté(e)

Hello,

J'ai pris peur en voyant ma RAM à 98%... et je me suis calmé en en lisant le post :

@mprinfo

Je pense que cette QA mériterai un petit update pour récupérer la bonne valeur de la RAM consommée :)

ligne 187 :

local ramused = tonumber(result.memory.free)
à remplacer par
local ramused = tonumber(result.memory.used)

 

  • Like 1
×
×
  • Créer...