- NetPing
- >
- Блог
- >
- Примеры применения
- >
- Управление кондиционером в серверной комнате через Telegram
Управление кондиционером в серверной комнате через Telegram
Ранее в нашем блоге мы рассмотрели процесс создания ботов для мессенджера «Telegram», которые позволяли получать информацию от датчиков и IO линий устройства NetPing по запросу и автоматически. В этой статье рассмотрим пример практического использования этих ботов, добавив им функционал, который в связке с устройством мониторинга UniPing server solution v3 позволит в любое время и в любом месте (при наличии доступа к сети Интернет) управлять кондиционером в серверной комнате.
В нашем примере бот имитирует нажатие кнопок на пульте дистанционного управления кондиционером при помощи URL-encoded команд, которые он отправляет устройству мониторинга UniPing server solution v3. Устройство, в свою очередь, посылает ранее записанные в память команды управления при помощи ИК-модуля IRC-TR v2 кондиционеру, который расположен в серверном помещении.
Варианты применения данного решения:
- Системный администратор через «Telegram» может включить или выключить резервный кондиционер в серверной комнате, когда он находится не на рабочем месте, например, в выходные, праздничные дни или во время отпуска. Поводом для включения резервного кондиционера должно послужить уведомление в «Telegram» о превышении температуры верхней границы нормы, установленной на странице "ТЕРМОДАТЧИКИ" web-интерфейса устройства. Поводом для отключения резервного кондиционера должно послужить уведомление в «Telegram» о срабатывании датчика воздушного потока, установленного на выходе потока воздуха основного кондиционера, что означает восстановление его работоспособности;
- Системный администратор через «Telegram» может понизить или повысить температуру охлаждения, не заходя в серверную комнату, и проконтролировать температуру воздуха по показаниям датчика температуры 1-wire (THS);
- Системный администратор через «Telegram» может изменить режим работы кондиционера, не заходя в серверную комнату.
Требуемое оборудование, программное обеспечение и подготовка к разработке:
Для реализации функционала управления кондиционером нам потребуется следующий комплект оборудования:
- UniPing server solution v3 (можно использовать любую модель устройства мониторинга и удалённого управления электропитанием NetPing, которая поддерживает подключение ИК-модуля расширения IRC-TR v2) – 1 шт.;
- ИК-модуль IRC-TR v2 – 1 шт.;
- Датчик температуры 1-wire – 1 шт.;
- Датчик воздушного потока – 1 шт.;
- ПК или сервер с предустановленной операционной системой Linux или Windows и доступом в Интернет – 1 шт.;
- Локальная сеть для связи между устройством мониторинга и ПК, на котором выполняется скрипт бота – 1 шт.;
- Мессенджер «Telegram» на ПК или смартфоне с доступом к Интернет – 1 шт.
Считаем, что устройство UniPing server solution v3 настроено на работу в вашей локальной сети, и ИК-модуль IRC-TR v2, датчик воздушного потока и датчик температуры 1-wire подключены. Подробнее с настройками устройства можно ознакомиться здесь. Также считаем, что устройство UniPing server solution v3 настроено на управление кондиционером. Правила настройки можно прочитать здесь и здесь.
В нашей статье будем использовать следующие параметры устройства UniPing server solution v3:
IP адрес | 192.168.1.208 |
Логин | visor |
Пароль | ping |
Номер подключенного термодатчика | 1 |
Номер IO линии с подключенным датчиком воздушного потока | IO 1 |
Номер команды включения резервного кондиционера | 2 |
Номер команды выключения резервного кондиционера | 3 |
Номер команды повышения температуры на 1 °C | 4 |
Номер команды понижения температуры на 1 °C | 5 |
Номер команды включения режима «Охлаждение» | 6 |
Номер команды включения режима «Обогрев» | 7 |
Номер команды включения режима «Осушение» | 8 |
Номер команды включения режима «Вентиляция» | 9 |
Номер команды включения ночного режима | 10 |
Номер команды изменения направления шторок кондиционера | 11 |
Номер команды блокировки пульта | 12 |
В разделе «Настраиваемые уведомления» web-интерфейса устройства мониторинга UniPing server solution v3 пропишем уведомления, которые будут отправляться в «Telegram» при превышении температуры верхней границы нормы (1) и при регистрации датчиком воздушного потока наличия потока воздуха от основного кондиционера (2). К сожалению, кириллица не поддерживается системой «Zapier». Подробнее об этих настройках можно прочитать здесь и здесь.
Программирование функций управления кондиционером для бота @UniPingSSv3_bot
Предполагается, что у вас настроен сервер с OS Ubuntu, и созданы боты в соответствии с рекомендациями предыдущей статьи. Запрограммируем расширенный функционал для нашего бота @UniPingSSv3_bot. Правим основной файл скрипта управляющего ботом – «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('/npstatus', '/fault')
markup.row('/temp', '/mode')
markup.row('/help')
bot.send_message(message.chat.id, '''
***Тестовый бот NetPing***
Чтобы запросить актуальные данные с датчиков и IO линий устройства NetPing используйте команду /npstatus
Чтобы включить или выключить аварийный кондиционер используйте команду /fault
Чтобы повысить/понизить температуру в помещении серверной используйте команду /temp
Чтобы изменить режим работы кондиционера в помещении серверной используйте команду /mode
Для вызова этой справки используйте команду /help ''',
reply_markup=markup)
# Обработка команды "/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, '''
Эта команда позволяет запросить актуальные данные от датчиков и IO линий.
Выберите требуемый параметр:''',
reply_markup=keyboard)
# Обработка команды "/fault", создание меню.
@bot.message_handler(commands=['fault'])
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)
# Обработка команды "/temp", создание меню.
@bot.message_handler(commands=['temp'])
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)
# Обработка команды "/mode", создание меню.
@bot.message_handler(commands=['mode'])
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='Текущие показания термодатчиков 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
# Обработка нажатия кнопки меню "Включить резервный кондиционер"
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+'ir.cgi?play=2', 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+'ir.cgi?play=3', 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+'ir.cgi?play=4', 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+'ir.cgi?play=5', 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+'ir.cgi?play=6', 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+'ir.cgi?play=7', 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+'ir.cgi?play=8', 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+'ir.cgi?play=9', 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+'ir.cgi?play=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+'ir.cgi?play=11', 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+'ir.cgi?play=12', auth=auth)
bot.polling()
Исходные файлы бота можно скачать здесь.
Работа с ботом управления кондиционером.
Рассмотрим вариант включения/выключения резервного кондиционера. Если мы получили от бота @UniPingSSv3_send_bot (информацию о боте смотрите в статье "Как получать в Telegram информацию от датчиков, подключенных к устройствам мониторинга и удалённого управления электропитанием NetPing?"), уведомление о превышении температуры верхней границы нормы:
Активируем диалог с ботом @UniPingSSv3_bot, в скрипт для управления которым мы добавили новый функционал. После того, как мы отправим боту команду «/start» (1), в окно диалога будет выведена памятка (2), и ниже поля для ввода сообщения появятся кнопки (3), дублирующие команды для управления ботом:
Для включения и выключения резервного кондиционера в нашем боте настроена команда «/fault» (1). После её выбора в окне диалога отображается уведомление о выбранной команде и кнопки для выбора возможных действий (2):
Сейчас нам нужно включить резервный кондиционер. Выбираем кнопку «Включить резервный кондиционер», после чего получаем сообщение: «Резервный кондиционер включен»:
Теперь ждём сообщения о восстановлении работы основного кондиционера от бота @UniPingSSv3_send_bot. И, если мы его получили, то нужно выключить резервный кондиционер:
Возвращаемся к диалогу с @UniPingSSv3_bot, снова нажимаем кнопку «/fault» (1) и выбираем действие «Выключить резервный кондиционер» (2):
Теперь рассмотрим порядок действий в случае, когда необходимо изменить текущую температуру в серверной. Сначала запросим текущую температуру при помощи команды «/npstatus». Работа с этой командой подробно описана здесь.
Затем выбираем команду «/temp» (1) и с помощью ее действий корректируем текущую температуру (2):
Рассмотрим порядок действий для изменения режима работы кондиционера. Для этого выбираем команду «/mode» (1) и задаём нужный режим работы кондиционера нажатием соответствующей кнопки (2):
На скриншоте ниже результаты последовательного нажатия кнопок-действий команды «/mode»:
В результате организации подобной интеграции устройства мониторинга микроклимата UniPing server solution v3 с мессенджером «Telegram» мы получаем удобный инструмент для удалённого управления микроклиматом серверного помещения из любого уголка мира, где есть подключение к Интернет.

Цена: 1 429 руб.

Цена: 3 354 руб.

Цена: 2 240 руб.

Цена: 1 400 руб.

Цена: 8 157 руб.

Цена: 15 700 руб.

Цена: 1 224 руб.

Цена: 6 700 руб.

Цена: 3 800 руб.