MikroTik — автоматически выключаем и включаем WiFi в заданное время

Пишем скрипт, который будет проверять текущее время, и в соответствии с ним будет включать или выключать WiFi на MikroTik.

 

## Script to ensure wireless lan radio is ON or OFF

#########################################
## Set the Radio ON and OFF times here ##
:local RadioOnTime "6:00";
:local RadioOffTime "23:00";

## set to "no" if clock is being set manually after each reboot #
## set to "yes" if clock is being set using NTP client #
:local UseNTPClientStatus "yes";
#########################################

:local CurrentTime [/system clock get time];

## Setup log prefix
:local LogPrefix "[RadioOnOff / $CurrentTime]";

## get the name of the wlan radio interface
:local RadioName [/interface get [find type=wlan] name];
:log info "$LogPrefix Radio Name = $RadioName";

## First check if system clock has been syncronized with local time
:local NTPSyncState [/system ntp client get enabled];
#:log info "NTP Client Status (#NTPSyncState) = $NTPSyncState";

## Don't perform radio On or Off operation, if current real time is unknown, unless required
:if (($NTPSyncState=true) or ($UseNTPClientStatus="no")) do {

  ## Check current ON or OFF status of radio #
  :local RadioDisabled [/interface get $RadioName disabled];
  :log info "$LogPrefix Radio Disabled = $RadioDisabled";

  ## Where the ON time is set earlier than the OFF time #
  :if ($RadioOnTime < $RadioOffTime) do {
    ## Radio should be ON between these times #
    :if (($CurrentTime > $RadioOnTime) and ($CurrentTime < $RadioOffTime)) do {
      if ($RadioDisabled=true) do {
        :log info "$LogPrefix Radio was OFF, now switching ON";
        /interface enable $RadioName;
      }
    } else {
      if ($RadioDisabled=false) do {
        :log info "$LogPrefix Radio was ON, now switching OFF";
        /interface disable $RadioName;
      }
    }
  }

  ## Where the ON time is set later than the OFF time #
  :if ($RadioOnTime > $RadioOffTime) do {
    ## Radio should be OFF between these times #
    :if (($CurrentTime < $RadioOnTime) and ($CurrentTime > $RadioOffTime)) do {
      if ($RadioDisabled=false) do {
        :log info "$LogPrefix Radio was ON, now switching OFF";
        /interface disable $RadioName;
      }
    } else {
      if ($RadioDisabled=true) do {
        :log info "$LogPrefix Radio was OFF, now switching ON";
        /interface enable $RadioName;
      }
    }
  }
} else {
  :log info "$LogPrefix System clock may not be synchronized to local time, unable to perform operation";
}

#:log info "RadioOnOff Script completed";

Переходим в секцию System → Scripts и жмякаем на Add New. Заполняем поля следующим образом:

  • NameRadioOnOff
  • Policy[X] read, [X] write, [X] policy
  • Source[Вставить содержимое скрипта]
  • CommentScript to ensure wireless lan radio is ON or OFF

В верхней секции скрипта выставляем необходимые настройки времени (включения и выключения). Скрипт проверяет синхронизировано ли время с помощью ntp клиента. Если синхронизация времени не доступна — выстави в UseNTPClientStatus значение no.

Проверка

Для проверки запускай терминал или подключись к маршрутизатору с помощью SSH, после чего выполни:

[admin@router] > /system script run RadioOnOff
[admin@router] > /log print

И посмотри чтоб в логе всё было хорошо. Если не работает как надо — раскомментируй дополнительное логирование (#:log info "...";) в скрипте и проанализируй вывод.

Добавление задания

Для того чтоб добавить задание на периодический запуск скрипта переходим в System → Scheduler и так же нажимаем Add New. Настраиваем:

  • Enabled[X]
  • NameRadioOnOff
  • Start Date[Текущая дата, встает автоматически]
  • Start Time[Текущее время, встает автоматически]
  • Interval00:05:00
  • On Event/system script run RadioOnOff
  • Policy[X] read, [X] write, [X] policy
  • CommentScript to ensure wireless lan radio is ON or OFF

После чего подожди ~6 минут, и посмотри в логе — должны появиться соответствующие записи о том что скрипт успешно выполняется.