Запуск скрипта в MikroTik по будням

Автоматизация при помощи встроенного скриптового языка и RouterOS API
ch56rus
Сообщения: 3
Зарегистрирован: 29 мар 2022, 06:43
Откуда: Orenburg

Запуск скрипта в MikroTik по будням

Сообщение ch56rus »

Здравствуйте, у кого нибудь был опыт написания скрипта который должен отрабатывать только в будние дни?
нужно чтобы при запуске скрипта проверялся текущий день недели, если это будний день то выполнялась команда включения порта Ether1
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Здравствуйте.

Скрипт должен выполняться в любой момент или по расписанию?
ch56rus
Сообщения: 3
Зарегистрирован: 29 мар 2022, 06:43
Откуда: Orenburg

Re: Запуск скрипта в MikroTik по будням

Сообщение ch56rus »

По расписанию будет вызываться выполнение скрипта
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Создаёте скрипт, потом пять записей в Scheduler для пяти будних дней подряд и запуском с интервалом в 7 дней, в поле скрипта указываете имя вашего скрипта.
ch56rus
Сообщения: 3
Зарегистрирован: 29 мар 2022, 06:43
Откуда: Orenburg

Re: Запуск скрипта в MikroTik по будням

Сообщение ch56rus »

Как вариант, думаю подойдёт, спасибо за информацию
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Запуск скрипта в MikroTik по будням

Сообщение Sir_Prikol »

Получаем день недели, ну а потом играем как хотим :)

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

:local date [/system clock get date]

# Math Calculation here
:local result ""
:local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"]
:local monthtbl [:toarray "0,3,3,6,1,4,6,2,5,0,3,5"]
:local daytbl [:toarray "sun,mon,tue,wed,thu,fri,sat"]

:local month [:pick $date 0 3]
:local day [:pick $date 4 6]
:local dayc [:pick $date 5 6]
:local century [:pick $date 7 9]
:local year [:pick $date 9 11]
:local yearc [:pick $date 10 11]

# if the first char is a 0 (zero) only read last char, else script fails
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}
:if ([:pick $date 9 10] = 0) do=[:set year ($yearc)]

:local sum 0
:set sum ($sum + (2 * (3 - ($century - (($century / 4) * 4)))))
:set sum ($sum + ($year / 4))
:set sum ($sum + $year + $day)
:for mindex from=0 to=[:len $months] do={
  :if ([:pick $months $mindex] = $month) do={:set sum ($sum + [:pick $monthtbl $mindex]) }
}
:set sum ($sum - (($sum / 7) * 7))
:set result [:pick $daytbl $sum]

# END Math Calculation

:put ([:pick $date 0 3] . "/" . [:pick $date 4 6] . "/" . [:pick $date 7 9] . [:pick $date 9 11] . " is on a " . $result)
Последний раз редактировалось Sir_Prikol 18 апр 2022, 19:08, всего редактировалось 1 раз.
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Это та самая тяжёлая артиллерия, которой я всячески старался избежать :)
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Запуск скрипта в MikroTik по будням

Сообщение Sir_Prikol »

Вот тут я соглашусь :) Но... Оставим для потомков :)
Дома: CCR2004 (7-ISP(GPON)белый IP)
poofeg
Сообщения: 1
Зарегистрирован: 28 май 2022, 23:19
Откуда: Санкт-Петербург

Re: Запуск скрипта в MikroTik по будням

Сообщение poofeg »

Проще всего заранее сгенерировать файл с выходными днями и проверять по нему:

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

# получаем сегодняшнюю дату
:local date [/system clock get date]
# читаем файл holidays.txt и приводим его к массиву
:local hdays [:toarray [/file get [/file find name=holidays.txt] contents]]
# проверяем, есть ли сегодняшняя дата в массиве
:local isWork ([:typeof [:find $hdays $date -1]] = "nil")
:if ($isWork) do={
    # здесь запускаемый код
}
Файл holidays.txt для разных стран можно скачать тут: https://poofeg.ru/2022/05/запуск-скрипт ... обновлени/
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Интересная идея :) Но размер файла для России - 4091 байт. Если размер превысит 4096 байт - /file get contents "вдруг" перестанет работать - не нашёл упоминания об этом нигде в статье или на гитхабе...

UPD: А, всё-таки нашёл, он генерирует именно до 4096 :)
Cyr
Сообщения: 4
Зарегистрирован: 23 сен 2024, 11:35

Re: Запуск скрипта в MikroTik по будням

Сообщение Cyr »

А можно в скрипте по одной известной дате понедельника выяснить: является ли текущая дата буднями путём остатка от вычитания и деления на 7?
день недели = Остаток (('текущая дата'-'известная дата понедельника')/7)
И если он меньше 5, то это рабочая дата и запускаем скрипт.
Я к сожалению не знаю язык микротика.
Последний раз редактировалось Cyr 23 сен 2024, 12:18, всего редактировалось 1 раз.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Типа такого?

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

:local daynum ([:tonum [:totime [/system/clock/get date]]] / 24 / 3600);
:put ($daynum - ($daynum / 7) * 7)
0 - четверг (как и 1 января 1970 г.)
1 - пятница
2 - суббота
3 - воскресеньне
4 - понедельник
5 - вторник
6 - среда
Cyr
Сообщения: 4
Зарегистрирован: 23 сен 2024, 11:35

Re: Запуск скрипта в MikroTik по будням

Сообщение Cyr »

Chupaka писал(а): 23 сен 2024, 12:16 Типа такого?

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

:local daynum ([:tonum [:totime [/system/clock/get date]]] / 24 / 3600);
Нет, просто вычесть из текущей даты дату '23.09.2024' (ближайший понедельник). Или даты нельзя вычитать? Если нельзя, то привести к тому, чтобы понедельник был 0 (или 1). И запускать скрипт если день недели меньше 5 (или 6).
И эта строка не срабатывает.
Cyr
Сообщения: 4
Зарегистрирован: 23 сен 2024, 11:35

Re: Запуск скрипта в MikroTik по будням

Сообщение Cyr »

poofeg писал(а): 28 май 2022, 23:25 Проще всего заранее сгенерировать файл с выходными днями и проверять по нему:
А тогда может лучше грузить файл в память (глобальную переменную hdays) при включении/перезагрузке микротика?
А потом только ежедневно проверять наличие даты в переменной hdays.
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Cyr писал(а): 23 сен 2024, 12:22 И эта строка не срабатывает.
Я её тестировал на http://demo.mt.lv - официальном демо-роутере %) Проверил вот сейчас на домашнем - показывает. Что именно не срабатывает?
Cyr
Сообщения: 4
Зарегистрирован: 23 сен 2024, 11:35

Re: Запуск скрипта в MikroTik по будням

Сообщение Cyr »

Chupaka писал(а): 26 сен 2024, 01:24 Я её тестировал на http://demo.mt.lv - официальном демо-роутере %) Проверил вот сейчас на домашнем - показывает. Что именно не срабатывает?
ошибка expected command name (line 1 column 41)
Аватара пользователя
Chupaka
Сообщения: 4084
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Запуск скрипта в MikroTik по будням

Сообщение Chupaka »

Это разделительный слэш в "system/clock". Может, RouterOS шестой версии? Такой формат понимает только седьмая. У меня под рукой шестой нет, чтобы проверить.