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/bot<strong>170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE</strong>/getUpdates

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

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

openhab 3 telegram bot configure

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

http://<strong>openhab_ip_address</strong>:8080 или http://<strong>openhab_host_name</strong>: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="<strong>41431138</strong>", botToken="<strong>170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE</strong>" ]
  • chatIds - Список ID чатов.
  • botToken - токен для доступа к HTTP API.

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

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

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

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

После сохранения файла 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
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии

Комментарии


Здравствуйте! При переходе в web браузере по ссылке:

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

выходит ответ: ok true result[] и все. chat id нет. Естественно свой токен подставил. Может в телеграме что-то поменялось? Как узнать chat id? Буду очень признателен за помощь.

Разобрался, нужно было отправить любое сообщение боту. Потом выдает chat id

Здравствуйте! Всё верно, чат не создастся пока не написать боту, поэтому не было chatID.