Подключение Telegram bot к OpenHAB 3 для доставки уведомлений и управления умным домом
Telegram хорошо зарекомендовал себя как средство доставки уведомлений и средство обратной связи на разных системах управления умным домом. OpenHAB не стоит в стороне и имеет средства работы с Telegram Bot.
Ранее уже рассматривалась тема создания бота для Телеграм и подключение его к Home Assistant. Задействовать такого бота не удастся, т.к. невозможно одновременно использовать одного бота двум программным продуктам. Выхода два:
- Отключить настройки бота в Home Assistant, но тогда не получится оперативно получать информацию из HA.
- Создать еще одного бота для нужд OpenHAB.
Идем по второму пути.
Создание нового бота в Telegram
Если у вас уже есть созданный Telegram бот, то переходим к следующему разделу.
В программе Telegram находим праотца всех ботов @BotFather и отсылаем ему команду:
/newbot
Первым сообщением нам предлагают придумать имя для бота, которое будет отображаться в чатах и контактах, это имя можно изменить в дальнейшем. Вторым предлагают придумать username, уникальное имя бота, которое должно заканчиваться на "bot". Допускаются буквы латинского алфавита, цифры и знак подчеркивания. В дальнейшем это имя изменить нельзя.
В сообщении после успешного создания бота будет написан токен для доступа к HTTP API.
Конфигурация OpenHAB
С помощью поиска находим созданного бота, отсылаем ему команду:
/start
Переходим в web браузере по ссылке:
https://api.telegram.org/bot<strong>170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE</strong>/getUpdates
здесь 170XXXX816:AAHDlacXXXXXXXXXXXXXXXQ_LoqE HTTP API ключ вашего бота.
На открывшейся странице ищем Chat ID
с ботом.
В web браузере открываем страницу OpenHAB:
http://<strong>openhab_ip_address</strong>:8080 или http://<strong>openhab_host_name</strong>:8080
Добавляем Telegram Binding
в разделе Settings -> Bindings -> +
.
Подключаемся к 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
появится информация о подключенном боте.
Переходим в папку 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 прилинковали:
Отослав боту сообщение, мы можем его увидеть в поле 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
Комментарии
Здравствуйте! При переходе в web браузере по ссылке:
выходит ответ: ok true result[] и все. chat id нет. Естественно свой токен подставил. Может в телеграме что-то поменялось? Как узнать chat id? Буду очень признателен за помощь.
Разобрался, нужно было отправить любое сообщение боту. Потом выдает chat id
Здравствуйте! Всё верно, чат не создастся пока не написать боту, поэтому не было chatID.