Lua : exécuter une commande système (ping, uptime …)

Exécuter une commande système (os.execute)

Voici une petite fonction permettant d’exécuter une commande système. Cette fonction permet de récupérer la sortie sur stdout de la commande, comme le message d’erreur dans le cas où la commande système échoue.

-- Permet d'exécuter une commande système sur la Vera
-- commande    : la chaîne de caractères contenant la commande
-- Retourne vrai en cas de succès plus le résultat (stdout) de la commande
function josdOsExecute(commande)
  local cmd=commande..' > /tmp/josdOsExecute.log 2>&1'
  local reponse=os.execute(cmd)
  local file=assert(io.open("/tmp/josdOsExecute.log", "r"))
  local stdout=file:read("*all")
  assert(file:close())
  return (reponse==0 or reponse==true), stdout
end

Ping

Voici maintenant une fonction Lua qui permet de tester l’accessibilité d’une autre machine à travers un réseau IP.

-- Permet de faire un ping sur une adresse
function josdPing(adresse)
  local nbPing=3     -- -c CNT : Send only CNT pings
  local nbSecondes=5 -- -w SEC : Seconds until ping exits
  assert(type(adresse)=="string")
  return josdOsExecute("ping -c"..nbPing.." -w"..nbSecondes.." -W"..nbSecondes.." "..adresse)
end

Load Average (uptime)

Le load average est une moyenne de la charge système calculée sur la dernière minute, les cinq dernières minutes et les quinze dernières minutes (3 moyennes en fait). Voici une fonction Lua permettant de retourner la valeur de ces trois moyennes.

-- Permet de connaitre le taux d'occupation du processeur de la VeraLite
-- Retourne la charge système moyenne pour les 1, 5 et 15 dernières minutes.
function josdLoadEverage()
  local succes,message=josdOsExecute("uptime")
  if (succes) then
    local l1,l2,l3=string.match(message, "load average[^0-9.]*([0-9.]*)[^0-9.]*([0-9.]*)[^0-9.]*([0-9.]*)")
    return tonumber(l1),tonumber(l2),tonumber(l3)
  end
end

Voici une fonction Lua permettant de tester si ces trois moyennes sont en dessous d’un seuil passé en paramètre.

-- Vrai si les trois valeurs du taux d'occupation du processeur sont inférieures à la limite
function josdLimiteLoadEverage(limite)
  limite=limite or 0.33 -- Valeur par défaut
  local l1,l2,l3=josdLoadEverage()
  return(l1<limite and l2<limite and l3<limite)
end

Sommaire Domotique sur ce blog

Cette entrée a été publiée dans Domotique, Tutoriels and taguée , . Placez un signet sur le permalien.

One Response to Lua : exécuter une commande système (ping, uptime …)

  1. LeTigre30

    Bonjour,
    j’exécute le script lua suivant :
    os.execute(« vol »)

    le résultat renvoyé est :
    >lua -e « io.stdout:setvbuf ‘no' » « test_execute.lua »
    Le volume dans le lecteur C s’appelle OS
    Le num‚ro de s‚rie du volume est 94DA-B604
    >Exit code: 0

    la valeur 0 de « Exit code » indique que l’exécution de la commande s’est bien passée,
    mais je n’arrive pas à récupérer les chaînes « OS » et « 94DA-B604 » …

    Comment le faire ?
    Merci pour les réponses

    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *