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.

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!