Подъем LTE (Пропадает связь)

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Aleksey.aleksey
Сообщения: 36
Зарегистрирован: 03 сен 2018, 11:39

В общем друзья, всем привет :-):
Я уже не первый день знаком с RouterOS но по прежнему слабоват в написании скриптов
Имею в распоряжении пару точек WAP_LTE_Kit
И как зачастую бывает, оператор может отпасть в самый не подходящий момент, помогает только как правило либо "/system reboot" либо "down\up"
Так же справляется с этим делом Watchdog но я не вижу в этом преимущества, т.к. постоянно дёргать по питанию голову, не очень хочется
На просторах мировой сети не нашел то что мне нужно, нашел лишь частички кода, немного пересобрал его и вот что у меня получилось

Код: Выделить всё

:local PingCount 30;
:local One 8.8.8.8;
:local ResultOne [/ping count=$PingCount $One interface=lte1];
:local Uptime [/system resource get uptime];
:if ($ResultOne=0 && $Uptime>00:02:00) do={/system routerboard usb power-reset duration=3s};
Что мы имеем?
:local PingCount 30; Данным условием мы задаем кол-во повторений которые отправит наш Микротик на узел 8.8.8.8 (можете сменить пингуемый узел) "30" задано не случайно! т.к. временной промежуток у меня задать не получилось, то я решил обыграть это кол-вом запросов! т.е. 1 запрос это условно 1 сек. в итоге получаем 30 запросов - 30 сек.
Почему? потому что если связь не поднимается в течении 30 сек. то скрипт отрабатывает, а если приходит на 1 из запросов "1" а не "0" значит коннект есть и выполнение дальнейшее скрипта невозможно по условиям.
:local One 8.8.8.8; Собственно сам пингуемый узел (можете сменить на произвольный,свой)
:local ResultOne [/ping count=$PingCount $One interface=lte1]; указывает что и куда пинговать
:local Uptime [/system resource get uptime]; Получаем uptime время которое работает устройство
:if ($ResultOne=0 && $Uptime>00:02:00) do={/system routerboard usb power-reset duration=3s}; - Это условие, при котором сработает следующий скрипт, указанный в фигурных скобках

Данный скрипт поставлен у меня на выполнение в шедуллере на каждые 1:30 Мин.
Временной интервал можете поставить удобный для вас.
Обкатал его вот уже месяц, и скажу он реально меня выручает!
КОМРАДЫ, поправьте меня если где - то соврал, всем спасибо и бобра :-):


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Комрад, зачем пинговать 30 раз !?. Ну пингуй раз 3-5 и задержку ставь и опять пингуй если хочешь несколько раз в течении какого-то времени проверить. А ещё неплохо бы добавить проверку того, что lte интерфейс уже появился после перезагрузки, что он запущен и что модем поймал сигнал и какой его уровень, а уж потом запускать проверку пингами. Вот тебе пример того, как чел. делает это с двухсимовым модемом (см. ниже под катом).
И дергать питание USB при потере сигнала модемом вовсе сразу ни к чему. Во-первых модем сам его найдет и связь появится. Во-вторых если хочется процесс ускорить можно сначала передернуть интерфейс (disable/enable) после чего модем инициализируется и начинает активный поиск оператора, а во-вторых если он не может выйти на связь потому что у Вас на счету нет денег - а вы всё время дергаете питание USB - какая в этом польза ? Проверить баланс скриптом дело, конечно, доступное не для каждого оператора (и модема), но перезагружать всё время роутер не стоит. Лучше сделать проверку того, что если после USB-reset связь не появилась, то можно перезагрузить роутер, а уж если и после этого нет, то перестать проверять и сообщить админу (если есть резервный канал) или хоть в лог информировать.

 пример
{
:global initTimeout 60
:global connectTimeout 60
:global minimumSignalLevel -99

:global switchSIM do={
:local simSlot [/system routerboard sim get sim-slot]
:if ($simSlot="down") do={
:log info message="Switching to \"up\" sim slot (Vodafone)"
/system routerboard sim set sim-slot=up
} else={
:log info message="Switching to \"down\" sim slot (Kyivstar)"
/system routerboard sim set sim-slot=down
}
}
:global initialize do={
:global initTimeout
:local i 0
:while ($i < $initTimeout) do={
:if ([:len [/interface lte find ]] > 0) do={
:return true
}
:set $i ($i+1)
:delay 1s
}
:return false
}
:global waitConnect do={
:global connectTimeout
:local i 0
:while ($i < $connectTimeout) do={
:if ([/interface lte get [find name="lte1"] running] = true) do={
:return true
}
:set $i ($i+1)
:delay 1s
}
:return false
}
:if ([$initialize] = true) do={
:if ([$waitConnect] = true) do={
:local info [/interface lte info lte1 once as-value]
:local rssi ($info->"rssi")
:if ($rssi < $minimumSignalLevel) do={
:log info message=("Current RSSI ".$rssi." < ".$minimumSignalLevel.". Trying to switch active sim slot.")
$switchSIM
}
} else={
:log info message="GSM network is not connected. Trying to switch active sim slot."
$switchSIM
}
} else={
:log info message="LTE modem did not appear, trying power-reset"
/system routerboard usb power-reset duration=5s
}
}


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Aleksey.aleksey
Сообщения: 36
Зарегистрирован: 03 сен 2018, 11:39

Sertik писал(а): 20 сен 2019, 09:41 Комрад, зачем пинговать 30 раз !?. Ну пингуй раз 3-5 и задержку ставь и опять пингуй если хочешь несколько раз в течении какого-то времени проверить. А ещё неплохо бы добавить проверку того, что lte интерфейс уже появился после перезагрузки, что он запущен и что модем поймал сигнал и какой его уровень, а уж потом запускать проверку пингами. Вот тебе пример того, как чел. делает это с двухсимовым модемом (см. ниже под катом).
И дергать питание USB при потере сигнала модемом вовсе сразу ни к чему. Во-первых модем сам его найдет и связь появится. Во-вторых если хочется процесс ускорить можно сначала передернуть интерфейс (disable/enable) после чего модем инициализируется и начинает активный поиск оператора, а во-вторых если он не может выйти на связь потому что у Вас на счету нет денег - а вы всё время дергаете питание USB - какая в этом польза ? Проверить баланс скриптом дело, конечно, доступное не для каждого оператора (и модема), но перезагружать всё время роутер не стоит. Лучше сделать проверку того, что если после USB-reset связь не появилась, то можно перезагрузить роутер, а уж если и после этого нет, то перестать проверять и сообщить админу (если есть резервный канал) или хоть в лог информировать.

 пример
{
:global initTimeout 60
:global connectTimeout 60
:global minimumSignalLevel -99

:global switchSIM do={
:local simSlot [/system routerboard sim get sim-slot]
:if ($simSlot="down") do={
:log info message="Switching to \"up\" sim slot (Vodafone)"
/system routerboard sim set sim-slot=up
} else={
:log info message="Switching to \"down\" sim slot (Kyivstar)"
/system routerboard sim set sim-slot=down
}
}
:global initialize do={
:global initTimeout
:local i 0
:while ($i < $initTimeout) do={
:if ([:len [/interface lte find ]] > 0) do={
:return true
}
:set $i ($i+1)
:delay 1s
}
:return false
}
:global waitConnect do={
:global connectTimeout
:local i 0
:while ($i < $connectTimeout) do={
:if ([/interface lte get [find name="lte1"] running] = true) do={
:return true
}
:set $i ($i+1)
:delay 1s
}
:return false
}
:if ([$initialize] = true) do={
:if ([$waitConnect] = true) do={
:local info [/interface lte info lte1 once as-value]
:local rssi ($info->"rssi")
:if ($rssi < $minimumSignalLevel) do={
:log info message=("Current RSSI ".$rssi." < ".$minimumSignalLevel.". Trying to switch active sim slot.")
$switchSIM
}
} else={
:log info message="GSM network is not connected. Trying to switch active sim slot."
$switchSIM
}
} else={
:log info message="LTE modem did not appear, trying power-reset"
/system routerboard usb power-reset duration=5s
}
}
Собственно я изначально и указал, что опыт со скриптами скромен.... Логику выстроить бы смог, но не более
С Вами солидарен на 100500% Просто хотел помочь, таким же мученикам как я :-):
Спасибо! Присмотрюсь к вашему скрипту! :co_ol:
P.s. Еще бывает часто так что, в 4G нет сигнала, при переходе на 3G есть, хотя зона покрытия уверенная!
По истечению какого то времени коннект в 4G возвращается....


SunCho
Сообщения: 5
Зарегистрирован: 23 дек 2019, 23:52

сижу на yota с usb lte свистком в hap ac lite
здесь только первый скрипт будет работать, т.к lte "не встроенный"
и уже довольно часто находил обоих в состоянии - yota.ru пингуется, а на интерфейсе у нас трафика 3kb\s и ничерта не работает, и аптайм часов 80 и туннель подняться не может :(
правда дергал вачдогом а не таким скриптом


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Чудило, смотри трафик на интерфейсе скриптом, если меньше чем нужно тоже USB-резет


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
SunCho
Сообщения: 5
Зарегистрирован: 23 дек 2019, 23:52

Sertik писал(а): 24 дек 2019, 12:08 Чудило, смотри трафик на интерфейсе скриптом, если меньше чем нужно тоже USB-резет
Я кажется тебя не оскорблял, чудило
Если такой дохера умный, чо же у нас будет если никто трафик не шлет? по циклу ресет порта?
Здесь форум, здесь задают вопросы и отвечают, если скрипт примером не даешь, а только повыеживаться вышел, то кмк, таким чудилам как ты место в школе


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

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

Ну а по алгоритму, зачем питание на USB сразу ресетить. Надо некоторое время "понаблюдать" скриптом за трафиком, а потом решить когда пора USB-грохнуть ... И пинговать нужно не только провайдера своего, а еще несколько (желательно) адресов, всегда доступных в Инет (гугл, яндекс и т.п).

Вот тебе для примера бесплатно от Васильева Кирилла (тренера Микротик) его всем известный скрипт lte-auto. Поучись.

https://mikrotik.me/blog-dostupnost-int ... z-LTE.html


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Прошу всех в рамки. И одного и второго. А уж от содержания жалобы я в осадок выпал. :-)
Всех с Наступающим Новым Годом!


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Вот уж не думал что у нас ещё и жалобщики завелись.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить