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