Wake On Lan/Wan con ayuda de un ESP8266

Como mostré con anterioridad hace 8 años, es posible encender un ordenador de forma remota mediante Wake On Lan, WoL. Sin embargo cuando queremos hacer Wake On Wan ya la cosa cambia pues para que funcione es necesario configurar los registros estáticos de la tabla ARP del router y eso no todos los routers lo permiten, generalmente hay que hacerlo por SSH mediante comandos por lo que quedan descartados todos los routers que instalan las operadoras de internet.

Pues bien, para solventar esa carencia pensé que se podría hacer con un ESP8266 y cuando vi este modelo concreto en internet no pude resistirme y lo compre:

En realidad se puede hacer con cualquier ESP8266 pero este trae USB-A por lo que se puede pinchar al USB del router (para la alimentación) sin necesidad de ningún cable. El modulo además del USB tiene un pulsador de reset y un interruptor para activar o desactivar el modo programación. Mi modulo vino con un chip flash de 1MB y aunque debería de ser suficiente luego tuve problemas al subir el código así que tuve que desoldar el modulo y poner uno de 4MB.

Conectado al PC mientras lo programaba.

El funcionamiento es el siguiente: Al ESP8266 se le graba un código que permita mostrar una página web la cual al pulsar en un botón lanza la acción de encender el ordenador que queramos, después en el router abrimos el puerto deseado para poder acceder a esa web desde fuera de casa, cosa que si permite cualquier router hasta el mas malo, y de ese modo nos saltamos la limitación ya que no estaremos haciendo un WoW si no un WoL mediante un dispositivo que se encuentra ya en la red local.

Por cuestiones de seguridad en realidad la página no es tan sencilla, aunque en sí no revierte ningún peligro si cualquier pudiera pulsar ese botón, en la practica eso es una marranada por lo que la página lo primero que te pide es un token de acceso generado desde Google Authenticator, estos tokens son autogenerados y de un solo uso, introducir cualquier otra cosa que no sea el token facilitado por la app no te permitirá acceder.

Para que se entienda mas fácilmente, nada mejor que un vídeo:

Para conseguir lo que se muestra en el vídeo hace falta seguir los siguientes pasos:

Preparar el IDE de Arduino

Lo primero de todo es preparar el IDE de Arduino para poder programar el ESP8266 como si de un Arduino se tratase. Como es imprescindible para empezar existen ya muchas guías con los pasos detallados que hay que seguir, por ejemplo la de Luis Llamas:

https://www.luisllamas.es/programar-esp8266-con-el-ide-de-arduino

Añadir complemento al IDE para poder tener dos particiones

Hay varias formas de grabar una página web dentro del ESP8266, desde formas muy cutres como meter el código dentro del propio código del sketch, hasta otras mas elegantes como crear tu propio firmware compilado, leer los ficheros desde una tarjeta SD, o como en este caso creando una partición para dividir la memoria en dos, la primera parte para el sketch y la segunda para la web:

En este instructables de SteveQuinn se explica muy bien cómo instalar el complemento, un jar, en el IDE y cómo particionar la memoria desde el IDE con las nuevas opciones que aparecerán.

https://www.instructables.com/id/Using-ESP8266-SPIFFS

Luego desde nuestro sketch en vez de usar la clase SD para leer desde una tarjeta de memoria sera necesario usar la clase SPIFFS para leer la partición de datos que contiene los ficheros de la web. Este ejemplo de uso me gusto mucho:

https://tttapa.github.io/ESP8266/Chap11%20-%20SPIFFS.html

Solo un comentario por mi parte, al principio intente usar el modulo USB con el ESP8266 que venia y que disponía de 1MB de memoria, sin embargo por alguna razón no se grababan todos los ficheros de la web en la memoria, aun habiendo espacio de sobra… no sé si el modulo salio malo o qué pero no hubo forma. Al final le cambie el ESP8266 por uno de 4MB y aunque luego la partición de datos sigue siendo la misma ahora si se grababan todos los ficheros.

EDIT: Al final he reducido mucho el espacio de la web y el número de ficheros ya que he eliminado todas las dependencias de CSS y JS haciendo que se carguen desde un CDN… las prefería dentro del ESP8266 pero carga todo mas lento.

Con esto quiero decir que tal vez ya funcione con un ESP8266 de 1MB 🙂

Descargar mi código

He subido todo el código al siguiente repositorio de Github y si necesitase hacer alguna mejora se vera reflejada ahí:

Ver repositorio en GitHub

Grabar el código

Una vez descargado el código es necesario primero personalizar el fichero /data/config.txt con los datos de nuestro WiFi, token, y dispositivos de red a encender.

Después hay que grabar el sketch en el ESP8266 como se haría normalmente y también subir los ficheros como explica la guía de SPIFFS.

Si haces algún cambio al código: es recomendable que el código de los ficheros de la web este minificado y cada fichero individualmente comprimido en formato gz, así se cargara la web mucho más rápido, ambas cosas son opcionales ya que el código si no encuentra el fichero comprimido intentara buscar el normal.

Configurar el router

Hay que hacer las mismas configuraciones que explique en esta guía, es decir: DHCP, DDNS, y NAT. El punto de ARP es justamente el que nos estamos saltando con el ESP8266 en los routers que no se puede configurar.

En resumen hay que:

  • Configurar IP estática para cada dispositivo que queramos encender, también para el ESP8266.
  • Configurar si queremos el servicio DDNS o acceder directamente por la IP publica.
  • Abrir el puerto que queramos hacia el puerto 80 del ESP8266.

Configurar los ordenadores

Es algo obvio pero que no debemos olvidarnos… los ordenadores no se van a poder encender si previamente no hemos habilitado la opción de Wake On Lan en la bios o en el apartado correspondiente.

En el caso de los NAS de Synology se hace aquí:

Y en mi ordenador con placa base Asus se hace aquí:

Si el ordenador no dispone de dicha opción no podremos encenderlo remotamente con WoL (podríamos conectarle un Arduino a la placa base pero ese es otro tema)

 

Y eso es todo, ¡ahora podremos encender el ordenador desde la calle sin necesidad de llamar a nadie para que nos lo encienda manualmente!

PD: Quien disponga de una impresora 3D puede imprimirle una carcasa al pincho, en Thingiverse he subido los ficheros.

2 comentarios en “Wake On Lan/Wan con ayuda de un ESP8266”

Escriba aquí su comentario