Archivo de la etiqueta: Raspberry Pi

Instalación Node-RED

Node-RED es un motor de flujos con enfoque IoT, que permite definir gráficamente flujos de servicios, a través de protocolos estándares como REST, MQTT, Websocket, AMQP… además de ofrecer integración con APIs de terceros, tales como Twitter, Facebook, Yahoo!…

Node-RED puede instalarse en multitud de Sistemas Operativos y Hardware, el principal requisito es que pueda instalarse Node.js: https://nodejs.org/es/

Versiones soportadas de node.js: https://nodered.org/docs/faq/node-versions 

Instalación de Node-RED: https://nodered.org/docs/getting-started/

Instalar Node-RED en Raspberry Pi

Node-Red no viene instalado en Raspberry Pi pero se puede hacer desde add/remove software.

La forma es desde Menú – Preferencias – Software Recomendado. También  se instala de esta manera, se puede actualizar usando sudo apt-get upgrade.

También puede hacerse desde usando: sudo apt install nodered

IMPORTANTE: Este método de instalación NO es recomendable porque instala una versión antigua de Node-RED.

En el caso de Raspberry Pi OS Buster, ejecutando apt show nodered

Package: nodered
Version: 1.2.9-1
Priority: optional
Section: editors
Maintainer: Dave Conway-Jones <dceejay@gmail.com>
Installed-Size: 50,2 MB
Depends: nodejs (>= 10), npm (>= 5.8), python (>= 2.7)
Homepage: http://nodered.org
Download-Size: 4.714 kB
APT-Sources: http://archive.raspberrypi.org/debian buster/main armhf Packages
Description: Node-RED - low-code programming for event-driven applications
 A graphical flow editor for event driven applications.
 Runs on Node.js - using a browser for the user interface.
 See http://nodered.org for more information, documentation and examples.
 .
 Copyright 2017,2021 JS Foundation and other contributors, https://js.foundation/
 Copyright 2015,2017 IBM Corp.
 Licensed under the Apache License, Version 2.0
 http://www.apache.org/licenses/LICENSE-2.0

Luego se puede ejecutar manualmente con el comando “node-red-star”:

Para iniciar Node-RED en el arranque de Raspberry Pi de forma automática usar: sudo systemctl enable nodered.service

Más información https://nodered.org/docs/hardware/raspberrypi

Para comprobar que funciona abrir en un navegador http://ip-raspberry:1880

Para encontrar más nodos y ejemplos de flows ver https://flows.nodered.org/ estos nodos se pueden instalar desde el palette.

Instalación Recomendada de Node-Red en Raspberry Pi

La instalación recomendada para tener la última version de Node-RED en Raspberry Pi: https://nodered.org/docs/getting-started/raspberrypi

Comprobar la versión de node.js y npm instalada:

  • node –version
  • npm –version

Ejecutar el script, ojo cuesta un tiempo instalar: 

script antiguo para Raspberry Pi: bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

Si se hace en RPi apt-get upgrade se actualizan las versiones de node.js y npm

Para versiones de OS basada en rpm usar (CentOS, Fedora, etc…) Usar el script: bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/rpm/update-nodejs-and-nodered)

Para más detalles ver https://github.com/node-red/linux-installers 

Este script sirve para instalar Node.js, npm y Node-RED en una Raspberry Pi. El script también se puede utilizar para actualizar una instalación existente cuando hay una nueva versión disponible.

El script que se descarga y ejecuta puede verse en: https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered

Este script eliminará las versiones de Node.js anteriores a la versión 7.x, y Node-RED y

si es necesario, reemplaza con con Node.js 10.x LTS (dubnium) y el último Node-RED de Npm.

También mueve cualquier nodo Node-RED que esté instalado globalmente en su usuario ~/.node-red/node_modules, y los agrega a su package.json, para que puede administrarlos con el administrador de paletas.

También intenta ejecutar ‘npm rebuild’ para actualizar los nodos adicionales que haya instalado que puede tener un componente binario nativo. Si bien esto normalmente funciona bien, necesitas comprobar que tiene éxito para su combinación de nodos instalados.

Estos son los pasos que realiza:

  • Stop Node-RED                   
  • Remove old version of Node-RED      
  • Remove old version of Node.js       
  • Install Node.js                     
  • Clean npm cache                     
  • Install Node-RED core               
  • Move global nodes to local          
  • Install extra Pi nodes              
  • Npm rebuild existing nodes          
  • Add shortcut commands               
  • Update systemd script               

Los errores de instalación se pueden ver en: /var/log/nodered-install.log

Para ejecutar Node-RED como servicio y que se inicie en el boot de Raspberry PI ejecutar: sudo systemctl enable nodered.service

Iniciar el servicio de Node-RED con: sudo systemctl start nodered.service 

Para comprobar que funciona abrir un navegador y enterar en: http://{your_pi_ip-address}:1880 

Más información:

Instalar Node-RED en CentOS

La instalación en local se hace siguiendo este enlace: https://nodered.org/docs/getting-started/local

Es recomendable crear un usuario nodered y hacer la instalación con ese usuario.

Para versiones de Linux basadas en RPM como Red HAT, fedora o CentOS usar esta instalación: https://github.com/node-red/linux-installers. Funciona perfectamente.

Usar este script: bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/rpm/update-nodejs-and-nodered)

Y luego activar el inicio automático en el arranque: sudo systemctl enable nodered.service

Para actualizar usar el mismo script que el de instalación.

Instalación Manual en CentOS

Para instalar Node-RED es necesario una versión soportada de Node.js: https://nodered.org/docs/faq/node-versions

Sigue leyendo solo si eres usuario avanzado, sino te recomiendo que instales Node-RED con el script.

Primero instalar node.js en CentOS:

Para poder instalar add-ons: sudo yum install gcc-c++ make

Para actualizar paquetes npm: npm install -g npm

Y luego instalar node-RED (use the node package manager, npm, that comes with Node.js): npm install -g –unsafe-perm node-red

Running Node-RED: https://nodered.org/docs/getting-started/running 

  • poner node-red
  • abrir firewall  sudo firewall-cmd –permanent –add-port=1880/tcp
  • firewall-cmd –reload

Arrancar node-red en el arranque: https://nodered.org/docs/hardware/raspberrypi#adding-autostart-capability-using-systemd

Más información para la instalación: https://ketandesai.co.uk/os/install-node-red-on-centos-7/

Para actualizar node-red instalado en local https://nodered.org/docs/getting-started/local usar el comando: npm install -g –unsafe-perm node-red

NOTA: no olvidar actualizar a la última versión de nodejs.

Para configurar:

Para securizar:

Comandos básicos de npm: https://vortexbird.com/comandos-basicos-de-npm/

Actualizar Node-Red en CentOS

Si se ha usado el script usar:

Si se ha instalado con npm:

  • cp flows_cred.json backup/flows_cred.json
  • cp flows.json backup/flows.json (Backup de nodos y credenciales)
  • yum update (actualizar node.js y npm)
  • npm install -g npm (actualizar paquetes npm)
  • sudo npm install -g –unsafe-perm node-red (actualizar node-red)
  • systemctl restart nodered.service (reiniciar servicio)
  • systemctl status nodered.service (comprobar servicio)
  • Actualizar nodos desde Manage Palette

Instalar Node-RED en Docker

Node-RED en docker: https://nodered.org/docs/getting-started/docker

Docker hub oficial de Node-RED desde la version 1.x: https://hub.docker.com/r/nodered/node-red/

Imagen de Node-RED: https://github.com/node-red/node-red-docker/blob/master/README.md

Para versiones antiguas: https://hub.docker.com/r/nodered/node-red-docker

La forma más sencilla de ejecutar Node-RED en docker:

  • docker run -it -p 1880:1880 –name mynodered nodered/node-red

Las imágenes Node-RED se basan en imágenes oficiales de Node JS Alpine Linux para mantenerlas lo más pequeñas posible. El uso de Alpine Linux reduce el tamaño de la imagen construida, pero elimina las dependencias estándar que se requieren para la compilación del módulo nativo.

Una vez que está Node-RED ejecutándose con Docker, debemos asegurarnos de que los nodos o flujos agregados no se pierdan si se destruye el contenedor. Estos datos de usuario pueden conservarse montando un directorio de datos en un volumen fuera del contenedor. Esto puede hacerse usando un montaje de enlace o un volumen de datos con nombre.

Node-RED utiliza el directorio /data dentro del contenedor para almacenar los datos de configuración del usuario.

Para guardar el directorio de usuario Node-RED dentro del contenedor en un directorio host fuera del contenedor, puede usar el siguiente comando. Para permitir el acceso a este directorio de host, el usuario de node-red (uid predeterminado = 1000) dentro del contenedor debe tener el mismo uid que el propietario del directorio de host. Esto puede ser forzado con el comando sudo chown -R 1000:1000 path/to/your/node-red/data. Más información https://github.com/node-red/node-red-docker/wiki/Permissions-and-Persistence

docker run -it -p 1880:1880 -v /home/pi/.node-red:/data –name mynodered nodered/node-red

Montar un volumen de datos dentro del contenedor en esta ruta de directorio significa que la configuración de usuario pueden guardarse fuera del contenedor e incluso compartirse entre instancias de contenedor.

En este ejemplo, el directorio host /home/pi/.node-red está vinculado al directorio contenedor /data

El contenedor utiliza el directorio /data como el directorio de configuración del usuario. Para agregar nodos adicionales, puede abrir el shell en el contenedor y ejecutar los comandos de instalación npm adecuados:

  • docker exec -it mynodered /bin/bash (Abre un shell en el contenedor)
  • cd /data
  • npm install node-red-node-smooth (una vez en el contenedor npm instala el nodo)
  • exit
  • docker stop mynodered
  • docker start mynodered (reiniciar contenedor)

Para montar /data en un path externo:

  • docker run –restart always -d -p 1880:1880 -v /opt/docker_volumes/nodered_data:/data –name nodered nodered/node-red
  • Y si lo añado en una red: docker run –restart always -d -p 1880:1880 –network ‘Entorno Desarrollo’ -v /opt/docker_volumes/nodered_data:/data –name nodered nodered/node-red

Para que funcione hay que dar permisos de escritura al uid 1000 al directorio /opt/docker_volumes/nodered_data

Actualizar un Contenedor 

Para actualizar el contendor: https://nodered.org/docs/getting-started/docker#updating

Actualizar el contenedor con una copia del antiguo:

  • docker pull nodered/node-red
  • docker stop nodered
  • docker rename nodered nodered.bak (lo renombro para tener de backup y luego lo elimino)
  • docker run –restart always -d -p 1880:1880 –network ‘Entorno Desarrollo’ -v /opt/docker_volumes/nodered_data:/data –name nodered nodered/node-red
  • docker rm nodered.bak (borro el anterior si funciona)
  • (borro la imagen antigua)

Para cambiar la time zone del contenedor:

  • docker run -it -p 1880:1880 –name mynodered -e TZ=Europe/London nodered/node-red

Docker de node-red en raspberry pi: https://domology.es/docker-de-node-red-en-raspberry-pi/

Más información: https://nodered.org/docs/getting-started/docker

Instalación Manual de Node-RED. Instalación en Local

Esto sirve para cualquier sistema operativo ya sea Windows, Linux, MacOS, etc…. Documentación: https://nodered.org/docs/getting-started/local 

Instalación en Windows:

Node-RED puede instalarse en multitud de Sistemas Operativos y Hardware, el principal requisito es que pueda instalarse Node.js: https://nodejs.org/es/

Node-RED se pueden instalar mediante npm, Además para añadir nodos adicionales primero debe instalar la herramienta npm

Primero se debe instalar node.js, para ello seguir las guias proporcionadas para su instalación: https://nodejs.org/en/download/package-manager/ 

Versiones node.js soportadas por Node-RED: https://nodered.org/docs/faq/node-versions 

npm es el sistema de gestión de paquetes por defecto para Node.js

npm ya viene instalado con la instalación de node.js desde la versión 8.x. Ver: https://www.npmjs.com/get-npm 

El comando para instalar y actualizar Node-RED una vez instalado Node.js: sudo npm install -g –unsafe-perm node-red

Y luego para instalar un nodo/librería, se puede hacer mediante npm en lugar de la paleta de nodos con:

  • cd ~/.node-red
  • npm install node-red-{example node name}

Node-RED Desktop

Por el momento, para instalar Node-RED, un usuario tiene que instalar node.js y npm, luego ejecutar algunos comandos con los que puede que no estén familiarizados y ven una pantalla llena de resultados de npm, la mayoría de los cuales significarán muy poco para ellos.

Existen algunos proyectos de instalador de node-RED como: https://sakazuki.github.io/node-red-desktop/ 

Instalador Node-RED usando Electron: https://jejo.es/posts/electron/electronarduinonodered/v104/ 

Node-RED Portable:

Ejecutar Node-RED

Una vez instalado Node-RED ejecutar el comando para iniciar: node-red

La salida del registro le proporciona varias piezas de información:

  • Las versiones de Node-RED y Node.js
  • Cualquier error cuando intentó cargar los nodos de la paleta
  • La ubicación de su archivo de configuración y directorio de usuarios
  • El nombre del archivo de flujos que está utilizando.

Para tener un log de lo que está pasando usar node-red-log

Otros comandos:

  • node-red-stop to stop Node-RED
  • node-red-start to start Node-RED again
  • node-red-log to view the recent log output
  • sudo systemctl enable nodered.service to autostart Node-RED at every boot
  • sudo systemctl disable nodered.service to disable autostart on boot
  • sudo systemctl status nodered.service to check service status
  • sudo systemctl restart nodered.service to restart service

Nodo-RED utiliza el fichero flows_<hostname>.json como el archivo de flujos predeterminado. Puede cambiar esto proporcionando el nombre del archivo de flujos como argumento para el comando node-red

Iniciar Node-RED en el inicio o como servicio: https://nodered.org/docs/faq/starting-node-red-on-boot

Uso de la línea de comandos de node-red: https://nodered.org/docs/getting-started/local#command-line-usage

Override individual settings: https://nodered.org/docs/getting-started/local#override-individual-settings 

node-red-admin es la herramienta de línea de comandos le permite administrar de forma remota una instancia de Node-RED: https://nodered.org/docs/user-guide/node-red-admin

Para instalar node-red-admin: sudo npm install -g node-red-admin

Para ver todos los nodos instalados: node-red-admin list

Desde la versión 1.1 se ha integrado en Node-RED y se ejecuta como: node-red admin y no es necesario instalar de forma separada

Más comandos: https://nodered.org/docs/user-guide/node-red-admin

Personalizar Node-RED

Se pueden poner Themes en Node-RED: https://github.com/node-red-contrib-themes

Colección de temas: https://github.com/node-red-contrib-themes/theme-collection

Instalación: npm install @node-red-contrib-themes/theme-collection

Para configurar editar en settings.js:

// Customising the editor
    editorTheme: {
        projects: {
            // To enable the Projects feature, set this value to true
            enabled: true
        },
        theme: "<theme-name>"
    }

Luego reiniciar Node-RED con: systemctl restart nodered

Temas disponibles:

  • dark
  • midnight-red
  • oled
  • solarized-dark
  • solarized-light

Práctica 1: Instalación y configuración Raspberry Pi OS

Instalar y configurar una Raspberry Pi para dejar lista como un nodo edge o gateway IoT.

En caso de no disponer de Raspberry Pi:

  • Instalar y configurar Raspberry Pi OS y software, virtualizado en VirtualBox
  • Instalar y configurar una máquina física o virtual Linux.

Instalar:

  • Raspberry Pi OS
  • Base de Datos local: MariaDB
  • Visualización base de datos: PHPMyAdmin (Requisitos: Apache + PHP)
  • Herramienta de programación IoT que se utiliza para conectar dispositivos de hardware, APIs y servicios de internet: Node-RED

Solución

1 – Instalar Imagen Raspberry Pi OS (Antiguo Raspbian)

Instalación recomendada usando Raspberry Pi Imager: https://www.raspberrypi.org/software/

Raspberry Pi Imager es la forma rápida y fácil de instalar Raspberry Pi OS y otros sistemas operativos en una tarjeta microSD, lista para usar con su Raspberry Pi. Vídeo de 40 segundos de como usar Raspberry Pi Imager: https://www.youtube.com/watch?v=J024soVgEeM 

Descargue e instale Raspberry Pi Imager con un lector de tarjetas SD. Coloque la tarjeta SD que usará con su Raspberry Pi en el lector y ejecute Raspberry Pi Imager.

2 – Configuración Raspberry Pi OS

Pasos para la instalación con monitor, ratón y teclado:

  • Seguir con el asistente de instalación que aparece al iniciar: cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi.
  • Conectar a Internet. Wifi o Ethernet
  • Activar VNC y SSH para acceso remoto

Pasos para instalación headless:

Vídeos:

Una vez entramos en Raspberry Pi, seguimos los pasos del asistente que nos indica para cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi.

2b – Virtualizar Raspberry Pi Desktop en Virtualbox

En caso de no tener una Raspberry Pi, se puede virtualizar Raspberry Pi Desktop en Virtualbox.

Tutorial para virtualizar cualquier sistema operativo con Virtualbox: https://www.softzone.es/manuales-software-2/tutorial-de-virtualbox/

Pasos:

3 – Instalar Apache + PHP (requisitos para phpMyAdmin)

Update system:

  • sudo apt-get update
  • sudo apt-get upgrade

Instalar Apache2:

  • sudo apt-get install apache2

Comprobar que accedemos entrando a la IP de la Raspberry Pi desde un navegador:

Instalar PHP

  • sudo apt-get install php libapache2-mod-php

Para comprobar el funcionamiento crear un fichero llamado info.php y en su interior el código: <?php phpinfo(); ?> y guardado en la ruta /var/www/html

Luego en un navegador ir a http://IP-raspberry/info.php

4 – Instalar MariaDB

Pasos:

  • sudo apt-get install mariadb-server mariadb-client php-mysql
  • sudo mysql_secure_installation
  • sudo service apache2 restart

Durante el proceso de instalación se pedirá el password de root de MySQL, poner el que quieras, pero para no olvidarlo, recomiendo para el curso poner el mismo que tiene el usuario pi de la Raspberry Pi y poner a Yes todas las opciones de mysql_secure_installation 

Para comprobar que todo funciona ejecutar sudo mysql -u root -p y poner la contraseña de root, saldrá:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 61
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

5 – Instalar phpMyAdmin

Comando: sudo apt-get install phpmyadmin

Durante el proceso pide la contraseña del usuario phpmyadmin de MySQL y el servidor a instalar el apache y poner yes en dbconfig-common

En caso que no funcione o queramos hacer una configuración de phpmyadmin después de la instalación, usar el comando: sudo dpkg-reconfigure -plow phpmyadmin

Para probar que funciona ver en un navegador: http://IP-raspberry/phpmyadmin con el usuario phpmyadmin y la contraseña usada.

El usuario phpmyadmin no tiene privilegios y el usuario root por seguridad no puede usarse desde phpMyAdmin. 

Crear un usuario “pi” con privilegios. Ejecutar en la consola:

sudo mysql -u root -p
CREATE USER 'pi'@'localhost' IDENTIFIED BY 'tu_contrasena';
CREATE USER 'pi'@'%' IDENTIFIED BY 'tu_contrasena';
GRANT ALL PRIVILEGES ON * . * TO 'pi'@'localhost'; 
GRANT ALL PRIVILEGES ON *.* TO 'pi'@'%'; 
GRANT GRANT OPTION ON *.* TO 'pi'@'localhost';
FLUSH PRIVILEGES;

6 – Instalar Node-RED

No instalar la versión que aparece en software recomendado de Raspberry Pi OS.

Seguir esta instalacióm: https://nodered.org/docs/getting-started/raspberrypi, para ello ejecutar el comando para instalar y actualizar:

Para ejecutar Node-RED en el arranque: sudo systemctl enable nodered.service

En caso de problemas ver el log con: node-red-log

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' }
     }, 

Demo IoT

En esta demo se va a ver la potencia de IoT con la combinación de varias tecnologías open source. Se usará Arduino y dispositivos compatibles con Arduino, Raspberry Pi, Node-RED y otras tecnologías como Telegram.

Además, esta demo pretende ser interactiva, es decir, que una vez vista esta demostración, cualquiera con las herramientas y código proporcionado y los elementos hardware descritos, podrán interactuar con la plataforma IoT de la demo.

Descripción de la Demo

Esta demo consiste en conectar múltiples dispositivos basados en Arduino de cualquier persona del mundo e interactuar con la plataforma IoT instalada en una Raspberry Pi, así como usar un grupo de Telegram para recibir avisos y alertas.

Para conectar todos los dispositivos basados en Arduino usaremos un broker MQTT público, en nuestro caso será MyQttHub https://myqtthub.com/, pero también podría usarse CloudMQTT https://www.cloudmqtt.com/.

Es imprescindible tener el usuario y contraseña del broker para interactuar, si no las tienes puedes pedirlas en aprendiendoarduino@gmail.com

Para saber más de MQTT puedes ver: https://aprendiendoarduino.wordpress.com/2018/11/19/mqtt/

Esta es la estructura que vamos a usar:

Cada dispositivo Arduino publicará en el broker MQTT un dato en un topic y en función del topic, la plataforma IoT basada en Node-Red y ejecutándose en una Raspberry Pi, realizará una serie de acciones.

Además usaremos el grupo de telegram https://t.me/aprendiendoarduinocursoarduino para la recepción de alertas e interactuar con un bot en los dispositivos conectados. Únete al grupo de telegram para interactuar.

Cada dispositivo basado en Arduino conectado a Internet (p.e. basado en ESP8266) se conecta al broker MQTT público mandando o recibiendo datos y esos datos son recibidos en la plataforma IoT basada en Node-RED, instalada en una Raspberry Pi en la sede central.

El dispositivo puede publicar datos en unos topics determinados que se leerán desde Node-RED y se ejecutarán una serie de acciones.

También el dispositivo se puede suscribir a unos topics determinados y leer los datos recibidos, así como ejecutar una serie de acciones en función de los datos recibidos.

Funcionalidades de la Demo

Los dispositivos basados en Arduino podrán hacer las siguientes acciones:

  • Mandar mensajes de alerta. Por ejemplo la apertura de un detector magnético. Cuando se reciba, se mandará un mensaje al grupo de Telegram con el estado del sensor y quien lo manda y se visualizará en https://www.aprendiendoarduino.com/servicios/mensajes/index.html
  • También se mandará una foto al grupo de Telegram cuando se reciba el mensaje de alerta.
  • Mandar mensajes de temperatura y/o humedad. Estos datos se almacenarán en una BBDD y se visualizarán en el Dashboard de Node Red y en https://www.aprendiendoarduino.com/servicios/datos/graficas.html
  • También se puede configurar una alerta para enviar a Telegram y al panel de mensajes, en caso que se supere una temperatura o humedad determinada.
  • Recibir mensaje de encendido o apagado del led integrado de Arduino

Para visualizar e interactuar se dispone de:

  • Grupo de Telegram
  • Dashboard de Node-RED, que solo se visualiza en local donde esté instalado
  • Gráficas
  • Alertas

Estructura de topics

Para poder interactuar con la plataforma los mensajes se deben mandar con una estructura de topic concreta:

  • demo/temperatura/Z – envía un dato numérico de temperatura
  • demo/humedad/Z – envía un dato numérico de humedad
  • demo/reset/Z – envía un mensaje de reset al reinicarse
  • demo/alerta/xx – envía un texto de alarma
  • demo/led/xx – envía un dato ON/OFF para el estado del LED

Siendo xx un identificador del nodo que puede ser un nombre o un número y siendo Z un número del 2 al 20 para identificar la gráfica donde visualizar los datos en https://www.aprendiendoarduino.com/servicios/datos/graficas.html.

Elementos de Hardware Usado

Hardware Nodos Remotos

Hardware Nodo Central

Raspberry Pi 3 Model B o superior:  https://www.raspberrypi.org/products/raspberry-pi-3-model-b/. Esta Raspberry Pi tiene instalado Node-RED donde se ejecutará la plataforma y la programación IoT.

Para la fotos una Raspberry Pi conectada a Internet con cámara. Por ejemplo, unas Raspberry Pi Zero W con cámara

Adicionalmente un M5stack para visualizar datos en la pantalla y controlar dispositivos con los botones.

Código Usado

Todo el código usado en la demo está disponible en el repositorio: https://github.com/jecrespo/demo-iot

Interactúa con la Plataforma

Como ejercicio, puedes interactuar con la plataforma y ser parte de la demos

Para la interacción con la demo necesitarás:

Para poder interactuar con la plataforma los mensajes se deben mandar con una estructura de topic concreta:

  • demo/temperatura/Z – envía un dato numérico de temperatura
  • demo/humedad/Z – envía un dato numérico de humedad
  • demo/reset/Z – envía un mensaje de reset al reinicarse
  • demo/alerta/xx – envía un texto de alarma
  • demo/led/xx – envía un dato ON/OFF para el estado del LED

Siendo xx un identificador del nodo que puede ser un nombre o un número y siendo Z un número del 2 al 20.

Los mensajes de alarma se publicarán en el grupo de Telegram https://t.me/aprendiendoarduinocursoarduino

Crea un Bot de Telegram con Node-RED

Descripción

Haz tu propio bot de Telegram y programalo con Node-RED para controlar Internet.

Este artículo explica cada paso y el código del vídeo publicado en dos partes.

Vídeo Parte 1:

Vídeo Parte 2:

Haremos un bot de Telegram al que podrás hacer preguntas sencillas, podrás pedirle que encienda o apague un led de un dispositivo conectado a Internet, te mandará correos electrónicos, podrás decirle que haga una foto de la webcam conectada, saber el tiempo que hace en tu ciudad y mucho más…

Además lo programaremos usando Node-RED que es una herramienta visual de programación muy fácil de usar.

Requisitos:

Telegram y Node-RED

Crea tu Bot de Telegram y prográmalo usando Node-RED para interactuar con cualquier servicio de Internet como twitter, la luz de tu casa, Arduino, conocer el la predicción del tiempo, Alexa, enviar un email o SMS y mucho más…

Telegram Bots son cuentas especiales que no requieren un número de teléfono adicional para configurar. Estas cuentas sirven para interactuar a través Telegram, simplemente para tener una conversación o para encender la luz de tu habitación.

Para programar el Bot de Telegram usaremos Node-RED. Node-RED es una herramienta de desarrollo basada en flujo para programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte de Internet de las cosas.

Node Red permite programar de forma visual, puede recordar a Scratch, pero es una herramienta muy potente de programación, es un motor de flujos que permite definir gráficamente flujos de servicios, a través de protocolos estándares como REST, MQTT, Websocket, AMQP… además de ofrecer integración con apis de terceros, tales como Twitter, Facebook, Yahoo!…

Su punto fuerte es la sencillez. Nos permite utilizar tecnologías complejas sin tener que profundizar hasta el más mínimo detalle en todas ellas. Nos quedamos en una capa inicial donde nos centramos en lo importante y dejamos de lado aquello que no es práctico.

Crear el Bot

Lo primero que necesitaremos es una cuenta de Telegram, es una aplicación de mensajería que puede usarse desde el móvil, ordenador o web.

Necesitaremos también ejecutar Node-RED. Para ello se puede hacer en una Raspberry Pi, un contenedor Docker, un ordenador o en un servidor en la nube: https://nodered.org/#get-started. Incluso también se puede ejecutar de forma experimental en un móvil Android.

La forma más sencilla de usar Node-RED sin instalar nada es usar FRED, que hace hosting Node-RED y la versión gratuita, aunque limitada, es suficiente para probar Node-RED: https://fred.sensetecnic.com/

Crear un Bot:

Para crear un bot simplemente hay que hablar con BotFather: https://t.me/botfather

Los usuarios pueden interactuar con bots de dos maneras:

  • Enviar mensajes y comandos a los bots abriendo un chat con ellos o agregándolos a grupos. Esto es útil para bots de chat o bots de noticias.
  • Enviar solicitudes directamente desde el campo de entrada escribiendo el nombre de usuario del bot y una consulta. Esto permite enviar contenido desde bots en línea directamente a cualquier chat, grupo o canal.

Debemos solicitar un nuevo bot y elegir un nombre y un username que debe acabar en bot. Una vez hecho esto nos da una token o contraseña, con este token ya podemos usar el bot.

  • /newbot
  • nombre
  • username

Ahora vamos a configurar el bot:

Ahora ya tenemos nuestro bot y podemos añadirlo a grupos o canales y mandarle mensajes aunque aun no nos va a responder.

Lo siguiente es pensar los comandos que queremos que ejecute nuestro bot:

  • /start – inicio del bot
  • /help – muestra los comandos
  • /hola – saluda al bot
  • /quetal – pregunta al bot que tal está
  • /temperatura – temperatura en tu ciudad
  • /humedad – humedad en tu ciudad
  • /tiempo – que tiempo atmosférico hace en tu ciudad
  • /hora – hora y día
  • /enciende – enciende un led de un dispositivo conectado
  • /apaga – apaga un led de un dispositivo conectado
  • /sonido – emite un sonido en un dispositivo conectado
  • /mensaje – muestra un mensaje en la pantalla de un dispositivo conectado
  • /tweet – manda un tweet
  • /mail – manda un email
  • /foto – hace una foto y la muestra en telegram

Para añadir comandos al bot:

  • /setcommands
  • @juntosdesdecasa_bot

Pasar los comandos (copia y pega esto):

start – inicio del bot
help – muestra los comandos
hola – saluda al bot
quetal – pregunta al bot que tal está
temperatura – temperatura en tu ciudad
humedad – humedad en tu ciudad
tiempo – que tiempo atmosférico hace en tu ciudad
hora – hora y día
enciende – enciende un led de un dispositivo conectado
apaga – apaga un led de un dispositivo conectado
sonido – emite un sonido en un dispositivo conectado
mensaje – muestra un mensaje en la pantalla de un dispositivo conectado
tweet – manda un tweet
mail – manda un email
foto – hace una foto y la muestra en telegram

Ahora ya hemos configurado los comandos y para programarlos usaremos Node-RED

Por último vamos a crear un nuevo grupo de telegram donde añadiremos al bot. Además podéis uniros al grupo donde interactuar con el bot en: https://t.me/aprendiendoarduinojuntos 

También podéis uniros al canal de Telegram de aprendiendoarduino: https://t.me/aprendiendoarduino 

Ahora que ya tenemos el bot configurado, vamos a programarlo usando Node-RED: https://nodered.org/

Usar Node-RED en la Nube

Node-RED se puede ejecutar en tu PC, una Raspberry Pi, un servidor o incluso en un teléfono Android, pero lo más sencillo e inmediato es ejecutarlo en un un servicio gratuito en la nube: https://fred.sensetecnic.com/

Para ello es necesario darse de alta y elegir la versión gratuita llamada short: https://fred.sensetecnic.com/pricing

Esta versión está limitada a 50 nodos y funcionamiento de 24 horas, luego hay que volver a iniciar Node-RED.

Una descripción completa de qué es Node-RED puedes verla en https://aprendiendoarduino.wordpress.com/2020/03/05/que-es-node-red/

Lo primero es entrar FRED https://fred.sensetecnic.com/ e instalar los nodos que vamos a usar:

Una vez instalado configurar el bot con nuestro usuario y el token o contraseña que nos ha dado botfather.

Probemos que nuestro bot puede ver los mensajes que le mandamos, para ello unir el bloque “Telegram Receiver” con el node debug y visualizarlo en la pantalla de debug.

Código:

[{"id":"c6588f41.31fad","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":150,"y":140,"wires":[["b56dbbfc.886138","468f84be.2d0b0c","bc7025a7.d77f88","c5f7e4ca.0a3f68","38a90205.251c0e","c277093d.96aa38"]]},{"id":"b56dbbfc.886138","type":"debug","z":"9bb3e1e5.884ce","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":400,"y":140,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

También podemos ver el Node-RED de FRED en: https://aprendiendoarduino.fred.sensetecnic.com/

Podemos ver el dashboard de FRED en: https://aprendiendoarduino.fred.sensetecnic.com/api/ui/

Ahora ya podemos programar cada uno de los comandos que hemos configurado en el bot.

Programar Bot Telegram

start – inicio del bot y help – muestra los comandos

Para estos dos comandos, simplemente va a saludar y va a mostrar los comandos.

Código:

[{"id":"a9c4f195.e216d","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":300,"wires":[["876e2bac.dd4728"]]},{"id":"876e2bac.dd4728","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"nombre","pt":"flow","to":"originalMessage.from.first_name","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":300,"wires":[["400e3866.c55778","bc7025a7.d77f88"]]},{"id":"400e3866.c55778","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/start","x":490,"y":280,"wires":[["668cfc50.398514"]]},{"id":"bc7025a7.d77f88","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/help","x":490,"y":320,"wires":[["668cfc50.398514"]]},{"id":"668cfc50.398514","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola {{nombre}}\n\nstart - inicio del bot\nhelp - muestra los comandos\nhola - saluda al bot\nquetal - pregunta al bot que tal está\ntemperatura - temperatura en tu ciudad\nhumedad - humedad en tu ciudad\ntiempo - que tiempo atmosférico hace en tu ciudad\nhora - hora y día\nenciende - enciende un led de un dispositivo conectado\napaga - apaga un led de un dispositivo conectado\nsonido - emite un sonido en un dispositivo conectado\nmensaje - muestra un mensaje en la pantalla de un dispositivo conectado\ntweet - manda un tweet\nmail - manda un email\nfoto - hace una foto y la muestra en telegram"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":300,"wires":[["5f996a5f.ed0024"]]},{"id":"5f996a5f.ed0024","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":300,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

hola – saluda al bot y quetal – pregunta al bot que tal está

El bot va a responder a /hola y /quetal con varias respuestas aleatorias.

Código:

[{"id":"c55a6a9d.251d68","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":420,"wires":[["1c966594.5ae91a"]]},{"id":"1c966594.5ae91a","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"username","pt":"flow","to":"originalMessage.from.username","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":420,"wires":[["b37510d5.bf716","f9c3aaac.474cb8"]]},{"id":"b37510d5.bf716","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/hola","x":490,"y":400,"wires":[["699f1646.e97398"]]},{"id":"f9c3aaac.474cb8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/quetal","x":490,"y":440,"wires":[["fd6d51e9.9a66f"]]},{"id":"699f1646.e97398","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola {{username}} 👏"},{"message":"👍"},{"message":"Adiós, mantengamos la distancia de seguridad 😷"},{"message":"Me alegro de volver a verte {{username}} 😁"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":400,"wires":[["ec60a0f8.8c47a"]]},{"id":"fd6d51e9.9a66f","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hoy no me encuentro muy bien 😷"},{"message":"Muy bien {{username}} ¿Y tu?"},{"message":"Aquí en casa. Recuerdate ¡Quedaté en casa! 🏠"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":440,"wires":[["ec60a0f8.8c47a"]]},{"id":"ec60a0f8.8c47a","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":420,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

tiempo – que tiempo atmosférico hace en tu ciudad

Preguntando /tiempo nos dirá qué tiempo hace en mi ciudad, para ello usaremos el nodo de openweathermap: https://github.com/node-red/node-red-web-nodes/tree/master/openweathermap

Openweathermap https://openweathermap.org/ es una web donde puede consultar el tiempo de mi ciudad y mi bot también. Para ello es necesario darse de alta y obtener la API key.

Código:

[{"id":"dbe9499e.100028","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":360,"wires":[["c26920ba.c8a5e"]]},{"id":"c26920ba.c8a5e","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/tiempo","x":280,"y":360,"wires":[["2887bf4a.008bf"]]},{"id":"2887bf4a.008bf","type":"openweathermap","z":"9bb3e1e5.884ce","name":"","wtype":"current","lon":"","lat":"","city":"logrono","country":"Espana","language":"es","x":450,"y":360,"wires":[["7890acdf.39a1e4"]]},{"id":"7890acdf.39a1e4","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"tiempo","pt":"flow","to":"payload.description","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":360,"wires":[["b7c6ca8b.fd84f8"]]},{"id":"b7c6ca8b.fd84f8","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola este es el tiempo solicitado:\n\n{{tiempo}}"}],"answer":false,"track":false,"parse_mode":"","x":770,"y":360,"wires":[["c256b90d.b4aea8"]]},{"id":"c256b90d.b4aea8","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":950,"y":360,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

hora – hora y día

Al pedir el comando /hora, el bot nos dará la fecha y hora. Para ello necesitaremos el nodo “moment”: https://github.com/totallyinformation/node-red-contrib-moment

Código:

[{"id":"84e9eb57.8762a8","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":420,"wires":[["38a90205.251c0e"]]},{"id":"38a90205.251c0e","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/hora","x":310,"y":420,"wires":[["56731d.5b4b1ce4"]]},{"id":"56731d.5b4b1ce4","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"hora","pt":"flow","to":"$now()","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":420,"wires":[["e74644c8.820a78"]]},{"id":"e74644c8.820a78","type":"moment","z":"9bb3e1e5.884ce","name":"","topic":"","input":"hora","inputType":"flow","inTz":"Etc/UTC","adjAmount":"2","adjType":"hours","adjDir":"add","format":"","locale":"\"POSIX\"","output":"hora","outputType":"flow","outTz":"Etc/UTC","x":600,"y":480,"wires":[["2eef1594.07269a"]]},{"id":"2eef1594.07269a","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola esta es la fecha y hora:\n\n{{hora}}"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":420,"wires":[["fc861b5b.3e9a38"]]},{"id":"fc861b5b.3e9a38","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":850,"y":420,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

foto – hace una foto y la manda por telegram

Al ejecutar el comando /foto, solicito que haga una foto en una webcam remota y la manda por Telegram.

En este caso uso una RaspberryPi Zero con cámara conectada a Internet y que cuando recibe la orden manda la foto a Telegram.

Para mandar la orden, uso el protocolo MQTT y un servidor gratuito que es https://www.cloudmqtt.com/

El funcionamiento es simple, cuando recibo la solicitud de /foto respondo diciendo que en breve llegará la foto y guardo la variable chatId para que una vez llegue la foto la pueda mandar al mismo chat. Una vez llega la foto enviada por MQTT la mando al chat que la ha solicitado.

Código:

[{"id":"ddef9c1e.3b5c","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":640,"wires":[["7d91e4eb.25d70c"]]},{"id":"7d91e4eb.25d70c","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/foto","x":310,"y":640,"wires":[["50aa7619.e50258","fa77bad5.5803f8"]]},{"id":"50aa7619.e50258","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"foto/bot","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":500,"y":640,"wires":[]},{"id":"c1239e7c.4333a","type":"mqtt in","z":"9bb3e1e5.884ce","name":"","topic":"foto/imagen","qos":"2","datatype":"auto","broker":"6803b3c6.3db1bc","x":90,"y":720,"wires":[["90f8b83c.4fcb38"]]},{"id":"4eac8339.c516cc","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":710,"y":720,"wires":[]},{"id":"fa77bad5.5803f8","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Solicitando foto....\nEspera unos segundos a que llegue"}],"answer":false,"track":false,"parse_mode":"","x":490,"y":580,"wires":[["a99eebc0.d85b58"]]},{"id":"a99eebc0.d85b58","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"chatid","pt":"flow","to":"payload.chatId","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":580,"wires":[["65e6d1bf.6dc4"]]},{"id":"65e6d1bf.6dc4","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":580,"wires":[]},{"id":"90f8b83c.4fcb38","type":"function","z":"9bb3e1e5.884ce","name":"manda imagen","func":"imagen = msg.payload;\nchatid = flow.get('chatid');\n\nmsg.payload = {\n    content: imagen,\n chatId: chatid,\n type: \"photo\"\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":720,"wires":[["3179a0ed.f8049"]]},{"id":"3179a0ed.f8049","type":"chatbot-conversation","z":"9bb3e1e5.884ce","name":"","chatId":"","transport":"telegram","x":490,"y":720,"wires":[["4eac8339.c516cc"]]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}] 

La Raspberry Pi Zero también está configurada con Node-RED para que tome la foto y la devuelva.

Código:

[{"id":"dfbb37cf.44f8c8","type":"mqtt in","z":"7e76b20c.feda1c","name":"","topic":"foto/bot","qos":"2","datatype":"auto","broker":"8579193.97411e8","x":150,"y":600,"wires":[["b0f0ef4f.8c8f2"]]},{"id":"b0f0ef4f.8c8f2","type":"camerapi-takephoto","z":"7e76b20c.feda1c","filemode":"0","filename":"imagen.jpg","filedefpath":"1","filepath":"","fileformat":"jpeg","resolution":"2","rotation":"0","fliph":"0","flipv":"0","brightness":"50","contrast":"0","sharpness":"0","quality":"80","imageeffect":"none","exposuremode":"auto","iso":"0","agcwait":"1.0","led":"0","awb":"auto","name":"","x":340,"y":600,"wires":[["6970b871.3e1f78"]]},{"id":"6970b871.3e1f78","type":"mqtt out","z":"7e76b20c.feda1c","name":"","topic":"foto/imagen","qos":"","retain":"","broker":"8579193.97411e8","x":530,"y":600,"wires":[]},{"id":"8579193.97411e8","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

enciende – enciende un led de un dispositivo conectado y apaga – apaga un led de un dispositivo conectado

Para este ejemplo vamos a usar un dispositivo conectado a Internet programable llamado M5StickC: https://m5stack.com/products/stick-c

Al igual que encendemos y apagamos el led del M5StickC, podríamos apagar y encender la luz de nuestra casa usando el dispositivo conectado a Internet adecuado.

Este dispositivo se programa de diversas formas, una de ellas es como un Arduino, pero lo he programado usando bloques con http://flow.m5stack.com/

Para mandar la orden usamos MQTT como protocolo y el servidor gratuito https://www.cloudmqtt.com/ como hemos hecho anteriormente.

Código:

[{"id":"6a786d51.9c12a4","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":760,"wires":[["9e53e05e.8db81","c831375e.de21a8"]]},{"id":"9e53e05e.8db81","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/enciende","x":340,"y":760,"wires":[["fed77841.defea8"]]},{"id":"c831375e.de21a8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/apaga","x":340,"y":800,"wires":[["14fb096b.04ecc7"]]},{"id":"fed77841.defea8","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"ON","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":760,"wires":[["e9b25c14.01afd","150e4da0.f24952"]]},{"id":"14fb096b.04ecc7","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"OFF","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":800,"wires":[["e9b25c14.01afd","84a1f34.51f1c1"]]},{"id":"e9b25c14.01afd","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/led","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":710,"y":780,"wires":[]},{"id":"150e4da0.f24952","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Led Encendido"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":720,"wires":[["4c8d2b07.0022c4"]]},{"id":"84a1f34.51f1c1","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Led apagado"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":840,"wires":[["4c8d2b07.0022c4"]]},{"id":"4c8d2b07.0022c4","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":950,"y":780,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

sonido – emite un sonido en un dispositivo conectado

El método es el mismo que en el caso del led.

Código:

[{"id":"4a378cfc.3230e4","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":800,"wires":[["25947763.14b2d8"]]},{"id":"25947763.14b2d8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/sonido","x":340,"y":800,"wires":[["c7ff2e29.ba074","674764d3.a9c9ac"]]},{"id":"c7ff2e29.ba074","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/sonido","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":520,"y":860,"wires":[]},{"id":"674764d3.a9c9ac","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Sonido emitido"}],"answer":false,"track":false,"parse_mode":"","x":510,"y":800,"wires":[["9ab43036.cbb8e"]]},{"id":"9ab43036.cbb8e","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":730,"y":800,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

mensaje – muestra un mensaje en la pantalla de un dispositivo conectado

Ahora vamos a mandar un mensaje para que lo muestre por la pantalla del dispositivo, en este caso el bot va a dar varias opciones para mandar.

Código: 

[{"id":"c8ff4724.d761c8","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":900,"wires":[["17f77785.35dfb8"]]},{"id":"17f77785.35dfb8","type":"switch","z":"9bb3e1e5.884ce","name":"","property":"payload.content","propertyType":"msg","rules":[{"t":"cont","v":"/","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":900,"wires":[["717fa77b.479188"],["e8619f7f.44b33"]]},{"id":"717fa77b.479188","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/mensaje","x":440,"y":860,"wires":[["82ebe12b.4d6d4"]]},{"id":"e8619f7f.44b33","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.content","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":940,"wires":[["c425c4d9.cf3e58"]]},{"id":"82ebe12b.4d6d4","type":"chatbot-ask","z":"9bb3e1e5.884ce","name":"","answers":[{"value":"Hola","label":"Hola"},{"value":"SOS","label":"SOS"},{"value":"Mensaje desde Telegram","label":"Mensaje desde Telegram"}],"message":"¿Que mensaje quieres mandar a la pantalla?","x":610,"y":860,"wires":[["95a7f43e.0b7518"]]},{"id":"c425c4d9.cf3e58","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/pantalla","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":650,"y":940,"wires":[]},{"id":"95a7f43e.0b7518","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":810,"y":860,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Flujo Final

Todo ordenado el flujo final queda:

Repositorio: https://github.com/jecrespo/Bot-Telegram-NodeRed