Stupid House

Подключение Telegram bot к OpenHAB 3 для доставки уведомлений и управления умным домом


Подключение Telegram bot к OpenHAB 3 для доставки уведомлений и управления умным домом

Telegram хорошо зарекомендовал себя как средство доставки уведомлений и средство обратной связи на разных системах управления умным домом. OpenHAB не стоит в стороне и имеет средства работы с Telegram Bot.

Ранее уже рассматривалась тема создания бота для Телеграм и подключение его к Home Assistant. Задействовать такого бота не удастся, т.к. невозможно одновременно использовать одного бота двум программным продуктам. Выхода два:

  1. Отключить настройки бота в Home Assistant, но тогда не получится оперативно получать информацию из HA.
  2. Создать еще одного бота для нужд OpenHAB.

Идем по второму пути.

 

Создание нового бота в Telegram

Если у вас уже есть созданный Telegram бот, то переходим к следующему разделу.

В программе Telegram находим праотца всех ботов @BotFather и отсылаем ему команду:

/newbot

Первым сообщением нам предлагают придумать имя для бота, которое будет отображаться в чатах и контактах, это имя можно изменить в дальнейшем. Вторым предлагают придумать username, уникальное имя бота, которое должно заканчиваться на "bot". Допускаются буквы латинского алфавита, цифры и знак подчеркивания. В дальнейшем это имя изменить нельзя.

В сообщении после успешного создания бота будет написан токен для доступа к HTTP API.

openhab 3 create new telegram bot

 

Конфигурация OpenHAB

С помощью поиска находим созданного бота, отсылаем ему команду:

/start

Переходим в web браузере по ссылке:

https://api.telegram.org/bot170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE/getUpdates

здесь 170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE HTTP API ключ вашего бота.

На открывшейся странице ищем Chat ID с ботом.

openhab 3 telegram bot configure

В web браузере открываем страницу OpenHAB:

http://openhab_ip_address:8080 или http://openhab_host_name:8080

Добавляем Telegram Binding в разделе Settings -> Bindings -> +.

openhab 3 add telegram binding

Подключаемся к OpenHAB по SSH, переходим в каталог с конфигурационными файлами (для сборки OpenHABian: /etc/openhab, так же в OpenHABian конфигурационные файлы доступны в локальной сети \\openhabian_host_name\openHAB-conf\). В папке things создаем файл telegram.things, заполняем его:

Thing telegram:telegramBot:OH_TelegramBot [ chatIds="41431138", botToken="170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE" ]
  • chatIds - Список ID чатов.
  • botToken - токен для доступа к HTTP API.

Не обязательные дополнительные параметры:

  • parseMode - Поддержка форматированных сообщений, значения Markdown или HTML.
  • proxyHost - Адрес прокси сервера.
  • proxyPort - Порт прокси сервера.
  • proxyType - Тип прокси сервера, значения SOCKS5 или HTTP.

При использовании прокси сервера запись о Telegram боте в файле telegram.things будет выглядеть так:

Thing telegram:telegramBot:OHTelegramBot [ chatIds="41431138", botToken="170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE", proxyHost ="proxyhost_addr", proxyPort="1234", proxyType="SOCKS5" ]

После сохранения файла telegram.things в разделе Settings -> Things появится информация о подключенном боте.

openhab 3 telegram things

Переходим в папку items, создаем файл telegram.items, в котором опишем доступные свойства бота:

Group TelegramBot "Telegram Bot"  (HomeSweetHome) ["NetworkAppliance"]
String   TelegramBot_LastMessageText     "Last Message Text"      (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:lastMessageText" }
String   TelegramBot_LastMessageURL      "Last Message URL"       (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:lastMessageURL" }
DateTime TelegramBot_LastMessageDate     "Last Message Date"      (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:lastMessageDate" }
String   TelegramBot_LastMessageName     "Last Message Name"      (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:lastMessageName" }
String   TelegramBot_LastMessageUsername "Last Message Username"  (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:lastMessageUsername" }
String   TelegramBot_ChatId              "Chat Id"                (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:chatId" }
String   TelegramBot_ReplyId             "Reply Id"               (TelegramBot) ["Point"]  { channel="telegram:telegramBot:OHTelegramBot:replyId" }

Сохраняем файл и проверяем что все описанные Items прилинковали:

openhab 3 telegram bot items

Отослав боту сообщение, мы можем его увидеть в поле Last Message Text.

openhab 3 telegram items last message text

 

Автоматизация

Автоматизация демонстрирует проверку работы бота OpenHAB, при отправке боту команды /ping система в ответ пришлет ответ pong. В папке rules создаем файл telegram.rules. Записываем в файл следующую автоматизацию:

rule "Receive telegram - ping"
when
    Item TelegramBot_LastMessageText received update "/ping"
then
    val telegramAction = getActions("telegram","telegram:telegramBot:OHTelegramBot");
    telegramAction.sendTelegram("✅ pong");
end

Следующая автоматизация отсылает сообщение о состоянии розетки при изменении ее текущего состояния:

rule "Change state Socket"
when
    Item xiaomi_socket_room_Power changed
then
    val telegramAction = getActions("telegram","telegram:telegramBot:OHTelegramBot");
    telegramAction.sendTelegram("Socket status changed to: " + xiaomi_socket_room_Power.state);
end

 

Автор: muxa, 28.04.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии