Привет, я ищу способ включать радио в 8 утра и отключать в 10 вечера каждый день. Как я понял, нужен один скрипт, чтобы выключать радио, и другой — чтобы включать обратно. Мне нужно расписание для этих скриптов. Я вообще не умею писать скрипты, нашёл вот это http://forum.mikrotik.com/t/create-schedule-for-wifi/29291/1, но там только отключается интерфейс, а мне нужно именно выключать передатчик/радио. Спасибо.
Была задача настроить беспроводной радиомодуль на RB751U так, чтобы он включался и выключался в определённое время. Например, включался только в рабочие часы (07:00 - 17:00). Самое простое решение — использовать планировщик для включения и отключения радио в нужное время. Однако, если роутер будет выключен ночью, а включиться уже после времени включения 07:00, событие включения по расписанию просто не сработает, и радио останется выключенным. Этот скрипт проверяет с нужным пользователю интервалом, должен ли радио быть включён или выключен, и устанавливает состояние соответственно. Его можно адаптировать, например, для включения и отключения 3G-модема WAN, если нужно, чтобы роутер имел активное интернет-соединение только в определённые часы.
# Скрипт для управления включением и выключением беспроводного радиомодуля # # в выбранные пользователем интервалы времени # # Включение и выключение радио не будет выполнено, если системное время # # не синхронизировано с локальным, если только это не требуется # # Помните, что после перезагрузки роутер сбрасывает время на заводское # # Запускайте этот скрипт по расписанию с нужным интервалом # # Автор Peter James, 2012-07-19 # # Тестировался на RB751U и RouterOS v5.19 #
##################################### ## Установите время включения и выключения радио здесь ## :local RadioOnTime "07:00"; :local RadioOffTime "17:00";
# Установите "no", если часы устанавливаются вручную после каждой перезагрузки # # Установите "yes", если время синхронизируется через NTP-клиент # :local UseNTPClientStatus "yes"; #####################################
:log info "Запуск скрипта RadioOnOff"; # Получаем имя интерфейса wlan радио # :local RadioName [/interface get [find type=wlan] name]; :log info "Имя радио = $RadioName";
# Проверяем, синхронизированы ли часы системы с локальным временем # :local NTPSyncState [/system ntp client get status]; :log info "Статус NTP-клиента = $NTPSyncState";
# Не выполняем включение или выключение радио, если текущее реальное время неизвестно, если это не требуется # :if (($NTPSyncState="synchronized") or ($UseNTPClientStatus="no")) do {
:local CurrentTime [/system clock get time]; :log info "Текущее время = $CurrentTime";
# Проверяем текущий статус включения радио # :local RadioDisabled [/interface get $RadioName disabled]; :log info "Радио отключено = $RadioDisabled";
# Если время включения раньше времени выключения # :if ($RadioOnTime < $RadioOffTime) do {
# Радио должно быть включено между этими временами # :if (($CurrentTime > $RadioOnTime) and ($CurrentTime < $RadioOffTime)) do {
if ($RadioDisabled=true) do { :log info "Радио было OFF, теперь включаем"; /interface enable $RadioName; } } else {
if ($RadioDisabled=false) do { :log info "Радио было ON, теперь выключаем"; /interface disable $RadioName; }
}
}
# Если время включения позже времени выключения # :if ($RadioOnTime > $RadioOffTime) do {
# Радио должно быть выключено между этими временами # :if (($CurrentTime < $RadioOnTime) and ($CurrentTime > $RadioOffTime)) do {
if ($RadioDisabled=false) do { :log info "Радио было ON, теперь выключаем"; /interface disable $RadioName; } } else {
if ($RadioDisabled=true) do { :log info "Радио было OFF, теперь включаем"; /interface enable $RadioName; }
}
}
} else {
:log info "Часы системы могут не быть синхронизированы с локальным временем, операция невозможна";
Я попробовал это, но не работает. В логах появляется “Radio name = wlan1”, и больше ничего. Нужно ли ставить какие-то пакеты, чтобы это заработало? Моя версия 5.14, а оборудование — RB411U.
Скрипт Base122 тестировался на версии v5.19… возможно, в этом и проблема, а может и нет. Иногда синтаксис меняется между версиями. Я заметил, что следующая строка выдаёт ошибку у меня на v5.22, потому что опции «status» не существует (на вики про неё нет информации). Интересно, не используется ли отдельный пакет NTP вместо стандартного SNTP? :local NTPSyncState [/system ntp client get status]; Я бы сделал так: обернул весь скрипт в фигурные скобки { }, а потом вставил в терминал. Тогда видно, где ошибка, и с чего начинать исправлять.
Возможно, стоит проверить, больше ли значение last-bad-packet-before, чем last-update-before. Если да, значит успешное обновление было недавно, а ошибка — раньше, и можно считать, что с временем всё в порядке. Также я бы проверил, чтобы last-update-before не был старше разумного периода (например, 24 часов).
Я протестировал все решения из этого поста на версии 5.25 для отключения/включения WLAN, но при этом проводное соединение тоже падает. Есть идеи? Спасибо.
У меня есть RB951G с RouterOS 6.2, и я пытался запустить этот скрипт. Получаю следующую ошибку скрипта: недостаточно прав (9). Я проверил права пользователя, и вроде у меня полный администраторский доступ. Буду очень признателен за любую помощь, спасибо.
Я прохожу через определённый этап обучения. RoS 6.21.1 тоже не поддерживает опцию «status», но когда я запускаю \system ntp client print, он показывает следующую информацию: enabled: yes mode: unicast primary-ntp: 146.64.24.58 secondary-ntp: 146.64.28.1 dynamic-servers: status: synchronized Как можно написать скрипт, чтобы проверить, синхронизировано ли время NTP? Спасибо.
Спасибо за ответ. Если посмотреть на предыдущий скрипт, то, насколько я понимаю, он просто проверяет, сообщается ли о синхронизации. То есть Base122 использовал следующий код для проверки статуса синхронизации [/system ntp client get status]; но, похоже, опция status теперь куда-то пропала, хотя отчет о статусе всё равно выводится. Если выполнить :system ntp client print; то можно увидеть статус NTP-клиента, в котором есть строчка – status: synchronised.
Когда я использую команду :local NTPSyncState [/system ntp client get status]; :log info “NTPSyncState = $NTPSyncState” в логе я вижу только NTPSyncState =