Archivo de la etiqueta: Grafana

Material Prácticas Curso Node-RED Developer

Para el curso on-line “Node-RED Developer Nivel 1”, el material necesario por parte de los alumnos para realizarlo es:

  • 1 PC o Portátil con conexión a internet.
  • Para seguir el curso on-line es recomendable dos pantallas, una para seguir el vídeo y otra para programar en Node-RED.
  • Una cuenta en github o bitbucket.
  • Opcionalmente software de virtualización instalado para ejecutar Node-RED. p.e. VirtualBox, VMWare Fusion o Docker.
  • Opcionalmente una Raspberry Pi conectada a Internet. Estas Raspberry Pi podrían ser proporcionadas por el Think TIC y configurarlas para acceso remoto desde casa del alumno a los dispositivos ubicados en el Think TIC.
  • Opcionalmente los alumnos con dispositivos IoT podrían conectarse e interactuar con ellos.

Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar.

Toda la documentación generada para la impartición de este curso será liberada con licencia Creative Commons y podrá ser utilizada bajo sus términos. La documentación estará disponible en https://www.aprendiendoarduino.com/ 

Entorno On-Line de Prácticas

Arquitectura

Se dispone de tres servidores:

  • enriquecrespo.com (S.O. CentOS 8)
    • Mosquitto
    • Grafana
    • Docker
    • Otros servicios públicos
  • aprendiendoarduino.com
    • Documentación curso con WordPress
    • BBDD MySQL públicas

Servidor cloud con las siguientes características:

  • 1 vCPU
  • 2 GB RAM
  • 20 GB SSD

Node-RED

Cada alumno debe tener al menos una instancia de Node-RED instalada en el S.O. o virtualización que desee.

Opcionalmente se puede proporcionar una instancia en enriquecrespo.com. El usuario y contraseña se enviará por correo.

Broker MQTT. Mosquitto

Se usará un broker común para comunicar todos los dispositivos en la dirección: mqtt://enriquecrespo.com:1883

Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en aprendiendonodered21/#

Opcionalmente hay una dirección de MQTT seguro en: mqtts://enriquecrespo.com:8883 y MQTT sobre websocket en ws://enriquecrespo.com:9001

Servicios

Base de datos MySQL en https://qaej225.aprendiendoarduino.com/ donde los alumnos podrán usar para almacenar datos. Recibirán por correo las credenciales de acceso.

Grupo de telegram para comunicarse y programar bots.

Hardware Usado para Interactuar

Para interactuar en el curso disponemos de diversos HW conectados.

M5stack: https://m5stack.com/collections/m5-core/products/basic-core-iot-development-kit 

M5Stick-C con sensor ENV:

Goodtimera M5STICKC IoT - Placa de Desarrollo (Bluetooth, WiFi, IoT, ESP32  Stem PYTHO): Amazon.es: Hogar

Arduino UNO + GSM Shield con conexión móvil: https://store.arduino.cc/arduino-gsm-shield-2-integrated-antenna 

Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.

Raspberry Pi 3B: Instalada en local con Node-RED, Mosquitto y BBDD, usada como servidor.

Wibeee instalado y publicando datos.

Wibeee ONE 2W

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.

Configuración de las Instancias de Node-RED Alumnos

Las instancias de Node-RED de los alumnos están desplegadas con Docker y con configuración personalizada y una serie de configuraciones adicionales  ya hechas.

El acceso es a través de https://enriquecrespo.com:188xx/ siendo xx el número de alumno asignado.

Los puertos 88xx y 83xx también estarán disponibles para cada alumno para exponer una API/Websocket y MQTT respectivamente.

También hay una red interna para comunicar son servicios internos no expuestos como BBDD a las instancias de Node-RED

Comando para levantar el contenedor:

docker run –restart always -d -p 188xx:1880 -p 88xx:80 -p 83xx:1883 –network ‘alumnos’ -v /opt/docker_volumes/nodered_dataxx:/data –name noderedxx nodered/node-red

El fichero de configuración settings.js tiene estas modificaciones:

  • password nodered:
 adminAuth: {
         type: "credentials",
         users: [{
             username: "admin",
             password: "password cifrada usando node-red admin hash-pw",
             permissions: "*"
         }]
     }, 
  • password dahsboard y web estática
 httpNodeAuth: {user:"user",pass:"password cifrada usando node-red admin hash-pw"},
 httpStaticAuth: {user:"user",pass:"password cifrada usando node-red admin hash-pw"}, 
  • activar SSL y certificados
 https: {
       key: require("fs").readFileSync('/data/certificates/privkey.pem'),
       cert: require("fs").readFileSync('/data/certificates/cert.pem')
     },
 requireHttps: true, 
  • activar proyectos
 editorTheme: {
         projects: {
             enabled: true
         }
     } 
  • activar grabar datos en local o en memoria (almacenamiento)
 contextStorage: {
         default: "memoryOnly",
         memoryOnly: { module: 'memory' },
         file: { module: 'localfilesystem' }
     }, 

Grafana y Arduino

Grafana es un software libre basado en licencia de Apache 2.0, que permite la visualización y el formato de datos métricos. Permite crear cuadros de mando y gráficos a partir de múltiples fuentes, incluidas bases de datos de series de tiempo como Graphite, InfluxDB y OpenTSDB. Originalmente comenzó como un componente de Kibana y que luego le fue realizado una bifurcación.

Grafana es multiplataforma sin ninguna dependencia y también se puede implementar con Docker. Está escrito en lenguaje Go y tiene un HTTP API completo.

Además de administrar cuadros de mando clásicos (adiciones, eliminaciones, favoritos), Grafana ofrece compartir un cuadro de mando actual mediante la creación de un enlace o una instantánea estática del mismo.

Todos los paneles de control y las fuentes de datos están vinculados a una organización, y los usuarios de la aplicación están vinculados a organizaciones a través de roles.

Web: https://grafana.com/

Grafana API: https://grafana.com/docs/http_api/

Como obtener grafana: https://grafana.com/get

Wikipedia: https://es.wikipedia.org/wiki/Grafana

Introducing grafana 6: https://www.hostedgraphite.com/blog/introducing-grafana-6

Instalar Grafana

Download: https://grafana.com/grafana/download

Instalación en sistemas linux: https://grafana.com/docs/installation/rpm/

Para iniciar el servicio: sudo service grafana-server start

Esto iniciará el proceso grafana-server como el usuario grafana, que se crea durante la instalación del paquete. El puerto HTTP predeterminado es 3000, y el usuario y el grupo predeterminados son admin. Nombre de usuario y contraseña por defecto admin/admin

Guia de instalación en Debian/Ubuntu: https://grafana.com/docs/installation/debian/

Guia de instalación CentOS: https://grafana.com/docs/installation/rpm/

Instalar y configurar en CentOS: https://www.fosslinux.com/8328/how-to-install-and-configure-grafana-on-centos-7.htm

Actualizar grafana: https://grafana.com/docs/installation/upgrading/

Tutoriales para CentOS:

Instalar Grafana en Raspberry Pi

Download para Raspberry Pi: https://grafana.com/grafana/download?platform=arm

Comandos:

Para actualizar: sudo apt-get install grafana

Iniciar el servicio: sudo service grafana-server start

Para configurar grafana en el arranque: sudo systemctl enable grafana-server.service

Más información: https://grafana.com/docs/installation/rpm/

Ahora podemos acceder a Grafana desde el navegador en http://127.0.0.1:3000 con admin/admin y nos pedirá que cambiemos la contraseña.

Adicionalmente si queremos instalar influxDB: sudo apt-get install influxdb

Getting started InfluxDB: https://docs.influxdata.com/influxdb/v1.7/introduction/getting-started/

Configuring InfluxDB: https://docs.influxdata.com/influxdb/v1.7/administration/config/

Instalar Telegraf (opcional):

Herramientas:

  • Grafana: Una herramienta que te permite visualizar series de datos temporales de una forma visualmente muy atractiva. Además de la parte visual, dispone de un potente motor y editor de consultas, que te permite seleccionar y tratar los datos que necesitas mostrar en las gráficas y Dashboards que puedes crear en su interfaz web. Además, los datos que muestra se pueden incluir desde diversas fuentes de datos, entre las que se encuentran Graphite, InfluxDB, Prometheus, ElasticSearch, AWS CloudWatch, StackDriver, MySQL y muchos otros mediante los plugins que tiene disponibles.
  • InfluxDB: Es una base de datos diseñada para almacenar series de datos temporales, esto quiere decir, que se almacenan una serie de datos en registros asociados a un valor principal o índice, que es la marca de tiempo (fecha y hora). La monitorización es un caso típico de este almacenamiento de datos, donde se guarda la marca de tiempo, el nombre del host y los valores de métricas que se pretenden almacenar (CPU, memoria, IO, red, …). InfluxDB es software libre, y el rendimiento que definen para este tipo de entornos es muy competitivo.
  • Telegraf: Es un agente que se encarga de recopilar datos/métricas de un determinado sistema y almacenarlos donde le indiquemos. Por ejemplo, Telegraf recopilará datos de sistema tradicionales (uso de memoria, uso de MySQL/Apache, …) y los enviará a la URL con la API de InfluxDB, que se encargará de almacenarlo. Telegraf, al igual que InfluxDB, pertenecen a Influxdata, por lo que la integración entre ambos es perfecta.
  • Chronograf es la aplicación web de código abierto de InfluxData. Utilice Chronograf con los otros componentes de la pila TICK para visualizar sus datos de monitorización y crear fácilmente reglas de alerta y automatización.
  • Kapacitor es un motor de procesamiento de datos nativo. Puede procesar stream de datos de InfluxDB. Kapacitor le permite conectar su propia lógica personalizada o funciones definidas por el usuario para procesar alertas con umbrales dinámicos, hacer coincidir las métricas de los patrones, calcular anomalías estadísticas y realizar acciones específicas basadas en estas alertas, como el reequilibrio de carga dinámico.

TICK Stack: https://www.influxdata.com/time-series-platform/

Otros tutoriales:

Configurar Grafana

El archivo de configuración se encuentra en /etc/grafana/grafana.ini.

Para obtener detalles sobre todas esas opciones de configuración consultar: https://grafana.com/docs/installation/configuration/

Seguridad: https://grafana.com/docs/installation/security/

Autenticación: https://grafana.com/docs/auth/overview/

Añadir fuentes de datos a Grafana

Getting started: https://grafana.com/docs/guides/getting_started/

Conceptos básicos: https://grafana.com/docs/guides/basic_concepts/

Añadir la BBDD de MySQL donde hemos guardado nuestros datos de Arduino:

Adding data sources:

Primera Gráfica

Guia de novatos para hacer Dashboards: https://www.youtube.com/watch?v=sKNZMtoSHN4&index=7&list=PLDGkOdUX1Ujo3wHw9-z5Vo12YLqXRjzg2

Getting started: https://grafana.com/docs/guides/getting_started/

Pasos:

  • Crear un nuevo Dashboard
  • Añadir una Visualización
  • Elegir “Graph”
  • Poner en Column: IntensidadLuminosa
  • Crear otra visualización como tabla.

Resultado:

Métricas fáciles: https://www.ochobitshacenunbyte.com/2018/03/01/metricas-faciles-con-influxdb-telegraf-y-grafana/

Paneles https://grafana.com/docs/features/panels/graph/

  • Graph
  • Logs
  • Singlestat
  • Table
  • Heatmap
  • Alert List
  • Dasboard list
  • Text

Visualizar los datos de la raspberry Pi en un dashboard:

Plugins Grafana

Plugings grafana: https://grafana.com/plugins 

Instalar plugin grafana: https://grafana.com/grafana/plugins/grafana-piechart-panel/installation

Hosted Grafana

Web: https://grafana.com/products/cloud/

Si no queremos instalarlo tenemos disponible un grafana en la nube gratuito para un usuario y hasta 5 dashboards. Pricing: https://grafana.com/products/cloud/#pricing

Mi grafana cloud: https://aprendiendoarduino.grafana.net/