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.
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.
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.
Cada módulo M5StickC programable se conecta a los HATs del Rover y el JoyStick. Lo que vamos a programar con los M5StickC.
RoverC es una base de robot móvil omnidireccional programable compatible con M5stickC, y puede iniciarse insertando el M5stickC. El controlador principal de la base es el microcontrolador stm32f030f4. La base viene con motores de engranaje helicoidal N20 que son accionados directamente por un controlador de motor de cuatro canales. Estos motores están conectados a ruedas mecanum que pueden moverse en todas las direcciones. Además, se proporcionan dos puertos I2C compatibles con grove para facilitar la expansión de otros módulos. La base también es compatible con los bloques de LEGO y puede expandirse en su estructura. Se instala una batería 16340 en la parte posterior de la base para cumplir con los requisitos de potencia y resistencia del automóvil y se puede controlar mediante un interruptor independiente.
I2C Address 0x38
Para moverlo:
Antes de usar, asegúrese de que el RoverC está completamente cargado. Método de carga: inserte m5stickc en el roverc y conecte el cable USB para cargar.
JoyC es un módulo basculante diseñado para el M5StickC. Admite la operación con las dos manos. Chip de control principal STM32F030F4 integrado, que utiliza el protocolo de comunicación I2C y el host M5StickC para la transmisión de datos. El rango del joystick es 0 ~ 200, hay 12 LED RGB debajo de los joysticks izquierdo y derecho, y la parte inferior del joystick está equipada con una base de batería 16340 para una vida útil continua de la batería.
I2C Address 0x38
Como vamos a programar con UIFLow, lo primero es cargar el firmware de UIFlow con el M5Burner, que puede descargarse en: https://m5stack.com/pages/download. Cargar en ambos M5StickC.
ESP-NOW es un protocolo de comunicación de corto alcance y baja potencia que permite que múltiples dispositivos se comuniquen sin Wi-Fi. Este protocolo es similar a la conexión inalámbrica de 2,4 GHz de baja potencia que se encuentra en los ratones inalámbricos: los dispositivos se emparejan antes de comunicarse. Después del emparejamiento, las conexiones entre dispositivos son continuas, de igual a igual, y no requieren un protocolo de protocolo de enlace.
Para emparejar ambos dispositivos necesito saber su dirección.
Uso un M5Stack que recibe los datos y los muestra por pantalla
Los datos que mando son: Velocidad, Dirección y Ángulo, añadiendo el caracter V, D o A delante del valor.
Solo mando el valor si cambia más de 5 unidades sobre el valor anteriormente enviado. Ahorrando el envío de datos y mejorando la experiencia con el Joystick
Si el valor del Joystick es menor de 30 lo dejo en 0, porque sino los motores apenas se mueven y hace ruido.
Uso en cada receptor un contador para saber cuantos mensajes llegan
El M5Stick del rover lee el dato recibido, analiza si es Velocidad, Dirección y Ángulo y aplica el valor a los motores del rover.
BugC es una base de robot programable compatible con el M5StickC. Esto tiene cuatro motores de CC, controlador de motor, dos LED RGB, soporte de batería y un interruptor. La base Bugc debe usarse junto con el controlador M5StickC. La base viene con un microcontrolador STM32F030F4 que controla todos los motores y LED y esto es controlado a través del protocolo I2C (0x38) por el M5StickC que se encuentra en la parte superior de la base.
En caso que no nos reconozca el puerto serie M5Burner, habrá que instalar el driver como hemos hablado anteriormente desde: https://m5stack.com/pages/download
A la hora de cargar el firmware, seleccionar la versión de UIFlow que se va a usar en http://flow.m5stack.com/ y en caso que no aparezca resaltada, descargarla.
Luego seleccionar el puerto serie y el modelo de M5Stack que vamos a usar y por último configurar la wifi a la que se va a conectar para programar on-line.
Y pulsar el botón burn, si da fallo probar a reducir el baudrate por defecto o borrar la flash con el botón erase.
En caso que no se haya configurado la wifi o no esté disponible la wifi, el M5Stack se configura como un AP Hotspot donde abre una red wifi a la que me puedo conectar y entrar a la web para configurar la wifi.
Modo Programación en Red
El modo de programación de red es un modo de acoplamiento entre el dispositivo M5Stack y la plataforma de programación web UIFlow. La pantalla mostrará el estado actual de la conexión de red del dispositivo. Cuando el indicador está en verde, significa que puede recibir un programa push en cualquier momento. Después de la primera configuración exitosa de la red WiFi, el dispositivo se reiniciará automáticamente e ingresará al modo de programación de red.
Una vez que el M5Stack tiene cargado el firmware y se inicia, se conectará a la wifi configurada y nos mostrará en pantalla el API KEY:
Una vez conectado y con el icono en verde, ya puedo entrar en http://flow.m5stack.com/ y emparejar el dispositivo M5 para programarlo. Para ello debo indicar el APIKEY y el dispositivo.
Una vez hecho esto ya se puede comenzar a programar con UIFlow. Lo siguiente le mostrará un programa simple para manejar M5StickC.
Para encender el indicador LED:
Arrastre el LED para iluminar el bloque de programa.
Empalme con el programa de inicialización de configuración.
Haga clic en el botón Ejecutar en la esquina superior derecha
Modo Programación USB
UIFlow Desktop IDE es una versión offline del programador UIFlow que no requiere conexión de red y puede ser una alternativa en caso de no tener acceso a Internet o una conexión lenta . Haga clic en la versión correspondiente de UIFlow-Desktop-IDE para descargar de acuerdo con su sistema operativo en https://m5stack.com/pages/download
Una vez instalado, detectará automáticamente si su ordenador tiene un controlador USB (CP210X), haga clic en Instalar y siga las instrucciones para finalizar la instalación. M5StickC no requiere un controlador CP210X, por lo que los usuarios pueden elegir instalar u omitir.
Cuando se inicie la aplicación, ya podemos conectar nuestro dispositivo M5
Para poder programar como USB, debemos entrar en modo USB, para ello: Haga clic en el botón de encendido en el lado izquierdo del dispositivo para reiniciar. Seleccione rápidamente Configuración después de ingresar al menú, ingrese a la página de configuración y seleccione el modo USB.
Y por último seleccionar el puerto serie y el dispositivo en el programa para empezar a usarlo.
Independientemente si usamos la versión online o la versión offline, la programación es igual.
El entorno de programación se compone de 5 partes principales:
Coding Area: Arrastre los bloques de código de la lista de bloques al área de codificación y conéctelos para crear un programa
Barra de menús: La barra de menú contiene la mayoría de las funciones importantes de la interfaz, como (Ejemplo,Deshacer y rehacer, cargar, ejecutar código, descargar código, guardar código, etc.
Blockly/Python: Todo el código que creamos en bloques se puede convertir a Python presionando este interruptor
Diseñador de UI: Arrastre los elementos de la interfaz de usuario (título, etiqueta, etc.) hacia la pantalla de para diseñar un avatar o interfaz de interfaz de usuario.
Unidades: Las unidades son sensores y actuadores que se pueden conectar y aquí es donde los configuramos.
Funciones de los botones:
Programación con Blockly:
Programación Básica
Para la programación vamos a usar estas tres documentaciones oficiales:
Setup: Cuando abra UIFlow, encontrará que ya hay un bloque de Configuración al principio. Cada programa debe tener un bloque de configuración. El programa se ejecuta desde el bloque de Configuración y solo se ejecutará una vez. Puedes considerarlo como un bloque de inicialización del programa
Loop: Loop es un bloque de bucle infinito. Cuando se ejecuta, ejecutará el programa contenido en el bloque indefinidamente hasta que ocurra algún evento que lo detenga, por ejemplo un reset o apagado. No tiene que existir en el programa, pero para que el programa ejecute funciones cíclicas debe usarse.
¿Cuál es la diferencia entre ejecutar y descargar un programa? El botón de reproducción coloca nuestro código en la memoria volátil de su M5stack. Lo que significa que se perderá una vez que apague el M5stack. Sin embargo, la función de descarga almacenará su programa en la memoria flash de su dispositivo que no se borrará al reiniciar. Cada vez que enciende el M5stack después de descargar un programa, ese programa se ejecutará automáticamente, y también puede seleccionarlo de la lista de aplicaciones a la que se accede presionando el botón central al iniciar.
Ejecutar un programa: Una vez que haya terminado de programar, presione el botón de reproducción en la esquina superior derecha para ejecutar su código.
Descargar un programa: almacenará su programa en la memoria flash de su dispositivo que no se borrará al reiniciar.
La aplicación grabada se podrá seleccionar desde el menú de aplicaciones del dispositivo M5 y se ejecutará en el inicio cada vez que se resetee. Para volver al entorno de programación y cambiar el programa, si tengo una aplicacion en modo permanente, reiniciar y pulsar el botón mientras arranca para entrar en modo programación cloud o USB.
Unidades y HATs
La unidad o HAT es un módulo hardware de expansión de funciones proporcionado por el sistema M5. Estas deben conectarse al módulo M5 antes de programarlas.
Los módulos y faces de M5Stack ya aparecen automáticamente al seleccionar el HW Core.
Las unidades deben se añadidas en UIFlow para que aparezcan sus bloques de programación. Haga clic en la opción Units debajo del Simulador de UI, marque el módulo de Unidad que desea agregar y haga clic en Aceptar. Algunas unidades tienen configuraciones iniciales de parámetros.
Las funciones son una herramienta que nos ayuda a envolver nuestro código en un paquete ordenado al que podemos asignarle un nombre, y luego llamarlo en cualquier parte de nuestro programa y ejecutará el código que contiene. Las funciones pueden ayudar a mantener nuestro código ordenado y conciso y evitar repetir las mismas cosas una y otra vez.
Haga clic en la opción Agregar en Parámetro, agregue una propiedad del programa, ingrese el nombre que se muestra en el bloque y seleccione el tipo de propiedad. Ingrese el código contenido en el bloque personalizado en el cuadro de opción Código de bloque.
El M5Stack ofrece una serie de dispositivos para hacer desarrollos sobre la plataforma ESP32 (compatible con Arduino).
El M5Stack es un dispositivo de tamaño mínimo, que cuenta con una carcasa, un display a color de dos pulgadas, conectividad usb-c para su programación y alimentación (también cuenta con una conexión de batería), conectividad I2C y un montón de puertos GPIO para conectarle todo tipo de dispositivos. Dispone de numerosas opciones de conectividad y posibilidades de desarrollo.
También cuenta con tres botones programables, un altavoz de 1W, la pantalla LED a color y con resolución 320 x 240, un zócalo para agregar una tarjeta de memoria, conector para baterías LiPo de hasta 2A y muchas otras opciones, como una base con imanes para poder dejarlo colgado de la nevera o en la pared o contar con un acelerómetro y giroscopio. Para mayor compatibilidad con todo tipo de sensores y actuadores M5Stack tiene conectividad a 3,3 y 5 V. El diseño es modular, de forma que en su parte inferior podremos conectarle distintos elementos como placas de desarrollo, sensores, baterías, etc.
Otros aspecto importante, es la interfaz de desarrollo de aplicaciones gráfica al estilo de Scratch en http://flow.m5stack.com/ que más adelante trataremos.
M5Stack no solo es el hardware inicial que apareció, sino que hay muchos dispositivos, hats y módulos de la familia M5Stack. A estos módulos se les denomina M5Core.
Para empezar con los dispositivos de la familia M5Stack lo primero conectar al ordenador. Todos ellos tienen interfaz USB-C y es necesario instalar el driver
Antes de grabar el programa, los usuarios de M5Core (incluidos BASIC / GREY / M5GO / FIRE / FACES) deben descargar el driver CP210X correspondiente según el sistema operativo que estén utilizando.
El soporte de la serie M5StickC/V/T/ATOM se puede utilizar sin driver, los usuarios pueden omitir este paso de instalación del controlador.
EasyLoader es un programador simple y rápido, que tiene un programa de demo incorporado relacionado con el producto a programar. Se puede grabar para realizar una serie de verificación de funciones del módulo.
Es un dispositivo modular, apilable, escalable y portátil que funciona con un núcleo ESP-32, lo que lo hace de código abierto, de bajo costo, con todas las funciones y fácil para que los desarrolladores manejen el desarrollo de nuevos productos en todas las etapas.
M5Stack Basic consta de dos partes separables. La parte positiva tiene todo tipo de procesadores, chips y algunos otros componentes de ranura. La parte inferior tiene una batería de litio, toma M-BUS y clavijas extensibles en ambos lados.
El M5Stick-C es un mini M5Stack, basado en el microcontrolador ESP32. Es una placa de desarrollo de IoT portátil, fácil de usar y de código abierto. Además es muy económica costando menos de 10$.
M5StickC es una tarjeta de desarrollo ESP32 con una pantalla a color de 0.96 pulgadas TFT (resolución 80×160), LED rojo, 2x botones, Micrófono, transmisor IR, IMU de 6-ejes (SH200Q) y una batería de 80 mAh. El módulo ESP32 ESP32-Pico en el M5StickC tiene incluído 4MB de memoria flash. EL M5StickC también está equipado con una base y una correa para reloj, para que lo puedas usar en tu muñeca como un wearable.
Este pequeño bloque es capaz de realizar tu idea, iluminar tu creatividad, y ayudar con tu prototipo de IoT en muy poco tiempo. Eliminará muchos de los problemas del proceso de desarrollo.
M5stickC es uno de los dispositivos principales de la serie de productos M5Stack, que se construye en un ecosistema de hardware y software en continuo crecimiento. Tiene una gran cantidad de módulos y unidades compatibles, así como la comunidad de código abierto y de ingeniería que le ayudará a maximizar su beneficio en cada paso del proceso de desarrollo.
M5StickC usa un chip USB FTDI por lo que no hace falta instalar driver en Windows, Linux y MAC. En caso de necesitarlo, el driver es: https://www.ftdichip.com/Drivers/VCP.htm.
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.
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/
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.
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
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/
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.
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":""}]
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":""}]
[{"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.
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.
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.
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":""}]