SCratORS/SmartIntercom

Управление домофоном через Телеграм

xakepShilo opened this issue · 0 comments

Так как предыдущая версия автоматизации малость устарела, то новая - рабочая.

smartintercom

Создаем файл с именем "telegram_smartintercom.yaml" и в него записываем следующий ниже код.
В принципе файл может иметь и другое имя.
Если все автоматизации у вас в одном файле указанном в настройке "automation: !include automations.yaml", то самую первую строку кода "automation:" удалить.
Первая автоматизация "- id: 'telegram_smartintercom'" используется только если вам нужно вызвать меню домофона напрямую командой "/smartintercom". Если нет, то тоже можно удалить.
Вторая автоматизация "- id: 'telegram_smartintercom_callback'" используется, если вызов идет непосредственно из меню верхнего уровня.

Две строки меню в обеих автоматизациях:

  • '{{"\U000021A9"}} Назад:/hallway' - возвращает в предыдущее меню. (У меня в меню управления устройствами в прихожей)
  • '{{"\U0001F4DC"}} Главное меню:/menu' - возврат в главное меню. (У вас может быть другая команда - меняем на свою)
automation:
  - id: 'telegram_smartintercom'
    alias: Telegram (домофон - menu)
    description: ''
    trigger:
    - platform: event
      event_type: telegram_command
      event_data:
        command: '/smartintercom'
    action:
    - service: telegram_bot.send_message
      data:
        target: '{{ trigger.event.data.user_id }}'
        title: '{{"\U0001F5DD"}} Домофон'
        message: ''
        disable_notification: true
        inline_keyboard:
          - '{% set mode = states("select.smartintercom_modes") %}
             {% if mode == "Не активен" %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Не активен:/smartintercom_not_active,
             {% set mode = states("select.smartintercom_modes") %}
             {% if mode == "Открывать всегда" %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Открывать всегда:/smartintercom_open_always'
          - '{% if is_state("switch.smartintercom_accept_call", "on") %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Открыть:/smartintercom_accept_call,
             {% set mode = states("select.smartintercom_modes") %}
             {% if mode == "Сброс вызова" %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Сброс вызова:/smartintercom_reset'
          - '{% if is_state("switch.smartintercom_sound", "on") %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Звук:/smartintercom_sound,
             {% if is_state("switch.smartintercom_mute", "on") %}
               {{"\U0001F7E2"}}
             {% else %}
               {{"\U0001F534"}}
             {% endif %}
             Mute:/smartintercom_mute'
          - '{{"\U000021A9"}} Назад:/hallway'
          - '{{"\U0001F4DC"}} Главное меню:/menu'

  - id: 'telegram_smartintercom_callback'
    alias: Telegram (домофон - callback)
    description: ''
    trigger:
    - platform: event
      event_type: telegram_callback
      event_data: {}
    action:
    - choose:
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom" }}'
        sequence:
        - service: telegram_bot.edit_message
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            title: '{{"\U0001F5DD"}} Домофон'
            message: ''
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            inline_keyboard: &keyb
              - '{% set mode = states("select.smartintercom_modes") %}
                 {% if mode == "Не активен" %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Не активен:/smartintercom_not_active,
                 {% set mode = states("select.smartintercom_modes") %}
                 {% if mode == "Открывать всегда" %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Открывать всегда:/smartintercom_open_always'
              - '{% if is_state("switch.smartintercom_accept_call", "on") %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Открыть:/smartintercom_accept_call,
                 {% set mode = states("select.smartintercom_modes") %}
                 {% if mode == "Сброс вызова" %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Сброс вызова:/smartintercom_reset'
              - '{% if is_state("switch.smartintercom_sound", "on") %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Звук:/smartintercom_sound,
                 {% if is_state("switch.smartintercom_mute", "on") %}
                   {{"\U0001F7E2"}}
                 {% else %}
                   {{"\U0001F534"}}
                 {% endif %}
                 Mute:/smartintercom_mute'
              - '{{"\U000021A9"}} Назад:/hallway'
              - '{{"\U0001F4DC"}} Главное меню:/menu'
# режим not active
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_not_active" }}'
        sequence:
        - service: select.select_option
          entity_id: select.smartintercom_modes
          data:
            option: Не активен
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
# открывать всегда
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_open_always" }}'
        sequence:
        - service: select.select_option
          entity_id: select.smartintercom_modes
          data:
            option: Открывать всегда
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
# открыть один раз
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_accept_call" }}'
        sequence:
        - service: switch.toggle
          entity_id: switch.smartintercom_accept_call
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
# сброс вызова
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_reset" }}'
        sequence:
        - service: select.select_option
          entity_id: select.smartintercom_modes
          data:
            option: Сброс вызова
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
# sound
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_sound" }}'
        sequence:
        - service: switch.toggle
          entity_id: switch.smartintercom_sound
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
# mute
      - conditions:
        - condition: template
          value_template: '{{ trigger.event.data.command == "/smartintercom_mute" }}'
        sequence:
        - service: switch.toggle
          entity_id: switch.smartintercom_mute
        - delay:
            milliseconds: 500
        - service: telegram_bot.edit_replymarkup
          data:
            message_id: '{{ trigger.event.data.message.message_id }}'
            chat_id: '{{ trigger.event.data.chat_id }}'
            callback_query_id: '{{ trigger.event.data.id }}'
            disable_notification: true
            inline_keyboard: *keyb
    mode: restart

Будут какие-то вопросы - задавайте. По мере возможности отвечу и помогу.