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

Скрипт для WoL, если телефон в сети. (Решено)

Добавлено: 23 фев 2022, 18:14
Gatarios
Добрый день.

Хочу организовать запуск компьютера при подключении телефона к роутеру, и так, чтобы происходило это не всегда, а только когда компьютер выключен. Пока получилось только запускать скриптом компьютер и определять наличие телефона в подключениях, и вместе они работают, однако при добавлении условия на проверку включен ли компьютер - всё сломалось. Скрипт просто не выполняется. Перерыл десятки сайтов, форумов и тем, попробовал различные написания ping и его параметры, но подвоха так и не нашёл. Подскажите, пожалуйста, что не так с условием.

Сам скрипт:

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

if ([/ping 192.168.0.2 count=4]=0) do={
if ([/interface wireless registration-table find mac-address=*мак адрес телефона*] != "") do={
/tool wol interface=*интерфейс* mac=*мак адрес компьютера*
}
}

Re: Скрипт для WoL, если телефон в сети. Прошу помощи.

Добавлено: 24 фев 2022, 12:51
Gatarios
И запихав эти макароны в одно условие с оператором "and" - всё равно ничего не работает

Re: Скрипт для WoL, если телефон в сети. Прошу помощи.

Добавлено: 24 фев 2022, 15:04
Gatarios
Кажется, я понял. Я использовал else, для действия если условие ложное, ибо когда я убрал else - условие начало работать

Re: Скрипт для WoL, если телефон в сети. Прошу помощи.

Добавлено: 24 фев 2022, 15:12
Gatarios
У меня немного подгорело от осознания того, что существует правило построения кода таким образом, что необходимо писать else на той же строке, что и закрывающая скобка у "do". Я очень не привык к таким глупостям и даже слегка разочаровался в Mikrotik. Однако, может у создателей на эту фичу были какие-то причины. В любом случае, спасибо всем за помощь.

Работает:

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

if (1 = 0) do={ /system script run Bach } else={ /system script run Aha }
Работает:

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

if (1 = 0) do={ /system script run Bach } else={
/system script run Aha }
НЕ РАБОТАЕТ!:

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

if (1 = 0) do={ /system script run Bach }
else={ /system script run Aha }

Re: Скрипт для WoL, если телефон в сети. Прошу помощи.

Добавлено: 24 фев 2022, 21:16
podarok66
Gatarios писал(а): 24 фев 2022, 15:12 НЕ РАБОТАЕТ!:
КОД: ВЫДЕЛИТЬ ВСЁ

if (1 = 0) do={ /system script run Bach }
else={ /system script run Aha }
Ну да, есть там оговорка. Это происходит потому, что знаки {} заключают в себе локальную область. А перенос строки , если он произошел вне локальной области приводит в завершению команды. Муть конечно, но так уж есть. Вот так должно работать))) Это типа иллюстрации синтаксиса.

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

if (1 = 0) do={
      /system script run Bach
      } else={ 
         /system script run Aha
         }

Re: Скрипт для WoL, если телефон в сети. Прошу помощи.

Добавлено: 26 фев 2022, 18:11
Gatarios
podarok66 писал(а): 24 фев 2022, 21:16 Ну да, есть там оговорка. Это происходит потому, что знаки {} заключают в себе локальную область. А перенос строки , если он произошел вне локальной области приводит в завершению команды. Муть конечно, но так уж есть
Спасибо.

Кстати, вот весь код, если кому интересно будет:

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

if (([/ping *ip компа* count=8] = 0) and ([/interface wireless registration-table find mac-address=*мак телефона*] != "")) do={
/tool wol interface=*любой интерфейс с компом* mac=*мак компа*
}
Создаётся в планировщике, дабы не перезапускать скрипты вручную после перезагрузки роутера

Re: Скрипт для WoL, если телефон в сети. (Решено)

Добавлено: 11 апр 2022, 23:06
iAHTOH
Я вот тут PoE включаю. Без пингов.
Может попробуете также WOL оживить?

Re: Скрипт для WoL, если телефон в сети. (Решено)

Добавлено: 30 июл 2022, 16:23
Gatarios
iAHTOH писал(а): 11 апр 2022, 23:06 Я вот тут PoE включаю. Без пингов.
Может попробуете также WOL оживить?
Спасибо. Полезно)