Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 2 de 2] #RaspberryPi
Tras terminar todo el proceso descrito en la primera parte de este artículo, ya tendremos una versión funcional de la plataforma de BBDD que podremos administrar desde la web. Vamos a ver en esta parte del artículo cómo terminar la configuración, y cómo explotar los datos.
Si todo el proceso que hemos descrito en el artículo anterior ha ido bien, podremos ir al apartado “Admin” (icono de la corona) y nos deberá listar nuestra BBDD recién creada, que en este caso se llama “sensor_data”.
Desde aquí podemos administrar la BBDD y si nos interesa cambiar la política de retención de datos también podemos hacerlo. Por defecto viene en “INF” o "infinito", representado por su símbolo correspondiente (∞). En mi caso, le he establecido una política de retención de 7 días (7d), tras los cuales, los datos anteriores serán descartados.
Llegados a este punto, ya podemos comenzar a almacenar las métricas obtenidas con nuestra Raspberry Pi y el sensor conectado. Para ello, volvemos a la consola de nuestra RPi e importamos las librerías necesarias para poder almacenar los datos en InfluxDB:
El siguiente paso es lanzar este script en el proceso de arranque. Para ello detenemos el script con CTRL+C y editamos el script para comentar la línea del test. Después editamos el archivo /etc/rc.local agregando la siguiente línea justo antes de “exit 0” para que se ejecute junto con todos los demás daemons de arranque.
Explotación de datos y monitoreo de métricas
En este apartado instalaremos y configuraremos Grafana, que será el software encargado de leer los datos, mostrarlos “bonitos” e incluso podremos crearle alertas. Para ello, volvemos al servidor donde tenemos instalados InfluxDB y Chronograf. Abrimos una línea de comandos e instalamos Grafana:
Lo que queremos hacer ahora es configurar el canal HTTP para que sea seguro y un conector SMTP para que nos envíe alertas. Abrimos el archivo /etc/grafana/grafana.ini. En el apartado [smtp] establecemos los siguientes valores:
Guardamos, salimos del fichero y reiniciamos el servicio:
Una vez concluido, debemos agregar una fuente de datos, que será nuestro InfluxDB, en “Configuration” -> “Data Sources”. Establecemos los parámetros que ya conocemos, activando “Basic Auth” y si es necesario “Skip TLS Verification (Insecure)”.
Debemos configurar también el sistema de alertas en el menú de la "campana" (Figura superior). Le pondremos un nombre descriptivo, el tipo, que será por correo (e-mail) y la dirección de correo electrónico donde queremos que nos lleguen las alertas.
Ahora podemos comenzar a crear los paneles. Crearemos uno para la temperatura y otro para la humedad. Lo realizamos usando el botón de "graficas" . Nos crea un panel nuevo y ponernos sobre el nombre nos aparece una flecha indicando que hay un menú desplegable, lo pulsamos, editamos y comenzamos a agregarle contenido:
Pulsando sobre cada variable/campo podemos modificarla, añadirle, indicarle que tipo de valor queremos (media, último, máximo, etcétera). Para establecer la alerta, lo hacemos en la pestaña alert. Cuando la completemos, se nos marcará en el gráfico una área roja semitransparente con la zona de alerta.
Como yo he montado la Raspberry Pi con una TouchScreen de 7” y su caja correspondiente, he añadido un dashboard para la visualización de los datos dentro del mismo CPD:
Es importante saber que, cuando accedemos a visualizar los paneles en Grafana, hay que indicarle la tasa de refresco. Esto lo tenemos arriba a la derecha, pulsando sobre “Refresh every…”
Una vez concluido tendremos una monitorización con alertas incluidas de la temperatura y humedad de nuestro CPD. A partir de aquí podéis modificar el proyecto y meterle más sensores y/o relés, que ya con esto tenéis la base para comenzar.
Saludos,
Autor: Jesús Suárez
******************************************************************************************************
- Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
- Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
******************************************************************************************************
Figura 9: Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 2 de 2] |
Si todo el proceso que hemos descrito en el artículo anterior ha ido bien, podremos ir al apartado “Admin” (icono de la corona) y nos deberá listar nuestra BBDD recién creada, que en este caso se llama “sensor_data”.
Figura 10: Administración de la base de datos |
Desde aquí podemos administrar la BBDD y si nos interesa cambiar la política de retención de datos también podemos hacerlo. Por defecto viene en “INF” o "infinito", representado por su símbolo correspondiente (∞). En mi caso, le he establecido una política de retención de 7 días (7d), tras los cuales, los datos anteriores serán descartados.
Llegados a este punto, ya podemos comenzar a almacenar las métricas obtenidas con nuestra Raspberry Pi y el sensor conectado. Para ello, volvemos a la consola de nuestra RPi e importamos las librerías necesarias para poder almacenar los datos en InfluxDB:
sudo pip install influxdb sudo pip install urllib3Ahora procedemos a crearnos nuestro script en Python para la lectura del sensor y volcado de los datos obtenidos al InfluxDB. Para ello creamos un archivo con el nombre que deseemos. Yo lo he llamado sensor_data_logger.py. El script contendrá el siguiente código:
Import urllib3 import time import sys import datetime import Adafruit_DHT ###OPCIONAL### #Hemos añadido un extra de conectar un “buzzer” al GPIO 24 para hacerlo sonar si la temperatura sube de 28º import RPi.GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(24, GPIO.OUT, initial=0) ###### from influxdb import InfluxDBClient urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #Necesario si el certificado que asignamos no es de confianza #Variables de conexión con InfluxDB host = "Una vez guardado el archivo y cerrado, lo ejecutamos para que se ponga a hacer su trabajo." #Nuestro host con InfluxDB port = #El Puerto configurado (Yo usé el 8886) user = " " #El usuario que creamos para que la RPi se conectase (“rpi-3”) password = " " #El password que creamos para que la RPi se conectase dbname = "sensor_data" #La BB.DD. que creamos en su momento en InfluxDB interval = 1 #El período de tiempo que queremos que lea el sensor en segundos> #Creación del objeto conector con InfluxDB client = InfluxDBClient(host, port, user, password, dbname, verify_ssl=False, ssl=True) #Detalles del sensor (Modelo y GPIO al que está conectado) sensor = Adafruit_DHT.DHT22 sensor_gpio = 4 #Idetificamos el sensor measurement = "rpidht22" #Identificamos el lugar location = " " #(Robayna) # Bucle hasta pulsar crtl+c try: while True: # Leemos los datos del sensor humidity, temperature = Adafruit_DHT.read_retry(sensor, sensor_gpio) #Hemos añadido un extra de conectar un “buzzer” al GPIO 24 para hacerlo sonar si la temperatura sube de 28º If temperature > 28: GPIO.output(24, 1) Else: GPIO.output(24, 0) iso = time.ctime() #Si lanzamos el script al arrancar la RPi, comentar la siguiente línea. Solo dejarlo sin comentar para tests # print("[%s] Temp: %s, Humidity: %s" % (iso, temperature, humidity)) #Creamos la estructura JSON con los datos a mandar a InfluxDB data = [ { "measurement": measurement, "tags": { "location": location, }, "time": iso, "fields": { "temperature" : temperature, "humidity": humidity } } ] #Enviamos los datos a InfluxDB client.write_points(data) #Esperamos el tiempo establecido en la variable “interval”. time.sleep(interval) except KeyboardInterrupt: pass
sudo python sensor_data_logger.pySi todo va bien no veremos errores y si hemos dejado descomentada la línea para las pruebas de test, veremos la medición al tiempo que es mandada a InfuxDB.
El siguiente paso es lanzar este script en el proceso de arranque. Para ello detenemos el script con CTRL+C y editamos el script para comentar la línea del test. Después editamos el archivo /etc/rc.local agregando la siguiente línea justo antes de “exit 0” para que se ejecute junto con todos los demás daemons de arranque.
sudo python sensor_data_logger.pyCon esto, tras reiniciar nuestra Raspberry Pi, el script se lanzará automáticamente y comenzará a almacenarse la información capturada por los sensores en la base de datos que hemos creador en InfluxDB. Podemos acceder y verificar que los datos están almacenándose usando el CLI “influx” o Chronograf. Para usar el CLI ejecutamos:
influx >auth username: admin password: > > > > use sensor_data Using database sensor_data >SELECT * FROM "sensor_data"."autogen"."rpidht22" WHERE "location"='Con ese comando SQL se nos mostrará todas las entradas registradas en la base de datos de nuestro medidor ambiental. Ahora vamos a usarlas.' (‘Robayna’)
Explotación de datos y monitoreo de métricas
En este apartado instalaremos y configuraremos Grafana, que será el software encargado de leer los datos, mostrarlos “bonitos” e incluso podremos crearle alertas. Para ello, volvemos al servidor donde tenemos instalados InfluxDB y Chronograf. Abrimos una línea de comandos e instalamos Grafana:
echo "deb https://packagecloud.io/grafana/stable/debian/ stretch main" | sudo tee /etc/apt/sources.list.d/grafana.list curl https://packagecloud.io/gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install grafanaGrafana corre por defecto en el puerto 3000 con el usuario por defecto “admin” y la password “admin” - lo que es una cagada de seguridad que no vas a dejar si quieres tener el dispositivo seguro que ya sabes lo malas las que son las passwords por defecto, y lo que pueden ser utilizadas en el Hacking de Web Technologies -.
Figura 11: Libro de Hacking Web Technologies de 0xWord (Estos días con 10% descuento con el cupón VERANO2019) |
Lo que queremos hacer ahora es configurar el canal HTTP para que sea seguro y un conector SMTP para que nos envíe alertas. Abrimos el archivo /etc/grafana/grafana.ini. En el apartado [smtp] establecemos los siguientes valores:
enabled = true host =En el apartado [server], establecemos:(hostname.midominio.net:25) # Si require autentificación, descomentar las líneas y establecerlos ;user = username ;password = Password! # Si require certificados, descomentar las líneas y establecerlos ;cert_file = ;key_file = ;skip_verify = true from_address = from_name = (Grafana)
protocol = https http_addr = http_port =Ahora como queremos que el servicio corra con los máximos privilegios, abrimos el archivo /etc/default/grafana-server y modificamos los siguientes valores:(3000) root_url = https:// : (https:// :3000) cert_file = #Path al certificado cert_key = #Path a la clave privada del certificado
Guardamos, salimos del fichero y reiniciamos el servicio:
GRAFANA_USER=[usuario_con_privilegios] GRAFANA_GROUP=[Grupo_con_privilegios]Ya podemos acceder a nuestro servicio grafana usando la URL https://[host_FQDN]:[Puerto]. Lo primero que haremos será cambiar la contraseña de “admin” - como ya se anticipaba antes - y crear tantos usuarios como requiramos, estableciéndoles correctamente si son usuarios con privilegios de administrador (Admin), editor de dashboards (Editor), o solamente de visualización (Viewer).
Una vez concluido, debemos agregar una fuente de datos, que será nuestro InfluxDB, en “Configuration” -> “Data Sources”. Establecemos los parámetros que ya conocemos, activando “Basic Auth” y si es necesario “Skip TLS Verification (Insecure)”.
Figura 12: Icono de campana |
Debemos configurar también el sistema de alertas en el menú de la "campana" (Figura superior). Le pondremos un nombre descriptivo, el tipo, que será por correo (e-mail) y la dirección de correo electrónico donde queremos que nos lleguen las alertas.
Figura 13: Icon de gráficas |
Ahora podemos comenzar a crear los paneles. Crearemos uno para la temperatura y otro para la humedad. Lo realizamos usando el botón de "graficas" . Nos crea un panel nuevo y ponernos sobre el nombre nos aparece una flecha indicando que hay un menú desplegable, lo pulsamos, editamos y comenzamos a agregarle contenido:
Figura 14: Edición de gráficas en el dashboard |
Pulsando sobre cada variable/campo podemos modificarla, añadirle, indicarle que tipo de valor queremos (media, último, máximo, etcétera). Para establecer la alerta, lo hacemos en la pestaña alert. Cuando la completemos, se nos marcará en el gráfico una área roja semitransparente con la zona de alerta.
Figura 15: Configuración de alertas |
Como yo he montado la Raspberry Pi con una TouchScreen de 7” y su caja correspondiente, he añadido un dashboard para la visualización de los datos dentro del mismo CPD:
Figura 16: El medidor ambiental funcionando en el CPD |
Es importante saber que, cuando accedemos a visualizar los paneles en Grafana, hay que indicarle la tasa de refresco. Esto lo tenemos arriba a la derecha, pulsando sobre “Refresh every…”
Figura 17: Configuración del refresco de las gráficas |
Una vez concluido tendremos una monitorización con alertas incluidas de la temperatura y humedad de nuestro CPD. A partir de aquí podéis modificar el proyecto y meterle más sensores y/o relés, que ya con esto tenéis la base para comenzar.
Saludos,
Autor: Jesús Suárez
******************************************************************************************************
- Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
- Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
******************************************************************************************************
5 comentarios:
Esta brutal este proyecto y se puede implementar en infinidad de casos, de hecho me parece genial implementar esta demo en un datacenter, le comentare a mi jefe a ver que le parece... Saludos Malignos!!!
Buenas, hace un tiempo tuve un dilema entre esto o usar adafruit.io (python+mqtt).
¿No es Grafana+Chronograf mucha carga para la PI?
Hola Quano. Grafana y Chronograf no corren sobre la PI.
Este post es una mentira no funciona como dice, toca buscar como en 20 sitios para poder arrancar los servicios como se mencionan en este.
Muy mal, publicar solo si las cosas funcionan como es
Publicar un comentario