Умный домофон на ESP

Overview

SmartIntercom

Умный домофон на ESP Устройство поддерживает передачу аудио потока на блок вызова. Перед использованием необходимо записать аудио файлы из папка data в LittleFS. Для воспроизведения аудио файлов используется библиотека https://github.com/earlephilhower/ESP8266Audio При использовании ESPHome воспроизведение mp3 файлов невозможно из-за нехватки оперативной памяти МК.

При использовании Arduino IDE (Тестовый скеч для проверки функциональности):

  1. Установить поддержку плат ESP8266.
  2. Установить модуль загрузки LittleFS https://github.com/earlephilhower/arduino-esp8266littlefs-plugin/releases
  3. Установить библиотеку ESP8266Audio
  4. Открыть проект.
  5. Загрузить файлы из data в LittleFS https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html
  6. Прошить МК.

При использовании ESPHome

  1. В рабочую папку ESPHome (/Config) скопировать папку lib с библиотекой "ESPAudio.h" из проекта.
  2. Прошить smartintercom_e8db849c6ee5.yaml (Все необходимые библиотеки ESPHome загрузит сам)
  3. Загрузить файлы из data в LittleFS. Можно используя ArduinoIDE (Шаги 1,2,4,5). Или любым другим удобным способом.
  4. В файле конфигурации Home Assistant добавить вспомогательный компонент input_select для управления режимами устройства (Смотри файл configuration.yaml из проекта)
  5. Добавить карточку устройства на панель lovalace из файла card.yaml проекта.

Схема устройсва и описание: https://easyeda.com/scrators/intercom

Comments
  • Вопросы и пожелания

    Вопросы и пожелания

    Можно ли узнать функции данного устройства? Так же хотелось бы увидеть хотя бы краткое видео устройства в работе. И для людей не использующих НА была бы очень полезна поддержка mqtt, тогда мы могли бы использовать это чудо устройство с другими умными домами. Я могу подключить это чудо устройство к аналоговому домофону?

    opened by Tehnik053 10
  • Мануал. Делаем управление домофоном через телеграм

    Мануал. Делаем управление домофоном через телеграм

    Внешний вид клавиатуры image

    Создадим автоматизацию. Создайте например файлик с таким именем domofon_control_telegram.yaml и вставьте код ниже. Сам файлик domofon_control_telegram.yaml закидываем в automation old, это автоматизация через yaml. У меня настроено так automation old: !include_dir_merge_list includes/automation

    - alias: 'Телеграм: Домофон. Управление'
      description: Управление домофоном через телеграм
      trigger:
      - platform: event
        event_type: telegram_callback
        event_data: {}
      condition: []
      action:
      - choose:
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == ''/domofon'' }}'
          sequence:
          - service: telegram_bot.send_message
            data:
              target: '{{ trigger.event.data.chat_id }}'
              message: &msg |
                {{'\U00002699'}} **Режим работы домофона**
    #Клавиатура
              inline_keyboard: &keyb
              - '{% set domofon_modes = states("input_select.smart_domofon_scrators_modes") %}
                 {% if domofon_modes == "Не активен" %} {{"🟢"}}
                 {% else %} {{"🔴"}}
                 {% endif %} 
                 Не активен:/domofon_not_active,
                 {% set domofon_modes = states("input_select.smart_domofon_scrators_modes") %}
                 {% if domofon_modes == "Открывать всегда" %} {{"🟢"}}
                 {% else %} {{"🔴"}}
                 {% endif %} 
                 Открывать всегда:/domofon_open_always'
              - '{% if is_state("switch.smart_domofon_scrators_mute", "on") %} {{"🟢"}}
                 {% else %} {{"🔴"}} 
                 {% endif %}
                 Беззвучный режим:/domofon_mute,
                 {% set domofon_modes = states("input_select.smart_domofon_scrators_modes") %}
                 {% if domofon_modes == "Сброс вызова" %} {{"🟢"}}
                 {% else %} {{"🔴"}}
                 {% endif %} 
                 Сброс вызова:/domofon_reset_call'
              - '{% set domofon_modes = states("input_select.smart_domofon_scrators_modes") %}
                 {% if domofon_modes == "Сброс вызова если нет ответа" %} {{"🟢"}}
                 {% else %} {{"🔴"}}
                 {% endif %} 
                 Сброс вызова если нет ответа:/domofon_resetting_call_no_response'
              - Назад:/backhome
    
    #Кнопка №1. Не активен
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == "/domofon_not_active" }}'
          sequence:
          - service: input_select.select_option
            target:
              entity_id: input_select.smart_domofon_scrators_modes
            data:
              option: Не активен
          - delay:
              milliseconds: 300
          - service: telegram_bot.edit_message
            data:
              message_id: '{{ trigger.event.data.message.message_id }}'
              chat_id: '{{ trigger.event.data.user_id }}'
              callback_query_id: '{{ trigger.event.data.id }}'
              message: *msg
              inline_keyboard: *keyb
    
    #Кнопка №2. Открывать всегда
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == "/domofon_open_always" }}'
          sequence:
          - service: input_select.select_option
            target:
              entity_id: input_select.smart_domofon_scrators_modes
            data:
              option: Открывать всегда
          - delay:
              milliseconds: 300
          - service: telegram_bot.edit_message
            data:
              message_id: '{{ trigger.event.data.message.message_id }}'
              chat_id: '{{ trigger.event.data.user_id }}'
              callback_query_id: '{{ trigger.event.data.id }}'
              message: *msg
              inline_keyboard: *keyb
    
    #Кнопка №3. Беззвучный режим
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == "/domofon_mute" }}'
          sequence:
          - service: switch.toggle
            target:
              entity_id: switch.smart_domofon_scrators_mute
          - delay:
              milliseconds: 300
          - service: telegram_bot.edit_message
            data:
              message_id: '{{ trigger.event.data.message.message_id }}'
              chat_id: '{{ trigger.event.data.user_id }}'
              callback_query_id: '{{ trigger.event.data.id }}'
              message: *msg
              inline_keyboard: *keyb
    
    #Кнопка №4. Сброс вызова
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == "/domofon_reset_call" }}'
          sequence:
          - service: input_select.select_option
            target:
              entity_id: input_select.smart_domofon_scrators_modes
            data:
              option: Сброс вызова
          - delay:
              milliseconds: 300
          - service: telegram_bot.edit_message
            data:
              message_id: '{{ trigger.event.data.message.message_id }}'
              chat_id: '{{ trigger.event.data.user_id }}'
              callback_query_id: '{{ trigger.event.data.id }}'
              message: *msg
              inline_keyboard: *keyb
    
    #Кнопка №5. Сброс вызова если нет ответа
        - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.command == "/domofon_resetting_call_no_response" }}'
          sequence:
          - service: input_select.select_option
            target:
              entity_id: input_select.smart_domofon_scrators_modes
            data:
              option: Сброс вызова если нет ответа
          - delay:
              milliseconds: 300
          - service: telegram_bot.edit_message
            data:
              message_id: '{{ trigger.event.data.message.message_id }}'
              chat_id: '{{ trigger.event.data.user_id }}'
              callback_query_id: '{{ trigger.event.data.id }}'
              message: *msg
              inline_keyboard: *keyb
        default: []
      mode: restart
    
    
    documentation 
    opened by DivanX10 5
  • ESPAudio.h dependency issues

    ESPAudio.h dependency issues


    • Looking for AudioFileSourceLittleFS.h dependency? Check our library registry!
    • CLI > platformio lib search "header:AudioFileSourceLittleFS.h"
    • Web > https://platformio.org/lib/search?query=header:AudioFileSourceLittleFS.h

    opened by LuckyCoders 1
  • Не компилиться под Windows

    Не компилиться под Windows

    Нужно удалить пробелы, чтобы было так [email protected] или убрать версию вообще.

    https://github.com/SCratORS/SmartIntercom/blob/0b589c70655f4b69d300d86fc40a0e4b2fa2d615/ESPHome/smartintercom_e8db849c6ee5.yaml#L35

    ошибка при компиляции такая

    LibraryManager: Installing id=1964 @  1.9.1
    UndefinedPackageVersion: Could not find a version that satisfies the requirement ' 1.9.1' for your system 'windows_amd64':
      File "C:\Users\nikol\AppData\Local\Programs\Python\Python39\Lib\site-packages\platformio\builder\main.py", line 168:
    
    
    opened by NikolayKash 1
  • Создание своего бота в телеграм

    Создание своего бота в телеграм

    Для управления умным домом и его устройствами через Телеграм, требуется создание своего бота. Вот этим мы и займемся...

    В поиске ищем @ВоtFather - это официальный бот Телеграма, созданный специально для управления ботами. Если раньше им не пользовались, то нажимаем кнопку "Запустить" - собственно ничего другого в чате бота и не будет.

    Появится меню бота: изображение

    В меню очень много возможностей, из которых нас интересует пока только одна - создание бота, это команда /newbot или эта же команда вызванная из "Меню", расположенного внизу слева. Вызываем команду... BotFather попросит указать имя бота - имя можете задать любое например "Бот умного дома". изображение

    Следом BotFather попросит ввести имя бота обязательно заканчивающее на "bot". Имя вводится на латинице и должно быть уникальным! Если бот с таким именем уже существует, то появится сообщение с просьбой использовать другое имя: изображение

    Для примера я ввел имя - smarthome121_ha_bot Появится сообщение о создании бота, в котором нам понадобится токен, при помощи которого мы и будем с ним работать: (Особо хитрых сразу предупреждаю - бот был создан для примера и сразу же удален! Так что не пытайтесь его взломать по токену с картинки!) изображение

    Полученный токен сохраняем в файле secrets.yaml в Home Assistant:

    # id:token - smarthome121_ha_bot
    telegram_token: 5739678252:AAHq5KAwPaVDBgqLrpbMALOxTwTt8mLWYc4
    

    Далее, для настройки бота в Home Assistant нам понадобится узнать свой "id".

    В поиске ищем - @getmyid_bot и запускаем его. Появится сообщение:

    Your user ID: 457173212
    Current chat ID: 457173212
    

    Это и есть ваш идентификатор в телеграм. Если вам надо узнать "id" собеседника - например жены, то просто перешлите боту @getmyid_bot сообщение полученное от неё. (Не свое ей, не пересланное ей, а именно написанное ей и присланное вам - это важно!) И получите третью строку:

    Your user ID: 457173212
    Current chat ID: 457173212
    Forwarded from: 1311585534
    

    Полученные id так же записываем в файл secrets.yaml:

    # telegram chats
    telegram_chat_my: 457173212
    telegram_chat_wife: 1311585534
    

    Осталось только настроить телеграм бот в Home Assistant. Тут все просто - в файл configuration.yaml пищем вот эти строки

    telegram_bot:
      - platform: polling
        api_key: !secret telegram_token
        parse_mode: html
        allowed_chat_ids:
          - !secret telegram_chat_my
          - !secret telegram_chat_wife
    

    Теперь вы можете отправлять в ваш бот сообщения - например так:

    - service: telegram_bot.send_message
      data:
        title: "Умный дом сообщает"
        message: "У меня все хорошо работает!"
        target:
          - !secret telegram_chat_my
          - !secret telegram_chat_wife
    

    Используя встроенные в Home Assistant команды, можно отправлять, файлы, картинки, видео. Но это уже тема отдельного разговора...

    opened by xakepShilo 0
  • Управление домофоном через Алису (второй вариант)

    Управление домофоном через Алису (второй вариант)

    Умный Дом Яндекс, как я писал в прошлом подключении управления через Алису, накладывает некоторые ограничения на функционал. Ну и поступила жалоба, что в предыдущих настройках при выключенной функции "Однократного открытия домофона" в программе "Умный дом с Алисой" все переключатели заблокированы. Голосом они управляются, а вот в программе нет.

    Будем избавляться от этого недостатка...

    Примечание: создание настроек описано с нуля smartintercom Для управления домофоном при помощи Умного дома Яндекс должна быть установлена и настроена интеграция yandex_smart_home. Если это уже сделано - пропускаем этот шаг и идем дальше.

    Создаем следующий скрипт, который будет устанавливать нужный режим на домофоне:

    script:
      smartintercom_mode_set:
        alias: Домофон (установка режима)
        sequence:
        - service: select.select_option
          entity_id: select.smartintercom_modes
          data:
            option: >
              {% if mode == "normal" %}
                Не активен
              {% elif mode == "auto" %}
                Открывать всегда
              {% else %}
                Сброс вызова
              {% endif %}
        mode: queued
    

    Создаем сенсоры:

    sensor:
      - platform: template
        sensors:
          smartintercom_modes:
            value_template: >
              {% if is_state('select.smartintercom_modes', 'Не активен') %}
                normal
              {% elif is_state('select.smartintercom_modes', 'Открывать всегда') %}
                auto
              {% else %}
                quiet
              {% endif %}
          smartintercom_sound_invert:
            value_template: >
              {% if is_state("switch.smartintercom_sound", "on") %}
                off
              {% else %}
                on
              {% endif %}
          smartintercom_accept_call_invert:
            value_template: >
              {% if is_state("switch.smartintercom_accept_call", "on") %}
                off
              {% else %}
                on
              {% endif %}
    

    Первый сенсор "smartintercom_modes" - преобразует режим домофона в режим Умного дома Яндекс, второй - инвертирует состояние переключателя "switch.smartintercom_sound". Под звуком подразумевается произношение фразы при открытии! Третий сенсор "smartintercom_accept_call_invert" инвертирует состояние однократного открытия. Инвертирование сделано по причине того, что имеется различие в состоянии на Яндексе и состоянии домофона.

    Создаем бинарный сенсор состояния домофона на основе "switch.smartintercom_accept_call"

    template:
      - binary_sensor:
        - name: "smartintercom state"
          device_class: "door"
          state: '{{ states("switch.smartintercom_accept_call") }}'
    

    Именно этот сенсор и будет показывать текущее состояние домофона. В комментарии есть еще одна настройка этого сенсора. Какой вам больше нравится - тот и используйте.

    Следом в настройках интеграции "yandex_smart_home", если у вас настроены фильтры, вставляем созданный бинарный сенсор:

      filter:
        include_entities:
          - binary_sensor.smartintercom_state # домофон
    

    В разделе настроек интеграции " entity_config:" вносим следующие строки:

        binary_sensor.smartintercom_state:
          name: Домофон
          room: Прихожая
          type: devices.types.openable
          modes:
            program:
              normal: [normal]
              quiet: [quiet]
              auto: [auto]
          custom_modes:
            program:
              state_entity_id: sensor.smartintercom_modes
              set_mode:
                service: script.smartintercom_mode_set
                data:
                  mode: '{{ mode }}'
          custom_toggles:
            controls_locked:
              state_entity_id: sensor.smartintercom_accept_call_invert
              turn_on:
                service: switch.turn_off
                entity_id: switch.smartintercom_accept_call
              turn_off:
                service: switch.turn_on
                entity_id: switch.smartintercom_accept_call
            backlight:
              state_entity_id: switch.smartintercom_led
              turn_on:
                service: switch.turn_on
                entity_id: switch.smartintercom_led
              turn_off:
                service: switch.turn_off
                entity_id: switch.smartintercom_led
            mute:
              state_entity_id: sensor.smartintercom_sound_invert
              turn_on:
                service: switch.turn_off
                entity_id: switch.smartintercom_sound
              turn_off:
                service: switch.turn_on
                entity_id: switch.smartintercom_sound
    

    Установленный тип датчика "type: devices.types.openable" - не влияет ни на что, кроме иконки устройства Проверяем конфигурацию и если все в порядке, то перегружаем Home Assistant.

    После этого идем в установленный на смарте "Умный дом с Алисой" и там добавляем новое устройство. Если было сделано по предыдущему руководству, то предварительно удаляем старое устройство. Пользуемся! Все функции управления черед программу разблокированы всегда.

    Теперь по поводу команд! Вместо команды "Открыть/Закрыть домофон", придется говорить "Разблокировать домофон" и соответственно "Заблокировать домофон". Остальные команды не претерпели никаких изменений.

    documentation 
    opened by xakepShilo 2
  • Автоматическое отключение однократного открытия домофона

    Автоматическое отключение однократного открытия домофона

    Иногда бывает подал команду открыть домофон и забыл отменить. Потому небольшая автоматизация для людей с некоторым количеством склероза - как я например.

    Создаем таймер:

    smartintercom_wait:
      name: 'Домофон автовыключение открытия'
      duration: '00:10:00'
    

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

    Далее создаем три автоматизации:

    automation:
      - id: 'smartintercom_accept_call_on'
        alias: Домофон (включается accept_call)
        description: ''
        trigger:
        - platform: state
          entity_id: switch.smartintercom_accept_call
          from: 'off'
          to: 'on'
        condition: []
        action:
        - service: timer.start
          entity_id: timer.smartintercom_wait
        mode: single
    
      - id: 'smartintercom_accept_call_off'
        alias: Домофон (выключается accept_call)
        description: ''
        trigger:
        - platform: state
          entity_id: switch.smartintercom_accept_call
          from: 'on'
          to: 'off'
        condition: []
        action:
        - service: timer.cancel
          entity_id: timer.smartintercom_wait
        mode: single
    
      - id: 'smartintercom_timer_finished'
        alias: Домофон (обработчик таймера accept_call)
        description: ''
        trigger:
        - platform: event
          event_type: timer.finished
          event_data:
            entity_id: timer.smartintercom_wait
        condition:
        - condition: state
          entity_id: switch.smartintercom_accept_call
          state: 'on'
        action:
        - service: switch.turn_off
          target:
            entity_id: switch.smartintercom_accept_call
        mode: single
    

    Первая "smartintercom_accept_call_on" - запускает созданный выше таймер при открытии домофона. Вторая "smartintercom_accept_call_off" - останавливает запущенный таймер при отключении однократного открытия домофона. И третья "'smartintercom_timer_finished" - ни что иное, как обработчик таймера. Который по истечении времени так же отключит однократное открытие.

    Перегружаем в Home Assistant автоматизации и таймеры и склероз побежден. :))

    documentation 
    opened by xakepShilo 0
  • Управление домофоном через Алису

    Управление домофоном через Алису

    Так как умный дом Яндекс имеет свои ограничения, то пришлось немного поизвращаться и... ну как получилось, так получилось. Но работает без проблем!

    smartalice

    Примечание: У меня домофон назван как "smartintercom". Так что обратите внимание на название переключателей его состояния и поменяйте на свое в скрипте, сенсорах и настройках интеграции yandex_smart_home

    Для управления домофоном при помощи Умного дома Яндекс должна быть установлена и настроена интеграция yandex_smart_home. Если это уже сделано - пропускаем этот шаг и идем дальше.

    Создаем следующий скрипт, который будет устанавливать нужный режим на домофоне:

    script:
      smartintercom_mode_set:
        alias: Домофон (установка режима)
        sequence:
        - service: select.select_option
          entity_id: select.smartintercom_modes
          data:
            option: >
              {% if mode == "normal" %}
                Не активен
              {% elif mode == "auto" %}
                Открывать всегда
              {% else %}
                Сброс вызова
              {% endif %}
        mode: queued
    

    Следом создаем пару сенсоров:

    sensor:
      - platform: template
        sensors:
          smartintercom_modes:
            value_template: >
              {% if is_state('select.smartintercom_modes', 'Не активен') %}
                normal
              {% elif is_state('select.smartintercom_modes', 'Открывать всегда') %}
                auto
              {% else %}
                quiet
              {% endif %}
          smartintercom_sound_invert:
            value_template: >
              {% if is_state("switch.smartintercom_sound", "on") %}
                off
              {% else %}
                on
              {% endif %}
    

    Первый сенсор "smartintercom_modes" - преобразует режим домофона в режим Умного дома Яндекс, второй - инвертирует состояние переключателя "switch.smartintercom_sound". Сделано по причине того, что Умный дом Яндекс имеет кнопку "Без звука". То есть если она включена, то звука нет. А в плате домофона наоборот, если включено, то звук есть. Под звуком подразумевается произношение фразы при открытии!

    Следом в настройках интеграции "yandex_smart_home", если у вас настроены фильтры, вставляем:

      filter:
        include_entities:
    ### Прихожая
          - switch.smartintercom_accept_call    # домофон
    

    Еще раз обращаю внимание на название домофона!

    Следом, в разделе настроек интеграции " entity_config:" вносим следующие строки:

        switch.smartintercom_accept_call:
          name: Домофон
          room: Прихожая
          type: devices.types.openable
          modes:
            program:
              normal: [normal]
              quiet: [quiet]
              auto: [auto]
          custom_modes:
            program:
              state_entity_id: sensor.smartintercom_modes
              set_mode:
                service: script.smartintercom_mode_set
                data:
                  mode: '{{ mode }}'
          custom_toggles:
            backlight:
              state_entity_id: switch.smartintercom_led
              turn_on:
                service: switch.turn_on
                entity_id: switch.smartintercom_led
              turn_off:
                service: switch.turn_off
                entity_id: switch.smartintercom_led
            mute:
              state_entity_id: sensor.smartintercom_sound_invert
              turn_on:
                service: switch.turn_off
                entity_id: switch.smartintercom_sound
              turn_off:
                service: switch.turn_on
                entity_id: switch.smartintercom_sound
    

    И снова обратите внимание на имя домофона!

    Сохраняем настройки и обновляем интеграцию. Ну или перезапускаем Home Assistant.

    После этого идем в установленный на смарте "Умный дом с Алисой" и там добавляем новое устройство. Пользуемся!

    Рекомендую посмотреть какие команды надо озвучивать Алисе для правильной работы.

    Команда "Открыть домофон" - открывает его на один раз. Соответственно наоборот "Закрыть домофон" - отключает однократное открытие. Команда "Выключить звук на домофоне" - отключает произношение фразы и наоборот - "Включить звук на домофоне"

    Можно менять режим фразами: "Домофон установить режим" или "Домофон установить программу":

    "нормальный" - Не активен "тихий/тихо" - Сброс вызова (тут вопрос к яндексу - слово "тихий" срабатывает не всегда) "авто" - Открывать всегда

    "Включить/выключить подсветку на домофоне" - тут и так понятно, да и не особо-то и нужно.

    documentation 
    opened by xakepShilo 0
  • Управление домофоном через Телеграм

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

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

    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
    

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

    documentation 
    opened by xakepShilo 0
Releases(1.4.0)
Owner
SCratORS
SCratORS
Veml7700-esp-idf - VEML7700 Light Sensor driver for ESP-IDF

VEML7700 Light Sensor driver for ESP-IDF Overview This project aims to provide a very simple interface for configuring and reading data from the VEML7

Kristijan Grozdanovski 3 Nov 3, 2022
A customized LGL Android mod menu, containing ESP only for PUBG Mobile 1.3.0 for Android

PUBG Mobile ESP Mod Menu A customized LGL mod menu, containing ESP only for PUBG Mobile 1.3.0 for Android. Everything are fixed so it works with both

null 42 Mar 19, 2022
An Arduino wrapper to @sdima1357's usb_soft_host esp-idf example

ESP32 USB Soft Host library for Arduino IDE This is mainly a wrapper around the excellent work of Dmitry Samsonov (@sdima1357) with esp32_usb_soft_hos

tobozo 151 Jan 3, 2023
A Walkie-Talkie based around the ESP32 using UDP broadcast or ESP-NOW

Overview We've made a Walkie-Talkie using the ESP32. Explanatory video Audio data is transmitted over either UDP broadcast or ESP-NOW. So the Walkie-T

atomic14 259 Dec 31, 2022
Esp for warzone

OFFSETS.cpp IS NOT THE OFFSETS FILE THE PROGRAM USES IT IS JUST TO HELP YOU UPDATE IT ALL OF THE ACTUAL OFFSETS AND STUFF ARE IN THE GAME FILE This is

Kush Rawal 18 Jun 10, 2021
GFX Demo for the ESP-IDF

Display Drivers and Demo for GFX This is a Demo of GFX With Several Display Drivers This is not GFX itself, but it includes it. GFX Documentation is b

honey the codewitch 67 Dec 4, 2022
(R) Efficient methods and operators for the sparse matrix classes in 'Matrix' (esp. CSR format or "RsparseMatrix")

MatrixExtra MatrixExtra is an R package which extends the sparse matrix and sparse vector types in the Matrix package, particularly the CSR or Rsparse

null 15 Aug 29, 2022
If the button pressed esp will reset and App mode will on. App mode will on then led will on, network is connected led will off.

DHT22-to-Google-sheet-Reset-Using-ESP8266-LED-Switch If button pressed esp will reset and App mode will on. App mode will on then led will on, network

Md. Harun-Or-Rashid 3 Aug 17, 2022
External warzone cheat with manual mapped driver (function hook), overlay (nvidia hijack), simple esp, no recoil

external_warzone_cheat External warzone cheat with manual mapped driver (function hook), overlay (nvidia hijack), simple esp, no recoil Offsests are N

NMan 109 Jan 2, 2023
ESP32 S2 C++ host library compatible with arduino, esp-idf.

Info I would like to announce USB host library for esp32 S2 compatible with arduino, esp-idf and PIO (when pio will be updated to most recent esp-idf)

null 17 Nov 15, 2022
external apex legends cheat - esp, chams, rcs

apex legends external cheat external cheat utilizing kernel gdi rendering & kernel key input esp, chams, broken rcs bypass syscall is hooked then call

NMan 62 Dec 31, 2022
To simplify the development of ESP32 in ESP-IDF, Easyio provides a complete driver library

Easyio 开源驱动库 Easyio 是一款适配于ESP-IDF框架的开源驱动库,以支持ESP32的简便开发。目的是简化乐鑫ESP-IDF开发框架的使用难度。(真要方便的话,有现成的Arduino和Platform可以用,不过实在迫于工作要求,有的开源东西不让用,同时便于对接FAE,于是就有了 E

null 212 Dec 30, 2022
使用ESP-IDF、ESP-ADF、LVGL等库,基于ESP32S2实现简单的网络收音机和FM收音机功能。

【电子森林项目】网络收音机/FM收音机 这个项目是报名《硬禾“暑期一起练”第3个平台 - 基于ESP32-S2模块的网络收音机和音频信号处理》所做的。 基本功能: 可以连接WiFi收听HLS协议的网络电台节目 收听空中的FM电台88MHz~108MHz OLED0.96寸显示 四个独立按键控制两种模

DaMi 17 Nov 2, 2022
ESP based wifi adapter for Celestron telescopes

CelestronESPWifi ESP8266 based wifi adapter for Celestron telescopes The official Celestron Skyportal WiFi module is €190~. (aka SkyQ Link, aka Skylin

null 6 Nov 16, 2022
Bluetooth Joystick : A wireless joystick with ESP-32 microcontroller and Dual Axis Joystick Module using the Bluetooth connectivity.

BluetoothJoystick Bluetooth Joystick : A wireless joystick with ESP-32 microcontroller and Dual Axis Joystick Module using the Bluetooth connectivity.

null 9 Feb 24, 2022
LVGL8 for ESP-IDF

X-UI LVGL8 for ESP-IDF 移植自X-TRACK项目的页面栈框架,新增支持异步通信的订阅发布数据中心 特点 使用C语言重构,方便继承复用 核心文件 ui_page_manager.h、ui_page_manager.c 实现页面栈、订阅发布数据中心 完整页面生命周期 MVC架构 数

Zing 13 Aug 5, 2022
Additional components for ESP-IDF, maintained by Espressif

Espressif IDF Extra Components This repository aims to store ESP-IDF extra components which have been seperated and uploaded into IDF Component Manage

Espressif Systems 37 Jan 4, 2023
ESP based garage opener firmware.

NOTE: The hardware is in its early development. This is meant to replace your garage opener, if you'd like to use this with your existing garage door

null 5 Nov 20, 2022
PUBG ESP Hack for Emulator using C++ code. Player Position, Bones, Loots, Weapons, Vehicles, Boxes ... etc.

PUBG 1.7 ESP Hack for Emulator (C++ Source Code) PUBG ESP Hack for Emulator using C++ code. Player Position, Bones, Loots, Weapons, Vehicles, Boxes ..

Zero One Billion 38 Jan 5, 2023