Как управлять состоянием lte1 в зависимости от ether1 и ether2?

Обсуждение оборудования и его настройки
Ответить
Glass
Сообщения: 7
Зарегистрирован: 06 авг 2021, 23:31

Как сделать, чтобы
если ether1 и ether2 ушли в down - выполнилась команда "/interface lte set lte1 enable=yes"
а если хотя бы один интерфейс ether1 или ether2 поднялся - "/interface lte set lte1 disable=yes"

Правильнее было бы контролировать не просто ли поднялся интерфейс на порту, а работает ли интернет на нём и только в этом случае гасить lte1, но меня устроит и такой костыль.

Роутер HEX S (RB760iGS), FW 6.46.8


[hEX S]
xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

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


Telegram: @thexvo
Glass
Сообщения: 7
Зарегистрирован: 06 авг 2021, 23:31

Как получить состояние интерфейса lte lte1 в переменную? Что-то, не получается никак. Максимум, чего я добился - это:
[admin@MikroTik] > /interface lte print
Flags: X - disabled, R - running
0 X name="lte1" mtu=1500 mac-address=XX:XX:XX:XX:XX:XX


[hEX S]
xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Что подразумевается под состоянием?

:local ltestate [/interface lte get [find where name=lte1] disabled]

:local ltestate [/interface lte get [find where name=lte1] running]


Telegram: @thexvo
Glass
Сообщения: 7
Зарегистрирован: 06 авг 2021, 23:31

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

:local ScriptName "EnableLTE"
:if ([:len [system script job find where script=$ScriptName]] > 1) do={
:log info ("$ScriptName - script still active. Termination of another execution.")
end
}
:local PingCount 3
:local google "8.8.4.4"
:local yandex "77.88.8.8"
:local almatel "195.98.160.26"
:local WAN1 false
:local WAN2 false

:local ltestate [/interface lte get [find where name=lte1] running]

:if ([/interface get [/interface find name="ether1"] running]) do={
:local ResultGoogle [/ping count=$PingCount $google interface=ether1]
:local ResultYandex [/ping count=$PingCount $yandex interface=ether1]
:set WAN1 ($ResultGoogle+$ResultYandex >= 3)
}
:if ($WAN1=false) do={
:if ([/interface get [/interface find name="ether2"] running]) do={
:local ResultAlmatel [/ping count=$PingCount $almatel interface=ether2]
:local ResultYandex [/ping count=$PingCount $yandex interface=ether2]
:set WAN2 ($ResultAlmatel+$ResultYandex >= 3)
}
}
if ($ltestate=false and $WAN1=false and $WAN2=false) do={
/interface lte set lte1 disable=no
:beep fr=880 le=1; :delay 0.5; :beep fr=440 le=1; :delay 0.2; :beep fr=220 le=1; :delay 0.1;
:log info "LTE enabled by script $ScriptName"
}
if ($ltestate=true and ($WAN1=true or $WAN2=true)) do={
/interface lte set lte1 disable=yes
:beep fr=220 le=1; :delay 0.5; :beep fr=440 le=1; :delay 0.2; :beep fr=880 le=1; :delay 0.1;
:log info "LTE disabled by script $ScriptName"
}
Скрипт запускается раз в минуту.
WAN1 - основной, "быстрый" интерфейс. WAN2 - запасной. LTE - должен просыпаться только когда в очередной раз обесточится оборудование провайдеров.
Маршруты на WAN1/WAN2 переключаются Netwatch'ем, IP 8.8.4.4 доступен только через ether1, поэтому при проверке ether2 использую другой адрес.
На всякий случай скриптом пингую по 2 разных IP.
Я не управляю маршрутами usb модема, т.к. как только я его подключил, проводной интернет отвалился.
Я решил воспользоваться этим фактом и скриптом просто включаю или выключаю lte. Больше ничего не трогаю, всё работает.
Может, это и не по фэншую, но не хочется время тратить на это.
Держать его включённым постоянно нерентабельно из-за тарифа 70₽. в сутки при условии использования.

В скрипте стоит что-то поправить?
Последний раз редактировалось Glass 22 авг 2021, 04:21, всего редактировалось 1 раз.


[hEX S]
xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Glass писал(а): 22 авг 2021, 02:18 Я не управляю маршрутами usb модема, т.к. как только я его подключил, проводной интернет отвалился.
Ну тут достаточно, чтобы дистанс у дефолтного маршрута через модем был меньше (видимо так оно и есть).

/interface lte set lte1 disabled=no
и
/interface lte set lte1 disabled=yes


Telegram: @thexvo
Glass
Сообщения: 7
Зарегистрирован: 06 авг 2021, 23:31

Понял, команду исправил. Спасибо.


[hEX S]
Glass
Сообщения: 7
Зарегистрирован: 06 авг 2021, 23:31

Как правильно отключить USB модем при перезагрузке?
При ребуте модем успевает отправить/принять пакеты и баланс за этот день уменьшается на 70₽.
Если поставить в расписание задание с запуском по startup - "/interface lte set lte1 disabled=yes" не случится так, что интерфейс ещё не успеет обнаружиться и команда не сработает?
Стоит ли добавить что-то типа /system routerboard usb power-reset duration=15s ?


[hEX S]
Ответить