LED индикация Internet для Mikrotik

Уже несколько лет пользуюсь роутером MikroTik Chateau LTE12. Устройство хорошее, но не идеальное. Одним из спорных моментов, как мне кажется, является решение производителя не размещать отдельный светодиод наличия доступа в Интернет на лицевой панели, как делают многие другие производители. Да, на корпусе роутера есть индикация уровня сигнала LTE, но SINR может быть отличным, а Интернет при этом может отсутствовать.

К счастью, возможности роутера позволяют переназначить функционал светодиодов и можно реализовать светодиод, отображающий наличие Интернета, в том числе, с учетом использования сразу двух модемов (внешнего и внутреннего) следующим образом:

  • если “Интернет” доступен через оба модема, то светодиод светится непрерывно;
  • если “Интернет” доступен только на одном из модемов, то светодиод промаргивает;
  • если оба модема не видят “Интернет”, то светодиод выключен.

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

Суть скрипта проста: проверяем пинг до заданного IP адреса через оба интерфейса (количество проверок указывается через параметр PingCount) и далее смотрим на результат. В качестве IP адреса в скрипте используется публичный DNS сервер Яндекса.

В примере используется два интерфейса: lte1 – встроенный модем, lte3 – внешний модем.

Светодиод для индикации (параметр LedNum) в скрипте это крайний правый в группе светодиодов уровня сигнала: led5.

Для управления светодиодами через скрипт используется поле type, которое устанавливается в положение on или off в зависимости от того, горит светодиод или нет.

Мигание реализовано через цикл отключения и включения светодиода. Тело цикла в скрипте занимает 1 секунду (500 мс светодиод включен, 500 мс светодиод выключен), поэтому 5 морганий занимает в итоге 5 секунд.

Добавить скрипт удобнее всего через Winbox: System -> Scripts

Добавление скрипта через Winbox

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

Собственно сам скрипт

:local PingCount 2
:local LedNum led5
:local RemoteIp 77.88.8.1

:local isp1 [/ping $RemoteIp count=$PingCount interface="lte1"]
:local isp2 [/ping $RemoteIp count=$PingCount interface="lte3"]

/system leds set [find where leds=$LedNum] disabled=no

# Если оба IP доступны
:if (($isp1 >= $PingCount) && ($isp2 >= $PingCount)) do={
    /system leds set [find where leds=$LedNum] type=on
} else={
    # Если оба IP недоступны
    :if (($isp1 < 1) && ($isp2 < 1)) do={
        /system leds set [find where leds=$LedNum] type=on
    } else={
        # Если доступен только один IP, светодиод мигает
        :for i from=1 to=5 do={
            /system leds set [find where leds=$LedNum] type=on
            :delay 500ms
            /system leds set [find where leds=$LedNum] type=off
            :delay 500ms
        }
        /system leds set [find where leds=$LedNum] type=off
    }
}

Сохраняем и добавляем скрипт в планировщик: System -> Scheduler, указав интервал запуска и его имя.

Добавление скрипта в планировщик

В моем примере скрипт запускается каждые 10 секунд. Поэтому при недоступности целевого IP адреса на одном из модемов светодиод будет мигать 5 секунд, а далее около 5 секунд находиться в выключенном состоянии.

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

А это пока все. Надеюсь заметка была полезной.