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
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 al broker MQTT público de MyQTTHub usado en la demo. Para ello necesita un usuario y contraseña, solicitalo en aprendiendoarduino@gmail.com
Enviar mensajes de temperatura y/o humedad
Enviar mensajes de alerta, p.e. puerta abierta
Recibir mensajes de encendido/apagado
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.
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":""}]
Para integrar Node-Red con APIs que utilizan el protocolo HTTP demos usar las HTTP requests de Node-RED. HTTP recipes en Node-RED: https://cookbook.nodered.org/http/
El nodo de solicitud http se mejoró enormemente en Node-RED versión 0.20 con la adición de los modos de autenticación Bearer y Digest. Además, se agregó una nueva opción para permitir la creación de una cadena de consulta de msg.payload.
El nodo de solicitud HTTP opcionalmente puede codificar automáticamente msg.payload como parámetros de cadena de consulta para una solicitud GET.
Por ejemplo:
Ejemplo Básico
Ejemplo sencillo de recopilación de datos regularmente de una web de terremotos https://earthquake.usgs.gov/, convertir los datos y generar una alerta si el terremoto tiene un valor mayor o igual que 7.
Si está accediendo a GMail, es posible que necesites habilitar una contraseña de aplicación o habilitar un acceso menos seguro a través de la configuración de su cuenta de Google.
Input: Repetidamente recibe correos electrónicos de un servidor IMAP o POP3 y los reenvía como mensajes si aún no los ha visto. El asunto se carga en msg.topic y msg.payload es el cuerpo del texto sin formato. Si hay texto / html, se devuelve en msg.html. msg.from y msg.date también se establecen si los necesita.
Además, msg.header contiene el objeto de encabezado completo que incluye a, cc y otras propiedades potencialmente útiles.
Output: Envía msg.payload como un correo electrónico, con un asunto de msg.topic. El destinatario predeterminado del mensaje se puede configurar en el nodo; si se deja en blanco, se debe configurar con la propiedad msg.to del mensaje entrante.
Opcionalmente, puede anular la dirección de correo electrónico desde configurando msg.from, de lo contrario, el nodo utilizará la configuración de ID de usuario desde la conexión del servidor.
El payload puede tener formato html. Si payload es un búfer binario, se convertirá en un archivo adjunto. El nombre del archivo debe establecerse usando msg.filename. Opcionalmente, se puede agregar msg.description para el texto del cuerpo.
Alternativamente, puede proporcionar msg.attachments que deben contener una matriz de uno o más archivos adjuntos en formato nodemailer.
Estos nodos utilizan el módulo npm imap y nodemailer.
Envía un mensaje SMS o realiza una llamada de voz utilizando el servicio Twilio. El nodo de salida Twilio está configurado para enviar SMS o hacer llamadas, dependiendo de la opción seleccionada ingrese el número de teléfono o número de teléfono y una URL para crear el archivo de respuesta TWiML.
msg.payload se usa como el cuerpo del mensaje. El nodo se puede configurar con el número al que enviar el mensaje. Alternativamente, si el número se deja en blanco, se puede configurar usando msg.topic. La carga útil también puede ser la URL para crear el archivo de respuesta TWiML.
Debe tener una cuenta con Twilio para usar este nodo.
Este paquete contiene un receptor y un nodo emisor que actúan como un bot de Telegram. Lo único que se requiere es el token que puede recuperar el bot de telegram @botfather.
El nodo de salida envía el contenido a un chat específico. Un flujo de eco simple se ve así:
Nodo de Configuración
Lo único que se debe ingresar aquí es el token que recibió de @botfather al crear un nuevo bot. El nodo contiene dos propiedades opcionales: users y chatids. Puede ingresar una lista de nombres y/o chatids que estén autorizados para usar este bot.
Receiver Node
Este nodo recibe todos los mensajes de un chat. Simplemente invita al bot a un chat. Puede controlar si el bot recibe todos los mensajes llamando / setprivacy @botfather.
El mensaje original de la biblioteca de nodos subyacente se almacena en msg.originalMessage.
msg.payload contiene los datos más importantes como chatId, tipo y contenido. El contenido depende del tipo de mensaje. Si recibe un mensaje, el contenido es una cadena. Si recibe una ubicación, el contenido es un objeto que contiene latitud y longitud.
La segunda salida se activa cuando se aplica seguridad y el usuario no está autorizado para acceder al bot.
Cuando el nodo receptor recibe datos como videos, documentos, etc., el archivo se descarga automáticamente al disco duro local cuando saveDataDir se configura en el nodo de configuración. El directorio también forma parte de la carga útil del mensaje: msg.payload.path. Además, el mensaje contiene el enlace de descarga directa en la carga útil: msg.payload.weblink
Los siguientes tipos pueden ser recibidos:
message – content is text
photo – content is the file_id of the photo with the highest resolution (all photos are stored in the photos property of the output object)
audio – content is the file_id of the audio file
document – content is the file_id of the document
sticker – content is the file_id of the sticker
animation – content is the file_id of the animation file
video – content is the file_id of the video file
video_note – content is the file_id of the video note file
voice – content is the file_id of the voice file
location – content is an object with latitude and longitude
venue – content is the venue object
contact – content is the contact information object Note that media groups are received not as group, but as separate messages of type photo and video.
Sender Node
Este nodo envía la carga útil al chat. La carga útil debe contener los siguientes campos:
msg.payload.chatId – chatId o una matriz de chatIds si desea enviar el mismo mensaje a muchos chats
msg.payload.type, p.e. «message»
msg.payload.content – su mensaje de texto
msg.error – se establece cuando ocurre una excepción
Junto al envío de contenido, el nodo remitente se puede utilizar para enviar comandos directos a la API. msg.payload.type debe establecerse en uno de los siguientes, msg.payload.content contiene los argumentos necesarios, mientras se pasan argumentos adicionales en msg.payload.options:
editMessageCaption
editMessageText
editMessageReplyMarkup
deleteMessage
editMessageLiveLocation
stopMessageLiveLocation
callback_query
inline_query
action
leaveChat
kickChatMember
unbanChatMember
restrictChatMember
promoteChatMember
exportChatInviteLink
setChatPhoto
deleteChatPhoto
setChatTitle
setChatDescription
pinChatMessage
unpinChatMessage
getChatAdministrators
getChatMembersCount
getChat
getChatMember
Command Node
El nodo de comando se puede usar para activar un mensaje cuando se recibe un comando específico: p. help.
Tiene dos salidas
se activa cuando se recibe el comando
se activa cuando no se recibe el comando
El segundo es útil cuando quieres usar un teclado. Los comandos generalmente comienzan con /. De acuerdo con la documentación de la API de Telegram, el comando debe emitirse siguiendo el nombre del bot como /foo@YourBot. Esto es importante cuando agrega varios bots diferentes a un solo chat grupal. Para evitar que el bot maneje comandos que no se le envían directamente usando la notación larga, puede establecer el modo «estricto» en las opciones del nodo de comando. En este caso, el bot solo acepta la notación de comando completo en los chats grupales.
Event Node
El nodo recibe eventos del bot como:
callback_query de teclados en línea.
inline_query
edited_message que se activa cuando alguien modifica un mensaje ya enviado.
edited_message_text que se activa cuando alguien modifica un mensaje de texto ya enviado.
edited_message_caption que se activa cuando alguien modifica un caption ya enviado, p.e. una foto
channel_post que se activa cuando el bot es miembro de un canal público (/setprivacy to disabled).
edited_channel_post, que se activa cuando alguien modifica un mensaje ya enviado en un canal público.
edited_channel_post_text, que se activa cuando alguien modifica un mensaje de texto ya enviado en un canal público.
edited_channel_post_caption que se activa cuando alguien altera un caption ya enviado de p.e. una foto en un canal público.
Reply Node
El nodo de respuesta espera una respuesta a un mensaje específico. Debe usarse junto con el nodo emisor.
Ejemplos
Implementar un comando help:
Implementar un teclado:
La respuesta es enviada a la segunda salida que activa el flujo inferior. Los datos se pasan a través de propiedades globales aquí.
Un nodo de Nodo-RED que obtiene el informe meteorológico y el pronóstico de OpenWeatherMap.
Dos nodos que obtienen el informe meteorológico y el pronóstico de OpenWeatherMap.
Se requiere una clave API para usar estos nodos. Para obtener una clave API, vaya a OpenWeatherMap.
Input Node: Obtiene el clima actual o el pronóstico de 5 días en una ubicación especificada por ciudad y país o latitud y longitud cada 10 minutos, y genera un mensaje si algo ha cambiado.
Query Node: Acepta una entrada para activar la obtención del clima actual, ya sea desde una ciudad y país específicos o latitud y longitud.
Resultados de clima actual:
description – a brief verbal description of the current weather for human reading.
weather – a very short description of the current weather.
icon – the weather icon code for the current conditions.
id – the id given to the current weather by OpenWeatherMap
tempc – the current ground temperature at that location in Celsius.
tempk – the current ground temperature at that location in Kelvin.
humidity – the current relative humidity at the location in percent.
windspeed – the current wind speed at the location in metres per second.
winddirection – the current wind direction at the location in meteorological degrees.
location – the name of the location from which the data was sourced.
Pronóstico de 5 días:
dt – epoch timestamp
pressure – in hPa
humidity – in %
speed – wind speed in metres per second
deg – wind direction in degrees
clouds – cloudiness in %
temp – an object with various temperatures in degC,
Cualquiera puede pensar que node-red es un superconjunto de IFTTT y que todo lo que puede hacer con IFTTT debe poder hacerlo con node-red. Pero en algunos casos nos puede ser útil y más rápido hacerlo con IFTTT.