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.
|
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 urllib3
Ahora 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 = "" #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
Una vez guardado el archivo y cerrado, lo ejecutamos para que se ponga a hacer su trabajo.
sudo python sensor_data_logger.py
Si 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.py
Con 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"='' (‘Robayna’)
Con ese comando
SQL se nos mostrará todas las entradas registradas en la base de datos de nuestro medidor ambiental. Ahora vamos a usarlas.
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 grafana
Grafana 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 -.
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 = (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)
En el apartado [server], establecemos:
protocol = https
http_addr =
http_port = (3000)
root_url = https://: (https://:3000)
cert_file = #Path al certificado
cert_key = #Path a la clave privada del certificado
Ahora como queremos que el servicio corra con los máximos privilegios, abrimos el archivo /etc/default/grafana-server y modificamos los siguientes valores:
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]
******************************************************************************************************