mercredi 19 novembre 2014

Un exemple de script Lua | Time : Verifier la présence de matériel IP

Introduction

Il y a quelqu'un dans le réseau ?

Vérifier la présence sur le réseau IP de son domicile présente plusieurs intérêts :
  • Vérifier qu'une caméra IP est en marche.
  • Vérifier qu'un NAS/Raspberry est disponible.
  • Savoir si une personne présente en testant la présence de son téléphone !

The machine that goes 'Ping!'

Ping est une commande informatique présente sur tous le systèmes utilisant le réseau IP. Cette commande permet de tester l'accessibilité d'une machine à travers le réseau. Le nom 'ping'  est tiré du son émis par un sonar, car le fonctionnement est le même : on émet un signal qui va rebondir sur une cible, et donc nous revenir en cas de présence (pour les tatillons ce n'est pas le même principe, car la cible doit répondre activement ... ). 

Une analogie toute bête :
  1. Pour savoir si mon ami Robert est présent dans le coin (mon réseau) je crie : "Ping robert ?"
  2. Si robert est là, il répond : "Moi, Robert je suis là" !
  3. S'il n'est pas là (ou pas en état de répondre ) : aucune réponse.

Mise en place 

Principe  :

Je vais fournir une ou plusieurs adresses IP a tester, et si cette adresse répond présent je vais allumer ou éteindre un interrupteur virtuel.

Préparation :

  • Vérifier que les machines à tester ont une adresse IP Fixe.

  • Créer autant de virtual switch qu'il y a de matériel à tester.

  • Récupérer la liste des couples : adresse IP -> switch à activer si présent.
    • 192.168.0.100  -> Camera 1.
    • 192.168.0.101 -> Camera 2.
    • 192.168.0.200  -> Téléphone de Robert.
    • .....

Le script :

à Placer dans le repertoire LUA, sous le nom : script_time_ping.lua par exemple

--Initialise la commande de retour finale
commandArray={}


--Mode deboggage (affichage des messages)
debug=true
--Prefixe pour les sorties de log
prefixe="(PING) "


--Tableau des périphériques à "pinguer"
-- Key = adresse ip à pinguer
-- Value = périphérique virtuel à switcher
local ping={}
ping['192.168.0.200']='Presence Tom'
ping['192.168.0.201']='Presence Steph'
ping['192.168.0.20']='Presence Camera Interieure'
ping['192.168.0.21']='Presence Camera Exterieure'
ping['192.168.0.100']='Presence Raspberry'

--pour chaque entree du tableau
for ip, switch in pairs(ping) do

 --Le Ping ! : -c1 = Un seul ping  ,   -w1 délai d'une seconde d'attente de réponse
 ping_success=os.execute('ping -c1 -w1 '..ip)


 --Si le ping à répondu 
 if ping_success then
   if(debug==true)then
    print(prefixe.."ping success "..switch)
   end
   --si le switch etait sur off on l'allume
   if(otherdevices[switch]=='Off') then
      commandArray[switch]='On'
   end
 else

 --Si pas de réponse
   if(debug==true)then
    print(prefixe.."ping fail "..switch)
   end
   --si le switch etait sur oN on l'eteind
   if(otherdevices[switch]=='On') then
      commandArray[switch]='Off' 
   end
 end


end




return commandArray