Меня часто спрашивают, как с помощью Home Assistant отправить в Telegram скриншот сайта или картинку с прогнозом погоды.
На самом деле не часто, но я пару раз видел такой вопрос в Telegram-чатиках 🙂 Сама идея мне показалась прикольной и поэтому я решил немного прокачать своего Telegram-бота, так чтобы он присылал мне прогноз погоды картинкой:
А еще я ж блогер, поэтому таким же образом настроил отправку статистики по блогу:
Lovelace Kindle Screensaver
Сделать такое можно с помощью Lovelace Kindle Screensaver. Изначально этот аддон создавался, чтобы показывать панель Home Assistant на электронной читалке, но и для нашей задачи он подходит.
Lovelace Kindle Screensaver в фоне запускает браузер, который открывает ваш Home Assistant и периодически его скриншотит. А полученные скрины уже можно использовать, чтобы отправлять их в Telegram.
Установка и настройка
Установить аддон на HAOS или Home Assistant Supervised можно по вот этой ссылке (только предварительно укажите путь до вашего инстанса Home Assistant). А если у вас Home Assistant Core, то я уверен вы и без меня разберетесь 🙂
Дальше в настройках аддона нужно указать несколько обязательных параметров:
HA_BASE_URL
— адрес вашего инстанса Home Assistant. Например,http://homeassistant:8123
.HA_SCREENSHOT_URL
— путь до панели управления Lovelace, которую нужно скриншотить. Для панели по умолчанию укажите/lovelace/default_view
.HA_ACCESS_TOKEN
— токен, для доступа к вашему Home Assistant. Сгенерировать его можно в профиле пользователя, в разделе «Долгосрочные токены доступа».- Так же
COLOR_MODE
нужно переключить наTrueColor
. - А
REMOVE_GAMMA
нужно выключить.
Этих основных параметров пока достаточно. Если все настроено правильно, то аддон должен запуститься без ошибок, а в веб-интерфейсе аддона будет отображаться скриншот вашей панели Lovelace.
Отправка картинки в Telegram
Для отправки изображений воспользуемся сервисом telegram_bot.send_photo
. Если вы еще не настроили Telegram-бота для Home Assistant, то на официальном сайте есть детальная инструкция.
Если бот уже настроен, то в configuration.yaml
нужно добавить вот такую автоматизацию:
Эта автоматизация срабатывает, если отправить боту команду /weather
, а после скачивает картинку по адресу http://localhost:5000/
и отправляет указанному пользователю.
5000 в данном случае это порт, на котором слушает Lovelace Kindle Screensaver и отдает скриншоты.
Доводим скриншоты до ума
По умолчанию на изображениях видно элементы интерфейса Home Assistant — не круто.
Убрать лишнее можно с помощью интеграции kiosk-mode. Только после установки интеграции нужно не забыть поменять HA_SCREENSHOT_URL
и дописать в конце ссылки ?kiosk
.
Так же для того, чтобы правильно подобрать размеры скриншота (RENDERING_SCREEN_HEIGHT
и RENDERING_SCREEN_WIDTH
), в браузере достаточно перейти на нужную панель, нажать F12, а затем Ctrl+Shift+M. В этом режиме можно «поиграться» с размерами будущего изображения, чтобы все аккуратно влезло:
Мой опыт
За время тестирования Lovelace Kindle Screensaver я столкнулся с некоторыми косяками.
Во-первых, интерфейс не всегда успевает прорисоваться и из-за этого на скриншотах могут пропадать значки. Но это лечится установкой RENDERING_DELAY=500
. Правда, в этом случае могут не отрисовываться айфреймы 😓 Меньше всего проблем возникает, если ставить ширину скриншота поменьше, так чтобы карточки располагались вертикально одна под другой.
Во-вторых, Lovelace Kindle Screensaver ощутимо «жрет» ресурсы — все-таки для отрисовки изображений в фоне крутится полноценный браузер. Но мой старенький мини-ПК в целом справляется.
Но самая большая проблема в том, что генерация скриншотов происходит каждую минуту, даже если они в данный момент не нужны. Интервал меняется — я настроил генерацию картинок раз в 3 минуты (CRON_JOB=*/3 * * * *
), но все равно это какая-то бессмысленная растрата ресурсов сервера и электроэнергии 🙂
В будущем может быть подготовлю патч, чтобы скриншоты генерировались по запросу, но пока так.