martes, 10 de marzo de 2020

Monitor con Raspberry Pi, MQTT, InfluxDB, Grafana, NODE-RED y Blynk (VI)


Creación Dashboard en Grafana

Podemos encontrar, en la documentación de Grafana ayuda para el uso de InfluxDB en Grafana:

https://grafana.com/docs/grafana/latest/features/datasources/influxdb/

En líneas generales, los puntos a realizar son:

  • Creación de un origen de datos que acceda a la base de datos creada para nuestro proyecto, ya vimos cómo realizarlo en la instalación del Dashboard para los datos obtenidos con TELEGRAF.
  • Creación de un Dashboard para nuestro proyecto.
  • Creación de Querys para obtener los datos a mostrar en el Dashboard.
  • Definición de la visualización de los datos para nuestro panel

Para crear un origen de datos procedemos como lo hicimos al instalar Grafana y el Dashboard de telegraf.
Accedemos a “Configuration” “Data Sources” y “Add data source” Seleccionamos “InfluxDB”, le damos un “Name”, la IP de nuestro servidor y “Database” el nombre de nuestra base de datos (mydb) y pulsamos el botón “Save & Test”.
Ahora procedemos a crear un Dashboard


Vamos a “Create” “Dashboard


Seleccionamos “Add Query
En el desplegable “Query” seleccionamos el origen de datos que hemos creado (en mi caso “casa”).


 Ahora vamos seleccionando campos, al final nos debe quedar una query similar a (para el valor “presure”:


O en modo SQL:

SELECT "sensor" FROM "autogen"."pressure" WHERE $timeFilter

Seleccionamos el tipo de visualización en el botón de “Visualization

En la parte superior veremos como va quedando nuestra gráfica.
Por último, debemos salvar la query y nuestro Dashboard.
Podéis importar el Dashboard en github, en la carpeta “Grafana”.

Casa-Grafana_Dasboard.json 

Antes de importar, debemos remplazar la cadena “IP_SERVIDOR” por la IP de vuestro servidor.

Creación aplicación en Blynk

Instalamos la app de Blynk en nuestro dispositivo
Esta disponible tanto para iOS como para Android.
Una vez instalada debemos registrarnos mediante una cuenta de correo.
Accedemos y creamos un proyecto


Seleccionamos el dispositivo genérico


Podemos añadir diferentes tipos de bloques, restaran del “Crédito” disponible.


En nuestro caso, hemos seleccionado “Gauge”, es importante asignar el pin, “Virtual pin” correspondiente al valor que nos envía NODE-RED 





Definimos el rango de los datos, la etiqueta que mostraremos con los datos, ajustamos el refresco de los datos “Reading Rate” a PUSH para que se refresque cada vez que llega el dato.



Una vez tenemos definido los bloques que queremos utilizar, podemos agruparlos por pestañas, iniciamos la aplicación mediante el botón de “play” en la esquina superior derecha.



Y hasta aquí esta entrega, si quieres realizar alguna consulta o comentario, puedes hacerlo en el formulario que encontraras al final o en el formulario de contacto del pie.

Monitor con Raspberry Pi, MQTT, InfluxDB, Grafana, NODE-RED y Blynk (V)


Configuración NODE-RED

Preparación

Vamos con la parametrización de NODE-RED, subiremos y configuraremos los “Flows” necesarios para recibir mediante MQTT los datos, mostrarlos en el Dashboard de NODE_RED y almacenarlos en InfluxDB.

Vamos a necesitar importar lo que NODE-RED llama “palette”, no es mas que grupos de nodos.

Las “palette” que importaremos son:

  • node-red-contrib-blynk-ws
  • node-red-contrib-influxdb
  • node-red-contrib-moment
  • node-red-dashboard


para importarlas, accedemos al menú de NODE-RED y seleccionamos “Manage Palette



Vamos a la opción “Install” y en el cuadro “Search modules



Escribimos el módulo a instalar, al seleccionarlo, pulsamos en el botón “Install”.

Importar Flows

Descargamos los “Flows”de github, en la carpeta NODE-RED, aquí encontraremos diferentes archivos que se corresponden cada uno de ellos con un Flow, hemos desarrollado los flows para que sean “modulables”, no es necesario importar todos para que sean funcionales independientemente.

Los flows son:

  • BME280-borrado de datos.json Borrar los registros de BME280 de la bbdd.
  • BME280-comprobacion.json Comprueba los datos recibidos por MQTT.
  • BME280-InfluxDB.json Registra los datos en la bbdd.
  • BME280-Relojes.json Muestra relojes de datos en el Dashboard.
  • BME280-seleccion datos.json Muestra los datos registrados en la bbdd.
  • DS18B20.json Flow con todos los procesos para DS18B20.
  • Graficas.json Graficas en el Dashboard.
  • Envío_Blynk.json Envio de datos a Blynk. 

Ahora vamos a importar los flows descargados.

Accedemos al menú de NODE-RED y pulsamos en “Import



Nos aparece la pantalla de importación



Aquí podemos seleccionar, mediante el botón “Select a file to import” los ficheros descargados, de uno en uno, (también podemos abrir el fichero con NotePad, copiar y pegar en el cuadro de texto de Import).
Seleccionamos “New Flow” para que cree un Flow nuevo y pulsamos en el botón “Import”.
Una vez importados, deberemos revisar los parámetros de conexión.

Para Mqtt:

  • En pestaña “connectionServer (IP del Servidor)
  • En pestaña “SecurityUsername y Password (creados al instalar Mosquitto)


Para InfluxDB:

  • Host (IP del servidor)

Para Blynk:

  • Clave de autenticación (Auth_Token generada al crear el proyecto en Blynk)

En los Flows que graban los datos en InfluxDB, hay un nodo de función donde se han definido las horas que realizamos registro de datos, aparte de que se envían datos a NODE-RED cada 60 segundos, para mostrar en el Dashboard de NODE-RED y en Blynk, recordad parámetro “deep Sleep” en Sketch de ESP8266, guardamos cada 6 horas (00:00, 06:00, 12:00 y 18:00)

Podemos cambiar estas horas, añadir nuevas o eliminar la función para registrar todos los datos recibidos

Creación Base de datos

Para crear la base de datos en InfluxDB, donde guardaremos los registros obtenidos, podemos hacerlo de varias formas, desde consola de comando:

# influx (accedemos a la administración de InfluxDB)
> CREATE DATABASE "mydb"
> exit

También podemos hacerlo desde CHRONOGRAF, para ello accedemos a:

https://localhost:8888 (desde local)
https://ip_de _nuestra_raspberry:8888 (desde otra maquina)

en el apartado “Explore” añadimos una query y tecleamos:

CREATE DATABASE " mydb"

Por último, podemos ir al apartado “InfluxDB Admin”, seleccionamos la pestaña “Databases” y pulsamos en el botón “+ Create Database”, escribimos el nombre de la base de datos a crear (en nuestro caso mydb) y pulsamos en el botón de check para confirmar.

Podemos dar otro nombre a la base de datos, pero debemos cambiar los nodos de NODE-RED correspondientes a la grabación de datos en InfulxDB.

Y hasta aquí esta entrega, si quieres realizar alguna consulta o comentario, puedes hacerlo en el formulario que encontraras al final o en el formulario de contacto del pie.

Monitor con Raspberry Pi, MQTT, InfluxDB, Grafana, NODE-RED y Blynk (IV)


Instalación de ESP8266 y sensores


Comenzamos con la instalación de las ESP8266 y los sensores, vamos a instalar un sensor BME280 y otro DS18B20, cada uno ira conectado a sendas tarjetas ESP8266, estas comunicarán mediante Wifi con Raspberry Pi donde serán, por una parte, almacenados en la base de datos de InfluxDB, de aquí sacaremos los datos para mostrar en Grafana, por otra parte, mostraremos en un dashboard de NODE-RED, y enviaremos a la plataforma de Blynk para poder acceder a ellos de forma remota.


  • Sensor BME280



El esquema de conexión para el sensor BME280 es el siguiente:


La comunicación de este sensor se realiza mediante I2C, conectamos SDA y SCL a los pines SDA (D2) y SCL (D1) de la placa.

También conectaremos un cable desde el pin D0 al pin RST de la placa, con esto logramos que al poner en “Deep Sleep” podamos despertarla cada intervalo que definamos de “sueño”.

Sensor DS18B20

El esquema de conexión para el sensor DS18B20 es el siguiente:



 En este caso, el sensor comunica mediante OneWire, para ello conectaremos el pin central del sensor al pin D4 de la placa, además, en el pin de datos del sensor pondremos una resistencia de 4.7Ω a voltaje (3v3).

También conectaremos un cable desde el pin D0 al pin RST de la placa, con esto logramos que al poner en “Deep Sleep” podamos despertarla cada intervalo que definamos de “sueño”.

Sketch en Arduino IDE 

Para poder comunicar, y así subir los sketches a la placa ESP8266, es necesario configurar Arduino IDE.
Para ello, ejecutamos Arduino IDE, accedemos a “Archivo”, “Preferencias”



En el campo “Gestor de URLs adicionales de tarjetas” añadimos: http://arduino.esp8266.com/stable/package_esp8266com_index.json y pulsamos en “OK

Ahora debemos ir a “Herramientas” “Placa” “Gestor de tarjetas” y aquí instalar “Esp8266 By ESP8266 Community”.

Con esto tendremos instalada y disponible la Placa “NodeMCU (ESP-12E Module) que es la que utilizaremos.

Por otra parte, necesitaremos instalar varias librerías, en el caso del sketch para BME280:
  • ESP8266WiFi
  • PubSubClient
  • Adafruit Unified Sensor
  • Adafruit BME280 Library
  • Streaming

En el caso del sketch para DS18B20:

  • ESP8266WiFi
  • PubSubClient
  • OneWire
  • DallasTemperature Streaming

Una vez incluidas las librerías, abrimos los sketches, podemos descárgalos desde github, en la carpeta “ESP8266”.

Tendremos que rellenar las variables:

  • Ssid: Nombre de nuestra wifi
  • Password: contraseña de conexión de wifi
  • mqtt_server: dirección IP de nuestra Raspberry
  • mqtt_username: usuario de mosquitto (lo dimos de alta durante la instalación de mosquitto)
  • mqtt_password: contraseña del usuario de mosquitto


También podremos definir el valor para “SLEEP_DELAY_IN_SECONDS” está definido en 60 segundos, se trata del tiempo que permanecerá en modo “sueño” nuestra ESP8266, pasado este tiempo, despierta, comunica, envía y vuelve a modo “sueño”.

Conectamos, mediante un cable USB, la placa ESP8266 y subimos el sketch.
Podemos comprobar con el monitor serie el proceso de conexión, datos y envío.

Y hasta aquí esta entrega, si quieres realizar alguna consulta o comentario, puedes hacerlo en el formulario que encontraras al final o en el formulario de contacto del pie.

Monitor con Raspberry Pi, MQTT, InfluxDB, Grafana, NODE-RED y Blynk (III)


Instalación de Mosquitto

Para instalar Mosquitto en Raspberry Pi deberemos utilizar los siguientes comandos desde una terminal:

# sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
# sudo apt-key add mosquitto-repo.gpg.key
# cd /etc/apt/sources.list.d/
# sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list
# sudo apt-get update
# sudo apt-get install -y mosquitto mosquitto-clients
# sudo apt-get install -y python-pip
# sudo pip install paho-mqtt
# sudo systemctl status mosquitto

La configuración de mosquitto está el fichero /etc/mosquitto/mosquitto.conf. Recordar hacer copia del fichero antes de hacer alguna modificación

# cd /etc/mosquitto
# sudo cp mosquitto.conf mosquitto.ORIGINAL

Y editamos el fichero de configuración mediante:

# sudo nano mosquitto.conf

Añadimos (o remplazamos)

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
# Save all log in file
log_type all
log_timestamp true
allow_anonymous false
password_file /etc/mosquitto/passwd
port 1883
listener 9001
protocol websockets

# sudo systemctl restart mosquitto
# sudo systemctl status mosquitto

Para comprobar que está bien instalado abrimos dos terminales y en uno de ellos teclea:

# mosquitto_sub -v -t "test/topic"

en el otro terminal:

# mosquitto_pub -t "test/topic" -m "Hello World!"

Para configurar la seguridad en Mosquitto, definiremos un USUARIO y su contraseña mediante:

# sudo mosquitto_passwd -c /etc/mosquitto/passwd USUARIO

Nos solicita la contraseña para este usuario que hemos definido, será el que, mas tarde, utilizaremos para hacer las conexiones en NODE-RED.

Para publicar y suscribirse con usuario y contraseña usar en dos terminales:

# mosquitto_pub -d -t “test” -m “hola_mundo” -u “USUARIO” -P "CONTRASEÑA"
# mosquitto_sub -d -t “test” -u “USUARIO” -P “CONTRASEÑA”


Instalación de NODE-RED


Para la instalación de NODE-RED en Raspberry Pi utilizaremos la utilidad de Software recomendado.

Accedemos al escritorio, y en el menú pulsamos “preferencias”, en este menú, “Software recomendado


Aquí marcamos NODE-RED y pulsamos en el botón “OK”, esto realiza la instalación.

Y hasta aquí esta entrega, si quieres realizar alguna consulta o comentario, puedes hacerlo en el formulario que encontraras al final o en el formulario de contacto del pie.

Monitor con Raspberry Pi, MQTT, InfluxDB, Grafana, NODE-RED y Blynk (II)


Instalación de InfluxDB

Para la instalación de InfluxDB abrimos consola, bien en Raspberry bien por SSH y tecleamos los siguientes comandos:

# sudo apt-get update
# sudo ap-gett upgrade
# wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
# echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
# sudo apt update
# sudo apt install influxdb
# sudo systemctl unmask influxdb
# sudo systemctl enable influxdb
# sudo systemctl start influxdb

Con esto tendremos instalado InfluxDB, adicionalmente, si queréis probar InfluxDB, podemos instalar TELEGRAF, se trata de un Agente que recopila datos de nuestro sistema, creando una base de datos en InfluxDB.

Para instalarlo, debemos teclear en una consola:
# sudo apt-get install telegraf
# sudo nano /etc/telegraf/telegraf.conf

Y añadiremos la URL de nuestro servidor InfluxDB en la sección llamada outputs.influxdb, fijaros en la variable urls

# /etc/init.d/telegraf restart

Ahora, para poder analizar los datos recopilados por el agente TELEGRAF podemos instalar CHRONOGRAF, se trata de una interface gráfica (modo web) para administrar InfluxDB y las bases de datos (en este caso TELEGRAF).

Para instalar, teclearemos:

# sudo apt-get update && sudo apt-get install chronograf

Para acceder a Chronograf teclearemos:

https://localhost:8888 (desde local)
https://ip_de _nuestra_raspberry:8888 (desde otra maquina)

Instalación de Grafana

El siguiente servicio que vamos a instalar es Grafana, para proceder teclearemos en una consola de comandos:

# echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install apt-transport-https
# sudo apt-get install grafana
# sudo systemctl daemon-reload
# sudo systemctl enable grafana.service
# sudo systemctl start grafana-server

Para comprobar como funciona y ya de paso, ver los datos que recopila el agente Telegraf, vamos a instalar un Dashboard, donde podemos ver todos los valores que estamos recopilando.

El Dashboard en concreto es: https://grafana.com/grafana/dashboards/10578

Para instalarlo, accedemos a Grafana y creamos un origen de datos para InfluxDB

Configuration -> Data Sources
Add data Source

Aquí buscamos el origen de datos para InfluxDB

Y pulsamos en Select


Debemos completar los campos correspondientes a:

Name: descripción del origen de datos
URL: la dirección IP y el puerto de nuestro servidor InfluxDB
Database: nombre de la base de datos a la que queremos acceder

Y pulsamos en Save & test

Después, vamos a Create en el menú de Grafana y seleccionamos Import, en el campo “Grafana.com Dashboard” escribimos el código del Dashboard: 10578 y pulsamos en “Load”.


Nos pide:
Name: viene definido por defecto, podemos cambiarlo
Folder: carpeta de Grafana para guardar el Dashboard
Unique identifier (uid): debemos generarlo mediante el botón “change”
Influxdb: mediante el desplegable selecionamos el origen de datos que hemos creado en el paso anterior.

Pulsamos en “Import” para crear el Dashboard.

Por último, debemos modificar el fichero “telegraf.conf” mediante:

# cd /etc/telegraf
# sudo cp telegraf.conf telegra.ORIGINAL
# sudo nano /etc/telegraf/telegraf.conf

Y añadir:

#In order to monitor both Network interfaces, eth0 and wlan0, uncomment, or add the next: [[inputs.net]]

[[inputs.netstat]]

[[inputs.file]]
files = ["/sys/class/thermal/thermal_zone0/temp"]
name_override = "cpu_temperature"
data_format = "value"
data_type = "integer"

[[inputs.exec]]
commands = ["/opt/vc/bin/vcgencmd measure_temp"]
name_override = "gpu_temperature"
data_format = "grok"
grok_patterns = ["%{NUMBER:value:float}"]

También tendremos que añadir el usuario telegraf al grupo de video, esto es para poder recopilar datos de la GPU.

En consola de comandos tecleamos:

# sudo usermod -G video telegraf

Ahora podemos acceder al Dashboard que hemos creado para revisar los datos que se está recopilando en InfluDB mediante el agente Telegraf.

Y hasta aquí esta entrega, si quieres realizar alguna consulta o comentario, puedes hacerlo en el formulario que encontraras al final o en el formulario de contacto del pie.