«Telegram» – кроссплатформенный мессенджер, позволяющий обмениваться сообщениями и медиафайлами многих форматов. Помимо стандартного обмена сообщениями в диалогах и группах, в мессенджере можно хранить неограниченное количество файлов, вести каналы (микроблоги), создавать и использовать боты. Боты – это сторонние утилиты, которые запускаются внутри приложения «Telegram». По сути это учётные записи, которыми управляют не люди, а программное обеспечение. Для работы могут использоваться программируемые кнопки виртуальной клавиатуры, за счёт которых бот превращается в мини-приложение с интуитивно понятным интерфейсом. Использование бота позволяет в любое время и в любом месте получить актуальную информацию от датчиков, подключённых к устройствам мониторинга и удалённого управления электропитанием NetPing.
В этой статье мы рассмотрим процесс настройки получения уведомлений от датчиков в Telegram.
Получение информации о срабатывании датчиков, подключённых к UniPing server solution v3 или UniPing server solution v3/SMS по запросу
Требуемое оборудование, программное обеспечение и подготовка к разработке:
- Устройство мониторинга UniPing server solution v3 или UniPing server solution v3/SMS (можно использовать любую модель устройства мониторинга и удалённого управления электропитанием NetPing с некоторыми нюансами) – 1 шт.;
- ПК или сервер с предустановленной операционной системой Linux или Windows – 1 шт.;
- Локальная сеть для связи между устройством мониторинга и ПК, на котором выполняется скрипт бота – 1 шт.;
- Мессенджер «Telegram» на ПК или смартфоне с доступом к Интернет – 1 шт.;
- Python 3 и менеджер пакетов – 1 шт.
Для примера в этой части статьи используется устройство мониторинга UniPing server solution v3, настроенное на работу с датчиками температуры и влажности и с датчиками типа «сухой контакт», которые подключены к IO линиям устройства. Подробнее с настройками устройства можно ознакомиться здесь.
В качестве сервера, на котором выполнятся скрипт нашего бота, используется виртуальная машина с установленной OS Ubuntu 16.04.4 LTS. Интерпретатор языка программирования Python 3.5.2 в системе установлен по умолчанию. Установим менеджер пакетов pip командой sudo apt install python3-pip:
Регистрация нового бота
Предполагается, что у вас уже есть установленный мессенджер «Telegram» с активной учётной записью.
Для создания новых ботов существует специальный Telegram-бот, @BotFather. Добавить этот бот в мессенджере довольно просто. В поиске приложения выбираем @BotFather, после чего откроется окно взаимодействия с ботом. В окне присутствует кнопка Start или «Начать», если у вас установлена русская локализация. Необходимо её нажать, тогда активируется режим диалога. Весь процесс создания нового бота будет осуществляться посредством общения с @BotFather.
Инициируем диалог с @BotFather и запрашиваем список доступных команд командой «/start»:
Создаём бота командой «/newbot». После чего @BotFather попросит у нас выбрать имя:
Придумываем имя, пишем его и отправляем. Если имя не занято, то бот создается, и будет предложено создать пользователя для бота. Пользователь может быть с любым именем, но должен заканчиваться на bot, например, NetPingBot или NetPing_bot. В нашем примере имя бота и пользователя – UniPingSSv3_bot:
После ввода имени основная часть создания бота окончена. В этом сообщении будет токен (1) для доступа к API «Telegram», который нам понадобится позже.
Дополнительно ещё можно указать список поддерживаемых функций, который будет выводиться в диалоговом окне при вводе символа «/». Для этого в диалоге с @BotFather нужно выполнить следующую команду «/setcommands» и следовать подсказкам бота:
Программирование бота
Теперь необходимо запрограммировать бот на нужные нам действия. Выполнять мы это будем через представленный «Telegram» API при помощи скрипта на языке программирования Python 3. Все работы выполняются в консоли сервера с установленной OS Ubuntu 16.04.4 LTS.
Сначала установим необходимые пакеты «pyTelegramBotAPI» и «requests» при помощи команд: «pip3 install pyTelegramBotAPI» и «pip3 install requests»:
Затем командой «nano conf_bot.py» создаём файл конфигурации бота – «conf_bot.py»:
Со следующим содержанием:
# Токен, который выдал бот @BotFather при регистрации нового бота
TOKEN = ‘527215903:AAEdmEdDHKF8ePqZsIql4Jf-Xr-0r0STbDE’# Логин и пароль для устройства мониторинга UniPing server solution v3
auth = (‘visor’, ‘ping’)# IP адрес устройства мониторинга UniPing server solution v3
url = ‘http://192.168.1.200/’
Далее командой «nano bot.py» создаём основной файл нашего бота – «bot.py»:
Содержание файла следующее:
import telebot
import requests
from telebot import types
import conf_bot
auth = conf_bot.auth
url = conf_bot.url
bot = telebot.TeleBot(conf_bot.TOKEN)
# Обработка команд «/start» и «/help»
@bot.message_handler(commands=[‘start’, ‘help’])
def start(message):
sent = bot.send_message(message.chat.id,
»’*Тестовый бот NetPing*
Этот бот может запросить актуальные данные
с датчиков и IO линий устройства NetPing.
Для продолжения используйте команду /npstatus»’)
# Обработка команды «/npstatus», создание меню.
@bot.message_handler(commands=[‘npstatus’])
def status(m):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(*[types.InlineKeyboardButton(text=name,
callback_data=name) for name in [‘Температура’,
‘Влажность’ , ‘Cтатус IO линии’ ]])
msg = bot.send_message(m.chat.id, ‘ Выберите параметр:’,
reply_markup=keyboard)
# Обработка нажатия кноки меню «Температура»
@bot.callback_query_handler(func=lambda c: True)
def inline(c):
if c.data ==’Температура’:
bot.edit_message_text(
chat_id=c.message.chat.id,
message_id=c.message.message_id,
text=’Текущие показания термодатчиков, подключённых к UniPing server solution v3′,
parse_mode=’Markdown’)
i=1
while i <=8:
def termo ():
r = requests.get(url+’thermo.cgi?t’+str(i), auth=auth)
t = r.text[20:22]
s = r.text[-3]
if s == ‘0’:
t = (‘Датчик #’ +str(i) + ‘ не подключен или сбоит.’)
return t
else:
t= (‘Текущая температура на термодатчике #’
+ str(i) +’: ‘+ t + ‘ градусов С’ )
return t
term = termo()
sent = bot.send_message(c.message.chat.id, term )
i=i+1
# Обработка нажатия кнопки меню «Влажность»
elif c.data ==’Влажность’:
bot.edit_message_text(
chat_id=c.message.chat.id,
message_id=c.message.message_id,
text=’Текущие показания датчиков влажности, подключённых UniPing server solution v3′,
parse_mode=’Markdown’)
i=1
while i <=4:
def rel_hum ():
r = requests.get(url+’relhum.cgi?h’+str(i), auth=auth)
h = r.text[20:22]
s = r.text[-3]
if s == ‘0’:
h = (‘Датчик #’ +str(i) + ‘ не подключен или сбоит.’)
return h
else:
h= (‘Текущая относительная влажность на датчике #’
+ str(i) +’: ‘+ h + ‘ %’ )
return h
hum = rel_hum()
sent = bot.send_message(c.message.chat.id, hum )
i=i+1
# Обработка нажатия кнопки меню «Статус IO линии»
elif c.data ==’Cтатус IO линии’:
bot.edit_message_text(
chat_id=c.message.chat.id,
message_id=c.message.message_id,
text=»’Текущий статус IO линий UniPing server solution v3
(0 — выкл. 1 — вкл.)»’,
parse_mode=’Markdown’)
i=1
while i <=8:
def IO_line ():
r = requests.get(url+’io.cgi?io’+str(i), auth=auth)
io = r.text[20:21]
if io == ‘0’:
io = (‘Текущее состояние IO линии #’
+ str(i) + ‘: ‘ + io + ‘ выключено’)
return io
else:
io= (‘Текущее состояние IO линии #’
+ str(i) + ‘: ‘ + io + ‘ включено’)
return io
io_stat = IO_line()
sent = bot.send_message(c.message.chat.id, io_stat )
i=i+1
bot.polling()
Теперь запускаем созданный файл на выполнение командой: «python3 ./bot.py».
Если в консоли ничего не выводится, и терминал выглядит «зависшим» — значит, мы всё сделали правильно, и наш бот работает.
Исходные файлы бота можно скачать здесь. Для использования с другим ботом укажите свои данные в файле «conf_bot.py».
Работа с ботом
Не закрываем терминал (оставляем всё как есть) и открываем наш бот в «Telegram» (по логину – в нашем примере @UniPingSSv3_bot, либо по ссылке из сообщения от @BotFather). Запускаем робота кнопкой «Запустить»:
И получаем приветственное сообщение с описанием бота и возможных команд:
Далее пишем боту команду «/npstatus» и получаем приглашение выбрать интересующий нас параметр:
Нажимаем на нужную нам кнопку и получаем данные от датчиков или IO линий устройства мониторинга UniPing server solution v3. Для первого примера была нажата кнопка «Влажность»:
Чтобы снова вызвать меню выбора параметра, нужно ещё раз отправить боту команду «/npstatus»:
На скриншотах ниже результаты запроса температур и состояния IO линий:
В результате вышеперечисленных действий мы получим бот для мессенджера «Telegram», который может в любое время и в любом месте (при наличии доступа к сети Интернет) опросить устройство NetPing и получить данные о состоянии датчиков.
Автоматическое получение информации о срабатывании датчиков, подключённых к UniPing server solution v3 или UniPing server solution v3/SMS
В примере выше мы рассмотрели получение информации о состоянии датчиков и IO линий по запросу. Далее рассмотрим пример получения информации в «Telegram» от датчиков и IO линий, подключённых к устройству мониторинга UniPing server solution v3 или UniPing server solution v3/SMS в автоматическом режиме с использованием сервиса «Zapier».
Требуемое оборудование и программное обеспечение
- Устройство мониторинга UniPing server solution v3 или UniPing server solution v3/SMS (можно использовать и другие модели устройств NetPing с некоторыми нюансами) – 1 шт.;
- ПК с предустановленной операционной системой Linux или Windows и установленным браузером с доступом к Интернет– 1 шт.;
- Локальная сеть – 1 шт.;
- Мессенджер Telegram на ПК или смартфоне с доступом к Интернет – 1 шт.
Регистрация и настройка нового бота
На первом этапе настройки создадим новый бот «Telegram». Процедура аналогична описанной выше в разделе «Регистрация нового бота». Имя нового бота UniPingSSv3_send_bot. Токен для доступа к API «Telegram» нам понадобится позже:
Далее нужно добавить в «Telegram» служебный бот @ChatFuel, с помощью которого мы добавим нашему новому боту расширенный функционал, который позволит @UniPingSSv3_send_bot получать сообщения из сервиса «Zapier». В поиске набираем @Chatfuel, выбираем из предложенных вариантов @chatfuel_bot и начинаем диалог нажатием кнопки «Запустить»:
Затем переходим по ссылке из сообщения бота @Chatfuel для установки @UniPingSSv3_send_bot надстройки «Chatfuel»:
После перехода по ссылке нажимаем кнопку «Запустить»:
И нажимаем в появившемся меню кнопку «Новый бот»:
Далее, в поле ввода сообщения указываем токен, который мы ранее получили от @BotFather при создании нашего бота @UniPingSSv3_send_bot.
После ввода токена мы получаем сообщение об успешной установке надстройки для нашего бота. Добавляем бот в контакт лист (если ещё не добавлен) нажатием ссылки:
И запускаем его кнопкой «Запустить»:
Затем переходим в раздел управления нашим ботом, чтобы создать уникальный ключ, необходимый для привязки бота к системе «Zapier». Отправляем боту команды «/chatfuel» и «/botkey»:
Настройка Zapier
Далее переходим в систему «Zapier». Для этого в любом удобном браузере открываем сайт «https://zapier.com/». При первом использовании необходимо зарегистрировать новую учетную запись (если у вас есть учётная запись, можете пропустить этот шаг). Для регистрации новой учетной записи нажмите кнопку «Sign Up»:
Можно авторизоваться при помощи аккаунта Google либо указать данные для регистрации вручную:
После регистрации и авторизации мы можем создать автоматическое действие, так называемый «Zap», который будет отправлять сообщение нашему Telegram-боту при регистрации событий на устройстве мониторинга UniPing server solution v3 или UniPing server solution v3/SMS. Для этого нажимаем кнопку «Маке a Zap!»:
Далее выбираем приложение-триггер, при срабатывании которого будет выполняться «Zap». Нам потребуется получать Webhook сообщение от устройства мониторинга UniPing server solution v3 или UniPing server solution v3/SMS о срабатывании датчиков и изменении состояний IO линий.
Далее выбираем тип Webhook-a, как на скриншоте, и нажимаем кнопку «Save +Continue» для перехода к следующему шагу настройки:
На следующем шаге всё оставляем по умолчанию и нажимаем кнопку «Continue» для продолжения настроек:
На следующем шаге будет создана уникальная ссылка, по которой будет передаваться Webhook в «Zap». Нажимаем кнопку «Копировать» в поле ссылки:
Теперь ненадолго отложим «Zapier» и перейдем к web-интерфейсу нашего устройства мониторинга, например, UniPing server solution v3/SMS. Здесь нам необходимо настроить настраиваемое уведомление. Для создания настраиваемого уведомления необходимо зайти на страницу «УВЕДОМЛЕНИЯ» web-интерфейса устройства и нажать на строку «кликните сюда для добавления новых данных»:
На этом этапе создадим сообщение о превышении верхней границы нормальной температуры на термодатчике 1:
Для этого укажем следующие параметры:
- Вкл. уведомление – активировать чек бокс.
- Датчик – выбираем из списка «Термо» и «1».
- Событие – активируем чек-бокс «Выше нормы».
- Метод уведомления – выбираем из списка «HTTP GET».
- URL – в этом поле указываем уникальную ссылку на «Zap», которую мы скопировали ранее, и через пробел пишем сообщение. В текст сообщения можно включить информацию из ветки MIB, относящуюся к датчику, IO линии или реле, вызвавшему событие. Формат: {N}, где N — компонент SNMP OID, стоящий перед индексом датчика (подробнее можно прочитать здесь и здесь). В нашем сообщении используется {2} – OID .1.3.6.1.4.1.25728.8800.1.1.2.n — Текущая температура на термодатчике, где n – номер датчика. К сожалению, кириллица не поддерживается системой «Zapier».
Нажимаем «Сохранить изменения». Затем переходим на страницу «ТЕРМОДАТЧИКИ» и искусственно вызываем срабатывание события «Температура выше нормы», задав верхнюю границу нормы меньше текущего значения температуры на датчике:
Нажимаем кнопку «Применить изменения», возвращаемся к «Zapier» и нажимаем кнопку «Ok, I did this»:
Если в настройках нашего устройства мониторинга UniPing server solution v3/SMS мы всё сделали верно, то на следующем шаге мы получим входящее Webhook-сообщение. На этом настройка триггера завершена. Для перехода к настройкам «Действия» нажимаем кнопку «Continue»:
На следующем экране выбираем Приложение-действие для нашего «Zap-a». Пишем в поле поиска «Chatfuel for Telegram» и выбираем его из списка вариантов:
Далее выбираем тип действия, которое будет выполнено программой «Chatfuel for Telegram» при срабатывании триггера, и нажимаем кнопку «Save +Continue»:
На следующем шаге нам необходимо привязать аккаунт нашего Telegram-бота к системе «Zapier». Нажимаем кнопку «Connect an Account» и в открывшемся pop-up окне указываем уникальный ключ, который мы ранее получили у нашего бота @UniPingSSv3_send_bot командой «/botkey»:
Подтверждаем изменения нажатием кнопок «Yes, Continue» и «Save+Continue».
Затем система предложит нам задать текст сообщения, которое будет отправляться нашему Telegram-боту. Нажимаем кнопку в правом верхнем углу поля «Message» и выбираем из списка «Full Webhook Message». Для перехода к следующему шагу настройки нажимаем кнопку «Continue».
На следующем шаге будет выполнено тестирование работы нашего «Zap-a». Нажимаем кнопку «Send Test to Chatfuel for Telegram»:
И, если тестирование выполнено успешно, мы получаем сообщение об этом в системе «Zapier» и сообщение в телеграмм. Завершаем создание «Zap-a» нажатием кнопки «Finish».
После этого нам будет предложено назвать наш «Zap» и запустить его на выполнение. Напишем имя «Zap-a» в текстовом поле (у нас NetPing Message) и переведём переключатель выполнения в положение «ON»:
После чего получим сообщение о том, что наш «Zap» работает.
На этом настройку системы «Zapier» для передачи сообщения от устройства мониторинга UniPing server solution v3/SMS в «Telegram» можно считать оконченной.
Настройка UniPing server solution v3/SMS
Вернемся к веб-интерфейсу устройства мониторнга UniPing server solution v3/SMS и добавим важные уведомления для мониторинга датчиков. Настройки производятся аналогично настройкам для термодатчика, которые были описаны в разделе настройки «Zapier». После создания новых настраиваемых уведомлений на устройстве мониторинга UniPing server solution v3/SMS каким либо образом менять настройки сервиса «Zapier» нет необходимости. «Подхватывание» новых сообщений произойдёт автоматически.
В результате всех вышеприведённых настроек в момент изменения статуса датчиков, подключённых к нашему устройству мониторинга, в «Telegram» поступают следующие уведомления: