MikroTik скрипт отправляет уведомление о включении устройства, в Телеграм. Позволит узнать о неожиданных перезагрузках устройства или проблемах питания оборудования, дополняя систему мониторинга.
При отправке сообщения в Telegram, так же запишет событие в журнал системы.
? Для работы скрипта вы должны иметь Токен Телеграм бота и ID чата или персональный ID. Создание Telegram бота и получение необходимых ID не является темой этой статьи.
Сообщение Телеграм содержит:
- идентификатор устройства;
- информационное сообщение о запуске устройства.
Статья на других языках:
?? — Mikrotik Scripts: sending power on notification to Telegram
?? — Mikrotik Scripts: envío de notificación de encendido a Telegram
?? — Scripts Mikrotik: envoi d’une notification pour allumer l’appareil dans Telegram
?? — MikroTik-Skripte: Senden Sie eine Benachrichtigung, um das Gerät im Telegramm einzuschalten
?? — MikroTik-scripts: melding over het inschakelen van het apparaat, bericht in Telegram
Изменить идентификатор устройства
Измените идентификатор устройства, чтобы понять, какое устройство присылает сообщение.
[System] -> [Identity]
или
/system identity set name="WhiteHouseMikroTik"
Создать скрипт уведомление о запуске устройства
Скрипт создает переменную RebootStatus. Если переменная RebootStatus не имеет значения (что случается при первом запуске скрипта) происходит отправка сообщения в Телеграм. После чего переменной RebootStatus присваивается значение True.
Для работы скрипта необходимо установить следующие разрешения: read, write, policy, test.
[System] -> [Scripts] -> [+] -> [Name: CheckPowerOn] -> [Policy: read, write, policy, test]
Код скрипта:
# Func: Telegram send message
:local TGSendMessage do={
:local tgUrl "https://api.telegram.org/bot$Token/sendMessage?chat_id=$ChatID&text=$Text&parse_mode=html";
/tool fetch http-method=get url=$tgUrl keep-result=no;
}
# Constants
:global RebootStatus;
:local TelegramBotToken "987654321:AAFJIVTAWodBwzGX2CLne6-PK4RFNSy-8OY";
:local TelegramChatID "987654321";
:local DeviceName [/system identity get name];
:local TelegramMessageText "\F0\9F\9F\A2 <b>$DeviceName:</b> start after Power Off.";
# Program
:if ($RebootStatus != true) do={
$TGSendMessage Token=$TelegramBotToken ChatID=$TelegramChatID Text=$TelegramMessageText;
:set RebootStatus true;
:log info "Script CheckPowerOn send Telegram message."
}
Добавить запуск скрипта в расписание
Для работы скрипта необходимо установить следующие разрешения: read, write, policy, test.
[System] -> [Schedule] -> [+] -> [Name: CheckPowerOn script] - > [Interval: 00:05:00] -> [Policy: read, write, policy, test]
Код скрипта:
/system script run CheckPowerOn
Теперь каждые 5 минут устройство будет проверять переменную перезагрузки и отправлять уведомление в Телеграм, если устройство было перезагружено.
? Mikrotik скрипт для отправки уведомления о включении устройства в Телеграм обсуждался в этой статье. Я надеюсь, это поможет увеличить контроль над вашим устройством MikroTik. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
Сергей, подскажите, пожалуйста, как усовершенствовать данный код:
:global lastTime;
:global output;
:global ChatId;
:global TelegramApi;
:set TelegramApi your_http_api
:set ChatId your_chat_id
:global mtIdentity [/system identity get name];
:local LogGet [ :toarray [ /log find topics~»system» || message~»login failure» || message~»logged» || message~»connected» || message~»[Ff]ailure» ]];
:local LogtLineCount [ :len $LogGet ];
if ($LogtLineCount > 0) do={
:local currentTime «$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]»;
:if ([:len $currentTime] = 10 ) do={
:set currentTime [ :pick $currentTime 0 10 ];
}
:set output «$currentTime — $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message]»;
:if (([:len $lastTime] 0) && ($lastTime != $currentTime))) do={
:set lastTime $currentTime ;
:tool fetch url=(«https://api.telegram.org/bot$TelegramApi/sendmessage\?chat_id=$ChatId&text=%F0%9F%93%A1\»$mtIdentity\» : $output») keep-result=no
}
}
И добавить в него корректное отображение когда интернет упал (отключился/пропал) и когда интернет появился (поднялся), а так же о включении и отключении устройства…?
Можно узнать время, во сколько было выключено устройство и добавить это в сообщение?
Удалось отладить скрипт перенес из # Constants значения botID и ChatID в # Func после этого заработало.
# Func: Telegram send message
:local TGSendMessage do={
:local botID «bot1696680810:AAFWQ-RLZ5vdeTo3c0k2yuk-PiYfWXSfNPE» ;
:local ChatID «-1001400941310″ ;
/tool fetch http-method=get url=»https://api.telegram.org/$botID/sendmessage?chat_id=$ChatID&text=$Text&parse_mode=html» keep-result=no;
}
# Constants
:global RebootStatus;
:local DeviceName [/system identity get name];
:local TelegramMessageText «\F0\9F\9F\A2 $DeviceName: start after Power Off.»;
# Program
:if ($RebootStatus != true) do={
$TGSendMessage Text=$TelegramMessageText;
:set RebootStatus true;
:log info «Script CheckPowerOn send Telegram message.»
}
У меня не работает не могу настроить скрипт Микротик Hap ac
Какое значение переменной RebootStatus у вас?
Значение переменной RebootStatus true , может я скриншот проверки синтаксиса скрипта скину а вы посмотрите что не так ?
Если у вас этот статус True, скрипт отработал успешно, проблема при отправке Telegram сообщения. Попробуйте отправить простой текст, только английский язык, без спецсимволов, кавычек и пр.
Отправка в Telegram работает из другого скрипта с теми же значениями botID и ChatID что и в вашем скрипте а из вашего не работает.
Приветствую, попытался упростить исходный скрипт с учётом уже объявленной функции MyTGBotSendMessage из следующей статьи но он не хочет работать… Подскажите, где ошибся? — для меня это всего третий скрипт, загруженный в Mikrotik, пытаюсь по наитию править.
# Constants
:global RebootStatus;
:local DeviceName [/system identity get name];
:local MessageText «\F0\11\9F\A2 $DeviceName: start after Power Off.»;
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
# START Send Telegram Module
:if ($RebootStatus != true) do={
$SendTelegramMessage MessageText=$MessageText;
:set RebootStatus true;
:log info «Script CheckPowerOn send Telegram message.»
}
# END Send Telegram Module
Здравствуйте, вы молодец, что оптимизируете.
Это будет вот так:
:global RebootStatus;
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\9F\A2 $DeviceName: start after Power Off.";
:if ($RebootStatus != true) do={
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
:set RebootStatus true;
:log info "Script CheckPowerOn send Telegram message."
}
Гыгыгы, спасибо, а я там ещё и скрипт подключения устройства немного модернизировал, теперь он уведомляет и при отключении устройства сразу же! — для этого уменьшил время аренды адреса до 1 минуты, чтобы сразу же фиксировать когда произошёл дисконнект.