Monitoritzant l’estat d’un host amb Arduino

Monitoritzem l’estat d’un servidor remot a través d’un led connectat a una placa Arduino. La idea és molt senzilla: Si el servidor remot deixa de contestar a ping’s, s’encen un led.

monitoringwitharduino

 

 

 

 

 

 

 

 

 

Per a implementar-ho, he col·locat solament un led a la placa Arduino (pin 13) i he escrit el programa següent:

/*****************************
* Programa per a Arduino
*
* El programa escolta pel port serie
*
* Si rebem una O --> encenem led
* Si rebem una C --> tanquem led
*/
// Pin en el qual hi ha connectat el led
int outPin = 13;

//Estat del led
int estat = LOW;

//Valor rebut pel port serie
int valor;

void setup()
{
pinMode(outPin, OUTPUT);
Serial.begin(9600);
Serial.flush();
}

void loop()
{
if (Serial.available())
{
valor = Serial.read();
Serial.println(valor);
if (valor == 'O') estat = HIGH;
else if (valor == 'C') estat = LOW;
}

// Establim estat del pin
digitalWrite(outPin, estat);
}

Ara, escriurem un altre programa que s’encarregarà d’investigar si un servidor remot contesta o no a ping’s i, en funció de la resposta, trametrà una C si obté resposta, i una O en cas contrari. El codi, aquesta vegada escrit en Phyton, és el següent:

Nota: Atenció amb la llibreria pyserial, l’he hagut d’instal·lar abans.

#!/usr/bin/python2.7
import serial, sys, time, os

SERIALPORT = "/dev/ttyUSB0"

# Set up serial port
try:
sys.stdout.write("Obrint port serie\n")
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
sys.stdout.write("Error obrint el port")
sys.exit

host = "google.com"

while (1):

response = os.system("ping -c 1 " + host + " > /dev/null")
if response == 0:
# Hi ha resposta de ping: No hi ha problemes
ser.write('C')
else:
# Hi ha resposta de ping: Problemes
ser.write('O')
time.sleep(2)

# Tanquem port serie
ser.close()

Fet! Quan s’encengui el led és que tenim problemes a la xarxa!

Gerard

Gerard Farràs i Ballabriga.