[Beta] Мониторинг интернета с уведомлением в Telegram

Здесь выкладываем скрипты
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1371
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

[Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Dragon_Knight » 25 дек 2016, 04:09

Благодаря одной теме на форуме я познакомился с сервисом Telegram, особенно с их ботами и осознал что это идеальная площадка для уведомлений, как в моих поделках, так и для моего непосредственного заработка :-):

Собственно набросал скрипт, который пингует указанный хост, и если пинг нестабильный или его вообще нет, то дожидается нормального пинга и отправляет сообщение в Telegram с пометкой начала и окончания сбоя.
Пока писал вспомнил, какая-же гадость [s]это ваша заливная рыба[/s] этот скриптовый язык... Сделали-бы уже урезанную учётку в ядре и дали писать скрипты на привычном shell...

 Собственно скрипт

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

# ISP Checker
# Developed by Dragon_Knight, 2016 - 2017.

:local CFGSchedulerName "schedule1";
:local CFGSchedulerNormalInterval 00:00:30;
:local CFGPingCount 10;
:local CFGPingError 1;
:local CFGPingInterval "100ms";
:local CFGPingInterface "ether1";
:local CFGPingAddress "77.88.8.1";
:global CFGTelegramBotToken "XXX";
:global CFGTelegramChatId YYY;

:global LastPingStatus;
:global SendString;

:local GetCurrentTime do={
   :local currentDate [/system clock get date];
   :local mouth {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"="11";"dec"="12"};
   :return ([:pick $currentDate 7 11] . "." . $mouth -> [:pick $currentDate 0 3] . "." . [:pick $currentDate 4 6] . " " . [/system clock get time]);
};

:local Send2Telegram do={
   :do {
      :local URLEncodeString "";
      :for i from=0 to=([:len $string] - 1) do={
         :local char [:pick $string $i];
         :if ($char = " ") do={:set $char "%20";};
         :if ($char = "-") do={:set $char "%2D";};
         :if ($char = ":") do={:set $char "%3A";};
         :set URLEncodeString ($URLEncodeString . $char);
      };
      
      /tool fetch keep-result=no mode=https url=("https://api.telegram.org/bot" . $CFGTelegramBotToken . "/sendmessage\?chat_id=" . $CFGTelegramChatId . "&text=" . $URLEncodeString);
   } on-error={
      :log error "[ISP Checker]: Error sending message.";
   };
};

:local pingResult [ping count=$CFGPingCount interval=$CFGPingInterval interface=$CFGPingInterface $CFGPingAddress];

:if ($pingResult < ($CFGPingCount - $CFGPingError)) do={
   :if ($pingResult = 0) do={
      :if ($LastPingStatus != 1) do={
         :set LastPingStatus 1;
         :set SendString ($SendString . [$GetCurrentTime] . ": Ping failed (all " . $CFGPingCount . " packets lost)!%0A");
         /system scheduler set [find name=$CFGSchedulerName] interval=((CFGPingInterval * CFGPingCount) + 00:00:01.500);
      };
   } else={
      :if ($LastPingStatus != 2) do={
         :set LastPingStatus 2;
         :set SendString ($SendString . [$GetCurrentTime] . ": Ping unstable (" . $pingResult . " of " . $CFGPingCount . " received)!%0A");
         /system scheduler set [find name=$CFGSchedulerName] interval=((CFGPingInterval * CFGPingCount) + 00:00:01.500);
      };
   };
} else={
   :if ($LastPingStatus != 3) do={
      :set LastPingStatus 3;
      :set SendString ($SendString . [$GetCurrentTime] . ": Ping ok!%0A");
      [$Send2Telegram string=$SendString];
      :set SendString "";
      /system scheduler set [find name=$CFGSchedulerName] interval=$CFGSchedulerNormalInterval;
   };
};

Настройки:

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

:local CFGSchedulerName "schedule1"   # Имя этого скрипта.
:local CFGSchedulerNormalInterval 00:00:30   # Интервал проверки пинга в нормальных условиях.
:local CFGPingCount 10;   # Кол-во пакетов проверки пинга.
:local CFGPingError 1;   # Кол-во потерянных пакетов, при котором считается что пинг нормальный.
:local CFGPingInterval "100ms";   # Интервал оправки пакетов пинга.
:local CFGPingInterface "MAIN-BRIDGE";   # Интерфейс выхода в мир.
:local CFGPingAddress "77.88.8.1";   # Пингуемый узел.
:global CFGTelegramBotToken "XXX";   # Token бота Telegram.
:global CFGTelegramChatId YYY;   # ID чата с ботом Telegram.


Изображение Изображение


Интересно услышать Ваше мнение.

Помощь в настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1371
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Dragon_Knight » 28 дек 2016, 16:50

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

PS: Если кто знает, как можно редактировать параметры скрипта из тела самого скрипта, без указания его имени, то прошу подсказать.
Типа такого: "set [find on-event="# ISP Checker\r"] interval=25".

Помощь в настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
Vladimir22
Сообщения: 565
Зарегистрирован: 09 дек 2012, 17:12

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Vladimir22 » 28 дек 2016, 16:54

а если интернет пропал ?
как в телеграм отправить сообщение ?
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1371
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Dragon_Knight » 28 дек 2016, 16:56

Vladimir22, Сообщение отправляется только после его возобновления.
Скрипит предназначен не для мониторинга интернета, а для учёта статистики, - когда и как долго его не было, или был но с провалами.
Сами понимаете, - что-бы мониторить само подключение, то нужно или пинговать хост снаружи, что не всегда даёт верную картину, или иметь другой канал связи, - SMS, GPRS...

Помощь в настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
root_s
Сообщения: 13
Зарегистрирован: 14 апр 2016, 14:20

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение root_s » 10 янв 2017, 21:55

Dragon_Knight писал(а):Благодаря одной теме на форуме я познакомился с сервисом Telegram, особенно с их ботами и осознал что это идеальная площадка для уведомлений, как в моих поделках, так и для моего непосредственного заработка :-):

Интересно услышать Ваше мнение.



Извините за вопрос начинающего, а как его правильно прикрутить в Mikrotik ?
Ставлю в Scripts, вроде все выполняется, а в telegram не приходит
все настройки бота в телеграмме выполнил
если выполняю вот так
/tool fetch url="https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage?chat_id=XXXXXXXXXX&text=Host OK
то сообщение приходит
Спасибо !
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1371
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Dragon_Knight » 11 янв 2017, 20:22

Нужно не скрипт а планировщик создать, и вызывать его, скажем каждые 30сек.
Если Вы пишите свой скрипт, то можете взять функцию Send2Telegram и использовать по своему, только поправить ID и токен или использовать глагольные переменные.

Помощь в настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
root_s
Сообщения: 13
Зарегистрирован: 14 апр 2016, 14:20

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение root_s » 11 янв 2017, 21:38

Dragon_Knight писал(а):Нужно не скрипт а планировщик создать, и вызывать его, скажем каждые 30сек.
Если Вы пишите свой скрипт, то можете взять функцию Send2Telegram и использовать по своему, только поправить ID и токен или использовать глагольные переменные.


Создал шедулер
на скриншоте видно
в телеграм не идет
опять что-то не так
Извините начинающего :-(

ИзображениеИзображение
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1371
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение Dragon_Knight » 11 янв 2017, 21:45

А Вы уверены что происходят сбои? Попробуйте изменить время обновления в 2 секунды и кратковременно, на пол секунды вытащить WAN кабель из роутера, или вытащить на продолжительное время (больше чем время обновления планировщика) и потом обратно подключить.
При возобновлении пинга должно прийти сообщение.

Помощь в настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
root_s
Сообщения: 13
Зарегистрирован: 14 апр 2016, 14:20

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение root_s » 11 янв 2017, 22:36

Спасибо !!!!
Все работает отлично ! :co_ol:
podarok66
Модератор
Сообщения: 3044
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Re: [Beta] Мониторинг интернета с уведомлением в Telegram

Сообщение podarok66 » 12 янв 2017, 13:32

А у меня вот странность такая, если оставить переменную $string - не работает шедулер, если заменяю на "There has been a drop interface" - отрабатывает на ура. Никак не въеду, что не так...
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...

Вернуться в «Готовые скрипты Mikrotik»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость