ESP32 LoRa for dummys - Dashboard de control de TinyGS (NOC en Node-RED)


(En construcción)


Se puede configurar un  panel de control o Dashboard de las estaciones TinyGS con NodeRed

NodeRed es un software que puede configurarse en:

  • un ordenador personal
  • un dispositivo independiente 
  • la nube.

Si optamos por hacerlo en un ordenador personal podemos configurarlo:
  • Directamente en el ordenador como una aplicación mas
  • Sobre Docker
Docker es un software que ayuda a los desarrolladores a crear, compartir, ejecutar y verificar aplicaciones en cualquier lugar, sin la tediosa tarea de configurar o administrar el entorno donde va a ejecutarse. En otras palabras es una especie de maquina virtual o sandbox que permite independizar las aplicacioens de los entornos en los que se ejecuta.

Docker es como un muelle o almacén portuario en el cual podemos crear y borrar containers (contenedores) y estos pueden estar parados o en ejecución, también los podemos reinicializar. Los containers podemos importarlos y exportarlos con independencia del docker de origen y de destino (No importa el ordenador, sistema operativo, etc.)

Siguiendo la guía de McOrts (Ver referencias) configuro un docker sobre un ordenador personal y pasaré a crear los contenedores necesarios para el Dashboard comenzando por Node-Red, todo esto es un reto, pero con ellos es como aprendemos. 


INSTALAR DOCKER DESKTOP

Lo primero que tenemos que hacer es bajarnos el software de Docker, donde vamos a instalar Node-Red, para nuestra plataforma desde aquí que es bastante pesado (>500/600 MB => 1,74 / 2 GB). 

La versión actual de Docker Desktop es la 4.34.3 (octubre, 2024) y requiere como mínimo la v12 de MacOS (Monterey), no funcionando para versiones anteriores como Big Sur la (11) o Catalina (10), lo que viene siendo un ejemplo mas de la obsolescencia programada que Apple lleva hasta cotas inimaginables. 

Ante el problema leo que parece que la versión 4.16.2  del 12-1-2023 todavía funciona con BigSur pero no con  Catalina. Me pongo a buscarla y localizo la versión 4.15 que parece que funciona con las versiones de macOS BigSur y Catalina en https://desktop.docker.com/mac/main/amd64/93002/Docker.dmg  así que la instalo, pese a que de forma periódica me avisa que debo actualizarla y que tambien haga lo mismo con mi SO.

Al arrancar Docker Desktop pide autorización (accede a directorios protegidos del sistema), lo acepto y abre un tutorial que en este momento no lo voy a seguir pues estoy para otros temas.


Instalar Node-Red en Docker 

Node-RED es una herramienta de programación para conectar dispositivos de hardware, API y servicios en línea de formas nuevas e interesantes. Proporciona un editor basado en navegador que facilita la conexión de flujos utilizando la amplia gama de nodos en la paleta que se pueden implementar en su tiempo de ejecución con un solo clic. En el terminal del sistema ejecutamos: 

docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red  

mynodered es el nombre que se le ha dado al container (--name mynodered ) y 1880 el puerto asinado (-p 1880:1880) creado en Docker. Para más información del comando ejecuato puede teclear en el terminal docker run --help

 Se puede comprobar que se ha instalado correctamente desde un browser

http://127.0.0.1:1880/

 

Algunos comandos de consola de docker:

  • docker -v nos informa de la versión instalada Docker version 20.10.21, build baeda1f
  • docker run ejecuta un comando en un nuevo container del docker. 
  • docker exec ejecuta un comando en un container que se está ejecutando en el docker.
  • docker ps nos informa de los contenedores que están en ejecución 

CONTAINER ID   IMAGE  COMMAND CREATED       STATUS  PORTS NAMES 

519b151b0aa8   nodered/node-red   "./entrypoint.sh"   2 hours ago   Up 2 hours (healthy)   0.0.0.0:1880->1880/tcp   mynodered 

 

Algunos comandos más:

Para volver a conectar a la terminal (para ver el registro) ejecute:

    docker attach mynodered

Si necesita reiniciar el contenedor (por ejemplo, después de reiniciar o reiniciar el demonio Docker):

    docker start mynodered

Si quiere parar el contenedor

    docker stop mynodered 

En Docker podemos comprobar que se ha realizado la instalación de NODE-RED


Desde el terminal de Docker instalar node-red-dashboard con el comando: npm install node-red-dashboard

 

Instalación de Node-RED-DASHBOARD

De la misma forma instalar:

  • node-red-node-mysql mediante el comando: npm install node-red-node-mysql. Con npm install mysqljs/mysql se puede comprobar la instalación y con npm fund la estructura


 

  • npm install mysql ¿?

Configurar IFTT

Con IFTT ("IF This, Then That") es una web muy usada desde hace años que permite configuran acciones entre distintas aplicaciones los avisos, aquí se hace una pequeña introducción. (no acabo de entender los valores que hay que pasar como parámetros, lo miraré mas adelante)

https://maker.ifttt.com/trigger/TinyGS/with/key/[clave%20de%20IFTTT]?value1={{{payload}}}


Crear tablas MySQL

Para almacenar los datos procedentes del servidor TinyGS en nuestro sistema para poder ser mostrados en el Dashboard necesitamos una base de datos. En este caso se usa MySQL que es un sistema de gestión de bases de datos relacionales (RDBMS) de código abierto desarrollado por MySQL AB, que posteriormente adquirió Sun Microsystems y luego Oracle Corporation. Utiliza SQL (lenguaje de consulta estructurado) para consultar y administrar bases de datos. MySQL es ampliamente reconocido por su rendimiento, escalabilidad y facilidad de uso. 

En este punto debemos:

  1. Instalar node-red-node-mysql  en el container mynodered (Ya lo hemos hecho) 
  2. Crear la BBDD MySQL en nuestro sistema  (Se dá por hecho, pero como no lo tenemos instalado pues procedemos a ello y lo explicamos)
  3. Crear la tabla que vamos a usar (lo que realmente se plantea en este punto)
  4. Configurar en el esquema de flujo la base de datos (no indica nada pues se supone)

2- Para ello vamos a Chapter 2 Installing MySQL y seleccionamos nuestro sistema operativo, pues mysql funciona directamente sobre el sistema operativo. La versión actual es la 8.4 y de nuevo nos encontramos con la obsolescencia programada pues exige unas determinadas versiones del sistema operativo para poder funcionar. Esto no es nada nuevo así que buscamos una compatible con nuestro SO y procesador en MySQL Product Archives que en nuestro caso es la 8.0.28 y la descargamos e instalamos (ocupa unos 700 MB y solicita autorización, y que definamos una contraseña para el usuario root, debemos apuntarla), si encuentra un tutorial pues mejor en nuestro caso usamos este

Instalando MySQL para poder almacenar en nuestro sistemas los datos recibidos por TinyGS

en sistemas como Linux o macOS deberá definir variables, p.e. en MacOS:

alias mysql=/usr/local/mysql/bin/mysql

alias mysqladmin=/usr/local/mysql/bin/mysqladmin

 

En macOS si vamos a Preferencia del sisemas podemos comprobar que está ainsalado mySQL

Y podemos comprobar que está arrancado 

Ahora podemos conectarnos al mysql:
export PATH="/usr/local/mysql/bin:$PATH" 
source ~/.bash_profile
mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

Los comandos que admite mysql> son (Observe que todos los comandos comienzan en la primera linea y terminan con ; 

  • ?         (\?) Synonym for `help'. 
  • clear     (\c) Clear the current input statement.
  • connect   (\r) Reconnect to the server. Optional arguments are db and host.
  • delimiter (\d) Set statement delimiter.
  • edit      (\e) Edit command with $EDITOR.
  • ego       (\G) Send command to mysql server, display result vertically.
  • exit      (\q) Exit mysql. Same as quit.
  • go        (\g) Send command to mysql server.
  • help      (\h) Display this help.
  • nopager   (\n) Disable pager, print to stdout.
  • notee     (\t) Don't write into outfile.
  • pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
  • print     (\p) Print current command.
  • prompt    (\R) Change your mysql prompt.
  • quit      (\q) Quit mysql.
  • rehash    (\#) Rebuild completion hash.
  • source    (\.) Execute an SQL script file. Takes a file name as an argument.
  • status    (\s) Get status information from the server.
  • system    (\!) Execute a system shell command.
  • tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
  • use       (\u) Use another database. Takes database name as argument.
  • charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
  • warnings  (\W) Show warnings after every statement.
  • nowarning (\w) Don't show warnings after every statement.
  • resetconnection(\x) Clean session context.
  • query_attributes Sets string parameters (name1 value1 name2 value2 ...) for the next query to pick up. 

 Tambien podemos ejecutar comandos de mysqladmin como por ejemplo para ver la versión o los valores de las variables :

mysqladmin version  -u root -p

 /usr/local/mysql/bin/mysqladmin  Ver 8.0.28 for macos11 on x86_64 (MySQL Community Server - GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

mysqladmin variables -u root -p  

 ...

Bueno ya hemos instalado MySQl, ya lo tenemos en funcionamiento, ahora debemos crear nuestra base de datos en la que vamos a crear las tablas y despues vamos a visualizar todas las que hay creadas:

mysql> create database mydatabase;

Query OK, 1 row affected (0,00 sec)

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydatabase         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+ 
5 rows in set (0,01 sec) 

Seleccionamos la que hemos creado "mydatabase" y procedemos a crear la tabla con el comando CREATE y el ALTER

use mydatabase;

Database changed 

CREATE TABLE `tinygs` (
  `dtg` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `station_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `frame` varchar(512) CHARACTER SET ascii NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Opens of the house''s main door';

 

ALTER TABLE `tinygs`
  ADD PRIMARY KEY (`dtg`,`station_id`);

Podemos comprobar que efectivamente se ha creado la tabla con

mysql> show tables;

+----------------------+
| Tables_in_mydatabase |
+----------------------+
| tinygs               |
+----------------------+
1 row in set (0,00 sec) 

 

Parte del flujo donde hay que modificar el nombre de la BBDD, pero no identifica este nodo y unos cuantos mas cuando se importan los flujos


Importar los flujos

Primero hay que copiar el flujo desde github y después pegarlo en Node-Red (navegador)

Copiar los flujos desde https://github.com/McOrts/taller-lora-sat-groundstation/blob/main/nodered/nodered_dashboard4TINYGS.json 

Pegar en la pantalla del navegador donde tenemos abierto Node-Red

Aspecto del flujo cargado



Por último configurar las credenciales y hash para acceder a:

  • Servidor MQTT
  • Servidor MySQL
  • Llamada a IFTTT

Debe ser todo muy sencillo, para el que sabe pero  ... yo estoy en ello y  por ahora no encuentro ni otras experiencias de isntalación, ni soporte.

Comentarios

Entradas populares de este blog

SDR - Software Defined Radio - IIIb: Receptores RSP o MSI (MSI3001: MSI2500 + MSI001)

Antena exterior logarítmica UHF/VHF : Metronic 425010 - Ia Características

ESP32 LoRa for dummys - Inicio