MikroTik Скрипты: отправить уведомление о включении устройства в Telegram

MikroTik скрипт отправляет уведомление о включении устройства, в Телеграм. Позволит узнать о неожиданных перезагрузках устройства или проблемах питания оборудования, дополняя систему мониторинга.
При отправке сообщения в Telegram, так же запишет событие в журнал системы.

? Для работы скрипта вы должны иметь Токен Телеграм бота и ID чата или персональный ID. Создание Telegram бота и получение необходимых ID не является темой этой статьи.

Сообщение Телеграм содержит:

  1. идентификатор устройства;
  2. информационное сообщение о запуске устройства.

Статья на других языках:
?? — 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."
}
MikroTik Скрипты: Telegram уведомление о включении устройства

Добавить запуск скрипта в расписание

Для работы скрипта необходимо установить следующие разрешения: read, write, policy, test.

[System] -> [Schedule] -> [+] -> [Name: CheckPowerOn script] - > [Interval: 00:05:00] -> [Policy: read, write, policy, test]

Код скрипта:

/system script run CheckPowerOn
 Добавление скрипта проверки запуска устройства и отправки сообщения Телеграм, в планировщик заданий MikroTik

Теперь каждые 5 минут устройство будет проверять переменную перезагрузки и отправлять уведомление в Телеграм, если устройство было перезагружено.


? Mikrotik скрипт для отправки уведомления о включении устройства в Телеграм обсуждался в этой статье. Я надеюсь, это поможет увеличить контроль над вашим устройством MikroTik. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

11 комментариев к “MikroTik Скрипты: отправить уведомление о включении устройства в Telegram”

  1. Сергей, подскажите, пожалуйста, как усовершенствовать данный код:

    :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
    }

    }

    И добавить в него корректное отображение когда интернет упал (отключился/пропал) и когда интернет появился (поднялся), а так же о включении и отключении устройства…?

    Ответить
  2. Удалось отладить скрипт перенес из # 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.»
    }

    Ответить
      • Значение переменной RebootStatus true , может я скриншот проверки синтаксиса скрипта скину а вы посмотрите что не так ?

        Ответить
        • Если у вас этот статус True, скрипт отработал успешно, проблема при отправке Telegram сообщения. Попробуйте отправить простой текст, только английский язык, без спецсимволов, кавычек и пр.

        • Отправка в Telegram работает из другого скрипта с теми же значениями botID и ChatID что и в вашем скрипте а из вашего не работает.

  3. Приветствую, попытался упростить исходный скрипт с учётом уже объявленной функции 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 минуты, чтобы сразу же фиксировать когда произошёл дисконнект.

        Ответить

Оставьте комментарий