Скрипт для автоматической перезагрузки роутера

image
Дома, как, как и у многих, интернет раздает роутер.
Купленный в свое время ZyXEL P-330W вполне справлялся со своей задачей, пока однажды не начались проблемы. Видимо провайдер что-то там у себя делал, сетка падала, а роутер оставался в полной уверенности, что все в порядке и не переподключал соединение.
Единственное, что оставалось — перегружать сам роутер путем отключения питания.
Т.к. домашний сервак работает 24/7 и интернет ему нужен постоянно, озадачился проблемой автоматической перезагрузки роутера в случае, если отрубается интернет.

ПРОБЛЕМА:
Роутер или ADSL модем теряет связь и не восстанавливает соединение.

РЕШЕНИЕ:
Использование скрипта для проверки подключения к интернет и перезагрузки роутера в случае необходимости.
Как это все будет работать – Раз в полчаса планировщик запускает скрипт, который пингует определенные адреса и если ответа нет, заходит на роутер через телнет и отправляет команду перезагрузки.

Теперь подробно, по шагам.

Создаем в текстовом редакторе файл router.vbs (например)

Копируем туда следующий код:
>>>Начало кода со следующей строки<<<
Function PcOnline (strComputer)
‘Check if the remote machine is online.
Dim objPing,objStatus
Dim TextStream, TimeVar
Dim fso, tf
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set objPing = GetObject(«winmgmts:{impersonationLevel=impersonate}»)._
ExecQuery(«select Replysize from Win32_PingStatus where address = ‘» & strComputer & «‘»)
For Each objStatus in objPing
If IsNull(objStatus.ReplySize) Then
PcOnline=False
‘Пишем Лог файл
Set fso = CreateObject(«Scripting.FileSystemObject»)
If (fso.FileExists(«c:\routerlog.txt»)) Then
Set tf = fso.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & » » & strComputer & » is down «)
tf.Close()
Set fso = Nothing
Set tf = Nothing
Else
Set tf = fso.CreateTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & » » & strComputer & » is down «)
tf.Close()
Set fso = Nothing
Set tf = Nothing
End If
‘ Конец Лог файла
Else
PcOnline = True
‘Wscript.Echo strComputer & » is responding to a ping «
End If
Next
Set objPing=Nothing
Set objStatus=Nothing
End Function
Dim fsot, tft
Const ForReading = 1, ForWriting = 2, ForAppending = 8
If PcOnline(«www.ya.ru»)_
OR PcOnline(«www.google.com»)_
Then
‘ если статус = 0, пустая строка — другое
Wscript.Echo «all ok»
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine(«——————«)
tft.Close()
Set fsot = Nothing
Set tft= Nothing
WScript.Quit 0
Else
‘WScript.Echo «Reboot»
‘Set oShell = WScript.CreateObject(«WScript.Shell»)
‘oShell.Run «telnet.exe 1.1.0.1»
‘WScript.Sleep 2000
‘oShell.SendKeys «user» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «password» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «reload» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «^({]})q» & chr(13)
‘WScript.Quit 255
End If
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine(«——————«)
tft.Close()
Set fsot = Nothing
Set tft= Nothing
>>>Конец кода на предыдущей строке<<<

Что к чему:
ya.ru и google.com сервера, которые пингует скрипт для проверки ест ли интернет или нет
user — логин админа роутера или модема – обычно admin
password – пароль админа.
В строчке ‘oShell.Run «telnet.exe 1.1.0.1» вместо 1.1.0.1 прописываем адрес своего роутера (192.168.1.1 например)
В строчке ‘oShell.SendKeys «reload» & chr(13) – reload, это команда, которая перегружает роутер или модем, может отличаться от модели к модели. Посмотрите в документации или методом научного тыка и вставьте ту команду, которая подходит вам – я встречал reload и reboot.
Также скрипт пишет лог файл c:\routerlog.txt

ИСПОЛЬЗОВАНИЕ:
Сохраняем файл router.vbs с кодом внутри.
Добавляем в качестве задания запускать этот файл каждые 30 минут (по желанию)
Для XP — Панель управления -> Назначенные задания -> Добавить задание

Теперь скрипт будет каждые 30 минут проверять соединение с интернет и в случае срыва коннекта перегружать роутер/модем.

Если у вас есть роутер ASUS или другой с прошивкой от Олега, то эта записка для вас. Недавно у меня возникла трудность, которую никак не получалось решить. VPN-сессия зависала, при этом VPN-соединение оставалось подключено. Роутер не мог понять, что надо переподключится.  Приходилось каждый раз вручную делать перезагрузку роутера, согласитесь, это долгий и утомительный процесс. 

linux-code

Я покопался в интернете, оказалось  я такой не один и проблема довольно масштабна среди “роутороводов”. Наши провайдеры не особо жалуют пользователей с роутерами, в большинстве случаев после ответа на вопрос “какая у вас операционная система” суппорт умолкает.

Я не задавался и продолжал искать,  но нигде не было универсального решения данной проблемы. Тогда я подумал, мой роутер основан на Unix и поддерживает Bash-скрипты.  Я решил написать “умный” скрипт перезагрузки, в случае повисания VPN-сессии. После нескольких проб и ошибок я остановился на таком варианте.

#!bin/sh

PINGRESORCE1="ya.ru"
PINGRESORCE2="google.com"

if (! ping -c 3 &{PINGRESORCE1} >/dev/nill 2>&1).
then

if (! ping -c 3 &{PINGRESORCE2} >/dev/nill 2>&1).
then
reboot

else
echo 'internet ok'
fi

else
echo 'internet ok'
fi

Алгоритм работы данного скрипта такой:  Сначала мы посылаем 3 ping’a до Яндекса, если они проходят то выводим “internet ok”. Если нет, то посылаем ещё 3 ping’a до Гугла, если проходят, выводи “internet ok”. Если ping не дойдёт  и до Гугла, то перезагрузка.

Этот скрипт необходимо добавить в планировщик задач (в большинстве случаев это cron), чтобы он выполнялся каждые 5-10 минут.

Качественные cайты на скриптах.

Старые комментарии:

Игорь 31.10.2010 18:37
Интересно, а как засунуть этот скрипт в роутер? :-?

 Илья 31.10.2010 19:12
У меня DIR-320 с прошивкой от Олега.
По сути это уже полнофункционал ьный линукс, ;-) есть доступ к командной строке по SSH.
Советую посетить этот форум. (Ахтунг, там есть проблема с кодировкой нужно поставить Кириллицу Windows-1254)
http://wl500g.info/forumdisplay.php?f=86

 Игорь 01.11.2010 13:48
Спасибо, получается, что роутер D-Link превращается в ASUS :eek:

 Илья 01.11.2010 14:42
Ну.. Да :yehh2:

 demeister 13.04.2011 04:26
скажите а на DD-WRT при прописании скрипта в cron он будет работать?

 Илья 13.04.2011 15:15
Да должен, ибо тоже Linux :yehh2:

 DarkShaman 21.05.2013 19:30
У меня на OpenWRT заработало так
#!/bin/sh
echo ————— ————— ————— —
echo WAN CONTROLL RESTART
echo ————— ————— ————— —
PINGRESORCE1=»109.126.0.67″
PINGRESORCE2=»109.126.1.67″
PINGRESORCE3=»google.com»
if (! ping -q -c3 ${PINGRESORCE1} > /dev/null 2>&1)
then
if (! ping -q -c3 ${PINGRESORCE2} > /dev/null 2>&1)
then
if (! ping -q -c3 ${PINGRESORCE3} > /dev/null 2>&1)
then
reboot
else
echo ‘internet ok’
fi
else
echo ‘internet ok’
fi
else
echo ‘internet ok’
fi

 Паша 11.04.2014 21:35
У меня на OpenWRT. Не могу запустить скрипт. Объясните подробно в какую папку на роутере нужно скопировать файл скрипта, как создать этот файл и что нужно прописать в планировщике?
На данный момент создал файл /overlay/home/ping/ping.sh
в котором прописал все что в сообщении от #7 DarkShaman
Не работает. Где ошибка? Роутер не перезагружается при отключении сетевого кабеля ни сразу ни через 5 минут.
DarkShaman, подскажи как ты все проделал?

 Олег 07.09.2014 17:27
Доброго времени суток! Скажите пожалуйста, а можно таким способом перезагружать другую точку, коротая подключена к моей мостом?

Добавить комментарий

Ежедневно c 10:00ч до 20:00ч.

Как оказалось, в гигабитном роутере TP-LINK TL-WR1042ND нет управления при помощи консоли. Но роутеры, как известно, иногда виснут. Точнее, сам роутер продолжает работать и откликаться на команды управления из админки и VPN показывает, что он подключен, но интернет при этом не доступен. Иногда это происходит по вине самого устройства, иногда проблемы со стороны провайдера, и перезагрузка часто решает проблему. При чем, желательно, чтобы это происходило автоматически. Поэтому было принято решение перегружать роутер при помощи HTTP GET запроса…

После непродолжительного исследования были найдены такие команды:

Разорвать VPN соединение:

http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1

Подключить VPN:

http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Connect=Connect&wan=1

Перезагрузить роутер:

http://login:pass@192.168.0.1/userRpm/SysRebootRpm.htm?Reboot=1

Но, как оказалось, управлять этими командами роутером напрямую не получается. Они работают только при авторизации в админке роутера через браузер и то только можно увидеть их выполнение с помощью firebug, а напрямую, при вводе в адресную строку работает только команды дисконнекта/коннекта VPN. Команды срабатывают, но при этом все равно выдается ошибка. Перезагрузить роутер таким образом не получается.

Мгновенно выскакивает «You have no authority to access this router!» и ничего не происходит.

Самое интересное, что так:

http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1

выдает ту же ошибку, но с некоторой задержкой, а запрос выполняется — т.е. wan отключается.

При этом в админку входит по ссылке с прописанной авторизацией: http://login:pass@192.168.0.1 и управление из админки дальше работает!

Перезагрузка из Linux

Меня больше интересовала перезагрузка из линукса, но такая команда не срабатывала:

wget --http-user=login --http-password=pass --post-data="reboot=true" http://192.168.0.1/userRpm/SysRebootRpm.htm

ошибка:

Connecting to 192.168.0.1:80... connected.
HTTP request sent, awaiting response... 401 N/A
Reusing existing connection to 192.168.0.1:80.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: `SysRebootRpm.htm'

К тому же, при помощи wget не удавалось даже выполнить Disconnect/Connect VPN.

На русском форуме TP-LINK была открыта тема, но в результате обсуждения, решения найти не удалось.
Английская техподдержка на запрос «How i can reboot my device by bash script?»
ответила следующее: «this is not possible to reboot devices in a such way».
Ticket#2013101610000131

Решение все же было найдено. Не вдаваясь в подробности скажу что роутер при GET запросе проверяет:

  1. Http basic авторизацию.
  2. User-Agent браузера.
  3. Корректное поле рефер, которое всегда будет просто http://IP адресом роутера, т.к. роутер использует редиректы.

Cookie для авторизации не используются.

С этим всем отлично справляется команда curl.

Скрипт перезагрузки роутера

Итак, привожу скрипт перезагрузки роутера, который у меня получился:

#!/bin/sh
WATCHED_IP="8.8.8.8"
ROUTER_IP="192.168.0.1"
USERNAME="login"
PASSWORD="pass"

# watch for remote host
ping -q -c 1 "$WATCHED_IP" > /dev/null && exit

# exit if router is down
ping -q -c 1 "$ROUTER_IP" > /dev/null || exit

curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/SysRebootRpm.htm?Reboot=reboot"

Соответственно, скрипт реконнекта VPN:

#!/bin/sh
WATCHED_IP="8.8.8.8"
ROUTER_IP="192.168.0.1"
USERNAME="login"
PASSWORD="pass"

# watch for remote host
ping -q -c 1 "$WATCHED_IP" > /dev/null && exit

# exit if router is down
ping -q -c 1 "$ROUTER_IP" > /dev/null || exit

curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1"
#sleep 1
curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/StatusRpm.htm?Connect=Connect&wan=1"

Поставил в cron скрипт реконнекта при отсутствии пинга dns гугля — проверка каждые 3 минуты.
Скрипт перезагрузки проверяет наличие интернета каждые 15 минут.

login:pass, конечно, нужно будет поставить свои. Файлы скриптов назвать, например, tplink_reboot.sh и tplink_reconnect.sh, сохранить на сервере, дать права на выполнение и добавить в планировщик.

Уже пару раз выручило:
tplink_reconnect.zip
tplink_reboot.zip


PS:
на форуме https://forum.tp-linkru.ru Scorokhod поделился своим вариантом перезагрузки роутера при помощи WGET, за что ему огромное спасибо:

wget --http-user=%login% --http-password=%password% --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" --referer=http://%router_ip%/userRpm/SysRebootRpm.htm http://%router_ip%/userRpm/SysRebootRpm.htm?Reboot=1

Вместо «login», «password» и «router_ip» подставить соответственно логин, пароль и IP маршрутизатора без кавычек и процентов :-)

WGET для Windows можно взять здесь: http://gnuwin32.sourceforge.net/packages/wget.htm, качать нужно «Complete package, except sources — Setup».

Перезагрузка из Windows

Готовая сборка Wget + Bat скрипт для перезагрузки (только перегружает):
скачать tplink_reboot_wget.zip (подходит для большинства моделей Tplink, не только WR1042ND)

Перезагрузка из Android

(спасибо за этот код neolead)

Для андроид в данном изложении требуется root. Если нет рута.. то в конце checknet заменить на step1

—manual
Requirements:

Установить Busybox https://play.google.com/store/apps/deta … on.busybox
и Android Terminal emulator https://play.google.com/store/apps/deta … ndroidterm
—to do list
Перемонтировать/system на запись «su -c mount rw,remount /system»
Поместить допустим в /system/script,»su -c chmod 0777 /system/script/»
Дать скрипту права на исполнение «su -c chmod 0755 /system/script/ping2.sh»
Добавить в автозапуск в настройках терминала.

у меня работает в машине как переподключение,затем перезагрузка wifi после трёх фейлов…

-----ping2.sh
#!/system/bin/sh
pingip=8.8.8.8
login=admin #Username
password=admin #Password
router_ip=192.168.0.1 #Ip of router
sleep_time=30 #Time to next check
sleep_rbt_time=70 #Time to waiting of reboot
f1=10 #First pause in sec
f2=30 #Second pause in sec
increment=0
b64_auth=$(echo $login:$password | base64|rev|cut -c 2-|rev)
network=toyota #SSID name of wifi

while true
do

function checknet()
{
ssid=0
while [ "$ssid" != "$network" ]
do
ssid=$(su -c dumpsys wifi|grep "* ID:"|cut -f 2 -d \")
echo ssid=$ssid
echo network=$network
if [ "$ssid" = "$network" ]; then
echo "Correct Wifi Network"
else
echo "False Wifi Network,press Enter key"
read -rs
fi
done
}

function slp()

{
increment=0
echo "will sleep $sleep_time sec"
sleep $sleep_time #check again
}

function wifi_conn()
{
echo modem reconnect
printf "GET /userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/StatusRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
printf "GET /userRpm/StatusRpm.htm?Connect=Connect&wan=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/StatusRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
}

function wifi_rst()
{
#echo LOGIN:$b64_auth=
increment=$(( $increment +1 ))
echo Reboot Times=$increment

if [ "$increment" -eq 3 ]; then
echo "We Already Reboot = $increment times"
echo "We Stop Rebooting"
read -rs $'Press any key to continue monitoring...\n' -n1 key
else
printf "GET /userRpm/SysRebootRpm.htm?Reboot=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/SysRebootRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
echo "Now reboot request was send,will sleep $sleep_rbt_time sec"
sleep $sleep_rbt_time
fi
}
checknet

if ping -c 1 $pingip >/dev/null
then
echo "all good step 1"
slp
else
if ping -c 1 $router_ip >/dev/null
then
echo Router is pinging - channel is down
else
echo Router is down - channel is down
increment = 3
wifi_rst
fi
echo Bad Ass step 1 - will wait $f1 sec!
sleep $f1 #give it a few seconds to complete
fi

if ping -c 1 $pingip >/dev/null
then
echo "all good step 2"
slp
else
echo Bad Ass step 2 - will wait $f2 sec!
sleep $f2 #give it a few seconds to complete
fi

if ping -c 1 $pingip >/dev/null
then
echo "all good step 3 "
slp
else
wifi_conn
echo Bad Ass step 3 - Reconnect!
wifi_conn
fi

if ping -c 1 $pingip >/dev/null
then
echo "all good step 4 "
slp
else
echo Bad Ass step 3 - Reconnect!
wifi_rst
fi
done

Скетч Arduino для плат на базе микроконтроллера ESP32

(спасибо за этот код p-a-h-a)


#include <WiFi.h> 
#include <HTTPClient.h>
const char* IP_port = "http:// 192. 168. 0.1:80"; // Убрать пробелы, заменить на свой адрес
#define RouterLogin "admin"
#define RouterPassword "admin"
void setup() {
  Serial.begin(115200);
  WiFi.begin("ssid", "pass");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500); Serial.print(".");
  }
    HTTPClient http;
    http.begin(String(IP_port) + "/userRpm/SysRebootRpm.htm?Reboot=1");
    http.setAuthorization(RouterLogin, RouterPassword);
    http.addHeader("User-Agent","ESP32 wrower");
    http.addHeader("Referer", String(IP_port) + "/userRpm/SysRebootRpm.htm");
    Serial.printf("[HTTP] GET...code: %d\n", http.GET());
//    Serial.println(http.getString()); // Выдаст вебстраничку ответа 
    http.end();
}
  void loop() {}

Отличное решение! У кого мобильный свисток+роутер знают как это «мучительно больно», если это все работает вне быстрой досягаемости :).
Я в декабре нашел подобное решение на 10$-ой вайфай розетке SONOFF® S20.

c2c9c8.jpg

Она перешивается в среде Arduino ide 1.8.5 следующим скриптом:

Код:

#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>

const char* ssid = «ssid»; // подставить название своей сети WiFi
const char* password = «password»; //подставить пароль свой сети WiFi
//IPAddress ip(192, 168, 1, 70); //Node static IP
//IPAddress gateway(192, 168, 0, 1);
//IPAddress subnet(255, 255, 255, 0);

//const char* remote_host = «www.ya.ru»; //адрес для пинга
const IPAddress remote_ip(87, 250, 250, 242); // адрес для пинга
unsigned long previousMillis = 0;
const long interval = 300; //интервал между пингами в сек
const long T_ROUTER = 60; // время ожидания загрузки роутера в сек
const long T_RELAY = 5; // задержка от выключения реле до включения в сек

int PIN_RELAY = 12;
int PIN_LED = 13;
int PIN_BUTTON = 0;
int COUNT_PING = 0; //количество попыток при отсутствии пинга (не задается)
int COUNT_PING_MAX = 2; //максимальное количество отсутствия пинга до перезагрузки роутера
int COUNT_WIFI = 0; //счетчик попыток подключения к WiFi
int COUNT_WIFI_MAX = 60; //300; // Таймаут до перезагрузки роутера при отсутствии WiFi в сек

void setup()
{
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_RELAY, OUTPUT);
pinMode(PIN_BUTTON, INPUT);
digitalWrite(PIN_RELAY, HIGH);
digitalWrite(PIN_LED, LOW);
Serial.begin(115200);
delay(10);
attachInterrupt(PIN_BUTTON, Click, FALLING);
}

void ConnectWIFI()
{
Serial.println(«Подключаюсь к WiFi»);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED)
{
if (COUNT_WIFI <= COUNT_WIFI_MAX)
{
COUNT_WIFI++;
}
else
{
Serial.println();
Relay(); //перезагружаемся так как нет подключения к WiFi
Serial.println(«Подключаюсь к WiFi»);
}
//Serial.println(WiFi.status());
digitalWrite(PIN_LED, !digitalRead(PIN_LED)); //моргаем зеленым светодиодом
delay(1000);
Serial.print(".");
}
COUNT_WIFI = 0; // сбрасываем счетчик попыток подключения к WiFi
Serial.println();
Serial.print(«WiFi подключен, ip: „);
Serial.println(WiFi.localIP());
//Serial.println(WiFi.status());
digitalWrite(PIN_LED, LOW); // зажигаем зеленый светодиод
COUNT_PING = 0; // сбрасываем счетчик неуспешных пингов
}

void Relay()
{
if (digitalRead(PIN_RELAY) == HIGH)
{
digitalWrite(PIN_RELAY, LOW); //отключаем питание на розетке
Serial.println(“Реле ВЫключено»);
}
delay(T_RELAY*1000);
digitalWrite(PIN_RELAY, HIGH); //включаем питание на розетке
Serial.println(«Реле Включено, ждем загрузки роутера»);
delay(T_ROUTER*1000); // ждем загрузки роутера
COUNT_PING = 0; // сбрасываем счетчик неуспешных пингов
COUNT_WIFI = 0; // сбрасываем счетчик попыток подключения к WiFi
previousMillis = 0;
}

void Click()
{
digitalWrite(PIN_RELAY, LOW); //отключаем питание на розетке
Serial.println(«Реле выключено кнопкой»);
}

void loop()
{
if (WiFi.status() != WL_CONNECTED) // нет подключения к WiFi
{
ConnectWIFI(); //подключаемся к WiFi
}
unsigned long currentMillis = millis();
if (((currentMillis — previousMillis) >= interval*1000) && (digitalRead(PIN_RELAY) == HIGH) && (WiFi.status() == WL_CONNECTED))
{
previousMillis = currentMillis;
Serial.print(«Попытка пинга: „);
//Serial.println(remote_host);
Serial.println(remote_ip);
//if(Ping.ping(remote_host))
if (Ping.ping(remote_ip))
{ //пинг есть
Serial.println(“Пинг есть!!»);
COUNT_PING = 0;// сбрасываем счетчик неуспешных пингов
} else
{ // пинга нет
Serial.print(«Пинг отсутствует :( „);
COUNT_PING ++;
Serial.println(COUNT_PING);
}
}
if (COUNT_PING >= COUNT_PING_MAX) // если превышено количество попыток пинга перезагружаем роутер
{
Relay();
}
if (digitalRead(PIN_RELAY) == LOW) // нажата кнопка, перезагружаем роутер
{
Relay();
}
}

Суть работы заключается в следующем. Розетка подключается к домашней сети WiFi и с периодом 5 минут пингует сервер яндекса. При отсутствии пинга более двух периодов по 5 минут розетка отключает питание на 5 секунд, далее ждет 1 минуту для загрузки роутера и пытается пинговать опять. При отсутствии подключения к WiFi, так же перезагружает роутер.
При нажатии на кнопку, так же происходит отключение питания на 5 секунд для ручной перезагрузки роутера. Все временные интервалы можно настроить на свой вкус.
А это решение еще проще, но в копилку общих знаний думаю может быть кому тоже пригодиться.

Все подробности можно найти у автора отзыва на сайте mysku*ru. Я заказал и жду с бангуда розетку и с алиэкспресс адаптер-конвертор для прошивки.

В современном мире, когда интернет стал неотъемлемой частью нашей жизни, надежность работы роутера является одним из ключевых аспектов. Однако, иногда возникают ситуации, когда роутер перестает отвечать на пинг или теряет связь с сетью. В таких случаях, вместо ручной перезагрузки роутера можно использовать специальный Vbs скрипт, который автоматически перезагружает роутер.

Этот Vbs скрипт можно запустить на компьютере, подключенном к роутеру. Он будет периодически проверять доступность роутера посредством пинга. Если роутер не отвечает на пинг в течение определенного времени, скрипт выполнит перезагрузку роутера. Таким образом, проблемы с отсутствием интернета из-за недоступности роутера можно решить автоматически.

Для реализации данного скрипта, в нем используются стандартные Vbs функции, такие как создание объекта WScript.Shell для выполнения командной строки и метод WScript.Sleep для задержки выполнения скрипта. Скрипт также использует параметры ping -n для указания количества пингов и timeout для указания времени ожидания ответа роутера.

Содержание

  1. Автоматическая перезагрузка роутера при отсутствии пинга
  2. Проблемы с интернет-соединением?
  3. Что такое Vbs скрипт?
  4. Пинг и его значение
  5. Как настроить автоматическую перезагрузку роутера?
  6. Преимущества использования Vbs скрипта

Автоматическая перезагрузка роутера при отсутствии пинга

Автоматическая перезагрузка роутера может быть полезной функцией, особенно если вы часто сталкиваетесь с проблемами сетевого подключения. В отдельных случаях, когда роутер не отвечает на пинг, перезагрузка может помочь восстановить работу сети и устранить временные проблемы.

Для автоматической перезагрузки роутера при отсутствии пинга можно использовать Vbs скрипт, который будет перезагружать роутер автоматически, если необходимо.

Как это работает?

Скрипт проверяет соединение с роутером, отправляя «пинг» на его IP-адрес. Если роутер не отвечает на пинг, то скрипт выполнит команду перезагрузки роутера. При этом, чтобы скрипт работал постоянно, его можно добавить в планировщик задач Windows.

Пример скрипта:

strComputer = "localhost"
strRouterIP = "192.168.0.1"
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" & strComputer & "\
oot\\cimv2")
Set colComputers = objPing.ExecQuery("Select * From Win32_PingStatus where address = '" & strRouterIP & "'")
For Each objComputer in colComputers
If objComputer.StatusCode = 0 Then
' Пинг успешен
Else
' Пинг неудачен, выполняем команду перезагрузки роутера
Set objShell = CreateObject("WScript.Shell")
objShell.Run "shutdown.bat"
End If
Next

Примечание:

В данном примере предполагается, что IP-адрес роутера 192.168.0.1. Если у вас другой IP-адрес роутера, замените его в соответствующей строке кода.

Также, необходимо создать файл «shutdown.bat», в котором будет содержаться команда перезагрузки роутера. Например, в файле «shutdown.bat» может быть следующая строка:

shutdown /r /f /t 0

Вывод

Автоматическая перезагрузка роутера при отсутствии пинга может быть полезным инструментом для поддержания стабильного соединения в домашней сети. Воспользуйтесь данной возможностью, если вы сталкиваетесь с частыми проблемами сети или просто хотите быть уверены в стабильности соединения.

Проблемы с интернет-соединением?

Отсутствие доступа к Интернету может быть серьезной проблемой и вызывать неудобства. Если вы испытываете проблемы с интернет-соединением, рекомендуется следующее:

  1. Проверьте, правильно ли подключен ваш роутер и имеются ли подключения всех необходимых кабелей;
  2. Перезагрузите роутер, чтобы попытаться устранить временные проблемы;
  3. Проверьте статус своего Интернет-провайдера. Возможно, у них возникли проблемы в вашем районе;
  4. Проверьте настройки сети на вашем устройстве. Убедитесь, что вы правильно настроили соединение и не возникли какие-либо конфликты;
  5. Попробуйте подключиться к Интернету с другого устройства или используйте мобильный интернет в качестве резервного варианта;
  6. Если проблема не устраняется, обратитесь в службу поддержки своего провайдера для получения дальнейшей помощи и технической поддержки.

Следуя указанным выше инструкциям, вы можете найти решение проблемы с интернет-соединением и восстановить нормальную работу сети.

Основные принципы работы с Vbs скриптами включают использование командной строки, обращение к системным ресурсам и объектам, а также обработку ошибок. Vbs скрипты написаны на языке, который похож на Visual Basic и имеет синтаксис, позволяющий легко создавать структурированный и читаемый код.

Преимущества использования Vbs скриптов включают возможность автоматизации рутинных задач, выполнение операций низкого уровня, доступ к системным ресурсам и создание пользовательских интерфейсов. Vbs скрипты могут быть использованы как самостоятельные программы, так и встроены в другие приложения.

В общем, Vbs скрипты предоставляют широкий спектр возможностей для автоматизации и упрощения работы в операционной системе Windows. Они позволяют разработчикам и системным администраторам создавать эффективные и гибкие решения для решения различных задач.

Пинг и его значение

Пинг является неотъемлемой частью различных сетевых протоколов, таких как TCP/IP, и используется для проверки связи между устройствами в сети. Он позволяет определить, насколько быстро происходит передача данных между узлами и обнаружить возможные проблемы в сети.

Значение пинга измеряется в миллисекундах (мс) и показывает время, которое требуется для передачи пакета данных от отправителя к получателю и обратно. Чем меньше значение пинга, тем лучше, так как это указывает на быструю и стабильную передачу данных. Высокое значение пинга может указывать на проблемы в сети, такие как низкая пропускная способность или высокая задержка.

Пинг также используется для определения надежности соединения между устройствами и для проверки стабильности сети. Если пакеты данных пинга не достигают узла или возвращаются с большой задержкой, это может сигнализировать о проблемах в сети, таких как отключение или низкое качество сигнала.

Использование инструмента пинга позволяет администраторам сети отслеживать доступность и производительность узлов в сети, а также устранять возможные проблемы в работе сети.

Как настроить автоматическую перезагрузку роутера?

Для начала, создайте новый текстовый документ и откройте его в любом редакторе кода. Вставьте следующий код Vbs скрипта:

Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '192.168.1.1'")
If objPing.Statuscode = 0 Then
WScript.Echo "Ping successful. Router is working fine."
Else
WScript.Echo "Ping failed. Router is not responding."
Set objShell = CreateObject("WScript.Shell")
objShell.Run "shutdown -r -t 0"
End If

Далее, сохраните файл с расширением .vbs, например, reboot_router.vbs.

Теперь необходимо настроить запуск скрипта с заданной периодичностью. Это можно сделать, используя планировщик задач операционной системы Windows.

  1. Нажмите на кнопку «Пуск» и введите «Планировщик задач» в поле поиска.
  2. Откройте Планировщик задач и выберите «Создание задачи» в правой панели.
  3. Укажите имя и описание задачи, затем перейдите на вкладку «Действия».
  4. Нажмите на кнопку «Новое» и укажите путь к файлу reboot_router.vbs, который вы создали ранее.
  5. В разделе «Запуск» выберите периодичность запуска скрипта, например, каждый день или каждую неделю. Установите также время начала задачи.
  6. Нажмите «ОК» для сохранения настроек задачи.

Теперь скрипт будет запускаться автоматически с заданной периодичностью. В случае, если роутер перестанет отвечать на пинг, скрипт перезагрузит его.

Важно учесть, что для успешной работы скрипта необходимо заменить IP-адрес ‘192.168.1.1’ на IP-адрес вашего роутера.

Преимущества использования Vbs скрипта

Использование Vbs скрипта для автоматической перезагрузки роутера при отсутствии пинга имеет несколько преимуществ:

1. Автоматизация процесса: Vbs скрипт позволяет автоматически перезагружать роутер без необходимости ручного вмешательства. Таким образом, можно сэкономить время и усилия на выполнение повторяющихся действий.

2. Увеличение надежности сети: Периодическая перезагрузка роутера может помочь устранить временные сбои и проблемы соединения. В случае отсутствия пинга, автоматическая перезагрузка роутера может быть полезным средством для восстановления соединения и повышения надежности сети.

3. Гибкость настройки: Vbs скрипт позволяет легко настроить параметры перезагрузки, такие как интервал между попытками, количество попыток и другие. Это дает возможность индивидуально настроить скрипт под конкретные условия и требования пользователя.

4. Обратная связь: Vbs скрипт может предоставить информацию о выполнении команды перезагрузки роутера, например, вывод сообщений или запись в лог-файл. Это позволяет отслеживать и контролировать работу скрипта и быть в курсе происходящих изменений.

5. Легкость в использовании: По сравнению с другими языками программирования, такими как C++ или Python, Vbs скрипт относительно прост в изучении и использовании. Он использует понятный и интуитивно понятный синтаксис, что делает его доступным для широкого круга пользователей.

Все эти преимущества делают использование Vbs скрипта для автоматической перезагрузки роутера при отсутствии пинга эффективным и удобным инструментом для поддержания стабильного и надежного подключения к Интернету.

Другие наши интересноые статьи:

  • Слабая защита вай фай роутера
  • Скорость через роутер сильно упала
  • Слабая защита wifi как исправить роутер
  • Скорость роутера asus rt n10
  • Скорость через роутер выше чем напрямую

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии