Sensor de temperatura SNMP con Raspberry y Cacti

Actualizado 31-8-2015: Por problemas en la sd, he tenido que seguir los pasos, y he de apuntar que he tenido que usar la versión de raspbian “2013-09-25-wheezy-raspbian”, con la ultima disponible tenia que comenzar todo de nuevo, y no apetecía.
También apuntar que las librerias DHT estan ya anticuadas, pero cumple mis necesidades.
Hoy me toca apuntarme como ha sido los pasos hasta llegar a tener lo que realmente necesitaba.
Monitorizar la temperatura y humedad en nuestro Cacti.
Intentare recopilar y traducir todos los pasos que he tenido que dar, de los cuales la mayoría han sido guiados por DJs Attempt y Adafruit

Lo primero, materiales y conexión.
Anteriormente use un DHT11, en esta ocasión he optado por un DHT22, que acababa de recibir.
Para mi proyecto no ha merecido la pena el desembolso extra pero tenia curiosidad.
1xDHT22
1xResistencia 10K
1x Raspberry Pi con raspbian wheezy corriendo y con el ssh habilitado (por comodidad xD)

Lo conectamos tal que así:
dht22wiring

Y empezamos con la parte software:
Seguramente ya lo tengáis instalado pero mejor prevenir

sudo apt-get install git-core build-essential

Descargamos el código desde github y entramos en el directorio

git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code
cd Adafruit_DHT_Driver

Ahora vamos a probar que lea los valores desde el sensor, que esta conectado en el pin GPIO #4 (el pin 7 de la raspberry)
Escribimos

sudo ./Adafruit_DHT 2302 4

Donde 2302 es el tipo de sensor (DHT22)
y 4 es el ping GPIO donde esta conectado.
Nos devolverá la temperatura y humedad en una misma línea.
adafruit_dht_2302_4

Hasta aquí todo bien, pero necesitamos que nos de los valores por separado y así poder guardarlos en un archivo.
Y para eso necesitamos modificar el código y compilar de nuevo. Para esto he seguido los pasos de DJs Attempt.

Modificando y compilando:

Descargar la librería BCM2835

wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.25.tar.gz 
tar -zxvf bcm2835-1.25.tar.gz
cd bcm2835-1.25
./configure
make
sudo make install

Vamos a editar el archivo Adafruit_DHT.c que esta dentro del directorio Adafruit_DHT_Driver

sudo nano Adafruit_DHT.c

Comentar la linea 65

1
//printf("Using pin #%d\n", dhtpin);

la linea 127

1
//printf("Data (%d): 0x%x 0x%x 0x%x 0x%x 0x%x\n", j, data[0], data[1], data[2], data[3], data[4]);

y la linea 142

1
//printf("Temp =  %.1f *C, Hum = %.1f \%\n", f, h);

Y para grados celsius añadimos:

1
2
printf("%.0f\n", f);
printf("%.0f\n", h);

compilamos y ejecutamos (yo he preferido cambiar el nombre por Adafruit_DHT2 y conservar el original)

gcc Adafruit_DHT.c -l bcm2835 -std=gnu99 -o Adafruit_DHT2
sudo ./Adafruit_DHT2 2302 4

Y nos devolverá la temperatura y humedad en lineas diferentes
adafruit_dht2_2302_4

Ahora vamos a mandar la lectura a un archivo y posteriormente separarlas para poder enviar los datos recogidos mediante snmp.
Usare mismos nombres y rutas que el blog de DJs, asi que nos movemos a:
/var/scripts
y creamos un archivo llamado getboth.sh con el siguiente contenido

#!/bin/sh
 
sudo /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/Adafruit_DHT2 2302 4 > /home/pi/both.txt
 
 
while [ ! -s "/home/pi/both.txt" ]
do
        sleep 5
        sudo /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/Adafruit_DHT2 2302 4 > /home/pi/both.txt
 
done
 
sed '1d' /home/pi/both.txt > /home/pi/humid.txt
sed '2d' /home/pi/both.txt > /home/pi/temp.txt

Esto se encargara de crearnos en el directorio /home/pi el archivo both.txt con la temperatura y humedad en lineas diferentes.
Y a su vez, nos creara archivos independientes donde uno tendrá solo la temperatura, y otro solo la humedad.
No olvidar dar permisos de ejecucion a todos los scripts: sudo chmod +x nombre
Ahora vamos a añadirlo al cron para que se ejecute cada minuto.

sudo crontab -e

y añadimos al final

* * * * * /var/scripts/getboth.sh

Verificamos que cree los archivos y que estos tengan datos :D

Empezamos con la parte del SNMP
No controlo tanto, del tema así que las pruebas primero las hice en local y para eso necesitamos el cliente snmp también,

sudo apt-get install snmp snmpd

Nos dirigimos a /usr/local/bin y vamos a crear 2 scripts mas que nos permitirán enviar mediante snmp el contenido de los archivos anteriores.

Para la humedad

sudo nano humid

y pegamos:

#!/bin/bash
echo .1.3.6.1.2.1.25.1.8.1
echo gauge
cat /home/pi/humid.txt

Para la temperatura

sudo nano temp

y pegamos:

#!/bin/bash
echo .1.3.6.1.2.1.25.1.8.2
echo gauge
cat /home/pi/temp.txt

Damos permisos para poder ejecutarlos.

sudo chmod +x humid
sudo chmod 755 humid
sudo chmod +x temp
sudo chmod 755 temp

comprobamos que funcionen ejecutándolos a mano, yo para ello he duplicado los archivos y les he puesto su extension .sh

sudo ./humid.sh

snmphumid

Y ahora nos toca editar la configuración del snmpd

sudo nano /etc/snmp/snmpd.conf

En el he realizado los siguientes cambios:
Comentado las lineas

#agentAddress  udp:127.0.0.1:161
#agentAddress udp:161,udp6:[::1]:161

Y añadido

agentAddress udp:161

Añadido

rocommunity public  IPQUEPERMITOLEERLAINFORMACION

Comentado

#rocommunity public  default    -V systemonly

Y en el apartado EXTENDING THE AGENT añadido los OIDS que usare (los mismos que hemos usado en los scripts anteriores)

pass .1.3.6.1.2.1.25.1.8.2      /bin/sh         /usr/local/bin/temp
pass .1.3.6.1.2.1.25.1.8.1      /bin/sh         /usr/local/bin/humid

Guardamos los cambios y reiniciamos el servicio.

sudo service snmpd restart

Comprobamos que funcione desde la propia maquina

snmpget -c public -v1 localhost .1.3.6.1.2.1.25.1.8.1

y

snmpget -c public -v1 localhost .1.3.6.1.2.1.25.1.8.2

snmpgetlocal

La misma prueba la hacemos desde la maquina que tengamos añadida en el snmpd.conf y el resultado tiene que ser el mismo.

Una vez podamos ver los datos desde otra maquina, ya es cosa de configurar el cacti, que para empezar yo cree los gráficos con el template SNMP – Generic OID Template
añadiendo los OIDS, en cada gráfica.
Luego he ya le he creado un template que estoy probando, pues es el primero que he creado y no se muy bien como lo he hecho XD.
Este es el resultado:
cactiraspbsnmp

Y con esto, espero saber volver a hacerlo, aunque voy a subir el código modificado, y los ejecutables por si acaso xD raspbsnmpTEMP
Aquí dejo el template, dentro lleva un archivo con las instrucciones, y también lo dejo escrito en este post.
Nota: He puesto comentar linea X, es muy probable que no coincidan, con buscar el texto a comentar no hay que ir buscando numero de lineas.
Nota2: He editado el código para que muestre decimales, el problema es que no lo recibo por snmp, si lo consigo, editare con los cambios.

No Responses to “Sensor de temperatura SNMP con Raspberry y Cacti”

Trackbacks/Pingbacks

  1. Plantilla para Cacti – Raspberry con sensor temperatura snmp - [...] « Sensor de temperatura SNMP con Raspberry y Cacti [...]

Leave a Reply

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR