Отправляем скриншот с прогнозом погоды в Telegram

Отправляем скриншот с прогнозом погоды в Telegram

Меня часто спрашивают, как с помощью Home Assistant отправить в Telegram скриншот сайта или картинку с прогнозом погоды.

Меня часто спрашивают, как я все успеваю

На самом деле не часто, но я пару раз видел такой вопрос в Telegram-чатиках 🙂 Сама идея мне показалась прикольной и поэтому я решил немного прокачать своего Telegram-бота, так чтобы он присылал мне прогноз погоды картинкой:

Скриншот Windy.com, отправленный Telegram из Home Assistant

А еще я ж блогер, поэтому таким же образом настроил отправку статистики по блогу:

Скриншот панели управления Home Assistant, отправленный в Telegram из Home Assistant

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 Kindle Screensaver

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

Аддон Lovelace Kindle Screensaver

Отправка картинки в Telegram

Для отправки изображений воспользуемся сервисом telegram_bot.send_photo. Если вы еще не настроили Telegram-бота для Home Assistant, то на официальном сайте есть детальная инструкция.

Если бот уже настроен, то в configuration.yaml нужно добавить вот такую автоматизацию:

automation:
  - alias: 'Send screenshot of the weather dashboard to Telegram on demand'
    trigger:
      platform: event
      event_type: telegram_command
      event_data:
        command: '/weather'
    action:
      service: telegram_bot.send_photo
      data:
        url: 'http://localhost:5000/'
        target: '00000000' # ID вашего пользователя, который можно посмотреть тут: https://t.me/myidbot

Ну, или то же самое можно настроить через веб-интерфейс.

Эта автоматизация срабатывает, если отправить боту команду /weather, а после скачивает картинку по адресу http://localhost:5000/ и отправляет указанному пользователю.

5000 в данном случае это порт, на котором слушает Lovelace Kindle Screensaver и отдает скриншоты.

Доводим скриншоты до ума

По умолчанию на изображениях видно элементы интерфейса Home Assistant — не круто.

Скриншот панели управления Home Assistant с элементами интерфейса

Убрать лишнее можно с помощью интеграции kiosk-mode. Только после установки интеграции нужно не забыть поменять HA_SCREENSHOT_URL и дописать в конце ссылки ?kiosk.

Так же для того, чтобы правильно подобрать размеры скриншота (RENDERING_SCREEN_HEIGHT и RENDERING_SCREEN_WIDTH), в браузере достаточно перейти на нужную панель, нажать F12, а затем Ctrl+Shift+M. В этом режиме можно «поиграться» с размерами будущего изображения, чтобы все аккуратно влезло:

Адаптивная верстка в Firefox

Мой опыт

За время тестирования Lovelace Kindle Screensaver я столкнулся с некоторыми косяками.

Во-первых, интерфейс не всегда успевает прорисоваться и из-за этого на скриншотах могут пропадать значки. Но это лечится установкой RENDERING_DELAY=500. Правда, в этом случае могут не отрисовываться айфреймы 😓 Меньше всего проблем возникает, если ставить ширину скриншота поменьше, так чтобы карточки располагались вертикально одна под другой.

Во-вторых, Lovelace Kindle Screensaver ощутимо «жрет» ресурсы — все-таки для отрисовки изображений в фоне крутится полноценный браузер. Но мой старенький мини-ПК в целом справляется.

Но самая большая проблема в том, что генерация скриншотов происходит каждую минуту, даже если они в данный момент не нужны. Интервал меняется — я настроил генерацию картинок раз в 3 минуты (CRON_JOB=*/3 * * * *), но все равно это какая-то бессмысленная растрата ресурсов сервера и электроэнергии 🙂

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

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Если вдруг будут какие-то новости относительно патча, то я об этом напишу в Telegram.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.