Node-red en Raspeberry Pi


Durante años hemos visto un goteo de proyectos de domótica realmente interesantes que utilizan el paquete Node-RED. Cada vez, los hackers detrás de estos proyectos han delirado sobre Node-RED y ahora me he unido a esas filas también.

Esta plataforma de codificación basada en gráficos le permite armar rápidamente operaciones útiles e interfaces gráficas de usuario (GUIs), ya sea que sea el greenhorn más fresco o un veterano experimentado. Puedes usarlo para cambiar tus luces conectadas a Internet según lo programado, o con solo tocar un botón a través de una aplicación web disponible para cualquier dispositivo de tu red doméstica. Puede usarlo como un panel de información para la previsión del tiempo, últimos artículos hackaday, horarios de autobús, o todos ellos a la vez. De un vistazo, abstrae la complejidad de escribir Javascript, a la vez que facilita la inmersión bajo el capó y utiliza sus habilidades de haxor 1337 para agregar su propio código.

Puede poner esto en marcha en menos de una hora y voy a abordar eso, así como ejemplos para jugar con MQTT, configurar una interfaz gráfica de usuario web y escribir en archivos de registro. Para que Node-RED sea persistente en la red, necesita un servidor, pero es lo suficientemente delgado como para ejecutarse desde una Raspberry Pi sin problemas, e incluso se instala de forma predeterminada en las distribuciones de BeagleBone. El código de todos los ejemplos de esta guía se puede encontrar en el repositorio del tutorial. ¡Vamos a sumergirnos!

LO QUE ES

Node-RED es un lenguaje de programación gráfico basado en Node.js. Implementa un servidor y ejecuta lo que se llama «Flujos»: programas basados en Javascript. ¿Por qué querría ejecutar un IDE del lado servidor para sus programas? Debido a que Node-RED también hace que sea muy fácil crear aplicaciones web y usarlas como su sistema de información y control en línea.

INSTALACIÓN

Para que sus programas Node-RED sean persistentes, necesita un servidor, sin embargo, si solo desea jugar por ahora puede ejecutarse localmente. Su servidor puede ser tan simple como instalar la plataforma en un Raspberry Pi o un ordenador siempre encendido en su LAN. Los requisitos previos incluyen Node.js y npm (node.js administrador de paquetes) que en un sistema Linux son una fácil instalación.

sudo apt install nodejs

Ahora podemos instalar Node-RED y, para seguir los ejemplos a continuación, también debe instalar el paquete del panel:

npm install node-red
npm install node-red-dashboard

Para ejecutar localmente sólo tiene que escribir en el terminal. Sin embargo, la forma más elocuente de ejecutar esto es como un servicio. Copie el contenido del archivo nodered.service y actualice el archivo , y variables de ese archivo para que coincidan con un usuario real del sistema. Con eso en su lugar, simplemente habilite e inicie el servicio. Ahora se reiniciará en un bloqueo o reinicio del sistema a partir de ahora.node-redsystemd/etc/systemd/system/nodered.serviceUserGroupWorkingDirectory

12systemctl enable nodered.servicesystemctl start nodered.service

You can now load up the Node-RED IDE simply by visiting in a web browser.localhost:1880

HELLO WORLD

Lo más sencillo de hacer como su primer «flujo» en Node-RED es: botón de clic, obtener marca de tiempo. Para hacer la imagen de arriba no hice nada más que arrastrar los nodos «Inyectar» y «Depurar» desde la columna izquierda al centro, luego arrastre la línea que conecta los dos nodos. Debe hacer clic en el botón «Implementar» en la parte superior derecha cada vez que realice cambios y, a continuación, haga clic en el botón que cuelga del lado izquierdo del nodo de inyección, que tiene la etiqueta «marca de tiempo» de forma predeterminada, para escupir el tiempo en la ventana de depuración. Haga clic en el icono de error situado encima de la ventana derecha si no ve la salida de depuración.

Este ejemplo no es muy útil, pero ese no es el punto del código Hello World. Esto lleva a casa la potencia del sistema de código gráfico. Lo que también es interesante es que los flujos se pueden exportar como archivos. Así es como se ve este Hello World y se puede importar a su propia instalación Node-RED.json+ ampliar la fuente

INICIO RÁPIDO DE MQTT

Node-RED parece que está hecho específicamente para ser utilizado con MQTT, el popular protocolo de Internet de las cosas para el que Elliot Williams ha escrito una guía fantástica. Se siente así porque un cliente MQTT está integrado y la mayoría de los nodos tienen «temas», así como cargas útiles de mensajes que es todo lo que realmente necesita para comunicarse con un bróker MQTT.

Como se puede ver arriba, estoy haciendo exactamente el mismo truco de inyección / depuración, pero ahora he arrastrado un nodo «mqtt in» y «mqtt out» desde la columna «Red» de posibles nodos.

node-red-mqtt-server
node-red-mqtt-node

Hay un poco más de configuración aquí, ya que necesitamos elegir un servidor MQTT y seleccionar un tema para publicar y escuchar. Pero la interfaz hace que esto sea muy fácil, simplemente haga doble clic en uno de los nodos MQTT. Aquí estoy usando el servidor de pruebas mosquitto ()y el tema . Solo tienes que darte cuenta de que cualquiera que mire mensajes en ese servidor puede ver esto y si usas exactamente el mismo tema puedes ver a otros lectores enviando mensajes de prueba. Node-RED también se puede utilizar como bróker MQTT.test.mosquitto.orgHackaday/nodered/test

Intente hacer doble clic en el nodo de inyección y cambiar la carga útil de la marca de tiempo a una cadena y puede enviar sus propios mensajes personalizados. En su mayor parte me resulta fácil encontrar mi camino alrededor de Node-RED y jugar con la configuración es de bajo esfuerzo. Solo asegúrate de pulsar el botón implementar: tus cambios no estarán realmente en su lugar hasta que lo hagas.

WEB GUI HELLO WORLD

Vayamos a la parte realmente emocionante de Node-Red, la capacidad de crear una aplicación web con muy poco esfuerzo.

Aquí se puede ver un teléfono inteligente que muestra nuestra aplicación. La única parte realmente útil aquí es el botón. Haga clic en él y obtendrá «Hola Hackaday!» en la ventana de depuración de Node-RED como se ve arriba. Todo lo que se necesitó para crear esta página fue instalar el paquete de panel para Node-RED y, a continuación, arrastrar un botón al lienzo. Una vez implementada, la aplicación web se ubicará en localhost:1880/ui

La instalación del paquete es un simple revestimiento:

npm install node-red-dashboard

Arrastrar el botón al lienzo y enlazarlo a un nodo de depuración también es simple, pero necesita hacer sólo un poco de configuración. Al hacer doble clic en el nodo de botón, puede cambiar la carga para afectar a qué mensaje se envía a la ventana de depuración, pero también debe establecer un grupo y, dentro del cuadro de diálogo de edición de grupo, deberá establecer una pestaña. Esto afecta a la aplicación web, con grupos organizando bloques en cada página de la aplicación web, y pestañas seleccionando diferentes páginas del menú de hamburguesas en la parte superior izquierda. Puede nombrar grupos y pestañas como desee.

¡VAMOS A CREAR UNA APLICACIÓN WEB!

Suficiente con el código Hello World, vamos a construir algo útil. He estado usando Node-RED durante un mes más o menos y he construido un par de aplicaciones útiles, una interactúa con mi bróker MQTT para controlar y monitorear mi luz de pórtico frontal, la otra que uso como una simple pulsación de botón para realizar un seguimiento de los días que hago ejercicio. Vamos a construir la aplicación de ejercicios poco a poco porque hay más que simplemente enviar paquetes MQTT de un lado a otro.

Aquí está el estado actual de la aplicación de ejercicios, que incluye un botón que registra la fecha de hoy en un archivo de registro y un medidor que lee el archivo de registro para mostrar cuántos de los últimos siete días han incluido el ejercicio. Construyamos una cuadra a la vez.

Gui botón escritura a archivos

Aquí es donde comienza el flujo. Consta de un botón del paquete Dashboard que envía una marca de tiempo cuando se hace clic. Este mensaje se registrará en dos nodos «file», el primero es el que simplemente registra una marca de tiempo UNIX para cada línea. Eso no es legible en humanos, por lo que el segundo nodo de archivo tiene un nodo de función que traduce la marca de tiempo mediante el siguiente fragmento de código JavaScript. Hay un poco de magia allí para asegurarse de que el mes y el día son siempre de dos dígitos.exerciselog-raw.txt

123456789var date;date = new Date();var year = date.getFullYear();var month = date.getMonth();month = (month < 9 ? '0' : '') + (month+1)var day = date.getDate();day = (day < 10 ? '0' : '') + daymsg.payload = year + '-' + month + '-' + day;return msg;

Adición de una notificación de usuario

node-red-notification-node
node-red-notification-dialog

El botón funciona según lo esperado, pero no da ninguna retroalimentación al usuario. Para mejorar esto, agregué un nodo de notificación del paquete de panel. Se conecta después del nodo de archivo para confirmar que la fecha se había escrito en el archivo de registro.

Lectura de un archivo, visualización de datos, actualización al inicio

Esta última parte del flujo utiliza el nodo «file in» bronceado para leer marcas de tiempo UNIX desde el archivo de registro sin procesar y lo muestra en el nodo «gauge» de color azul del paquete del panel. Se activa mediante dos desencadenadores diferentes, uno se actualiza después de que se escribe una nueva fecha en los archivos de registro. El otro es el nodo «inject» de lavanda que tiene una opción «index once after n seconds» para rellenar los datos iniciales cuando se inicia Node-RED.

El medidor sólo está buscando un número para rellenar y esto es alimentado por un nodo de función (lo llamé Magic). El código siguiente se lee en el archivo de registro como una matriz, calcula el código de fecha UNIX de hace siete días y, a continuación, recorre en iteraciones las últimas siete marcas de tiempo en el archivo de registro.

12345678910111213141516171819202122232425//Turn incoming timestamps log into an array:var exercisearray = msg.payload.split("\n");if (exercisearray.slice(-1)[0] === "") exercisearray.length = exercisearray.length-1 //Get timestamp for week ago to compare againstvar thismorning = new Date()thismorning.setHours(0)thismorning.setMinutes(0)thismorning.setSeconds(0)thismorning.setMilliseconds(0)var sixdays = 1000*60*60*24*6var oneweekago = thismorning.getTime()-sixdays //Iterate and count past week of exercisevar count = 0var secondsinday = 60*24*7for (var i=1; i<8; i++) {if (i>exercisearray.length) break;var testval = parseInt(exercisearray.slice(-i)[0]);if (testval >= oneweekago) ++count;} //Store our answer as the payload and pass alongmsg.payload = count;return msg;

¡PRUEBE NODE-RED!

Una de mis primeras preocupaciones con la plataforma fue el control de versiones, pero eso también está disponible. Hay integración git integrada denominada proyectos Node-RED, pero no está habilitada de forma predeterminada. No estoy acostumbrado a usar una GUI para git, pero de nuevo no estoy acostumbrado a las interfaces gráficas de programación por lo que no duele probar algo nuevo.

Los ejemplos que hemos visto son realmente la punta del iceberg. Mire a su alrededor y encontrará un montón de entusiasmo por Node-RED que se traduce en flujos increíbles y aplicaciones web impresionantes. Por ejemplo, he estado leyendo scargill’s Tech Blog durante años y allí encontrarás un montón de ejemplos de lo que se puede lograr. Aquí vemos el panel de control del termostato de Scargill que tiene todo tipo de personalización para darle un aspecto especial. Encontrar ejemplos que te gusten no es difícil, y copiar su código es aún más fácil.

Puede recoger fácilmente Node-RED en una tarde y terminar con algo útil. Para aquellos que quieren pasar más tiempo, el cielo es el límite. Si tienes algún tipo de domótica, es algo que debes probar, ya que desbloquea la capacidad de cualquier persona en tu LAN para acceder a la información y el control sin instalar una aplicación. Usted puede sacar fácilmente un teléfono inteligente en desuso del cajón y convertirlo en un panel de control dedicado, algo que hice para la imagen en la parte superior de este artículo con la ayuda de una aplicación de Android llamada Fully Kiosk Browser Lockdown para una verdadera experiencia de navegador a pantalla completa no proporcionada por Chrome o Firefox para Android. ¡Pruébalo con tu propio equipo sobrante!

Fuente https://hackaday.com/2020/01/15/automate-your-life-with-node-red-plus-a-dash-of-mqtt/

Instalar Docker en Ubuntu y Linux Mint


En esta guía te mostraremos cómo instalar Docker en Ubuntu Server 20.04. Si estás corriendo otra distribución, visita la documentación oficial de Docker en este enlace.

Dependiendo del sistema operativo utilizado, realizar la instalación de Docker y docker-compose (sólo Linux)

  • Windows
  • MacOS
  • Linux (CentOS, Debian, Ubuntu, Fedora).

Instalación en CentOS 7+

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce

sudo systemctl start docker


Instalación en Ubuntu 16.04+

sudo apt-get update

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-get install docker-ce






Ubuntu(todas las versiones)

sudo apt-get update

 

 

Post-instalación (sólo Linux)

Docker-compose En sistemas Linux, es necesario instalar docker-compose adicionalmente:

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Identificamos la versión de docker-compose para verificar su funcionamiento.

docker-compose --version

Finalmente, se crea un grupo docker y se agrega el usuario actual para poder ejecutar comandos sin necesidad de ser usuario root.

```
sudo groupadd docker

sudo usermod -aG docker $USER
```

Reiniciamos la sesión en el sistema. En caso de utilizar una máquina virtual es necesario reiniciarla para que los cambios surtan efecto.

Si la instalación se realizó correctamente, ejecutamos el siguiente comando para levantar el contenedor hello-world: docker run hello-world

El resultado indica los pasos que se realizaron para descargar la imagen hello-world y desplegarla en un contenedor:

Despliegue de servicios

Una vez finalizada la instalación de Docker, podemos realizar el despliegue de los contenedores de forma sencilla mediante la definición de un archivo en formato yaml que contiene la información necesaria para su configuración.

Asuntos a tener en cuenta luego de instalar Docker

Docker está pensado para ser usado a nivel usuario y no es recomendable usarlo como root. Es por eso que si no tienes un usuario para correr Docker, te propondremos crear uno y agregarlo a los grupos de usuario correspondiente.

Te mostramos aquí cómo hacerlo:

Recuerda reemplazar USUARIO por el usuario real que estés creando en sistema.

  1. Crea el usuario.
    adduser USUARIO
  2. Agrégalo ahora a los grupos de sudo y Docker.
    usermod -aG sudo USUARIO
    usermod -aG docker USUARIO
  3. Toma control de la consola con el nuevo usuario.
    su USUARIO
  4. Intenta correr el «hola mundo» con el usuario para ver si todo va bien.
    sudo docker run hello-world

Ejemplo: Cómo desplegar una instancia de «ubuntu» dentro de un servidor

Parece redundante, pero creando un contenedor de un sistema operativo te será útil para realizar pruebas de configuración sin comprometer el sistema operativo de tu servidor.

  1. Accede a tu consola de comandos SSH con el usuario que acabas de crear.
  2. Descargamos la imagen (en este ejemplo se usará «ubuntu»).
    docker pull ubuntu
  3. Crea el contenedor.
    docker run ubuntu
  4. Lista los contenedores y copia el ID.
    docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5eb116713b8b ubuntu «/bin/bash» 31 minutes ago Up 24 seconds hopeful_babbage
  5. Enciende el contenedor.
    docker start 5eb116713b8b
  6. Conéctate al contenedor.
    docker attach 5eb116713b8b
  7. Dentro del contenedor, actualizamos los paquetes.
    root@5eb116713b8b:/# apt update && apt upgrade
  8. Instala y configura lo que necesites.
  9. Al terminar de trabajar podrás salir del contenedor, y este se apagará. Para encenderlo, vuelve a correr el comando del paso 5.
    root@5eb116713b8b:/# exit

Ejemplo: Cómo instalar un contenedor Docker de WordPress

Este ejemplo muestra cómo correr un contenedor WordPress en un solo comando.

  1. Logueado en la consola de comandos SSH de tu servidor, ejecuta este comando.
    docker run -p 8888:80 wordpress 8888 será el puerto público donde correrá el contenedor web de WordPress. Si el servidor de base no está usando el puerto 80 o 443 (SSL), podrás publicarlo allí sin problema.
  2. Al finalizar verás una salida de comando como esta.
    Unable to find image ‘wordpress:latest’ locally
    latest: Pulling from library/wordpress
    a409b57eb464: Pull complete
    Digest: sha256:6da8f886b20632dd05eeb22462f850a38e30600cedd894d2c6b1eb1a58e9763c
    Status: Downloaded newer image for wordpress:latest
    WordPress not found in /var/www/html – copying now…
    Complete! WordPress has been successfully copied to /var/www/html
    AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ‘ServerName’ directive globally to suppress this message
    AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ‘ServerName’ directive globally to suppress this message
    [Thu Aug 20 19:10:04.642828 2020] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.9 configured — resuming normal operations
    [Thu Aug 20 19:10:04.642877 2020] [core:notice] [pid 1] AH00094: Command line: ‘apache2 -D FOREGROUND’
  3. Ahora ya puedes ingresar por navegador y configurar WordPress.