Автоматизированное включение компа с микротика по рабочим дням

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Автоматизированное включение компа с микротика по рабочим дням

Сообщение sasha300 »

Приветствую!
Есть рабочий комп у которого в биосе нет включения по расписанию, но есть Wake on LAN. Нужно, чтобы комп включался в 9:45 кроме выходных.
В шедуллере прописал:

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

:global day 
:if ($day < 7) do={
:if ($day > 5) do={
:set $day ($day + 1);
} else={
:tool wol interface=ether2-master mac=xx:xx:xx:xx:xx:xx
/log warning "Start DQ67SW"
:set $day ($day + 1)
}
} else={
:set $day "1"
}
Но при сбросе питания глобальная переменная исчезнет, и чтобы правильно указать день недели нужно лезть во вкладку "Envilopment" и ставить значение в ручную, что не айс:
2016-06-03_132221.jpg
Есть ли идеи, чтобы даже при сбросе питания мне не приходилось ставить глобальную переменную?
p.s.: в идеале как прикрутить производственный календарь, чтобы комп включался исключительно по рабочим дням?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Chupaka
Сообщения: 3081
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение Chupaka »

вот тут с 2009 года лежит скрипт вычисления дня недели - можно отталкиваться от него

после перезагрузки дата/время не сбиваются?
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение sasha300 »

после перезагрузки дата/время не сбиваются?
Нет, а должны? ;)
вот тут с 2009 года лежит скрипт вычисления дня недели - можно отталкиваться от него
Чуть со стула не упал, пока читал код, даже массивы туда засунули.. Т.е. это скрипт без привязки к глобальным переменным позволит мне вычислить день недели и даже если тик перезагрузиться, то скрипт успешно распознает какой сегодня день?
p.s.: просто для меня там полный аншлаг, поэтому переспрашиваю, а то чувствую, что застряну с этим кодом..
Последний раз редактировалось sasha300 04 июн 2016, 00:06, всего редактировалось 1 раз.
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение sasha300 »

Что может означать вот эта сточка в коде?

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

:local monthtbl [:toarray "0,3,3,6,1,4,6,2,5,0,3,5"]
Аватара пользователя
Chupaka
Сообщения: 3081
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение Chupaka »

эта строчка объявляет массив чисел :)
Аватара пользователя
freewood
Сообщения: 45
Зарегистрирован: 03 мар 2016, 14:47
Откуда: Зеленоград

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение freewood »

Что может означать вот эта сточка в коде?
Тоже заинтересовался. Это коэффициенты используемые в формуле "вечного календаря", их можно вычислять, а можно просто запомнить данную табличку. В тему не углублялся, но можно наверное вот тут посмотреть: https://habrahabr.ru/post/217389/
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение sasha300 »

эта строчка объявляет массив чисел
ну это понятно :)
но можно наверное вот тут посмотреть: https://habrahabr.ru/post/217389/
Обалденная статья! Даже не знал, что такое есть

[to All]
А вот эта строчка за что отвечает?

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

:set sum ($sum + (2  (3 - ($century - (($century / 4)  4)))))
в частности

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

(3 - ($century - (($century / 4)
В формуле "вечного календаря" такой форулы не нашел..
Аватара пользователя
sasha300
Сообщения: 107
Зарегистрирован: 03 мар 2016, 16:00
Откуда: Санкт-Петербург

Re: Автоматизированное включение компа с микротика по рабочим дням

Сообщение sasha300 »

Скрипт, который автоматически высчитывает какой сегодня день и если будний, то включает комп через WOL (работает через sheduler):

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

:local date [/system clock get date]

: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 ([: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]

:local workday [:toarray "mon,tue,wed,thu,fri"]
:if ($workday ~ $result) do={
:tool wol interface=ether2-master mac=xx:xx:xx:xx:xx:xx
/log warning "Start DQ67SW"
}