Дома, как, как и у многих, интернет раздает роутер.
Купленный в свое время 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-соединение оставалось подключено. Роутер не мог понять, что надо переподключится. Приходилось каждый раз вручную делать перезагрузку роутера, согласитесь, это долгий и утомительный процесс.
Я покопался в интернете, оказалось я такой не один и проблема довольно масштабна среди “роутороводов”. Наши провайдеры не особо жалуют пользователей с роутерами, в большинстве случаев после ответа на вопрос “какая у вас операционная система” суппорт умолкает.
Я не задавался и продолжал искать, но нигде не было универсального решения данной проблемы. Тогда я подумал, мой роутер основан на 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 с прошивкой от Олега.
По сути это уже полнофункционал ьный линукс, 
Советую посетить этот форум. (Ахтунг, там есть проблема с кодировкой нужно поставить Кириллицу Windows-1254)
http://wl500g.info/forumdisplay.php?f=86
Игорь 01.11.2010 13:48
Спасибо, получается, что роутер D-Link превращается в ASUS 
Илья 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 запросе проверяет:
- Http basic авторизацию.
- User-Agent браузера.
- Корректное поле рефер, которое всегда будет просто 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.

Она перешивается в среде 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 для указания времени ожидания ответа роутера.
Содержание
- Автоматическая перезагрузка роутера при отсутствии пинга
- Проблемы с интернет-соединением?
- Что такое Vbs скрипт?
- Пинг и его значение
- Как настроить автоматическую перезагрузку роутера?
- Преимущества использования 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
Вывод
Автоматическая перезагрузка роутера при отсутствии пинга может быть полезным инструментом для поддержания стабильного соединения в домашней сети. Воспользуйтесь данной возможностью, если вы сталкиваетесь с частыми проблемами сети или просто хотите быть уверены в стабильности соединения.
Проблемы с интернет-соединением?
Отсутствие доступа к Интернету может быть серьезной проблемой и вызывать неудобства. Если вы испытываете проблемы с интернет-соединением, рекомендуется следующее:
- Проверьте, правильно ли подключен ваш роутер и имеются ли подключения всех необходимых кабелей;
- Перезагрузите роутер, чтобы попытаться устранить временные проблемы;
- Проверьте статус своего Интернет-провайдера. Возможно, у них возникли проблемы в вашем районе;
- Проверьте настройки сети на вашем устройстве. Убедитесь, что вы правильно настроили соединение и не возникли какие-либо конфликты;
- Попробуйте подключиться к Интернету с другого устройства или используйте мобильный интернет в качестве резервного варианта;
- Если проблема не устраняется, обратитесь в службу поддержки своего провайдера для получения дальнейшей помощи и технической поддержки.
Следуя указанным выше инструкциям, вы можете найти решение проблемы с интернет-соединением и восстановить нормальную работу сети.
Основные принципы работы с 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.
- Нажмите на кнопку «Пуск» и введите «Планировщик задач» в поле поиска.
- Откройте Планировщик задач и выберите «Создание задачи» в правой панели.
- Укажите имя и описание задачи, затем перейдите на вкладку «Действия».
- Нажмите на кнопку «Новое» и укажите путь к файлу reboot_router.vbs, который вы создали ранее.
- В разделе «Запуск» выберите периодичность запуска скрипта, например, каждый день или каждую неделю. Установите также время начала задачи.
- Нажмите «ОК» для сохранения настроек задачи.
Теперь скрипт будет запускаться автоматически с заданной периодичностью. В случае, если роутер перестанет отвечать на пинг, скрипт перезагрузит его.
Важно учесть, что для успешной работы скрипта необходимо заменить IP-адрес ‘192.168.1.1’ на IP-адрес вашего роутера.
Преимущества использования Vbs скрипта
Использование Vbs скрипта для автоматической перезагрузки роутера при отсутствии пинга имеет несколько преимуществ:
1. Автоматизация процесса: Vbs скрипт позволяет автоматически перезагружать роутер без необходимости ручного вмешательства. Таким образом, можно сэкономить время и усилия на выполнение повторяющихся действий.
2. Увеличение надежности сети: Периодическая перезагрузка роутера может помочь устранить временные сбои и проблемы соединения. В случае отсутствия пинга, автоматическая перезагрузка роутера может быть полезным средством для восстановления соединения и повышения надежности сети.
3. Гибкость настройки: Vbs скрипт позволяет легко настроить параметры перезагрузки, такие как интервал между попытками, количество попыток и другие. Это дает возможность индивидуально настроить скрипт под конкретные условия и требования пользователя.
4. Обратная связь: Vbs скрипт может предоставить информацию о выполнении команды перезагрузки роутера, например, вывод сообщений или запись в лог-файл. Это позволяет отслеживать и контролировать работу скрипта и быть в курсе происходящих изменений.
5. Легкость в использовании: По сравнению с другими языками программирования, такими как C++ или Python, Vbs скрипт относительно прост в изучении и использовании. Он использует понятный и интуитивно понятный синтаксис, что делает его доступным для широкого круга пользователей.
Все эти преимущества делают использование Vbs скрипта для автоматической перезагрузки роутера при отсутствии пинга эффективным и удобным инструментом для поддержания стабильного и надежного подключения к Интернету.

