Olá a todos.
Instalei um router banda larga (TP-Link Archer MR550) num local onde estou frequentemente mas necessitando que funcione quando não estiver nesse local.
Depois de vários testes com este e outro routers conclui que, por razões misteriosas, (parece que) especialmente com pouco tráfego no router, as companhias de telefones/internet gostam de ignorar a presença do router. Digamos que deixam o router pendurado, sem que a internet funcione. O router parece não conseguir sair desse turpôr por ele próprio.
Se o desligarmos e voltarmos a ligar tudo volta ao normal. O problema é que não estando no local quem o faça …
Vai daí, lembrei-me de alimentar o router atravéz de um “Shelly 1 Mini”. Caso o router encrave, se desligar-mos o relé do Shelly e voltarmos a ligar, o router volta a funcionar. A gaita é que quando o router está entupido não há forma de controlar o Shelly e, se houvesse, desligando o router não haveria forma de o religar por falta de ligação do Shelly à internet.
Mas o Shelly permite instalar um script. Perguntei, algures, se alguém saberia de um script para monitorar a funcionalidade da internet e, caso não houvesse internet, desligasse e voltasse a ligar o relé do Shelly.
Alguém respondeu que tinha visto uma coisa dessas e deu-me o link.
Fiz download à coisa, percebi que não percebia nada daquela linguagem, mas percebia o suficiente para martelar umas variáveis.
Ficou assim:
/**
https://github.com/shelly-tools/shelly-script-examples/blob/main/monitor_internet_connection.js
* @copyright shelly-tools contributors
* @license GNU Affero General Public License (https://www.gnu.org/licenses/agpl-3.0.de.html)
* @authors https://github.com/shelly-tools/shelly-script-examples/graphs/contributors
*
* This script can be used to monitor the connection to the internet and restart the local relay
* if the connection fails for a configurable time. Perfect use case would be a router restart.
*/
// CONFIG START
let CONFIG = {
// a remote URL with just a few bytes of content in order to check if internet is still available.
remoteurl: 'https://global.gcping.com/ping',
maxfails: 18, // number of times the check is done before internet is considered as down.
interval: 5, // checks the internet connection every x seconds, recommended is 5 or more
// 18x5s=90s .. the router takes 60s to boot
}
// CONFIG END
// internal vars and functions, no need to change anything below this line.
let alertTimer = '';
let failcounter = 0;
//print("Router power ON ");
Shelly.call("Switch.set", { id: 0, on: true });
function startMonitor() {
alertTimer = Timer.set(CONFIG.interval * 1000, true, function () {
Shelly.call("HTTP.GET", {
url: CONFIG.remoteurl
}, function (res, error_code, error_msg, ud) {
if (error_code !== 0) {
if (failcounter === CONFIG.maxfails) {
Shelly.call("Switch.set", { id: 0, on: false, toggle_after: 5 }); // power off router and on after 5s
failcounter = 0;
} else {
failcounter++;
}
}
},
null
);
},
null
);
}
startMonitor();