Добрый день, уважаемый пользователь!
В этой статье я расскажу, как можно быстро и просто создать систему отправки уведомлений на любой смартфон и (или) компьютер c ESP32, без необходимости самостоятельно создавать какие-либо приложения.
Данная статья не очень связана с программированием ESP32, но она нам понадобиться в ближайшем будущем. Очень скоро я планирую "взять быка за рога" и расскажу, как создать устройство телеметрии котла на даче через WiFi и MQTT с уведомлениями, графиками и прочими сервисами. Пока не особо вдаваясь в подробности функционирования, просто используя готовую прошивку как "черный ящик" с некоторыми настройками. А уже потом на основе этого примера будем обсуждать что и как работает и зачем это надо.
Почему именно telegram?
Для этого есть несколько вполне объективных причин:
- В telegram реализован самый простой механизм отправки сообщений через API ботов. Нигде более просто отправить сообщение в чат или канал “со стороны” не получится (по крайней мере, я не встречал).
- Все сообщения, отправленные через бота, практически синхронно доставляются всем подписчикам бота и на смартфоны, и на компьютеры.
- При необходимости через тот же telegram можно не только отправлять уведомления от ESP к человеку, но и наоборот – отправлять команды от человека к устройству.
Регистрация бота
Для начала открываем Telegram и находим в поиске бота @BotFather:
Для того, чтобы получить команды бота, отправьте команду /help:
Отправьте команду /newbot. @BotFather спросит имя бота, в ответ на запрос отправьте желаемое имя бота, например "Умный дом" (или "Дача" или "Гараж" - то есть понятное человеку название устройства). Затем бот запросит имя пользователя для бота, которое должно заканчиваться на “_bot”. В ответ вам должен прийти токен бота (токен - это секретный ключ доступа к API telegram от имени только что созданного бота).
Все. Бот создан. Для работы с ботом потребуется токен доступа к API – запишите его, он потом потребуется!
По желанию к нему можно добавить описание, поменять картинку, добавить список поддерживаемых команд и т.д. Например:
Теперь Вы можете найти своего бота в поиске Telegram, и начать с ним работу. Но бот не ответит – ведь он пока еще ничего “не умеет”. Но как говорится – “не умеешь – научим, не хочешь – заставим”.
В принципе, этого уже достаточно для отправки сообщений в telegram – нужно только знать Ваш личный идентификатор в telegram (как его узнать – будет рассказано далее). Но это – не очень удобно. Если пользователь бота только один – то нормально. Но для того, чтобы отправлять уведомления сразу нескольким пользователям, придется “прописывать” каждого на ESP и отправлять уведомления каждому по очереди. Крайне неудобно.
Создаем канал
Но выход есть – создаем приватный канал, добавляем туда нужных пользователей (по ссылке-приглашению, например), а только что созданного бота добавляем в канал администратором. Вуаля – бот отправляет сообщение в канал, а все пользователи одновременно читают отправленные ботом (устройством) сообщения из канала. При необходимости можно добавлять или удалять пользователей канала, не затрагивая при этом программную начинку ESP.
Вместо канала, кстати, вполне можно создать группу. Главное отличие канала от группы - в канал могут писать только администраторы канала, а в группу - все пользователи. В группе пользователи могут обмениваться между собой какими-то дополнительными сведениями, например "Я выключил котёл" или "Датчик дыма сработал, но дыма нет, все в порядке". Кроме того, если вы планируете сделать управление устройством через команды telegram - вам точно потребуется создать группу. Но в статье мы пока рассмотрим как создать канал.
Создаем приватный канал - для этого в telegram нажимаем “Меню” и выбираем команду “Создать канал”:
Указываем название и описание канала. Здесь же можно загрузить картинку для канала:
Указываем, что канал будет приватным:
Сразу же можно добавить участников канала:
Но можно сделать это и потом, через меню канала:
А можно просто отправить потенциальным читателям канала ссылку – приглашение.
Теперь нужно добавить бота в канал. Добавить бота можно только к администраторам. Для этого открываем меню “Управление каналом”, и нажимаем на ссылку “Администраторы”:
Теперь нужно выяснить идентификатор канала, в который бот должен отправлять сообщения. Для этого достаточно отправить в канал любое сообщение, любой текст. Затем нужно отправить к API telegram специальный запрос на получение новых сообщений от пользователей и выяснить номер чата канала. Проще всего это сделать через обычный браузер, набрав в адресной строке следующий текст:
https://api.telegram.org/bot<ТОКЕН>/getUpdates
Например:
https://api.telegram.org/bot567087417:FLBLAAUYkQ9H1-3G58DVFH_R-vkIjaIolc0/getUpdates
где "567087417:FLBLAAUYkQ9H1-3G58DVFH_R-vkIjaIolc0" – токен бота, который мы получили в BotFather ранее.
В ответ мы должны получить JSON следующего вида:
{"ok":true,"result":[{"update_id":509976507,
"channel_post":{"message_id":2,"chat":{"id":-9149928783242,"title":"test","type":"channel"},"date":1564339476,"text":"test"}}]}
Нам нужен “chat” > “id” из “channel_post”, то есть -9149928783242 (цифры здесь заменены на случайные). Записываем это число, оно также нам пригодится. Кстати, обратите внимание – идентификаторы пользователей всегда положительные, идентификаторы каналов – отрицательные.
Отправка сообщений в telegram от имени бота
https://api.telegram.org/bot<ТОКЕН>/sendMessage
Если использовать токен из примера выше, то это будет выглядеть так:
https://api.telegram.org/bot567087417:FLBLAAUYkQ9H1-3G58DVFH_R-vkIjaIolc0/sendMessage
Я использовал обычный POST-формат. Мне потребовались следующие параметры:
chat_id => $chatId,
parse_mode => 'HTML',
text => $tgMsg
Где:
- $chatId – это идентификатор чата (то самое огромное отрицательное число),
- parse_mode – тип форматирования сообщения (может быть ‘text’, ‘html’ и ‘markdown’ – я пользуюсь ‘html’)
- $tgMsg – собственно текст сообщения
Сообщения при этом можно форматировать с помощью стандартной html-разметки. Можно использовать markdown разметку, но мне html ближе.
Как видите, отправка сообщений не представляет особого труда. На ESP32 с этим отлично справляется встроенная библиотека "esp_http_client.h", которая предоставляет легкий доступ к любым видам HTTP(S)-запросов. Написать функцию отправки запроса к API совсем не сложно:
Полный код библиотеки reTgSend с очередью отправки смотрите на GitHub: https://github.com/kotyara12/reTgSend. Саму библиотеку и её функции и параметры мы обсудим в другой статье, пока будем воспринимать ее (библиотеку) как некий "черный ящик", так как бота нам придется зарегистрировать для создания прошивки в самом ближайшем будущем.
Самое главное на данный момент - понять, как можно зарегистрировать чат бота, что мы и сделали в данной статье. После этого данные бота и идентификаторы каналов (основного и служебного) необходимо будет "прописать" в файле конфигурации проекта, примерно в таком виде:
Но к этому мы еще вернемся, когда будем обсуждать прошивку на базе ESP32 & ESP-IDF. А на этом пока всё...
_______________
На этом пока всё, до встречи на сайте и на dzen-канале!
👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.
📌Подпишитесь на канал и вы всегда будете в курсе новых статей.
🔶 Полный архив статей вы найдете здесь
Благодарю за вашу поддержку! 🙏