Enchufe inteligente reset router

Buenas , en esta ocasión vamos a utilizar un Sonoff S26 ( también valido para el modelo S20) para crear un enchufe que estará revisando constantemente si tenemos conexión a Internet y en caso de no tener conexión reseteara el router y nos avisara por telegram de que ha ocurrido el reset , todo esto vino a raíz de un router instalado en una casa que tienen mis padres fuera , en múltiples ocasiones un Alfa R36 que tenia instalado se quedaba colgado y podía permanecer así hasta el día del juicio final , de esta forma me aseguraba que en caso de bloqueo tras un tiempo predefinido ( en este caso cinco minutos ) el router se reiniciaba y volvía la conexión.

Lo primero que haremos sera abrir el enchufe para poder acceder a los pines RX/TX para poder cargar la aplicación o cargar un firmware con OTA , en este caso espurna por ejemplo nos valdría , en el código que os dejo esta implementada la parte de OTA con lo que solamente con cargarlo una vez ya se podría cerrar el enchufe y todas las posteriores modificaciones se podrían enviar por OTA una vez compilado , yo por comodidad cuando estaba picando la aplicación lo tenia conectado por el puerto serie.

Aquí tenéis es pinout para poder conectar el adaptador , algo muy pero que muy importante es que cuando lo conectéis no se os ocurra conectarlo a 220V ya que los fuegos artificiales están asegurados , la alimentación la coge desde la propia interface.

Y este el fichero de la aplicación que deberéis personalizar.

La parte a personalizar seria :

// Datos del Bot de Telegram
//token Ojo hay que porner bot y seguido el token
String BOTtoken = "botxxxxxxxxxxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; 
// Chat_id
String Chat_id = "xxxxxxxxxxxxxx";

Aquí deberéis poner tanto el token como el chat_id , no entrare en como crear un bot ya que hay excelentes guías que lo explican paso a paso , por ejemplo : https://planetachatbot.com/c%C3%B3mo-crear-un-bot-para-telegram-y-darle-funcionalidad-c5c7ec833f49

//Configuracion tiempos
int TIEMPO_INICIAL = 300;         // Tiempo de espera al arranque del router en segundos
int MAX_FALLOS = 5;
const char* ssid       = "xxxxxxxxxxxxxxxxxxxxx";                      
const char* password   = "xxxxxxxxxxxxxxxxxxxxx";      
const char* ssid2      = "xxxxxxxxxxxxxxxxxxxxx"; 
const char* password2  = "xxxxxxxxxxxxxxxxxxxxx"; 
const char* ssid3      = "xxxxxxxxxxxxxxxxxxxxx";                      
const char* password3  = "xxxxxxxxxxxxxxxxxxxxx";      
IPAddress ip(192, 168, 1, 66);   
IPAddress gateway(192,168,1,1);   
IPAddress subnet(255,255,255,0);   
IPAddress dns(8, 8, 8, 8);
const char* Hostname = "www.google.com";

Aquí podéis definir el delay de arranque , el numero máximo de fallos seguidos , los datos de hasta tres redes por si lo queréis usar en mas de una red , y los datos por si queréis que en lugar de DHCP sea por ip estática.

Si necesitáis subir el fichero .bin solo tenéis que ir a la pagina del dispositivo y subirlo desde allí.

Cada vez que el enchufe resetee el router os avisara por telegram con la siguiente información :