Маршруты в Интернет для LTE-интерфейсов роутера должны быть настроены. Скрипт это не проверяет.
Тестируйте, может где ошибся.
Вроде работает.
Ищет все LTE-интерфейсы роутера. При нахождении смотрит включен ли интерфейс, если не включен включает временно для проверки. Делаем паузу 20 сек.
Потом - тестирует пингом 8.8.8.8. Если пинг есть - всё океy. Если пинга нет - ждет статус lte-интерфейса, пока хоть какой-нибудь статус не появится.
При появлении статуса, даже если он не нормальный, всё равно опять пингуем 8.8.8.8. Если пинг есть - ОК. Если пинга опять нет - считаем что доступа в Интернет через этот lte-интерфейс нет (кончились деньги, проблемы у оператора и т.д...) и выключаем его до следующей проверки.
Повторяем всю байду с каждым, найденным lte-интерфейсом.
После работы скрипта - "живые" lte-интерфейсы включаются, если были выключены и остаются жить.
Не рабочие - отключаются.
Можно поставить в крон с нужным повторением в надежде ,что связь появится (кто-нибудь даст денег
В скрипте, возможно есть лишние проверки ..., главное чтобы работал.
Код: Выделить всё
#------------------------------------------------------------------------------------------------------
# Скрипт проверки/восстановления работоспособности LTE
# by Sertik 02/12/2021
#------------------------------------------------------------------------------------------------------
:local lteIs [:toarray ""]
:local ltenum 0
# Находим перебором все lte-интерфейсы и помещаем их имена в массив $lteIs
:foreach counter in=[/interface lte find] do={
:set ($lteIs->$ltenum) [/interface lte get $counter name];
:set $ltenum ($ltenum+1)
}
:if ([:len $lteIs]!=0) do={
:log info ""
:log warning ("Роутер "."$[/system identity get name] "."lte-модемов: "."$[:len $lteIs]")
:local ltecmd
:local Ltestatus
:local typepar "registration-status";
#:local ltenum [:len $lteIs]
:local ltename
:while ($ltenum!=0) do={
#:set $ltename ("lte"."$[:tostr $ltenum]")
:set $ltename [pick $lteIs ($ltenum-1)];: log warning ("Проверка интерфейса "."$ltename "."....")
:if ([/interface lte get $ltename disabled]) do={:log warning "Lte-интерфейс $ltename был отключен. Включаем его для проверки ..."; [/interface lte enable $ltename];
:log warning "Lte-интерфейс $ltename включен. Ожидаем инициализацию модема ..."; :delay 20s;}
:if ([/ping 8.8.8.8 interface=$ltename count=5]>2) do={:log info "Модем активен и подключен. Есть выход в Интернет через $ltename"; :set $ltenum ($ltenum-1);}
:if ([/ping 8.8.8.8 interface=$ltename count=5]=0) do={
:if (![/interface lte get $ltename disabled]) do={
# get Lte modem status
:set ltecmd [/interface lte info $ltename once as-value]
:set Ltestatus ($ltecmd->$typepar);
:do {:delay 1s; :set Ltestatus ([/interface lte info $ltename once as-value]->"$typepar")} while=([:len ([/interface lte info $ltename once as-value]->"$typepar")]=0)
:if (($Ltestatus="registered") && ([/ping 8.8.8.8 interface=$ltename count=5]>2)) do={:log warning "Появление доступа в интернет через $ltename"} else={
:if (($Ltestatus="registered") or ($Ltestatus="unknown") or ($Ltestatus="not searching") or ($Ltestatus="denied")) do={
:log error "Lte интерфейс $ltename активен, но не пингует 8.8.8.8 - отключаем его ...."
:if ([/ping 8.8.8.8 interface=$ltename count=5]>2) do={:log warning "Появление доступа в Интернет на интерфейсе $ltename. Оставлен включенным"} else={
[/interface lte disable $ltename];}
:log info "Скрипт отключил интефейс $ltename"} else={:log warning "Lte интерфейс $ltename активен, его статус не определён, возможно идёт настройка соединения ... ";}
}
} else={log info "Lte интерфейс $ltename в системе отключен"}
:set $ltenum ($ltenum-1);}
}
} else={:log warning "LTE-интерфейсы не найдены"}
:log warning "Проверка LTE-интерфейсов окончена"