Home AssistantНалаштування

Налаштовуємо Home Assistant для роботи з Telegram

На сьогодні, Telegram є одним з найпопулярніших засобів обміну повідомленнями. Якщо ви є активним користувачем Telegram, мабуть, тоді для вас буде зручно отримувати повідомлення про стан вашого розумного будинку саме сюди. Більше того, у вас, навіть, з’явиться можливість керування прямісінько з Telegram.

Підготовка

Додамо включення в configuration.yaml окремими зовнішніми файлами

файл configuration.yaml:

telegram_bot: !include includes/telegram.yaml
notify: !include includes/notify.yaml

Введіть в стрічці пошуку Telegram @BotFather та перейдіть до нього. Створимо бота в Telegram за допомогою @BotFather: натискаємо /newbot та вводимо назву, наприклад «testhassbot», тиснемо відправити. Другим кроком, вводимо ім’я та відправляємо. Якщо ім’я не зайняте, бачимо подібне повідомлення, інакше підберіть інше ім’я для вашого бота.

botfather respond

В повідомленні є посилання на створеного вами бота, можете його зберегти на майбутнє, також скопіюйте токен, він нам ще знадобиться.

Знайдіть бота @userinfobot та натисніть /start , у відповідь ви отримаєте власний telegram ID, скопіюйте його. Повторіть цю процедуру з іншими членами родини, якщо хочете щоб і вони теж могли отримувати інформацію з домашнього телеграм бота. Заповніть інформацію в файлі /config/includes/telegram.yaml отриманими раніше даними за зразком

файл /config/includes/telegram.yaml:

  - platform: polling
    api_key: 1234567890:vVH9dL2EBpd-1ffk5b63k8dOGHMK34BGnQX #Токен
    allowed_chat_ids:
      - 11111111		# telegram ID, що матиме доступ до бота
      - 2222222222		# telegram ID, що матиме доступ до бота
      - 33333333		# telegram ID, що матиме доступ до бота

Створюємо сповіщення та даємо їм назви, для кожного члена родини в файлі /config/includes/notify.yaml

файл /config/includes/notify.yaml:

  - name: telegram_dad
    platform: telegram
    chat_id: 11111111		# telegram ID
  - name: telegram_mam
    platform: telegram
    chat_id: 2222222222		# telegram ID
  - name: telegram_john
    platform: telegram
    chat_id: 33333333		# telegram ID

Перезавантажте Home Assistant.


Налаштувавши сповіщення в автоматизації, є змога відправляти повідомлення конкретному адресату

notify telegram service

Або усім, хто підписаний на повідомлення від домашнього бота.

telegram_bot send mesage

Додавання автоматизацій для роботи з Telegram

Створимо першу автоматизацію що діятиме при старті бота (або натисканні /start)

Spoiler

- id: telegram-control-pannel-start
  alias: 'Telegram Control Pannel Command'
  initial_state: on
  trigger:
    platform: event
    event_type: telegram_command
    event_data:
      command: '/start'
  action:
  - service: telegram_bot.send_message
    data_template:
        target: '{{ trigger.event.data.user_id }}'
        message: >
            {{ [
            "Пріветікі",
            "До зірок",
            "Сер, Да сер!",
            "Здоровенькі були!",
            "Вечір в хату!",
            "Здрасть!",
            "Шо такоє?",
            "Паєхалі",
            "хелло аміго",
            "Буенос ночес!"
            ] | random }}       
        data:
        inline_keyboard:
          - '{{"\U0001F4A1"}} Lights:/lights, {{"\u2753"}} Status:/sstatus, {{"\u26D4"}} Security:/security'
          - '{{"\U0001F6E0"}} System:/system, {{"\U0001F501"}} Ping:/ping, {{"\U0001F4CC"}} User location:/location '
          - '{{"\U0001F324"}} Weather:/weather, {{"\U0001F4B5"}} Shoping :/shopinglist'

В вікні телеграм ми побачимо щось подібне

telegram bot

Тепер додамо ще одне правило, яке діятиме при натисканні кнопки в вікні Telegram наприклад кнопки «Weather»

Spoiler

- alias: 'IK - Telegram - status weather'
  trigger:
    platform: event
    event_type: telegram_callback
    event_data:
      data: '/weather'
  action:
    - service: telegram_bot.edit_message
      data_template:
        message_id: 'last'
        chat_id: '{{ trigger.event.data.user_id }}'
        title: '{{"\U0001F324"}} *Weather*'
        message: | 
                 {{"\U0001F3E0"}} Клімат, звіт за {{ states('sensor.time_date') }}
                 {{"\U0001F321"}} Температура - {{ states('sensor.openweathermap_temperature') }} C
                 {{"\U0001F32B"}} Вологість - {{ states('sensor.openweathermap_humidity') }} %
                 {{"\U0001F4AA"}} Тиск - {{ (states('sensor.openweathermap_pressure')|float * 0.7500637)|round(2) }} мм рт. ст
                 {{"\U00002600"}} Погода - {{ states('sensor.openweathermap_weather') }}
                 {{"\U00002B50"}} Прогноз на сьогодні - {{ states('sensor.openweathermap_forecast_temperature') }} C
                 {{"\U0001F327"}} Прогноз дощу - {{ states('sensor.openweathermap_rain') }}
                 {{"\U0001F328"}} Прогноз снігу - {{ states('sensor.openweathermap_snow') }}  
        inline_keyboard:
          - '{{ "\u21a9\ufe0f" }} Панель керування:/to_cp'

В такому варіанті правила автоматизації у відповідь ми отримаємо подібне повідомлення:
telegram bot

Тут директива service: telegram_bot.edit_message не відправляє нове повідомлення, а редагує останнє (message_id: ‘last’), відбувається це з не нав’язливим анімаційним ефектом, це повідомлення «зміниться лише в того користувача, який натискав кнопку «Weather» (chat_id: ‘{{ trigger.event.data.user_id }}’), що не відволікає інших членів вашої родини зайвими повідомленнями.

Аналогічні правила і дії можна «повісити» і на інші кнопки «панелі керування», і навіть зробити деревовидну структуру дій та команд. Після всіх налаштувань, поділіться з членами вашої родини посиланням на домашнього бота. Користуйтесь з задоволенням.

 

17 thoughts on “Налаштовуємо Home Assistant для роботи з Telegram

  • Поділіться будь ласка своїм автоматизаціями на інших кнопках (панелях):
    Там де світло, статус, охорона, пінг, покупки, щоб зрозуміти, що туди своє вписати.
    Або може де є ще приклади, як організувати цей простір панелей)

  • Подскажите как обновить inline_keyboard, при переключении статуса света например как у вас на видео 0:43, а то свет то переключается но чтоб это увидеть нужно вернуться на раздел назад, а потом снова войти в прежнюю вкладку переключения света

    • К сожалению нет, отправка фото делается отдельным сервисом (telegram_bot.send_photo), аналогично нельзя заменять отправленное фото на текст. Возможно ситуация изменится в будущем с выходом обновлений HA, но пока я решения не нашел.

  • Возможно ли делать типа подгруппы?
    немогу понять возможно ли это
    делаю event_type: telegram_command
    далее по вложенности колбек ) – все ок
    а далее хочу дальше ) но не команд ни колбек неработает (

    • Вопрос не совсем понятен, но в любом случае воспользуйтесь Developer Tools, если заработает там, то будет и код работать.

    • Добрий день! Так, краще виносити все в окремі файли, або навіть папки. У мене всі правила автоматизацій винесено в папку automations, а вже в ній для кожної кімнати чи девайсу можна створювати окремі файли, так ви швидше знайдете потрібне правило і не заплутаєтесь
      посилання на папку в /config/configuration.yaml:
      automation: !include_dir_merge_list automations
      Назви файлів в папці значення не мають, головне щоб були написані латиницею і мали розширення .yaml

  • В будь-якому випадку дякую, Ви мені дуже допомогли. Код у коменті був відсутньою ланкою у розумінні матеріалів вашої статті.

  • Вітаю.
    Поясніть як не спеціалісту.
    inline_keyboard:
    – ‘{{ “\u21a9\ufe0f” }} Панель керування:/to_cp’ – це куди має бути перехід? в коді такого немає…

    • В даному випадку бот буде “слухати” те що після знаку “:”, тобто, він має виконати команду зі слешом, тут “/to_cp”
      Далі, якщо у вас є правило з таким тригером, HA виконає ту команду, яка була описана в правилі.
      Наприклад:

      - id: telegram-ik-to-cp
        alias: "Telegram Панель керування"
        trigger:
          - platform: event
            event_type: telegram_callback
            event_data:
              data: "/to_cp"
        action:
          - service: telegram_bot.edit_message
            data_template:
              message_id: "last"
              chat_id: "{{ trigger.event.data.user_id }}"
              title: "*Панель керування*"
              message: "Оберіть розділ"
              inline_keyboard:
                - '{{"\U0001F4A1"}} Lights:/lights, {{"\u2753"}} Status:/sstatus, {{"\u26D4"}} Security:/security'
                - '{{"\U0001F6E0"}} System:/system, {{"\U0001F501"}} Ping:/ping, {{"\U0001F4CC"}} User location:/location '
                - '{{"\U0001F324"}} Weather:/weather, {{"\U0001F4B5"}} Shoping :/shopinglist'

      • Працює! 😉
        Дякую! Як тільки не крутив, не виходило.
        А чи можна за допомогою telegram передавати дані в НА. У мене задача передати показники лічильників з квартири батьків в мою базу?

Залишити відповідь