Cuantas veces no hemos buscado una manera sencilla de comunicarnos con nuestros dispositivos a travez de internet sin complicaciones y/o aplicaciones intermediarias complejas, dns, direcciones IP o VPN’s.
Muchas veces me han preguntado como encender un led, rele o visualizar una temperatura desde Internet de manera fácil, aqui una posible respuesta.
Desde hace mucho tiempo tenia en mente esta aplicación para controlar o interactuar un ESP8266 desde Internet utilizando los servidores IRC ya existentes, solo requiere 3 cosas un servidor IRC disponible, nickname y canal.
Internet Relay Chat (IRC)
Es IRC (INTERNET RELAY CHAT) es un protocolo de transmisión (TCP/IP), que maneja chats y comunicación asíncrona, los chats pueden ser en grupos grandes de usuarios o inclusive uno a uno.
IRC existe desde 1988, aunque actualmente no es tan popular como hace algunos años pero aun existen muchos grupos activos, generalmente comunidades de discusión de software libre, los servidores IRC están activos, vigentes y son públicos.
IRC puede implementar Transport Layer Security (TLS) o Secure Sockets Layer (SSL) para encriptar datos entre usuarios, también permite envió de archivos. La mayoría de los mensajes enviados entre un cliente de IRC y el servidor de IRC se envían en texto sin formato.
Técnicamente IRC es un protocolo que permite enviar mensajes a uno o a muchos usuarios, utiliza comandos para determinadas acciones determinadas ejemplo «PRIVMSG» para enviar un mensaje a un canal/grupo o usuario.
Mas información: IRC, fuente Wikipedia.
Mas información: Listado Comandos IRC, fuente Wikipedia.
Mas Información: Protocolo IRC, fuente Foros linux.org.
Arquitectura IRC
ESP8266 Cliente IRC
Se podría decir que crear un cliente IRC es muy sencillo, técnicamente realizar conexiones con un servidor por un determinado puerto, enviar y recibir mensajes, desde hace algún tiempo he realizado pruebas con esp8266 como cliente IRC,he realizado algunas mejoras a las pruebas iniciales presentadas en tutoriales anteriores.
Para garantizar la existencia o conexión de los clientes el Servidor IRC continuamente envía «PING» al cliente en este caso ESP8266 respondería «PONG» indicando que aun esta activo en el canal, esta verificación la hace automáticamente nuestra aplicación.
La aplicación se ha creado para funcionar Respuesta por petición, el ESP8266 solo responderá bajo peticiones/comandos o mensajes de clientes externos, se prefiere así para evitar envíos constantes de datos sin ser solicitados, bombardeos o quizás bloqueos de servidores IRC.
Arquitectura de Comunicación
Video: Introducción ESP8266 Cliente IRC V1.0 PARTE 1
Control y Monitoreo
A continuación listare algunas de las características de la aplicación irc implementadas en un ESP8266, las funciones principales de Monitoreo y Control, se han creado algunos comandos, que permiten solicitar valores, estados o datos del esp8266:
Descargas: Codigo Arduino ide & Github al final del articulo.
Control de cualquier salida Gpio
- Control: Activación y desactivación GPIO’s:
Nota importante: solo se activaran los gpio declarados como salidas en void setup: pinMode(12, OUTPUT);
Comando: «HIGH GPIOXX» ejemplo : «HIGH GPIO12» Respuesta ESP: «TURN ON GPIO12»
Comando: «LOW GPIOXX» ejemplo : «LOW GPIO12» Respuesta ESP: «TURN OFF GPIO12»
Solicitud de Valores o Datos
- Monitoreo: Leer valor ADC0 del esp8266.
Comando: «READ ADC0» Respuesta ESP: «ADC0 esp8266 = xx»
- Monitoreo: consultar el valor señal RSSI del esp8266.
Comando: «ESP SIGNAL?» Respuesta ESP: «Signal RSSI ESP8266 = -63 dB»
Solicitud Sensores
- Monitoreo: Leer Sensor Temperatura DHT11
Comando: «ESP Temp?» Respuesta ESP: «DHT11 Temperature Now = 29.00°C»
- Monitoreo: Leer Sensor Humedad Relativa DHT11
Comando: «ESP HR?» Respuesta ESP: «DHT11 Temperature Now = 47.00%»
- Monitoreo: Leer Sensor Temperatura DS18B20
Comando: «ESP Temp2?» Respuesta ESP: «DS18B20 Onewire Temperature Now = 28.42°C»
Otros Comados disponibles.
- Este comando por decirlo especial, sera recibido por todos los esp8266 en el canal sin importar que ENABLE_USERPERMITTED = 1, solo es el ejemplo de un comando libre de restricciones.
- Comando: «ESP?????»
Respuesta ESP: «Hi, I’m here. I’m Nickname esp8266 🙂 space on the chip is 45215 and how are you?? Nickname del que lo ejecuto«.
- Menú de parámetros disponibles o ayuda
Comando: «ESP8266IRCXXXXXX Help» o «Nicknameesp Help» Respuesta ESP: Listado de comandos.
Nickname esp8266 Por Defecto: ESP8266IRCXXXXXX, los últimos 6 caracteres siempre serán la MAC.
- Interacción: Respuestas a ciertos mensajes del chat
Ejemplo 1: Si cualquier usuario envía una «🙁 » = triste desde el chat, el esp responderá.
Ejemplo 2: Aunque el esp8266 realiza las acciones solo son por Petición, periódicamente el esp puede enviar mensajes tales como la información pagina web.
Nota: los comandos pueden enviarse en letra mayúscula o minúscula.
Prueba ya desde cliente IRC Web
Se ha habilitado un Cliente WEB para sus pruebas IRC, Prueba ahora mismo!!! en 4 pasos controla un ESP8266 desde aquí IRC CLIENTE WEB.
- Ingresar a http://pdacontroles.com/irc/ y Presionar el Botón Verde «Conectando …».
2. Ingresando a Canal «#PDAChannel» con usuario/nickname automatico ejemplo: PDAUSER|31947.
3. Enviar comando ejemplo «HIGH GPIO12».
4. Ver respuesta de ESP8266IRCXXXXXX = «Turn ON : ON GPIO12» y Listo.
Seguridad
Bueno dado que los mensaje o en este caso comandos son grupales o masivos, cualquiera podría enviar un comando y controlar el ESP8266, ejemplo activar una salida, se ha implementado un método para limitar el control para los usuarios, en un array se ingresaran los usuarios permitidos para controlar el ESP8266.
Descargas: Codigo Arduino ide & Github al final del articulo.
ENABLE_USERPERMITTED = 1 : ESP8266 recibe comandos solo de los usuarios incluidos en array nick_users, ,muy seguro.
ENABLE_USERPERMITTED = 0 : ESP8266 recibe comandos de cualquier usuario que haya ingresado al mismo canal, nada seguro.
Envió de mensajes Privados
Permite enviar mensajes y/o comandos directamente o de manera privada a ESP8266 si que el grupo/canal visualice el comando públicamente, pero por ahora el ESP8266 responderá públicamente otro punto a mejorar.
Interactividad
Otra de las funciones a implementar es la interactividad, existen ciertos mensajes pre-configurados en el ESP8266, la idea es poder realizar preguntas muy básicas al esp8266, ejemplo como esta el clima?, actualmente esta en pruebas, no disponible en esta versión.
Materiales muy Bataros!!!
- ESP8266 12e NodeMCU
- Sensor DHT11
- Sensor DS18B20 Onewire
Otros Equipos Recomendados
- Medidor PZEM 004 con display
- Medidor PZEM 004T & Medidores Trifasicos
- Transformador de corriete nucleo partido
- Medidores de Consumo electrico Monofasico – Por pulsos
- MPPT Controlador Regulador para panel Solar
- Paneles Solares 10W 18v
- Matrix Led x4 Max7219
- Arduino Nano Clone
Conclusiones
Existen Plataformas IoT especializadas, Se podría decir que IRC es el método de comunicación Bidirecional mas sencillo y simple que encontraran para comunicar sus ESP8266 desde cualquier parte.
Personalmente pienso que la aplicación es muy sencilla y dada esa característica es funcional para pruebas sencillas.
Descargas: Código Arduino ide & Github al final del articulo.
Aun no he realizado pruebas a gran escala, Es una aplicación básica, Advertencia aunque la conexión es técnicamente continua servidor-cliente, podría dar la situación que los mensajes se retracen, recomiendo no realizar aplicaciones de control muy complejas, «el control del reactor nuclear».
Algunas ventajas
- Conexión Bidireccional a través de Internet sin registrarse a Aplicaciones, Token’s o Plataformas, lo considero una aplicación IoT.
- No requiere Hosting, Direcciones IP Fijas publicas, VPN’s, puertos especiales.
- Es una conexión TCP/IP simple, conexión a un servidor y puerto 6777.
- Los servidores IRC como freenode son públicos han estado hay siempre.
- Permite crear Canales temporales por un usuario, que son técnicamente privados, ejemplo «#TestESPChannel» podría ser utilizado para pruebas privadas, dicho canal solo estará activo mientras existan usuarios en el.
- Creando grupos temporales podríamos crear aplicaciones P2P punto a punto o M2M.
- IMPORTANTE: No utilizar canales ya existentes o ya utilizados en alguna comunidad, muy públicos.
- Existen clientes IRC para casi todas las plataformas sea Android, Web, Python, C+, Arduino o Node-RED.
- El protocolo garantiza el envió y recepción de los mensajes entre clientes
Algunas Desventajas
En el caso del ESP8266, dado que se conecta aun grupo con muchos usuarios ejemplo: 20 y recibe todos los mensajes, no he realizado pruebas verificando que el esp reciba 20 o 30 mensajes o mas, existen varias posibilidades no confirmadas, perdida o retrazo en los mensajes, podría ser cuestión de optimizar el codigo.
La seguridad que usamos una conexión básica, no implementamos (TLS) o (SSL) disponible en IRC, pero no la utilizaremos, no lo veo como algo critico, realmente desconozco en detalle esta parte, aunque como en gran cantidad de plataformas IoT solo se realizan comunicaciones http, en caso discreción estas son pruebas básicas, no colocar el arranque del transbordador espacial.
Por ahora la rutina que solo permite que determinados usuarios, controlen el esp8266.
Recomendaciones
Crear usuarios o Nicknames con combinaciones alphanumericas máximo 10 caracteres, en el caso especifico del ESP8266 utiliza parte de la MAC en su Nickname.
Nuevamente advierto No utilizar Grupos o Canales IRC ya existentes para evitar complicaciones, dado que seria incomodo enviar mensajes a canales de organizaciones o proyectos ya existentes.
Restricciones
Aunque es un servicio publico, no he encontrado restricciones detalladas por el uso del servicio, claro recomiendo un uso prudente para el envió de datos, recuerden que son servidores, afortunadamente la implementacion ESP8266 es respuesta por petición.
Técnicamente nuestra aplicación se podría comparar con los llamados IRCBots
Mas información: IRCBots fuente Wikipedia.
Recomendado Listado Comparacion IRCBots fuente Wikipedia
Mejoras Futuras
Se tiene planeadas algunas mejoras, que se están en proceso:
- Respuestas privadas a mensajes/comandos privados
- Programación local del ESP8266 via OTA, para evitar USB/Serial.
- Configuración desde WifiManager.
- Implementar un Servidor Web, para visualización de datos estadisticos intreaciones irc y mensajes.
- Interacción : Visualización de Mensajes en matrix led u Oled I2c.
- Interacción : Conexión con Twitter.
- Interacción : Conexión con Google Spreadsheets.
- Interacción: Enviar una notificaciones via Emails.
Descargas / Codigo GitHub
Referencias
- Mas información: IRC, fuente Wikipedia.
- Mas información: Listado Comandos IRC, fuente Wikipedia.
- Mas Información: Protocolo IRC, fuente Foros linux.org.
Recomendados