Примеры применения
29.05.2018

Управление IO линиями устройства NetPing через Telegram

Управление IO линиями устройства мониторинга NetPing IO v2 через Telegram

Мы продолжаем публикацию цикла статей по реализации интеграции устройств NetPing с мессенджером «Telegram». Ранее в нашем блоге мы достаточно подробно рассматривали процесс создания ботов для мессенджера «Telegram», управление розетками IP PDU NetPing через Telegram и управление кондиционером в серверной комнате через Telegram. В этой статье мы рассмотрим процесс настройки бота для управления дискретными линиями ввода-вывода устройства мониторинга NetPing IO v2. Подобная интеграция может применяться на практике в следующих случаях:

  • Обслуживающий персонал с помощью мессенджера «Telegram» может отправлять команду на открытие и закрытие шлагбаума. В этом случае использование бота позволяет отказаться от использования обычной механической стационарной кнопки в пользу варианта удалённого управления посредством мобильного телефона и/или планшета. Шлагбаум подключается к BM8070D силовое реле 16А/250В на DIN-рейку, которое в свою очередь подключается к IO линии устройства мониторинга NetPing IO v2;
  • Технический персонал с помощью мессенджера «Telegram» может управлять нагрузкой (сервер, коммутатор, роутер, освещение, вентиляция и прочее), подключённой к управляемой розетке NetPing AC/DIN, в независимости от своего географического положения;
  • Технический персонал с помощью мессенджера «Telegram» может удалённо открывать или закрывать электрозамок на входной двери в серверную комнату тем самым обеспечивая дополнительную защиту от проникновения посторонних лиц на объект.

Требуемое оборудование, программное обеспечение и подготовка к разработке

Для реализации функционала удалённого управления дискретными линиями ввода-вывода устройства NetPing через «Telegram» потребуется следующий комплект оборудования:

  • Устройство мониторинга NetPing IO v2 – 1 шт.;
  • BM8070D силовое реле 16А/250В на DIN-рейку – 1 шт.;
  • Шлагбаум – 1 шт.;
  • Управляемая розетка NetPing AC/DIN – 1 шт.;
  • Электрозамок на входной двери в серверную комнату – 1 шт.
  • ПК или сервер с предустановленной операционной системой Linux или Windows и доступом в Интернет – 1 шт.;
  • Локальная сеть для связи между устройством мониторинга и ПК, на котором выполняется скрипт бота – 1 шт.;
  • Мессенджер «Telegram» на ПК или смартфоне с доступом к Интернет – 1 шт.

Считаем, что устройство мониторинга NetPing IO v2 настроено на работу в вашей локальной сети. BM8070D силовое реле 16А/250В на DIN-рейку, управляемая розетка NetPing AC/DIN и электрозамок подключены к соответствующим линиям ввода-вывода устройства NetPing IO v2 и настроены. Подробнее ознакомиться с настройками NetPing IO v2 можно в документации.

Ниже представлена примерная схема подключения оборудования к устройству мониторинга NetPing IO v2 (более подробную информацию по подключению внешних устройств можно посмотреть в руководстве пользователя на странице «Подключение датчиков» либо обратиться в службу технической поддержки по адресу support@netping.ru):

NetPing IO v2 схема подключения оборудования

Также предполагается, что у вас настроен сервер с OS Ubuntu, и созданы боты в соответствии с рекомендациями этой статьи. В данном примере мы создали бота с именем @NetPing_IO_bot.

Программирование функций управления дискретными линиями ввода-вывода для бота @NetPing_IO_bot

Запрограммируем расширенный функционал для нашего бота @NetPing_IO_bot. Бот управляет дискретными линиями ввода-вывода устройства NetPing IO v2 при помощи URL-encoded команд, которые прописаны в коде скрипта бота и назначены кнопкам. Правим основной файл скрипта управляющего ботом – «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):
     markup = types.ReplyKeyboardMarkup()
     markup.row('/barrier', '/socket', '/door')
     markup.row('/help')
     bot.send_message(message.chat.id, '''
     ***Тестовый бот для управления IO линиями устройства NetPing IO v2***
     Чтобы открыть или закрыть шлагбаум используйте команду /barrier
     Чтобы включить, выключить или перезагрузить роутер используйте команду /socket
     Чтобы открыть или закрыть дверь в серверную используйте команду /door
     Для вызова этой справки используйте команду /help
          ''',
     reply_markup=markup)

# Обработка команды "/barrier", создание меню.
@bot.message_handler(commands=['barrier'])
def status(m):
     keyboard = types.InlineKeyboardMarkup()
     keyboard.add(*[types.InlineKeyboardButton(text=name,
          callback_data=name) for name in ['Открыть шлагбаум',
     'Закрыть шлагбаум']])
     msg = bot.send_message(m.chat.id, '''
          Эта команда позволяет открыть или закрыть шлагбаум.
          Выберите необходимое действие: ''',
          reply_markup=keyboard)
# Обработка команды "/socket", создание меню.
@bot.message_handler(commands=['socket'])
def status(m):
     keyboard = types.InlineKeyboardMarkup()
     keyboard.add(*[types.InlineKeyboardButton(text=name,
          callback_data=name) for name in ['Включить розетку',
     'Выключить розетку', 'Перезагрузить розетку' ]])
     msg = bot.send_message(m.chat.id, '''
          Эта команда позволяет управлять розеткой электропитания.
          Выберите необходимое действие: ''',
          reply_markup=keyboard)

# Обработка команды "/door", создание меню.
@bot.message_handler(commands=['door'])
def status(m):
     keyboard = types.InlineKeyboardMarkup()
     keyboard.add(*[types.InlineKeyboardButton(text=name,
          callback_data=name) for name in ['Открыть электрозамок',
     'Закрыть электрозамок' ]])
     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='Шлагбаум открыт',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io1=1', auth=auth)

#Обработка нажатия кнопки меню "Закрыть шлагбаум"
     elif c.data =='Закрыть шлагбаум':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Шлагбаум закрыт',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io1=0', auth=auth)
            
# Обработка нажатия кнопки меню "Включить розетку"
     elif c.data =='Включить розетку':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Роутер включен',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io2=0', auth=auth)

#Обработка нажатия кнопки меню "Выключить розетку"
     elif c.data =='Выключить розетку':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Роутер выключен',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io2=1', auth=auth)

#Обработка нажатия кнопки меню "Перезагрузить розетку"
     elif c.data =='Перезагрузить розетку':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Роутер перезагружен',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io2=f,10', auth=auth)   

# Обработка нажатия кнопки меню "Открыть электрозамок"
     elif c.data =='Открыть электрозамок':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Дверь в серверную открыта',
                parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io3=1', auth=auth)

#Обработка нажатия кнопки меню "Закрыть электрозамок"
     elif c.data =='Закрыть электрозамок':
          bot.edit_message_text(
                chat_id=c.message.chat.id,
                message_id=c.message.message_id,
                text='Дверь в серверную закрыта',
               parse_mode='Markdown')
          r = requests.get(url+'io.cgi?io3=0', auth=auth)

bot.polling()

Исходные файлы бота можно скачать здесь.

Работа с ботом удалённого управления IO линиями устройства NetPing IOv2

Активируем диалог с ботом @NetPing_IO_bot, в скрипт для управления которым мы добавили новый функционал. После того, как мы отправим боту команду «/start» (1), в окно диалога будет выведена памятка (2), и ниже поля для ввода сообщения появятся кнопки (3), дублирующие команды для управления ботом:

Telegram начало диалога с ботом для управления IO линиями NetPing IO v2

Теперь последовательно ознакомимся с командами. Первая команда «/barrier» предназначена для управления шлагбаумом и имитирует нажатие физической кнопки. При выборе команды в окне диалога отображается уведомление о выбранной команде (1) и кнопки для выбора возможных действий (2). Доступны действия «Открыть шлагбаум» и «Закрыть шлагбаум»:

Telegram команда для управления шлагбаумом подключённым к NetPing IO v2

При выполнении команды в окне диалога выводится уведомление о текущем состоянии шлагбаума. На скриншоте ниже результаты последовательного нажатия на кнопки управления шлагбаумом:

Telegram результат управления шлагбаумом подключённым к NetPing IO v2

Следующая команда «/socket» позволяет управлять питанием управляемой розетки NetPing AC/DIN и соответственно, питанием подключённой к ней нагрузки (в нашем примере роутер). При выборе команды в окне диалога отображается уведомление о выбранной команде (1) и кнопки для выбора возможных действий (2):

Telegram команда для управления розеткой подключённой к NetPing IO v2

Для управления питанием управляемой розетки NetPing AC/DIN доступны команды «Включить», «Выключить» и «Перезагрузить». Команда «Перезагрузить» выполняет кратковременное (10 секунд) переключение линии ввода-вывода в инверсное состояние (выдача импульса сброса), таким образом выполняется перезагрузка подключённого к розетке оборудования. При выполнении команды в окне диалога выводится уведомление о текущем состоянии линии ввода-вывода. На скриншоте ниже результаты последовательного нажатия на кнопки управления розеткой электропитания:

Telegram результаты управления розеткой подключённой к NetPing IO v2

Команда «/door» работает аналогично команде «/barrier», но управляет электрозамком, который подключён к IO линии 3 устройства NetPing IO v2. При выборе команды в окне диалога отображается уведомление о выбранной команде (1) и кнопки для выбора возможных действий (2). Доступны действия «Открыть электрозамок» и «Закрыть электрозамок»:

Telegram команда для управления электрозамком подключённым к NetPing IO v2

При выполнении команды в окне диалога выводится уведомление о текущем состоянии двери в серверную. На скриншоте ниже результаты последовательного нажатия на кнопки управления электрозамком:

Telegram результат управления электрозамком подключённым к NetPing IO v2

Таким образом реализуется удалённое управление дискретными линиями ввода-вывода устройства мониторинга NetPing IO v2 при помощи мессенджера «Telegram».


  • Устройство NetPing IO v2
  • Устройство UniPing server solution v3
  • Устройство UniPing server solution v3/SMS
  • Устройство UniPing v3

Основные теги


Каталог устойств мониторинг серверных комнат и шкафов
Все устройства
Устройство UniPing v3
Устройство UniPing server solution v3/SMS
Устройство NetPing 2/PWR-220 v1/SMS
Устройство NetPing IO v2
Устройства NetPing
Каталог датчиков для устройств NetPing
Устройство NetPing 8/PWR-220 v3/SMS
Устройство NetPing 2/PWR-220 v3/ETH
Устройство NetPing 2/PWR-220 v2/SMS
Устройство NetPing 4/PWR-220 v3/SMS
Устройство NetPing SMS
Устройство NetPing /PWR-220 v3/ETH
Адаптер WiFi VAP11N
Коммутатор PS104GT
Устройство NetPing Mini-UPS
Коммутатор NP-SM4
Сплиттер POE 12В (стандарта 802.3af)
IRC-TR v2 (ИК модуль расширения)
Каталог устройств удалённого управления и распределения электропитания NetPing
Устройство UniPing server solution
Устройство UniPing server solution v3
Датчик разбития стекла (Стекло-3 ИО 329-4), 2м
Переходник для NetPing IO v2
Устройство NetPing PWR68-01
Датчик мониторинга 220В 1-wire
Адаптер DKST910.8
Устройство NetPing DKST61-01
Блок питания 48В 1,5А (мод.HRS20005)
Датчик температуры TS, 1м
Датчик температуры, (T811), 2м
Датчик температуры WT, 1м
Датчик протечки, модель 2605, 2м
Датчик протечки H2О
Датчик температуры 1-wire, (THS), 2м
МАЯК-12-СТ
Датчик движения (PYRONIX COLT QUAD PI ПИК детектор), 2м
Датчик движения (SWAN-QUAD ИК детектор квадросенсор), (2м)
BM8070D Силовое реле 16А/250В на DIN-рейку
MP701 Исполнительный элемент (4 независимых канала по 2 кВт 10А)
Датчик дыма комбинированный (дым/тепло) ИП 212/101-2М-A1R с базой Е412NL
МОЛЛЮСК-12/1,5
Внешний ИБП SKAT-12DC-1.0 Li-ion
ИКС-1 извещатель охранный инфракрасный активный однолучевой
Датчик охранный (Извещатель охранный ИО102-20/Б2П, 2м)
Блок розеток SNR-PDU-08S-1
▼ Все теги
Новинки
Датчик воздушного потока (модель АМС520)
Датчик воздушного потока позволяет контролировать наличие или отсутствие напора воздушного потока. Содержит подробнее...

Цена: 2 587 руб.

ИКС-1 извещатель охранный инфракрасный активный однолучевой
Извещатель предназначен для регистрации пересечения нарушителями контролируемой зоны, образованной оптическим подробнее...

Цена: 3 854 руб.

Внешний ИБП SKAT-12DC-1.0 Li-ion
Малогабаритный источник бесперебойного питания (ИБП) со встроенной Li-Ion АКБ. Для питания устройств подробнее...

Цена: 3 200 руб.

МОЛЛЮСК-12/1,5
Малогабаритный блок питания с выходным напряжением 12 В. Имеет уникальный корпус, который позволяет подробнее...

Цена: 950 руб.

Датчик дыма комбинированный (дым/тепло) ИП 212/101-2М-A1R с базой Е412NL
Комбинированный извещатель предназначен для обнаружения возгораний в помещениях различных зданий и сооружений подробнее...

Цена: 2 098 руб.

MP701 Исполнительный элемент (4 независимых канала по 2 кВт 10А)
Силовой модуль коммутации предназначен для обеспечения управления при помощи устройств NetPing силовыми подробнее...

Цена: 1 400 руб.

BM8070D Силовое реле 16А/250В на DIN-рейку
Блок реле для удалённой коммутации мощной нагрузки при помощи устройств NetPing. Изготавливается в корпусе подробнее...

Цена: 1 350 руб.

Датчик движения (SWAN-QUAD ИК детектор квадросенсор), (2м)
Пассивный инфракрасный детектор движения позволяет регистрировать любое движение в зоне до 18 метров. подробнее...

Цена: 1 516 руб.

МАЯК-12-СТ
Оповещатель охранно-пожарный световой стробоскопический предназначен для выдачи световых стробоскопических подробнее...

Цена: 385 руб.

Датчик протечки H2О
Датчик протечки позволяет определить наличие воды в точке установки датчика. Устанавливается в нескольких подробнее...

Цена: 1 450 руб.

-+ руб. руб.
Итого руб.

Данные о заказе