Наконец-то у меня появился модем E367 и я с радостью стал с ним играться...
Конечно не сразу, но завёл его, причём на 2011RM он вообще не определялся, даже как USB устройство, хотя флешка определялась, но в CCR1009 сразу всё завелось с первой попытки, но это другая история, в которой нужно разбираться....
Собственно сейчас очень хочется реализовать SMS оповещения, но вот в скриптовом языке я совершенно не способен разобраться... На любом языке я смогу реализовать такую задачу за 5 минут, а вот в микротике......
Собственно задача.
Сделать оповещение при падении WAN-PPPoE интерфейса, путём отправки сообщения на мой номер, но с некоторыми оговорками:
* Падение интерфейса в промежуток времени с 5:45 до 6:00 не учитывать (перезагрузка оборудования у провайдера);
* Исключить из оповещение... как сказать.. jitter? когда подключения периодически падает и поднимается (например если пропало подключение, то мы отправляем сообщение, и если в течении 60 минут будут ещё падения, то мы их игнорируем, или после падения отправляем SMS и ждём, пока подключение стабильно не проработает в течении 60 минут, если проработало и упало, то отправляем новое SMS, если прошло меньше 60 минут, то игнорируем);
* Проверять как падение PPPoE так и потерю пинга в мир;
* Отправлять сообщение при поднятии интерфейса и появлению доступа в мир;
* Вызывать другой скрип, который будет переконфигурировать фаервол, NAT, QoS и маршруты;
Помогите реализовать такой скрип, или натолкните на путь истинный толковыми инструкциями, хотя сколько я не пытался понять как он работает, - всё равно это какая-то магия для меня :)
Скрипт отправки сообщения при падении интерфейса...
- Dragon_Knight
- Сообщения: 1721
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
А хоть что-то уже начато? Давай, бери за основу например viewtopic.php?p=18297#p18297 Переписывать конечно много, но саму мысль уловить несложно. Где споткнешься, пиши, будем поправлять
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
- Dragon_Knight
- Сообщения: 1721
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
В том и дело что нету ничего. Когда пытаюсь понять что тут написано: http://wiki.mikrotik.com/wiki/Manual:Scripting забываю вообще что я тут делаю...
Даже не представляю как получить состояние интерфейса....
Даже не представляю как получить состояние интерфейса....

Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Good. Давай начинать. Предположим, что мы пингуем три внешних адреса для определения работоспособности канала:
Далее, назначим переменную и предположим, что она имеет значение "ложно". Теперь исправим значение этой переменной, проверив утверждение (суммарный результат ответов на запросы не менее 6). Подставляем в равенство :
Теперь решаем, что делать в оговоренных случаях. Если неравно (ответов меньше, чем ожидалось или нет совсем), то ..., в остальных случаях ...
Это тело основного скрипта, в многоточие надо подставить нужные команды , вплоть до старта другого скрипта.
Из хотелок:
1. реализуем шедулером, проще не бывает.
2. делал, тоже не столь сложно...
3. ну нет у меня РРРоЕ, проверку этого канала сам скажешь, как проверять. Если надо, добавим.
4. вот тут я бы подумал, хз, как сделать, чтобы не отправляло при каждой проверке...
5. старт скрипта по команде из скрипта - не проблема.
Код: Выделить всё
:local PingCount 3
:local google 8.8.8.8
:local yandex 77.88.8.8
:local mail 94.100.180.201
:local ResultGoogle [/ping count=$PingCount $Google interface=WAN]
:local Resultyandex [/ping count=$PingCount $yandex interface=WAN]
:local ResultMail [/ping count=$PingCount $mail interface=WAN]
Далее, назначим переменную и предположим, что она имеет значение "ложно". Теперь исправим значение этой переменной, проверив утверждение (суммарный результат ответов на запросы не менее 6). Подставляем в равенство :
Код: Выделить всё
:local MainIfInetOk false;
:set MainIfInetOk (($ResultGoogle + $Resultyandex + $ResultMail) >= (2 * $PingCount))
:put "MainIfInetOk=$MainIfInetOk"
Теперь решаем, что делать в оговоренных случаях. Если неравно (ответов меньше, чем ожидалось или нет совсем), то ..., в остальных случаях ...
Код: Выделить всё
if (!$MainIfInetOk) do={
}
if ($MainIfInetOk) do={
}
Это тело основного скрипта, в многоточие надо подставить нужные команды , вплоть до старта другого скрипта.
Из хотелок:
1. реализуем шедулером, проще не бывает.
2. делал, тоже не столь сложно...
3. ну нет у меня РРРоЕ, проверку этого канала сам скажешь, как проверять. Если надо, добавим.
4. вот тут я бы подумал, хз, как сделать, чтобы не отправляло при каждой проверке...
5. старт скрипта по команде из скрипта - не проблема.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
- Dragon_Knight
- Сообщения: 1721
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
А случае пинга да, но как получить само состояние интерфейса: Enabled, Disabled, и состояние подключение: Connected, Disconected?
Пишу и получаю фиру:
Пишу и получаю фиру:
:put [[/interface find name="ISP-PPPoE-OPCOM"] status]
*c
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Код: Выделить всё
/interface pppoe-client monitor pppoe-out1 once do={:put $status;}
Как-то так получишь состояние интерфейса. Причем любого...
Scripting Examples писал(а):Monitoring interface status
The example writes a message in system's log if the ether1 interface is not disconnected (e.g., when cable is not working, or plugged out). You may use it to constantly monitor interfaces' status.Код: Выделить всё
:global u
/interface ethernet monitor ether1 once do={
:set u $status
}
:if ($u != "link-ok") do={
:log message="interface ether1 is disconnected"
}
Other similar example is to do a reboot once cable is disconnected from the router:Код: Выделить всё
:global u
/interface ethernet monitor ether1 once do={
:set u $status
}
:if ($u != "link-ok") do={
/system reboot
}
To save interface statistics to a file you will need to perform the following tasks:
Make a system script that will write to the logs interface status.
Код: Выделить всё
[admin@MikroTik] system script> add name=eth_stat_to_log source={
/interface ethernet monitor ether1 once do={:log \
\... message=("\[My log 001\] :: Eth1 status: " . $status)}}
Attach this script to a system scheduler event.
Код: Выделить всё
[admin@MikroTik] system scheduler> add interval=1h name="int_to_log" \
\... on-event=eth_stat_to_log
Configure System-Info facility to log all information to disk.
Код: Выделить всё
/system logging facility set System-Info=disk
Полный текст находится тут
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Ну что, дальше будем писать?
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Ну давай еще шажок сделаем. Попробуем связку из пары скриптов и шедулера. Сначала создадим шедулер Ping в теле пишем что-то типа
Старт от запуска, интервал 5 минут.
Затем с таким же именем создадим скрипт Ping ( ну я часто так делаю, чтобы не плодить тучу названий)
Теперь создаем скрипт с именем Delay
Пояснять, что как и зачем работает надо? Если надо, напишу комментарии.
Кстати, насчет работает, у меня нет ни туннеля ни "свистка". Так что всё собирал просто в голове. По идее должно работать, но не факт. Проверяй...
Конечно это не все твои хотелки, но давай по кусочкам будем собирать.
Код: Выделить всё
/system script run Ping
Старт от запуска, интервал 5 минут.
Затем с таким же именем создадим скрипт Ping ( ну я часто так делаю, чтобы не плодить тучу названий)
Код: Выделить всё
# Создадим пустую переменную
:local sta;
# Мониторим нужный интерфейс, приравниваем значение нашей переменной к значению переменной мониторинга по имени status
/interface pppoe-client monitor pppoe-out1 once do={:set sta $status;}
# Если наша переменная после изменения не оказывается connected, шлем sms на номер +79013333333 и запускаем скрипт отложенного старта
if ($sta != "connected") do={/tool sms send usb1 "+79013333333" message="Tunnel is not up"
/system script run Delay;
} else={
# Если туннель проверку прошел, начинается проверка интернет-соединения. Принцип описан в соответствующей теме
:delay 100;
:local PingCount 3
:local google 8.8.8.8
:local yandex 77.88.8.8
:local mail 94.100.180.201
:local ResultGoogle [/ping count=$PingCount $Google interface=WAN]
:local Resultyandex [/ping count=$PingCount $yandex interface=WAN]
:local ResultMail [/ping count=$PingCount $mail interface=WAN]
:local MainIfInetOk false;
:set MainIfInetOk (($ResultGoogle + $Resultyandex + $ResultMail) >= (2 * $PingCount))
:put "MainIfInetOk=$MainIfInetOk"
if (!$MainIfInetOk) do={/tool sms send usb1 "+79013333333" message="Bad internet connection";
/system script run Delay;
}}
Теперь создаем скрипт с именем Delay
Код: Выделить всё
:delay 30;
/system scheduler disable Ping;
:delay 3600;
/system scheduler enable Ping;
Пояснять, что как и зачем работает надо? Если надо, напишу комментарии.
Кстати, насчет работает, у меня нет ни туннеля ни "свистка". Так что всё собирал просто в голове. По идее должно работать, но не факт. Проверяй...
Конечно это не все твои хотелки, но давай по кусочкам будем собирать.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
- Dragon_Knight
- Сообщения: 1721
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
ммм. Нада посидеть и заняться допилить по вашим наброскам. Спасибо.
Только сейчас я свой 1009 чуть в кирпич не превратил.... Соседняя тема про ROS 6.16...
Только сейчас я свой 1009 чуть в кирпич не превратил.... Соседняя тема про ROS 6.16...
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Да у меня не горит
Я ща к компу вечером попадаю только. И максимум высиживаю минут сорок. Так что продуктивных посиделок пока никак....
Как получится посмотреть, говори, будем думать как остальные хотелки допилить... И эти изменить на более приемлемые.

Как получится посмотреть, говори, будем думать как остальные хотелки допилить... И эти изменить на более приемлемые.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...