Страница 1 из 1

родительский контроль

Добавлено: 26 июн 2019, 12:04
zon2004
Добрый день.
Подскажите пожалуйста. Пытаюсь написать скрипт который бы выключал интерфейс к которому подключен TV.
Сейчас в шедулере стоит просто в 10:00 включить интерфейс и в 12:00 выключить
Но хотелось бы с 8:00 до 18:00 чтобы интерфейс работал не более трех часов в не зависимости когда включили
набросал такое

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

:global u
/interface ethernet monitor eth2-lan once do={
:set u $status
}

:if ($u = "link-ok") do={ 
WorkTime++
}

:if (WorkTime >= 180) do={ 
/interface disable eth2-lan
}
Я не могу понять как worktime будет счетчиком. Ведь я его хочу добавить в шедулер. А там он один раз запуститься и все

Re: родительский контроль

Добавлено: 26 июн 2019, 13:11
Chupaka
Добрый. Не совсем понимаю вопрос. У вас в шедулере скрипт будет выполняться каждую минуту ведь? Вот так он и будет счётчиком...

Re: родительский контроль

Добавлено: 26 июн 2019, 13:44
zon2004
Ведь скрипт запускается заново ? и WorkTime при запуске не равен 0 ? Или микротик будет всегда хранить в памяти эту переменную ?
Тогда ее надо сбрасывать ?

Re: родительский контроль

Добавлено: 26 июн 2019, 14:02
Chupaka
М-м-м, по диагонали пробежался, не заметил, что у вас это разные переменные.

global-переменные хранятся на роутере между запусками скрипта, посмотреть можно в System -> Scripts -> Environment. Ваша "$u" не должна быть global, объявите её как local. А вот затем ":global WorkTime;" и строку "WorkTime++" замените на ":set WorkTime ($WorkTime+1);"
Да, сбрасывать надо - например, в скрипте, который утром включает порт.

Re: родительский контроль

Добавлено: 26 июн 2019, 14:13
zon2004
Спасибо большое.
рабочий скрипт

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

:global WorkTime
:local u
/interface ethernet monitor eth2-lan once do={
:set $u $status;
}

:if ($u = "link-ok") do={ 
:set WorkTime ($WorkTime+1)
}

:if ($WorkTime >= 140) do={ 
/interface disable eth2-lan
}

Re: родительский контроль

Добавлено: 30 авг 2019, 06:30
b1gst0ne
Добрый день, чтобы не плодить темы спрошу тут ибо ситуации похожи.
Есть детская виртуальная wifi сеть, через планировщик настроил включение с 9 до 21 на 2 часа и отключение на 1 час. У интерфейса к которому подключена виртуальная сеть подключён по wifi телевизор, в момент отключения виртуального интерфейса телевизор ловит разрыв соединения из-за чего картинка замирает и приходится переключать канал или перезапускать видео. Так же было замечено ухудшение стабильности работы основного интерфейса и виртуального к концу дня. Появилась идея отключать не сам интерфейс, а отключить трафик на интерфейсе. Подскажите как через консоль отключить, а после включить весь трафик на интерфейсе?

Re: родительский контроль

Добавлено: 30 авг 2019, 10:55
Chupaka
Добрый.
Версия RouterOS какая?
Как настроен доступ — виртуальный интерфейс имеет свою подсеть или находится в бридже?

Re: родительский контроль

Добавлено: 30 авг 2019, 11:43
Sir_Prikol
zon2004 писал(а): 26 июн 2019, 14:13 Спасибо большое.
рабочий скрипт

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

:global WorkTime
:local u
/interface ethernet monitor eth2-lan once do={
:set $u $status;
}

:if ($u = "link-ok") do={ 
:set WorkTime ($WorkTime+1)
}

:if ($WorkTime >= 140) do={ 
/interface disable eth2-lan
}

Это до ближайшего ребута микротика, после ребута счётчик сбросится и время сдвинется, лучше писать в коммент состояние WorkTime и оттуда смотреть

Re: родительский контроль

Добавлено: 30 авг 2019, 12:51
b1gst0ne
Chupaka писал(а): 30 авг 2019, 10:55 Добрый.
Версия RouterOS какая?
Как настроен доступ — виртуальный интерфейс имеет свою подсеть или находится в бридже?
Версия последняя стабильная, детский wifi имеет свою подсеть и отдельный бридж.

Re: родительский контроль

Добавлено: 30 авг 2019, 13:25
Chupaka
b1gst0ne писал(а): 30 авг 2019, 12:51 детский wifi имеет свою подсеть и отдельный бридж.
Так, может, бридж выключать, а не Virtual AP? :)

Re: родительский контроль

Добавлено: 31 май 2020, 16:11
zon2004
Подскажите пожалуйста, хочу поправить скрипт род контроля, но теперь по доступности порта. :local myFunc [system telnet 192.168.2.23 80]; :put [:len $myFunc]. Хотел сделать на ответе телнета, но почему то не могу с этим ответом ничего сделать.
ответ приходит вида
Connecting to 192.168.2.23
Connected to 192.168.2.23
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
Remote closed connection: 192.168.2.23

Welcome back!

Re: родительский контроль

Добавлено: 31 май 2020, 21:18
Chupaka
Эм-м-м... Вряд ли вы telnet сможете в скрипте использовать. Может, всё-таки /tool fetch?..

Re: родительский контроль

Добавлено: 31 май 2020, 22:57
zon2004
Chupaka писал(а): 31 май 2020, 21:18 Эм-м-м... Вряд ли вы telnet сможете в скрипте использовать. Может, всё-таки /tool fetch?..
Подскажите пожалуйста как можно использовать его,

Re: родительский контроль

Добавлено: 01 июн 2020, 16:54
Chupaka

Re: родительский контроль

Добавлено: 06 июн 2020, 13:31
zon2004
Chupaka писал(а): 01 июн 2020, 16:54 Chupaka » 01 июн 2020, 16:54
https://wiki.mikrotik.com/wiki/Manual:T ... a_variable
Подскажите пожалуйста, почему не работает, вот кусок кода, когда доступен ресурс - все работает, когда он не доступен - не работает этот скрипт

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

#########################################
:local ScOnTime "9:00";
:local ScOffTime "17:30";
:local TimeWorkTV "120"
#########################################
:global WorkTime
:global CurrentTime [/system clock get time];
:local workday [:toarray "mon,tue,wed,thu,fri"]
:global CheckONTV
:global CheckOFFTV
:global FuncTV [/tool fetch url=http://192.168.2.23:52323/MediaRenderer.xml as-value output=user]
:if ([:len $FuncTV] != 0) do={
:set CheckOFFTV "0"
:set CheckONTV ($CheckONTV+1)
 :if ($workday ~ $result) do={
  :if (($CurrentTime > $ScOnTime) and ($CurrentTime < $ScOffTime)) do={
   :set WorkTime ($WorkTime+1)
   :if ($WorkTime >= $TimeWorkTV) do={ 
     /interface disable eth2-lan
    }
    }
    }
 } else={
:set CheckOFFTV ($CheckOFFTV+1)
:set CheckONTV "0"
}
т.е не работает else. да и такое ощущения что этот кусок и совсем не работает если не доступен ресурс

Re: родительский контроль

Добавлено: 09 июн 2020, 13:37
Chupaka
Ошибка /tool fetch "ломает" скрипт, поэтому надо сделать обработчик-заглушку: заменить

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

:global FuncTV [/tool fetch url=http://192.168.2.23:52323/MediaRenderer.xml as-value output=user]
на

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

:do { :global FuncTV [/tool fetch url=http://192.168.2.23:52323/MediaRenderer.xml as-value output=user] } on-error={}

Re: родительский контроль

Добавлено: 09 июн 2020, 20:48
zon2004
спасибо большое