Как подключить telegram к home assistant

от admin

Telegram

The telegram platform uses Telegram to deliver notifications from Home Assistant to your Telegram application(s).

Setup

The requirements are:

  • You need a Telegram bot. Please follow those instructions to create one and get the token for your bot. Keep in mind that bots are not allowed to contact users. You need to make the first contact with your user. Meaning that you need to send a message to the bot from your user.
  • You need to configure a Telegram bot in Home Assistant and define there your API key and the allowed chat ids to interact with.
  • The chat_id of an allowed user or group to which the bot is added.

Method 1: You can get your chat_id by sending any message to the GetIDs bot.

Method 2: To retrieve your chat_id you can visit https://api.telegram.org/bot<YOUR_API_TOKEN>/getUpdates or to use $ curl -X GET https://api.telegram.org/bot<YOUR_API_TOKEN>/getUpdates after you have sent the bot a message. Replace <YOUR_API_TOKEN> with your actual token.

The result set will include your chat ID as id in the chat section:

Method 3: Another way to get your chat ID directly is described below. Start your Python interpreter from the command-line:

Configuration

To enable Telegram notifications in your installation, add the following to your configuration.yaml file:

Refer to the platforms mentioned in the Telegram chatbot page for telegram_bot configuration.

Умный дом на основе API Telegram

Как реализовать рабочую IoT систему на API Telegram, создавать устройства, предусмотрев масштабируемость и развитие проекта.

Привет, Хабр! Около года назад я доводил до ума настольные часы на лампах ИН-14. Работая над ними, мне хотелось привнести что-то новое в подобную классику: светодиодная RGB подсветка ламп, красивые эффекты для неё, управление подсветкой с телефона, создание приложения, Bluetooth, Wi-Fi, синхронизация времени…

Тут я и задумался, как я вообще пришёл к тому, что часам нужен Wi-Fi? Для чего вообще устройствам выход в сеть, беспроводные соединения? Все эти вопросы открыли для меня огромный мир IoT и я с невероятным интересом начал туда погружаться, изучая как теорию, так и предложения на рынке.

Рассуждения об IoT и как я пришёл к своему кейсу.

На мой взгляд, существует несколько подходов к планированию своего умного дома:

Вам нужно просто включать-выключать пару розеток. Вы покупаете умную розетку любого производителя, настраиваете приложение, профит.

У вас есть бюджет и вам нужен полноценный умный дом с огромными возможностями, различными датчиками, охраной, обладающий отказоустойчивостью, резервным питанием и т.д. Вы обращаетесь в контору, вам создают всё под ключ, профит.

У вас нет бюджета, но есть углубленные знания в сфере IoT, вы ищете компоненты, микроконтроллеры, создаете код, платы, делаете нереально крутую систему, которая подходит именно вам, профит.

У вас нет бюджета и углублённых знаний о построении сложных систем, и вы хотите такие же широкие возможности.

Так сложилось, что мои желания и бюджет как раз относились к последнему пункту. Виделось два решения:

купить устройства от одного производителя, настроив одну экосистему,

покупать устройства от разных производителей, лишая себя удобства управления, устанавливая несколько приложений, проходя этапы регистрации, но, более бюджетно.

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

Сейчас я понимаю, что можно было купить устройства одной экосистемы, и спокойно себе пользоваться, докупая новые решения того же производителя, не испытывая неудобств. Но сложилось как сложилось — я был недоволен имеющимися у меня решениями и мне захотелось создать своё. А бросить начатое — как-то это не по мне.

В самом начале я просто делал устройства для собственного пользования, без чётко сформулированной задачи, без определения к чему это движется. Когда дело дошло до более-менее рабочих прототипов, заинтересовались друзья: «мне это нравится», «это удобно», «было бы здорово такое иметь у себя дома», «это удобнее других решений». На этом моменте как раз начало вырисовываться понимание к каким целям стоит идти.

Итак, основные задачи кейса:

попробовать создать свою IoT экосистему,

предусмотреть масштабируемость и добавление новых устройств,

сделать управление максимально удобным,

устройства должны быть бюджетнее, чем готовые решения,

создать максимально интуитивную настройку всей системы.

Хотелось сделать такой проект, чтобы не только мне было понятно и удобно пользоваться, а чтобы я мог предложить её как минимум своим друзьям и знакомым, а как максимум — предлагать готовое решение на рынке.

О системе умного дома

Первая важная задача — определить, с помощью чего будет происходить управление. Выбор пал на использование API Telegram, это даёт возможность управлять устройствами просто из чата. Конечно, можно было создать очередное приложение, что вышло бы в разы сложнее, дольше, ненадёжнее. Пользователям приходилось бы скачивать его, регистрироваться, запоминать пароли. Вот некоторые из преимуществ использования мессенджера:

Безопасность. Аккаунт под надеждой защитой Telegram.

Удобство. Очень просто переключиться с любого диалога на бота.

Кроссплатформенность. Одно приложение для любых устройств: поддерживается Android, iOS, Windows, Linux и другие.

Доступность. Управлять умным домом можно из любой точки мира, где доступен интернет.

Вторая важная задача — определить «мозг» всех устройств. Здесь мой выбор пал на чип ESP8266 на плате ESP-12F. Важный плюс — возможность писать код в простейшей Arduino IDE и наличие протокола ESP-NOW для связи устройств между собой внутри дома. Как я выяснил позже, решение оказалось вполне рабочим, но спорным. Обо всех минусах расскажу в конце статьи.

Для удобства, сначала расскажу об устройствах, как они работают, как работает вся система, а затем подробнее погружусь в процесс создания устройств и расскажу о нюансах кода.

На данный момент разработано несколько устройств:

Шлюз в виде часов Miss You Even When We’re Together (MYEWWT).

Беспроводной сенсорный выключатель.

Miss You Even When We’re Together

Умный дом нуждается в одной очень важной штуке. Её называют шлюз. Обычно она где-то лежит, собирая пыль как Wi-Fi-роутер, и тихонько выполняет свои неприметные, но важные функции: объединяет все устройства умного дома в единую сеть, а также выходит в интернет через Wi-Fi.

В принципе всё. Скучноватая у неё работа, да?

Зачем устройству просто стоять и выполнять эти функции, если можно сделать круче, интереснее и удобнее? Именно так я подумал и решил приступить к созданию MYEWWT.

MYEWWT выполнено в виде настольных часов, сочетающих в себе функции Wi-Fi шлюза, часов реального времени, оснащено датчиком влажности, температуры воздуха, а также фоторезистором для адаптивного изменения яркости сегментов часов в зависимости от условий освещённости в помещении.

MYEWWT взаимодействует c API Telegram, позволяя пользователю отправлять команды и предоставляет на них ответ в Telegram-боте, заранее созданном пользователем.

MYEWWT подключается к Интернету через WI-Fi и взаимодействует с Telegram ботом, получая команды от него, обрабатывает их и управляет периферийными устройствами: выключателями света, умными розетками и т.д. с помощью технологии ESP-NOW.

Возможности устройства MYEWWT:

соединение с точкой доступа Wi-Fi и выход в интернет,

обмен данными с другими устройствами умного дома с применением технологии ESP-NOW,

контроль температуры и влажности воздуха в помещении,

возможность смены цвета сегментов часов на любой из диапазона RGB.

Как настроить MYEWWT?

Чтобы управлять системой умного дома grib technology с помощью устройства MYEWWT нужно создать собственного бота в Telegram.

Для этого необходимо:

Открыть диалог с BotFather. Это главный бот — он создаёт ботов. Нажать старт, а после его ответа ввести команду /newbot.

Придумать любое название (name) для бота, например «Мой дом» или «Квартира_50».

Придумать имя бота (username). Оно должно оканчиваться на «_bot». Стоит обратить внимание, имя должно быть уникальное и написано на латинице.

После завершения процедуры создания бота, необходимо сохранить выделенные на скрине данные — ссылку на бота и токен. Токен обязательно нужно хранить в тайне, так как с помощью него предоставляется доступ к боту. (На скрине недействительный, зафотошопленный токен).

После этого остается сделать следующее:

Включить MYWWT. Все сегменты загорятся переливающейся радугой. Нужно подключиться с телефона, планшета или компьютера к Wi-Fi сети MYEWWT с паролем iloveyou.

Зайти в браузер по адресу http://10.10.10.10 и ввести точку доступа своего домашнего Wi-Fi, пароль и токен созданного бота в предложенную форму.

После всех процедур в течении нескольких секунд MYEWWT соединится с сетью, время синхронизируется по NTP серверу и станет доступен весь функционал MYEWWT.

3д модель платы3д модель платы схема платысхема платы

На плату подаётся питание 5 В от USB кабеля. Так как микроконтроллеру ESP-12F требуется питание 3.3 В, предусмотрен блок стабилизации напряжения — непосредственно сам стабилизатор AMS1117-3.3, а также входные и выходные сглаживающие конденсаторы для обеспечения стабильности работы платы.

Светодиодам WS2812b, в отличие от ESP-12f, для корректной работы требуется 5 В, поэтому на плате предусмотрен конвертер логических уровней на основе N-канального MOSFET транзистора.

Также в схему подключен модуль DHT-22, который обменивается с модулем ESP-12f показаниями температуры и влажности воздуха по линии SDA.

Для обеспечения адаптивной яркости светодиодов в схему включен фоторезистор, подключенный к ADC пину микроконтроллера с применением резисторов, обеспечивающих рабочий диапазон на аналоговом входе микроконтроллера.

Принцип работы системы умного дома

На картинке представлена схема. Именно так происходит управление всей системой: отправленное боту сообщение обрабатывается устройством MYEWWT. Если в систему добавлены дополнительные устройства — умные розетки, реле и т.д., команда от бота обрабатывается сначала устройством MYEWWT, затем передаётся подключенным в систему устройствам с применением технологии ESP-NOW.

Подробнее о прошивке

Код я начал писать в среде Arduino IDE с применением SDK от компании Espressif для микроконтроллера ESP-12F, затем развил его в среде VS Code с применением набора инструментов PlatformIO.

Большая часть кода проекта прокомментирована и разбита на удобные части в виде нескольких файлов:

основная, с общим циклом и объявлением глобальных переменных и некоторых функций,

для функций, вызываемых при отправке и приеме сообщений через ESP-NOW,

функции, используемые для работы адресных светодиодов,

блок с функциями для работы сервера (captive portal),

функция-обработчик сообщений с бота Telegram,

блок с прочими системными функциями: отсчёт времени, обновление прошивки, синхронизация времени и т.д.

В моей системе умного дома используются два типа соединений:

От сервера Telegram к шлюзу MYEWWT.

От шлюза MYEWWT к прочим устройствам системы (розетки, реле, выключатели и т.д.).

Соединение сервер-MYEWWT.

Все аспекты безопасности самого API Telegram, а конкретно защита профиля, защита чатов и т.д. описаны здесь.

Между серверами Telegram и MYEWWT устанавливается соединение по защищённому каналу связи, это гарантирует протокол SSL, сами сервера Telegram не дают возможности подключиться и получить запрос от бота, без использования SSL шифрования.

В коде прошивки благодаря BearSSL (реализация протокола SSL на языке C) создаётся клиент, с помощью которого мы имеем возможность получать и отправлять запросы к API Telegram, конкретно к указанному в прошивке (при настройке MYEWWT) боту.

Чтобы другой пользователь, получивший ссылку на бота под управлением MYEWWT или обнаружив его в поиске не смог получить доступ к нему, в коде прошивки создаётся white list, где находятся ID пользователей. ID — уникальный номер аккаунта в Telegram, его невозможно подделать и изменить. Таким образом, при настройке MYEWWT, доступ получает первый человек, обратившийся к боту, его ID сохраняется в энергонезависимой памяти, и возможность обмена сообщений закрепляется за данным пользователем, сообщения от других пользователей просто отсеиваются.

Также в коде прошивки есть возможность выдать правда доступа к MYEWWT другим пользователям — достаточно в настройках выбрать меню «Добавить пользователя» и указать его ID.

Подводя итог, можно сделать вывод о безопасности подобного соединения. Чтобы иметь несанкционированный доступ к боту — придется получить доступ к аккаунту владельца MYEWWT, что сделать довольно сложно, а при должных настройках безопасности Telegram профиля — практически невозможно.

Соединение MYEWWT-устройства

Внутри дома прочие устройства, такие как розетки, реле, выключатели и т.д. не подключены к Wi-Fi и не связаны с интернетом (за исключением попыток связи с сервером для обновления прошивки раз в n часов)

Связь между MYEWWT и другими устройствами передаётся с помощью ESP-NOW — встроенного в SDK от Espressif метода передачи данных. Данное соединение одноранговое, не требует времязатратного «рукопожатия» а также обеспечено возможностью применения протокола CCMP, алгоритма AES-128. Связь между устройствами устанавливается посредством отправки пакета на MAC-адрес устройства, либо с использованием широковещательной передачи.

В документации указано ограниченное число соединений:

Максимум 20 пар, включая зашифрованные, поддерживаются на одном устройстве, включая зашифрованные пары. Максимум 10 зашифрованных пар поддерживаются в режиме Station. Максимум 6 в режиме SoftAP или SoftAP + Station.

А также указано о необходимости регистрации устройств на этапе компиляции прошивки:

Несмотря на это, было установлено, что без выполнения подобных рекомендаций, можно ограничиться лишь объявлением функций, вызываемых при принятии и отправке пакета:

и непосредственно функцией отправки пакета:

ограничиваясь, таким образом, лишь памятью ESP-12f, где хранятся MAC адреса добавленных устройств.

Также стоит отметить, чтобы функции ESP-NOW отрабатывались без ошибок, оба устройства должны быть установлены на один и тот же канал Wi-Fi. Устройства время от времени сканируют сеть, выбирают точку доступа MYEWWT, или точку доступа домашней сети Wi-Fi при недоступности сети MYEWWT, и настраиваются на её канал. При этом подключение к самой точке доступа не требуется.

Структуры для связи по ESP-NOW

Управление с помощью ESP-NOW происходит благодаря созданию структур, в которых присутствуют несколько основных переменных. ID, value, SSID и password.

SSID и password необходимы для обмена между устройствами данными об основной точке доступа Wi-Fi, чтобы устройство могло настроиться на канал и/или соединиться с сервером для обновления прошивки.

Несколько различных структур в зависимости от передающего и принимающего устройства:

to_relay (на принимающем устройстве from_MYEWWT),

to_switch (на принимающем устройстве from_MYEWWT),

to_MYEWWT (на принимающем устройстве from_device).

Структуры с переменными в коде:

0 — запрос на настройку к MYEWWT от прибора,

1 — запрос от MYEWWT к прибору,

2 — запрос на настройку к MYEWWT от выключателя,

3 — отчет об успешной настройке к MYEWWT от выключателя,

4 — запрос к прибору от выключателя,

5 — отправка данных к выключателю от MYEWWT,

6 — уведомление об открытой двери,

7 — отчет о получении уведомления открытой двери.

2 — запрос на включение/выключение,

3 — запрос состояния.

Обновление прошивки

Я предполагаю развитие системы, совершенствование и создание новых устройств, поэтому в реле и розетках а также в других устройствах предусмотрена функция обновления прошивки: раз в 12 часов устройство пытается связаться с сервером, где находится файл со следующей версией прошивки. При отсутствии файла, следующий запрос происходит через 12 часов. Если на сервере присутствует запрашиваемый файл — прошивка обновляется.

Данная возможность реализована с помощью встроенной в SDK библиотеки ESP8266httpUpdate.

В функции обновления сначала создаётся клиент:

затем объявляются callback функции:

и непосредственно сама строчка, отвечающая за связь с сервером и обновление прошивки:

Функция обновления прошивки справляется с некоторыми внештатными ситуациями и не вызывает поломок и «окирпичивания» модуля: при внезапном отключении питания, обрыве связи с сервером и прочими проблемами прошивка приостанавливается и возобновляется при восстановлении подключения или подключении питания.

Ещё одна интересная задача, которую удалось решить в процессе — конвертер из Юникода.

Конвертер из Юникода

Помимо прочих, в проекте используются библиотека FastBot от AlexGyver, для удобного парсинга сообщений от бота. Функционал MYEWWT предполагает использование смайликов и кириллических символов, но при обращении с API Telegram обработчик получает Юникод, поэтому библиотека FastBot была доработана — дописана функция конвертации символов Юникода в UTF-8.

Читать:
Как узнать скрытый номер в телеграмме

В википедии найдены алгоритмы преобразования Юникода в UTF-8. Нужно определить, сколько октетов используется, в соответствии с этим создать шаблоны в битовом выражении, далее побитно включить или выключить нужные биты в шаблоне, затем с помощью логического умножения взять маской биты и включить, после этого преобразовать в последовательность символов HEX системы. В результате успешно получаем русский, индийский и прочие алфавиты.

С другими символами и смайлами ситуация обстоит немного иначе: UTF-8 может занимать и 4 бита, кодируя в принципе весь диапазон Юникода, но во входящем сообщении от Telegram мы видим суррогатные пары UTF-16. Если коротко, цельные байты UTF-8 разбиваются на две пары — верхняя и нижняя часть суррогатной пары. Её нам нужно восстановить в цельный Юникод по формуле, чтобы затем преобразовать в уже знакомую нам последовательность HEX в utf-8:

Реле и розетка

Розетка и реле сделаны на основе одной платы, различия лишь в корпусе и подключении: в реле это клеммы, в розетке это штепсель и вилка.

Реле вышло очень компактным и отлично помещается в плоские настенные светильники, можно установить в торшеры, настольные лампы. Вмещается даже в некоторые потолочные чаши для люстры. А вообще, установить можно куда угодно: главное соблюдать мощность — 2.2 КВт, потому что на плате установлено реле на 10 А.

3д модель платы3д модель платы схемасхема

На плату подаётся питание 5 В от блока питания, подключенного через изоляционную прокладку. Так как микроконтроллеру ESP-12F требуется питание 3.3 В, предусмотрен блок стабилизации напряжения — непосредственно сам стабилизатор AMS1117-3.3, а также входные и выходные сглаживающие конденсаторы для обеспечения стабильности работы платы.

Для корректной работы реле, в отличие от ESP-12f, требуется 5 В, поэтому на плате предусмотрен транзистор MMBT2222A, позволяющий управлять обмоткой реле.

Также в схему включена тактовая кнопка для удобства аналогового управления а также поддержки возможности управления реле или розеткой при отсутствии соединения с интернетом.

Выключатель

Когда ты находишься внутри дома, не очень удобно пользоваться Телеграмом, нужен обычный выключатель. У него сенсорные кнопки, он довольно тонкий, питается от двух ААА батареек, крепится в любое место на двусторонний скотч, работает очень долго. Выключатель управляет реле и розетками также с помощью ESP-NOW.

3д модель платы3д модель платы схемасхема

На плату подаётся питание 3 В от батарейного отсека, в котором находятся две батарейки типа ААА. Питание микроконтроллера осуществляется с помощью режима Power-Down, при котором потребление самого микроконтроллера составляет 3 мкА. Каждый сенсорный модуль потребляет 2 мкА, в сумме весь выключатель в режиме ожидания потребляет

7мкА, чего хватает на долгое время (от нескольких месяцев до нескольких лет в зависимости от используемых батареек и активностью использования).

В режим Power-Down микроконтроллер ESP-12F вводится благодаря отключению питания с пина EN.

Логика работы выключателя следующая: при нажатии на кнопку высокий уровень (HIGH) подается на GPIO0, GPIO2 и на пин EN, что запускает микроконтроллер. При включении в коде прошивки HIGH подаётся на GPIO0:

это нужно для поддержания питания на пине EN даже при незажатой кнопке. Помимо этого, HIGH подаётся также на GPIO14 или GPIO4 в зависимости от нажатой кнопки, для того, чтобы микроконтроллер смог определить какая кнопка была нажата и поднять соответствующий флаг butt1 или butt2:

Затем, после отработки цикла (отправки запроса на включение или выключение устройства), микроконтроллер переводит пин GPIO0 в LOW, что в результате переводит пин EN также в LOW, а микроконтроллер в режим Power-Down. На случай, если кнопка не была отпущена, в качестве защитной меры микроконтроллер дополнительно вводится в режим Deep-Sleep командой deepSleepInstant.

p.s. (system_deep_sleep() назначает таймер с процедурой system_deep_sleep_instant() через 100 мс, соответственно, используя напрямую данную команду мы экономим 100 мс)

Как всё это сделать?

От идеи до готовых устройств, которые я отдавал на тестирование друзьям, а затем даже начал продавать, прошло большое количество времени, были испробованы разные варианты, разные подходы, и вот на чём я остановился.

MYEWWT.

Корпус состоит из двух частей, напечатанных на 3д принтере: основная часть, куда крепится плата, и подставка, куда крепится датчик температуры и влажности с проводом питания. Свет от светодиодов нужно рассеивать — для этого идеально подходит транслюцентная плёнка Oracal8500. Чтобы всё было красиво с лицевой стороны — закрепляю на болтиках оргстекло 2 мм, вырезанное лазером. Его заказываю на местном производстве, где занимаются фрезеровкой и лазерной резкой.

Розетки

Корпус печатаю на 3д принтере, наклейки заказываю в местной типографии. УФ-печать на прозрачной пленке, с плоттерной резкой. Изначально корпус проектировал для того, чтобы вставить готовые штепсели и вилки — стоят они недорого, качество и надежность в разы выше, чем если бы вся розетка была готовой.

Также как и розетки, корпуса реле изготавливаются посредством 3д печати, наклейку также заказываю в типографии, с плоттерной резкой.

Выключатель

Корпус выключателя тоже выполнен на 3д принтере, передняя часть сделана из акрила (белого оргстекла), на котором лазером выгравированы канавки в виде частей логотипа — шляпок гриба. Эти канавки заполняются акриловой краской. Белое оргстекло заказано на том же местном производстве.

Платы всех устройств заказываются на китайских производствах вроде allpcb, jlcpcb, pcbway и т.д., вместе с частичной сборкой, чтобы не тратить время на запаивание smd компонентов.

Демонстрация работы

Итак, возможности системы:

управление розетками и реле с получением ответа о состоянии,

получение информации о температуре воздуха от MYEWWT,

получение информации о влажности воздуха от MYEWWT,

добавление и удаление из списка розеток и реле,

возможность настраивать (связывать) выключатель с розеткой и реле,

управление цветом сегментов часов,

возможность делегировать другим пользователям права на управление системой,

автоматическое обновление прошивки.

Также есть мысли о дополнениях, которые планирую ввести в ближайшее время:

сделать возможность каждому устройству быть шлюзом: пользователю не нужно будет покупать MYEWWT, с помощью даже одной розетки будет возможность создать систему и управлять ей, подключая остальные устройства к главному.

изменить клиента для загрузки прошивки на клиента с поддержкой SSL соединения,

добавить проверку сертификатов, fingerprint и прочие дополнения для более безопасного соединения с Telegram,

создать датчик открытия двери (начало уже положено).

Общение с ботом происходит путём нажатия кнопок встроенной клавиатуры, то есть не нужно писать сообщения, набирать текст, вручную вписывать команды через слеш. Всё максимально удобно и просто:

Скрины — примеры общения с ботом.

основное менюосновное меню вторая часть менювторая часть меню управление освещениемуправление освещением управление розеткой и запрос температуры и влажностиуправление розеткой и запрос температуры и влажности настройка цвета сегментов часовнастройка цвета сегментов часов настройка розетки и управление ейнастройка розетки и управление ей настройка яркости сегментов часовнастройка яркости сегментов часов настройка выключателянастройка выключателя делегирование прав доступа другим пользователямделегирование прав доступа другим пользователям

Итоги и рефлексия

Опишу основные плюсы и минусы проекта на данном этапе.

проект существует, а не остался идеей на бумаге,

реализована большая часть задуманного функционала,

реализован интерфейс и возможности, позволяющие обычному человеку, далекому от сферы IT комфортно пользоваться устройствами и всем проектом,

используется относительно неплохой протокол связи,

применены основы безопасного соединения,

приборы стабильно работают, бот стабильно отрабатывает все команды,

присутствует ключевая привлекающая особенность — использование Telegram,

предусмотрена возможность масштабирования и создания новых устройств,

предусмотрена возможность доработки прошивки и участия любого заинтересовавшегося человека путём создания open source репозитория на github,

есть возможность добавить поддержку MQTT, поддержку голосового помощника Алиса и осуществить интеграцию с прочими ресурсами,

есть первые продажи, есть перспектива коммерческой востребованности,

стоимость компонентов позволяет создавать качественные и бюджетные устройства.

Последние два пункта — лишь до недавнего времени: последние мировые события, к сожалению, сильно повлияли на стоимость компонентов, лишили возможности их оперативного заказа, наличия в местных магазинах.

Минусы и спорные моменты:

устройства печатаются на 3д принтере, уступая внешнему виду устройств конкурентов, производящихся на заводах большими партиями,

потребление даже в режиме Power-Down выше чем у современных чипов для IoT, например BLE,

ESP8266 — устаревший по всем направлениям чип, имеющий множество недостатков.

связь с Telegram через http медленнее, чем использование mqtt (но предусмотрена возможность добавления поддержки mqtt),

весь мир движется в сторону ZigBee и Matter, лишая смысла использование альтернативных протоколов, тем более такого как ESP-NOW.

Предполагая некоторые комментарии, напишу некоторые вещи сразу:

Miss You Even When We’re Together — название, вдохновлённое платформами SpaceX Илона Маска,

название grib technology и логотип — просто ради красоты 🙂 Да и «устройства от Глеб Жуков» звучит не так презентабельно и убедительно.

Есть ли будущее у данного проекта — очень спорно. Возможно, новые продажи и ресурсы приведут к развитию, созданию более качественных устройств, плавному подходу к созданию MVP и инвестициям, но опять же, последние события лишают надежды заниматься подобным.

Да и будем смотреть правде в глаза: для действительно серьёзных и больших проектов, скорее всего, нужны большие команды людей, либо целые компании с опытом создания. Я же обычный студент, причём, обучающийся даже не в сфере IT. Закончу писать статью и буду искать хоть какую-то работу 🙂

Этот проект — своего рода хобби, с замахом на то, чтобы стать полезным и интересным для людей, принести людям удобство и пользу, а мне ресурсы для продолжения его развития и совершенствования.

Буду несказанно благодарен любым комментариям, советам, предложениям, дополнениям.

Надеюсь, кому-нибудь эта статья будет полезна, может быть даже замотивирует заниматься программированием и электроникой — тоже буду очень рад.

Все исходники, прошивки, схемы, инструкции можете найти на github. Спасибо!

Как настроить отправку сообщений в Telegram из Home Assistant

Есть несколько разных способов как можно отправлять сообщения из Home Assistant. Если вы используете мессенджер Telegram, то очень удобно настроить чтобы сообщения из Home Assistant приходили именно в этот мессенджер.

Подключение состоит из нескольких этапов:

  • Создать Telegram бота и получить токен
  • Узнать собственный ID в Telegram
  • Вписать в конфигурационные YAML файлы Home Assistant необходимые настройки
  • Проверить что сообщения приходят
  • Начать использовать (написать автоматизации которые отправляю сообщения или добавить отправку сообщений в уже существующие автоматизации)

Для некоторых интеграций обязательно необходимо чтобы сервер Home Assistant был доступен снаружи, но в случае Telegram — это не обязательно. Можно настроить отправку сообщений в Telegram вне зависимости от того, есть ли у вас доступ к Home Assistant снаружи или его нет.

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

Для того чтобы можно было отправлять сообщения из Home Assistant нужно создать Telegram бота. Для того чтобы создать бота нужно поговорить со специальным ботом https://t.me/BotFather (это официальный бот Telegram)

Этому боту нужно отправить команду «/newbot». После этого он спросит две вещи: имя и логин бота. Имя можно ввести любое, а логин обязательно должен заканчиваться на слово «Bot». Ботов уже очень много и многие логины заняты, возможно не сразу получится найти логин который свободен.

Но логин бота ни на что не влияет, если не получится найти свободной красивый логин, то можно ввести какую-то случайную строчку.

Результат — BotFather пришлет сообщение что бот создан и в этом сообщении будет токен.

Вот токен, который получил я:

(После написания этого текста я поменял этот токен, так что не получится использовать эту строчку для управления моим ботом)

Узнать собственный ID в Telegram

Чтобы отправлять сообщения из Home Assistant нужно знать кому их отправлять. Нужно узнать собственный ID в Telegram. Есть множество Telegram ботов с помощью которых можно выяснить собственный ID. Например, https://t.me/GetIdsBot Этому боту нужно отправить сообщение /start, а в ответ он пришлет всю техническую информацию про ваш аккаунт. Из ответа бота нужно только значение ID.

Настройка Home Assistant

На данный момент у вас уже есть токен бота, есть ID вашего аккаунта, теперь нужно написать конфиг для Home Assistant.

В файл secrets.yaml нужно вписать строчку telegram_token:, а потом ваш токен:

В файл configuration.yaml нужно вписать (только в двух местах этого конфига нужно указать ID вашего аккаунта в Telegram):

И перезапустить Home Assistant.

Проверка работы

После того как Home Assistant запустился, нужно зайти в раздел «Services» ( http://IP:8123/developer-tools/service ) и начать там вводить название нового сервиса notify.me, который мы добавили:

Такой сервис должен быть. Нужно его выбрать, и в дополнительное поле ввести:

После того как все настроено, то при нажатии на кнопку в Telegram будет приходить сообщение «asdf» от вашего бота.

Но если вы сейчас нажмете эту кнопку, то сообщение не придет (можете попробовать).

Это специфика того как работают боты в Telegram. Боты не могут первыми отправить сообщение человеку. Обязательно сначала человек должен начать разговор с ботом, только после этого бот сможет отправлять сообщения.

Нужно найти в Telegram вашего бота (BotFather вам прислал ссылку на него) и написать ему какое-нибудь сообщение.

После этого можно попробовать отправить сообщение из инструмента Home Assistant и вы его получите.

Отправка сообщений в Telegram из автоматизаций

Итак, сейчас у вас в Home Assistant появился сервис с помощью которого можно отправлять сообщения в Telegram. Дальше его нужно начать использовать в автоматизациях.

Вот пример автоматизации которая отправляет в Telegram текущее время:

Конечно, нет никакого смысла отправлять каждую минуту текущее время. Это просто пример как можно использовать шаблоны в сообщениях (Есть отдельный текст с подробностями как использовать шаблоны в Home Assistant)

А вот пример полезной автоматизации. При запуске Home Assistant отправит сообщение в Telegram. Удобно узнать что HA уже стал доступен после штатной перезагрузки или по какой-то причине он сам перезапустился:

(Про автоматизации у меня есть отдельный текст, в котором я рассказываю основные вещи как работают автоматизации и как их создавать)

Для чего можно использовать отправку сообщений? Например, уведомлять о всяких нештатных событиях: перегрелся процессор; никого нет дома, но идет потребление воды; влажность в ванной долго не приходит в норму. Можно присылать всякую статистику — первого числа присылать отчет о том сколько было потрачено электричества и разбивку по потребителям. Удобно присылать всякую отладочную информацию — в сети появилось новое wifi устройство; успешно подключено новое устройство к zigbee сети.

Стандартная проблема

Достаточно часто при настройке сообщений в Telegram из Home Assistant возникает проблема: некоторые сообщения отправляются, а некоторые нет.

Одна из причин почему так может быть — в конфигурационных файлах Home Assistant в разделе «telegram_bot:» не указано значение для параметра «parse_mode». В этом случае используется значение «parse_mode» по умолчанию, т.е. «markdown». А в таком случае некоторые сообщения вызывают ошибку и не отправляются. Например сообщение «asdf_asdf» не может быть отправлено в режиме «markdown».

Вот какая ошибка будет видна в логе:

Это, конечно же, баг в Home Assistant, который должен быть исправлен. Но пока этот баг существует, решение — это явно указать «parse_mode: html» в настройках.

Что можно еще сделать

В этом тексте мы создали новый сервис в Home Assistant notify.me, с помощью которого можно отправить вам сообщение. Можно создать еще несколько сервисов, чтобы отправлять сообщения другим людям.

А еще можно отправлять сообщение не конкретному человеку, а в групповой чат.

Кроме отправки сообщение еще есть возможность настроить управление Home Assistant через команды в telegram, в некоторых ситуациях это может быть удобно.

Related Posts