Archivo de la etiqueta: MQTT

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

Integración Node-RED con Otros Servicios

Integración con MQTT

Para integrar Node-RED con servicios MQTT existen los nodos de MQTT de publish y suscribe.

Más información: http://www.steves-internet-guide.com/configuring-the-mqtt-publish-node/

MQTT Recipes:

Integración con API REST

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/

Nodo HTTP request: https://flows.nodered.org/node/node-red-contrib-http-request

NOTA: antes de usar el nodo de HTTP request para acceder a una API pública buscar en https://flows.nodered.org/ si ya de ha publicado el nod que lo haga. Por ejemplo https://flows.nodered.org/node/node-red-node-openweathermap

HTTP requests

HTTP request para novatos: http://www.steves-internet-guide.com/node-red-http-request-node-beginners/

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.

Obtengo los terremotos significativos de los últimos 30 días: https://earthquake.usgs.gov/earthquakes/map/#%7B%22feed%22%3A%2230day_sig%22%2C%22search%22%3Anull%2C%22listFormat%22%3A%22default%22%2C%22sort%22%3A%22newest%22%2C%22basemap%22%3A%22terrain%22%2C%22autoUpdate%22%3Atrue%2C%22restrictListToMap%22%3Afalse%2C%22timeZone%22%3A%22utc%22%2C%22mapposition%22%3A%5B%5B-78.49055166160312%2C74.8828125%5D%2C%5B78.42019327591201%2C325.1953125%5D%5D%2C%22overlays%22%3A%7B%22plates%22%3Atrue%7D%2C%22viewModes%22%3A%7B%22map%22%3Atrue%2C%22list%22%3Atrue%2C%22settings%22%3Afalse%2C%22help%22%3Afalse%7D%7D

Tutorial: https://nodered.org/docs/tutorials/second-flow 

Ejemplo AEMET

Ejemplo más complejo donde se deben realizar varios pasos para obtener los datos de la AEMET.

Ejemplos: https://github.com/jecrespo/Curso-Node-RED/tree/master/01-REQUEST%20API%20REST

Ejemplo de integración con API de lectores 2N

Es posible integrar Node-RED con los lectores de tarjetas de 2N. Card readers AccessUnit: https://www.2n.cz/en_GB/products/ip-access-control

Manual API: https://wiki.2n.cz/hip/hapi/latest/en

Si quiero abrir remotamente el switch mediante Node-RED, me conecto a las APIs:

Usa digest authentication:

Envío de Emails

Nodo para envío de emails: https://flows.nodered.org/node/node-red-node-email

npm: https://www.npmjs.com/package/node-red-node-email

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.

Si inicias directamente no deja hacerlo google porque: https://support.google.com/accounts/answer/6010255?p=lsa_blocked&hl=es&visit_id=637210948261881071-1978480038&rd=1

Para resolverlo:

Solucionar problemas si no puedes loguearte con tu cuenta de gmail: https://support.google.com/mail/answer/7126229?visit_id=637210978957705918-3645915622&rd=2#cantsignin

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.

Ejemplos:

Otros relativos a email:

Envio SMS

Mandar SMSs usando el servicio de Twilio: https://www.twilio.com/

Pricing: https://www.twilio.com/pricing

Free account: https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account

Trial de Twilio: https://support.twilio.com/hc/en-us/articles/223136107-How-does-Twilio-s-Free-Trial-work-

Limitaciones de la cuenta gratuita: https://support.twilio.com/hc/en-us/articles/360036052753-Twilio-Free-Trial-Limitations

TwiML: https://www.twilio.com/docs/voice/twiml

Nodo: https://flows.nodered.org/node/node-red-node-twilio

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.

Aquí hay un ejemplo del uso de este nodo para crear un IVR simple: https://flows.nodered.org/flow/637b5f6128a8d423503f

SMS con Node-RED USANDO UN PINCHO 3G: https://maker.pro/raspberry-pi/tutorial/how-to-make-an-sms-app-for-raspberry-pi-with-node-red

Telegram

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.

Bots en Telgram: https://core.telegram.org/bots

API Telegram: https://core.telegram.org/bots/api

Nodo: https://flows.nodered.org/node/node-red-contrib-telegrambot

Basado en https://github.com/yagop/node-telegram-bot-api

El nodo de entrada recibe mensajes del bot y envía un objeto de mensaje con el siguiente layout:

  • msg.payload contiene los detalles del mensaje
    • chatId: la identificación única del chat. Este valor debe pasarse al nodo de salida al responder al mismo chat.
    • type: el tipo de mensaje recibido: mensaje, foto, audio, ubicación, video, animación, voz, contacto
    • content: contenido del mensaje recibido: cadena o id_archivo, u objeto con datos completos (ubicación, contacto)
  • msg.originalMessage contiene el objeto de mensaje original de la librería https://github.com/yagop/node-telegram-bot-api

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

  1. se activa cuando se recibe el comando
  2. 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í.

Ver más ejemplos en: https://flows.nodered.org/node/node-red-contrib-telegrambot

Twitter

Nodos para usar twitter con Node-RED

Nodo: https://flows.nodered.org/node/node-red-node-twitter

Es necesario darse de alta como developer en Twitter: https://developer.twitter.com/en/apps

Proporciona dos nodos: uno para recibir mensajes y otro para enviar.

Nodo de entrada de Twitter. Se puede usar para buscar:

  • el público o la transmisión de un usuario para tweets que contienen el término de búsqueda configurado
  • todos los tweets de usuarios específicos
  • mensajes directos recibidos por el usuario autenticado

El nodo de salida de Twitter tuitea msg.payload.

Para enviar un mensaje directo (DM), use una carga útil como:

  • D {username} {message}

Consumir streaming data de Twitter: https://developer.twitter.com/en/docs/tutorials/consuming-streaming-data

Open Weather Map

Obtener datos climatológicos: https://openweathermap.org/

Se podría usar la API y hacer una integración similar a la vista en el apartado de API REST, pero en este caso al haber un nodo, se simplifica todo.

Y ver openweathermap y la API: https://openweathermap.org/api

Open Weather Map:

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,
    • day, min, max, night, eve, morn
  • weather – an object with some misc. data,
    • description, icon, main, id

Más información en: https://flows.nodered.org/node/node-red-node-openweathermap

Ejemplos:

IFTTT

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.

Tres librerías:

Es necesaria la API key de IFTTT.

Maker Webhooks: https://ifttt.com/maker_webhooks

Me permite hacer llamadas a webhooks que se integran con herramientas de terceros.

Publica msg.payload.value1, 2 y 3 en el canal Maker en IFTTT en el canal especificado.

Creo el evento “nodered” para mandar datos al webhook.

Otra librería más avanzada pero en un estado de desarrollo temprano es: https://flows.nodered.org/node/node-red-contrib-ifttt-broker

Ejemplos:

Ejemplos Node-RED y MQTT

Node-RED y MQTT

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

sistema alarma node-red

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. Cuando utilizamos una tecnología, nos centramos en lo superficial. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

sistema alarma node-red

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

sistema alarma node-red

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

sistema alarma node-red

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

sistema alarma node-red

Ejemplo

Vamos a usar los Wemos D1 mini, para integrarlos como nodos remotos y programarlos desde Node-RED.

Esquema:

El firmware para los nodos remotos:

Cada firmware ya está configurado para solo configurar el topic donde va a publicar y el topic al que se suscribe:

  • RELE: Paso ON y OFF
  • OLED: Paso el string que va a mostrar por pantalla
  • LEDS: 7 topics donde paso el color en formato RGB y el brillo

Probar cada firmware y hacer un programa sencillo para interactuar con ellos.

Completos tutoriales:

Otros Cursos

Además de los itinerarios se ofrecen otros cursos relacionados con el HW libre y la digitalización por separado, que pueden ser un complemento a los cursos de los itinerarios o cursos separados.

PLCs Basados en Arduino (Nivel 1)20 h
Node Red Iniciacion (Nivel 1)20 h
Node Red Avanzado (Nivel 2) – EN DESARROLLO20 h
Domótica Open Source (Nivel 1) – EN DESARROLLO20 h
Robótica Open Source (Nivel 1) – EN DESARROLLO20 h
Certificación Oficial Arduino (Nivel 1) – EN DESARROLLO20 h

Ver Anexo I con el material necesario para impartir los cursos de este itinerario.

PLCs Basados en Arduino (Nivel 1)

Objetivo

El objetivo de este curso es que el alumno obtenga un conocimiento de los PLCs basados en Arduino y de su potencia en los entornos industriales y el IoT. Nos centraremos en un modelo para las prácticas pero se verán varios tipos.

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/

Al finalizar el curso el alumno será capaz de:

  • Conocer diversas opciones de PLCs basados en Arduino
  • Manejar y configurar el IDE Arduino
  • Conocer el lenguaje de programación
  • Conocer otros lenguajes de programación para los PLCs
  • Aprender a usar las entradas analógicas y digitales
  • Aprender a usar las salidas analógicas y digitales
  • Manejar sensores y periféricos
  • Usar comunicaciones disponibles en los PLCs

Requisitos Alumnos

Para realizar este curso, es necesario tener unos conocimientos básicos de Arduino.

Contenido del Curso

  • PLCs basados en Arduino
  • IDE Arduino
  • Simuladores Arduino
  • Programación Arduino
  • Otros Métodos de Programación
  • Entradas y Salidas Digitales
  • Entradas Analógicas
  • PWM
  • Manejo de Sensores
  • Comunicaciones
  • PLCs basados en Raspberry Pi
  • Proyectos Industriales

Node Red Iniciacion (Nivel 1)

Objetivo

El objetivo de este curso es que el alumno aprenda el uso de Node-RED y la programación visual mediante flujos para su uso en entornos de domótica e IoT

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/

Al finalizar el curso el alumno será capaz de:

  • Instalar Node-RED en diversas plataformas
  • Conocer el protocolo MQTT e instalar un broker
  • Configurar y usar de forma segura Node-RED
  • Usar la programación de flujos de forma eficiente
  • Hacer debug de los programas Node-RED
  • Instalar y utilizar nodos
  • Configurar un dashboard
  • Integrar Node-RED con servicios de terceros

Requisitos Alumnos

No son necesarios requisitos previos de los alumnos para asistir a este curso

Contenido del Curso

  • Instalación de Node-RED
  • Instalación de Mosquitto
  • Protocolo MQTT
  • Configurar y securizar Node-RED
  • Configurar y securizar Mosquitto
  • Node-Red en la Nube
  • Programación Node-RED
  • Debug Node-RED
  • Nodos Node-RED
  • Dashboard Node-Red
  • Integración con Servicios de Terceros

Itinerario Formación IoT/Industria 4.0

En un acercamiento a esta disciplina, se busca conocer las tecnologías necesarias para el desarrollo de soluciones IoT/Industria Conectada y valiéndonos para ello de herramientas, tecnologías, protocolos y software libre/open source que hay a nuestra disposición, de forma que cualquier empresa por pequeña que sea pueda hacer un proyecto sencillo de IoT/Industria 4.0 con una inversión mínima, sea cual sea el sector al que pertenezca.

No solo las grandes empresas pueden dar el salto a IoT, la tecnologías libres permiten que sea factible la digitalización de las pymes con una inversión económica mínima y que surja la innovación desde las propias empresas con una formación adecuada a sus trabajadores.

Fundamentos IoT (Nivel 1)20 h
Dispositivos HW IoT (Nivel 2)20 h
Infraestructuras IoT (Nivel 3)20 h
Conectividad IoT (Nivel 3)20 h
Plataformas IoT (Nivel 4)20 h
Desarrollo Soluciones IoT con Herramientas Libres (Nivel 5)20 h

Ver Anexo I con el material necesario para impartir los cursos de este itinerario.

Fundamentos IoT (Nivel 1)

Objetivo

Describir los fundamentos de Internet de las Cosas e identificar los distintos mercados a los que el alumno puede orientar su actividad profesional.

Dado que las comunicaciones, la conexión a Internet y los dispositivos conectados es un aspecto importante actualmente y los conceptos de computación y comunicaciones van unidos de la mano cuando hablamos de las TIC (Tecnologías de la Información y de la Comunicación), vamos a tratar también en este curso las comunicaciones y la programación de los dispositivos conectados.

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Conocer qué es IoT
  • Reconocer las tecnologías y arquitecturas de IoT
  • Capas en IoT
  • Saber los retos de IoT
  • Importancia de la seguridad den IoT
  • Empresas en IoT
  • Conocer los mercados verticales de IoT
  • Saber los servicios que ofrece IoT

Requisitos Alumnos

No son necesarios requisitos previos de los alumnos para asistir a este curso

Contenido del Curso

  • Qué es el IoT. Visión Holística
  • Ecosistema IoT
  • Retos de IoT
  • Industria 4.0. IIoT
  • Empresas en IoT
  • Mercados Verticales IoT
  • Campos Profesionales IoT
  • Aplicaciones IoT

Dispositivos HW IoT (Nivel 2)

Objetivo

Visión general del HW en el ecosistema IoT y puesta en práctica. Identificar la solución Hardware y Firmware más correcta para un proyecto IoT.

Analizar el hardware y el firmware utilizado dentro el ecosistema IoT y programar algunas las plataformas de prototipado más populares del mercado

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Conocer las plataformas HW IoT 
  • Conocer el firmware usado en las plataformas HW
  • Identificar la solución Hardware y Firmware más correcta para un proyecto IoT
  • Utilizar plataformas de prototipado IoT

Requisitos Alumnos

Haber cursado el módulo de Fundamentos IoT o tener experiencia en HW y Firmware IoT.

Contenido del Curso

  • Dispositivos IoT
  • HW IoT Industrial
  • Firmware: SW de los dispositivos
  • Plataforma de Prototipado
  • Prácticas Firmware
  • HW IoT Comercial

Infraestructuras de Comunicaciones IoT (Nivel 3)

Objetivo

Visión detallada de las infraestructuras y conectividad en IoT con ejemplos prácticos en algunas tecnologías. El alumno será capaz de analizar las necesidades de una solución IoT, ofrecer la mejor solución e implementarla. 

Utilizar las Infraestructuras de comunicación que se usan hoy en día para IoT

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Conocer las diferentes infraestructuras de comunicaciones IoT disponibles en el mercado
  • Comparar las tecnologías inalámbricas y saber elegir la más adecuada dependiendo del proyecto.
  • Ofrecer e implantar soluciones IoT a nivel de conectividad e infraestructuras IoT a partir del análisis de necesidades del proyecto
  • Utilizar algunas de las comunicaciones con placas de prototipado como Arduino y ESP8266

Requisitos Alumnos

Haber cursado el módulo de Fundamentos IoT o tener experiencia en infraestructuras y conectividad IoT.

Contenido del Curso

  • Conectividad IoT
  • Redes Inalámbricas IoT
  • Infraestructura de Comunicación IoT
  • Prácticas de Comunicaciones IoT

Conectividad IoT (Nivel 3)

Objetivo

Visión detallada de las infraestructuras y conectividad en IoT con ejemplos prácticos en algunas tecnologías. El alumno será capaz de analizar las necesidades de una solución IoT, ofrecer la mejor solución e implementarla. 

Analizar los protocolos más populares para dotar de conectividad a los dispositivos IoT y configurar el software

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Conocer los protocolos más populares usados en IoT
  • Profundizar en el protocolo HTTP y el uso de API REST
  • Profundizar en el protocolo MQTT y su uso en aplicaciones IoT
  • Instalar, configurar y usar un broker MQTT
  • Ofrecer e implantar soluciones IoT a nivel de conectividad e infraestructuras IoT a partir del análisis de necesidades del proyecto

Requisitos Alumnos

Haber cursado el módulo de Fundamentos IoT o tener experiencia en infraestructuras y conectividad IoT.

Contenido del Curso

  • Protocolos IoT
  • Protocolo HTTP
  • Uso de API REST
  • Protocolo MQTT
  • Práctica MQTT

Plataformas IoT (Nivel 4)

Objetivo

Visión general de las plataformas IoT y trabajo detallado en algunas de ellas. Proponer, instalar y configurar la plataforma más adecuada para el desarrollo de soluciones IoT.

Analizar las  las plataformas existentes en IoT e instalar y configurar alguna de las más utilizadas.

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Conocer las plataformas IoT Generalistas y especializadas más usadas
  • Conocer plataformas open source, instalar y configurar en un servidor
  • Encontrar la plataforma adecuada para una solución IoT, instalación y configuración
  • Programar servicios usando Node-Red
  • Uso de Bases de Datos para almacenamiento de datos
  • Configuración y uso de Dashboards
  • Analizar datos de forma visual

Requisitos Alumnos

Haber cursado el módulo de Fundamentos IoT o tener experiencia en plataformas IoT.

Contenido del Curso

  • Plataformas Cloud Generalistas
  • Plataformas Cloud Especializadas
  • Práctica de Plataformas Cloud
  • Plataformas Privadas/Libres
  • Práctica Plataformas Privadas/Libres
  • Servicios IoT
  • Node-Red
  • Bases de Datos
  • Dashboards
  • Ejemplos prácticos IoT

Desarrollo Soluciones IoT con Herramientas Libres (Nivel 5)

Objetivo

Este curso pretende unificar todos los conocimiento adquiridos en los anteriores cursos del itinerario IoT para hacer un proyecto “full stack” de IoT.

Unificar los conocimientos adquiridos en los otros cursos, identificar necesidades reales con respuestas desde el IoT y desarrollar una solución específica para una necesidad.

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/.

Al finalizar el curso el alumno será capaz de:

  • Proponer e implementar soluciones IoT como respuesta a necesidades específicas
  • Desarrollar un proyecto IoT  estructurado según las fases relacionadas en cada módulo  que de respuesta a una necesidad real del entorno del alumno

Requisitos Alumnos

Los alumnos deberán haber cursado todos los cursos del itinerario IoT o tener experiencia en el desarrollo de soluciones IoT

Contenido del Curso

  • Repaso de conceptos
  • Ejemplo de soluciones IoT Completas
  • Identificación de necesidades
  • Presentación preliminar
  • Desarrollo del Proyecto
  • Presentación del Proyecto