Ребут IPTV-приставки посредством микротик. Умная розетка. Максимальное значение переменной?

Здесь выкладываем скрипты
Ответить
Virtue
Сообщения: 5
Зарегистрирован: 07 мар 2014, 10:17

16 янв 2020, 01:09

Подскажите, нигде не могу найти, как извлечь максимальное значение переменной. :-(
Последний раз редактировалось Virtue 17 янв 2020, 17:11, всего редактировалось 1 раз.


Sertik
Сообщения: 756
Зарегистрирован: 15 сен 2017, 09:03

17 янв 2020, 14:19

То есть ?


Чего не знаем то нагуглим
Virtue
Сообщения: 5
Зарегистрирован: 07 мар 2014, 10:17

17 янв 2020, 14:31

Sertik писал(а):
17 янв 2020, 14:19
То есть ?
насколько я понял в микротиках используется язык lua, всё что я смог накопать из этого языка для своей задачи - это математическая функция
math.max(x, ...) которая выводит максимальный из аргументов, но когда я стал пробовать ее в микротике, у меня ничего не вышло, походу он ее не понимает


Sertik
Сообщения: 756
Зарегистрирован: 15 сен 2017, 09:03

17 янв 2020, 14:40

Микротик настоящий язык Lua не понимает. У него урезанный Lua со своим синтаксисом под свои нужды. А что у Вас за задача то такая хитрая ? Зачем максимальное значение переменной в Микротике ?


Чего не знаем то нагуглим
Virtue
Сообщения: 5
Зарегистрирован: 07 мар 2014, 10:17

17 янв 2020, 14:56

Sertik писал(а):
17 янв 2020, 14:40
Микротик настоящий язык Lua не понимает. У него урезанный Lua со своим синтаксисом под свои нужды. А что у Вас за задача то такая хитрая ? Зачем максимальное значение переменной в Микротике ?
задачу я, кстате говоря, решил буквально вчера ночью :-):
могу конечно рассказать, но придется тогда с самого начала .. в общем:
у меня на работе стоит IP-tv приставка которая тарабанит и днем и ночью, но бывает иногда она зависает, и чтобы не мотаться к ней, а удаленно перезагружать ее, я собрал схему из 24вольтового реле и порта Poe-out на микротик. Сначала перезагружал ее удаленно вручную, а теперь вот написал скриптик проверки трафика на эту приставку и перезагрузки ее автоматически. Собственно для этого скрипта мне нужна была переменная с максимальным размером трафика в промежутке времени, чтобы понять работает приставка или зависла.


Sertik
Сообщения: 756
Зарегистрирован: 15 сен 2017, 09:03

17 янв 2020, 15:04

Модель реле, модель микротика и скрипт в студию ! Автору респект будет если всё хорошо. :-)


Чего не знаем то нагуглим
Virtue
Сообщения: 5
Зарегистрирован: 07 мар 2014, 10:17

17 янв 2020, 16:31

Sertik писал(а):
17 янв 2020, 15:04
Модель реле, модель микротика и скрипт в студию ! Автору респект будет если всё хорошо. :-)
Изображение

Микрот RB951Ui-2HnD собственно подойдет и любой другой с портом Poe-out.

Изображение

Реле типа my2-ns 24v dc опять же, подойдет любое реле 24 вольта (так как у приставки нагрузка маленькая).

Для соединения реле с микротом использовал обычный UTP кабель, с одного конца просто обжатый RG45, а на другом выдернул синюю и коричневую пары и подключил их к реле так, чтобы при подаче питания на реле контакты размыкались и питание на приставку прекращалось.

При написании скрипта обошелся без той злощастной переменной максимального значения и конструировал код исходя из того-что знаю, в итоге сделал:

Script1: name="proverka_tv" Скрипт проверки трафика на приставке (команды сокращены, но так, чтобы микрот их понимал):

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

 # задаём "планку" для трафика в битах
:global a 3000000;
# объявляем переменную "b" (сюда будут сниматься показания tx трафика в момент проверки)
:global b;
#  "c"= 0 (обновляемый счётчик удачных проверок (далее: щ.у.п.))
:global c 0;
# объявляем "d" (счётчик неудачных тестов (далее: с.н.т.) для активации перезагрузки)
:global d;
# задаем цикл проверок (решил сделать 10 проверок с интервалом 1 сек, т.к. приставка подгружает трафик порциями примерно раз в 10 сек)
:for x from=1 to=10 do={
/interface monitor-traffic ether5_TV once do={
:global b $("tx-bits-per-second")};
# если трафик превышает планку - то всё норм, в щ.у.п. пишем +1
if ($a <  $b) do={
:global c ($c+1)};
:delay 1;};
# если щ.у.п. не равен 0, то всё ок, в с.н.т. пишем 0, в противном случае +1
if ($c!=0) do={
:global d 0} else={
:global d ($d+1);
# при с.н.т. ниже 3 повторяем тест, в противном случае вносим запись в лог и ребутаем приставку
if ($d<3) do={
:delay 10;
/sy scr ru proverka_tv} else={
:l w message=reboot_TV;
/sy scr ru reboot_TV}}; 
Script2: name="reboot_TV" В отдельный скрипт вынес пару строк для перезагрузки IPTV-приставки:

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

 /in et po s poe-out=forced-on numbers=ether5_TV
:delay 10
/in et po s poe-out=off numbers=ether5_TV 
И собственно внёс запись в шедулер с интервалом в 15 мин, с запуском при старте системы (Start time=startup), добавив минуту на всякий случай:

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

 :delay 60;
/sy scr ru proverka_tv 
Вроде бы и всё :du_ma_et:


Ответить