Выключатели на базе ESP

Материал из wolfram
Перейти к навигации Перейти к поиску

Небольшая заметка, проделаной работы над ESP и выключателем на её базе.

Начну с конфига, который нужно составлять в среде ESPHOME:

esphome:
  name: "sw-03"

esp8266:
  board: d1_mini

# Включение логов
logger:

# Enable Home Assistant API
api:

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

captive_portal:

# Считыватели
binary_sensor:
##----- Физические считыватели -----##

# ----- button01 ----- Правывя клавиша
  - platform: gpio
    pin:
      number: D3
      mode: INPUT_PULLUP
      inverted: true
    name: "button01"
    id: button01
    internal: true
# Задача физической кнопки передавать состояние на виртуальные кнопки.
# В данном случае из за наличия "подменю" в устройстве, необходимо применять
# разное поведение для кнопок в зависимости от условий.
# В button01 реализовна прямая передача поведения на virtButton04.
# Выполнена она чере публикацию состояния на виртуальный несор virtButton04:
    on_press:
# Примена функция есил или. Если один из выключателей One001, All002 включен:
      - if:
          condition:
            - wifi.connected:
            - or:
                - switch.is_on: One001
                - switch.is_on: All002
# То тогда в если это One001 - передавай состояние true на сенсор virtButton01
          then:
            - if:
                condition:
                  switch.is_on: One001
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton05"
                  - lambda: |-
                      id(virtButton05).publish_state(true);
# То тогда в если это All002 - передавай состояние true на сенсор virtButton03
            - if:
                condition:
                  switch.is_on: All002
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton06"
                  - lambda: |-
                      id(virtButton06).publish_state(true);
# Иначе передавай состояние true на сенсор virtButton02
          else:
            - if:
                condition:
                  wifi.connected:
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton04"
                  - lambda: |-
                      id(virtButton04).publish_state(true);
                else:
                  - logger.log: "НЕТ WiFi, перенаправляю TRUE на virtButton07"
                  - lambda: |-
                      id(virtButton07).publish_state(true);
# То же самое для отпускания клавиши, только состояния передаются как false
    on_release:
      - if:
          condition:
            - wifi.connected:
            - or:
                - switch.is_on: One001
                - switch.is_on: All002
          then:
            - if:
                condition:
                  switch.is_on: One001
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton05"
                  - lambda: |-
                      id(virtButton05).publish_state(false);
            - if:
                condition:
                  switch.is_on: All002
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton06"
                  - lambda: |-
                      id(virtButton06).publish_state(false);
          else:
            - if:
                condition:
                  wifi.connected:
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton04"
                  - lambda: |-
                      id(virtButton04).publish_state(false);
                else:
                  - logger.log: "НЕТ WiFi, перенаправляю FALSE на virtButton07"
                  - lambda: |-
                      id(virtButton07).publish_state(false);
#-----------------------------------------------------------------------------#


# ----- button02 ----- Левая клавиша
# На левой как раз применяетя смена режисов считывания в зависимости от
# состояния виртуальных переключателей One001 и All002.
# Данная клавиша должна как уравлять реле если нет сети, так выполнять 
# однокартные, многократные нажатия, удеражание и исполнять фунции в рамках режимов.
# Поэтому предусмотено несколько проверок, в зависимости от которых данные о
# состояни клавиш передаются на разыне виртуальные сенсоры:
  - platform: gpio
    pin:
      number: D4
      mode: INPUT_PULLUP
      inverted: true
    name: "button02"
    id: button02
    internal: true
    on_press:
# Примена функция есил или. Если один из выключателей One001, All002 включен:
      - if:
          condition:
            - wifi.connected:
            - or:
                - switch.is_on: One001
                - switch.is_on: All002
# То тогда в если это One001 - передавай состояние true на сенсор virtButton01
          then:
            - if:
                condition:
                  switch.is_on: One001
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton01"
                  - lambda: |-
                      id(virtButton01).publish_state(true);
# То тогда в если это All002 - передавай состояние true на сенсор virtButton03
            - if:
                condition:
                  switch.is_on: All002
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton03"
                  - lambda: |-
                      id(virtButton03).publish_state(true);
# Иначе передавай состояние true на сенсор virtButton02
          else:
            - if:
                condition:
                  wifi.connected:
                then:
                  - logger.log: "Перенаправляю TRUE на virtButton02"
                  - lambda: |-
                      id(virtButton02).publish_state(true);
                else:
                  - logger.log: "НЕТ WiFi, перенаправляю TRUE на virtButton08"
                  - lambda: |-
                      id(virtButton08).publish_state(true);
# То же самое для отпускания клавиши, только состояния передаются как false
    on_release:
      - if:
          condition:
            - wifi.connected:
            - or:
                - switch.is_on: One001
                - switch.is_on: All002
          then:
            - if:
                condition:
                  switch.is_on: One001
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton01"
                  - lambda: |-
                      id(virtButton01).publish_state(false);
            - if:
                condition:
                  switch.is_on: All002
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton03"
                  - lambda: |-
                      id(virtButton03).publish_state(false);
          else:
            - if:
                condition:
                  wifi.connected:
                then:
                  - logger.log: "Перенаправляю FALSE на virtButton02"
                  - lambda: |-
                      id(virtButton02).publish_state(false);
                else:
                  - logger.log: "НЕТ WiFi, перенаправляю FALSE на virtButton08"
                  - lambda: |-
                      id(virtButton08).publish_state(false);
#-----------------------------------------------------------------------------#



##----- Виртуальные считыватели -----##

# ----- virtButton01 -----
# Считыватель virtButton01 является вторым режимом для клавиши. 
# Когда Выключатель переводится в режим управления пресетами в рамках комнаты,
# тогда с левой клавиши считываются нажатия ответсвенные за смену состояния от 0 до 3,
# циклично. Так же добавлено считываение долгого нажатия (не придумал функцию).
  - platform: template
    name: "virtButton01"
    id: virtButton01
    internal: true
    on_multi_click:
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: numStandOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numStandOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Удежание кнопки от 3 до 6 секунд
    - timing:
        - ON for 3s to 6s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до 6ти секунд"
        - sensor.template.publish:
            id: numNightOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numNightOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Быстрое нажатие до 1 секунды  
# При Активации на вермя до 1 секнуды, срабатывает условие чтоесли:
    - timing:
        - ON for at most 1s
        - OFF for at least 0.1s
      then:
        - logger.log: "Однократное нажатие"
# Еслм витруалный выключатель One001 включен то тогда смени состояние
# оператора numer001 вверх, циклично и подожди 5 секунд.
        - sensor.template.publish:
            id: numUpOne01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numUpOne01
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
# После истечения времени, проверь было ли в течении 5 последних секунд
# на button02 состояние off, если да, то отключи витртуальный выключталеь One001.
# Данное условие позволяет удерживать выключатель в состоянии настройки
# режима 5 секунда, после любого нажатия. Как только настройка завершена,
# нажатия прикротятся, выключатель вернется в базовое состояние автоматически.
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
#-----------------------------------------------------------------------------#

# ----- virtButton02 -----
# Отвечает за перехват движений физической кнопки button02, в случае отлюченых
# виртуальных переключателей One001 и All002. Тогда левая клавиша, фиксирует 4
# последовательности: двойное, тройное, долгое, быстрое нажатие.
# Функционал реализован пока токль на однократное быстрое нажатие:
#
  - platform: template
    name: "virtButton02"
    id: virtButton02
    internal: true
    on_multi_click:
# Двойное быстрое нажатие
    - timing:
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at least 0.5s
# При двойном нажатии, выключателю One001 присваивается состояние включен.
# Эта операция отвечает за перевод выключателея для настройки режимов света в рамках комнаты.
# Реализуется функция удержания состояния,
# в течении 5 секунд, прсле активации button02.
      then:
        - logger.log: "Двойное нажатие"
        - switch.turn_on: One001
        - delay: 6s
        - logger.log: "Проверяю нажатия"
# После истечения времени, проверь было ли в течении 5 последних секунд
# на button02 состояние off, если да, то отключи витртуальный выключталеь One001.
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
              
# Тройное быстрое нажатие
    - timing:
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at least 0.2s
# Переводит устройсво для управления режимами света в рамках всех комнат.
# Дублирует условия от двойного нажатия. Удерживает состояние в течении 5 секунд.
      then:
        - logger.log: "тройное нажатие"
        - switch.turn_on: All002
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: keyAll01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: keyAll01
            state: false
# Быстрое нажатие до 1 секунды
# Данный тайминг с условиями является базовым функционалом для выключателя.
# Необходимо оставлять работоспособность выключатя даже при осудсвии сервеара.
# Поэтому выполняется проверка подключения к серверу и дейсвия:
    - timing:
        - ON for at most 1s
        - OFF for at least 0.5s
      then:
        - logger.log: "Однократное нажатие"
# Операция - Если есть подключение к WiFi то переключи вируруальный
#переключатель key001, если нет, то переключай состояние Realy01.
        - sensor.template.publish:
            id: key01
            state: true
        - delay: 0.3s
        - sensor.template.publish:
            id: key01
            state: false
#-----------------------------------------------------------------------------#

# ----- virtButton03 -----
# Функционал эдентичен virtButton01, создан для управления режимами в рамках
# всего света. Циклически изменяет состояние numer002.
  - platform: template
    name: "virtButton03"
    id: virtButton03
    internal: true
    on_multi_click:
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: numStandAll
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numStandAll
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
# Удежание кнопки от 3 до 6 секунд
    - timing:
        - ON for 3s to 6s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до 6ти секунд"
        - sensor.template.publish:
            id: numNightOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numNightOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Быстрое нажатие до 1 секунды  
    - timing:
        - ON for at most 1s
        - OFF for at least 0.1s
      then:
        - logger.log: "Однократное нажатие"
        - sensor.template.publish:
              id: numUpAll01
              state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numUpAll01
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button02
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
#-----------------------------------------------------------------------------#

# ----- virtButton04 -----
# Отвечат за считывание состояния правой клавиши выключателя.
# Дублирует фунции virtButton02, за исключением двойного и тройного нажатия:
  - platform: template
    name: "virtButton04"
    id: virtButton04
    internal: true
    on_multi_click:
# Двойное быстрое нажатие
    - timing:
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at least 0.5s
# При двойном нажатии, выключателю One001 присваивается состояние включен.
# Эта операция отвечает за перевод выключателея для настройки режимов света в рамках комнаты.
# Реализуется функция удержания состояния,
# в течении 5 секунд, прсле активации button02.
      then:
        - logger.log: "Двойное нажатие"
        - switch.turn_on: One001
        - delay: 6s
        - logger.log: "Проверяю нажатия"
# После истечения времени, проверь было ли в течении 5 последних секунд
# на button02 состояние off, если да, то отключи витртуальный выключталеь One001.
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
              
# Тройное быстрое нажатие
    - timing:
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at most 1s
        - ON for at most 1s
        - OFF for at least 0.2s
# Переводит устройсво для управления режимами света в рамках всех комнат.
# Дублирует условия от двойного нажатия. Удерживает состояние в течении 5 секунд.
      then:
        - logger.log: "тройное нажатие"
        - switch.turn_on: All002
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: keyAll01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: keyAll01
            state: false
# Быстрое нажатие до 1 секунды
    - timing:
        - ON for at most 1s
        - OFF for at least 0.5s
# Операция - Если есть подключение к WiFi то преключает key002, если нет, то переключение realy01.
      then:
        - logger.log: "Однократное нажатие"
        - sensor.template.publish:
            id: key01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: key01
            state: false
#-----------------------------------------------------------------------------#

# ----- virtButton05 -----
# Считыватель virtButton01 является вторым режимом для клавиши. 
# Когда Выключатель переводится в режим управления пресетами в рамках комнаты,
# тогда с левой клавиши считываются нажатия ответсвенные за смену состояния от 0 до 3,
# циклично. Так же добавлено считываение долгого нажатия (не придумал функцию).
  - platform: template
    name: "virtButton05"
    id: virtButton05
    internal: true
    on_multi_click:
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: numStandOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numStandOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Удежание кнопки от 3 до 6 секунд
    - timing:
        - ON for 3s to 6s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до 6ти секунд"
        - sensor.template.publish:
            id: numNightOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numNightOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Быстрое нажатие до 1 секунды  
# При Активации на вермя до 1 секнуды, срабатывает условие чтоесли:
    - timing:
        - ON for at most 1s
        - OFF for at least 0.1s
      then:
        - logger.log: "Однократное нажатие"
# Еслм витруалный выключатель One001 включен то тогда смени состояние
# оператора numer001 вверх, циклично и подожди 5 секунд.
        - sensor.template.publish:
            id: numDownOne01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numDownOne01
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
# После истечения времени, проверь было ли в течении 5 последних секунд
# на button02 состояние off, если да, то отключи витртуальный выключталеь One001.
# Данное условие позволяет удерживать выключатель в состоянии настройки
# режима 5 секунда, после любого нажатия. Как только настройка завершена,
# нажатия прикротятся, выключатель вернется в базовое состояние автоматически.
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
#-----------------------------------------------------------------------------#

# ----- virtButton06 -----
# Функционал эдентичен virtButton01, создан для управления режимами в рамках
# всего света. Циклически изменяет состояние numer002.
  - platform: template
    name: "virtButton06"
    id: virtButton06
    internal: true
    on_multi_click:
# Удежание кнопки от 1 до 3х секунд
    - timing:
        - ON for 1s to 3s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до  секунд"
        - sensor.template.publish:
            id: numStandAll
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numStandAll
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
# Удежание кнопки от 3 до 6 секунд
    - timing:
        - ON for 3s to 6s
        - OFF for at least 0.5s
      then:
        - logger.log: "Удержание до 6ти секунд"
        - sensor.template.publish:
            id: numNightOne
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numNightOne
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: One001
# Быстрое нажатие до 1 секунды  
    - timing:
        - ON for at most 1s
        - OFF for at least 0.1s
      then:
        - logger.log: "Однократное нажатие"
        - sensor.template.publish:
            id: numDownAll01
            state: true
        - delay: 0.2s
        - sensor.template.publish:
            id: numDownAll01
            state: false
        - delay: 6s
        - logger.log: "Проверяю нажатия"
        - if:
            condition:
              for:
                time: 6s
                condition:
                  binary_sensor.is_off: button01
            then:
              - logger.log: "Выход из меню"
              - switch.turn_off: All002
#-----------------------------------------------------------------------------#
# ----- virtButton07 -----
  - platform: template
    name: "virtButton07"
    id: virtButton07
    internal: true
    on_press:
      then:
        - switch.toggle: realy01
#-----------------------------------------------------------------------------#
# ----- virtButton07 -----
  - platform: template
    name: "virtButton08"
    id: virtButton08
    internal: true
    on_press:
      then:
        - switch.toggle: realy02


sensor:
  - platform: template
    name: "numUpAll01"
    id: numUpAll01

  - platform: template
    name: "numUpOne01"
    id: numUpOne01

  - platform: template
    name: "numStandOne"
    id: numStandOne

  - platform: template
    name: "numStandAll"
    id: numStandAll

  - platform: template
    name: "numDownAll01"
    id: numDownAll01

  - platform: template
    name: "numDownOne01"
    id: numDownOne01

  - platform: template
    name: "key01"
    id: key01

  - platform: template
    name: "keyAll01"
    id: keyAll01
    
  - platform: template
    name: "numNightOne"
    id: numNightOne

# Переключатели
switch:

# Управление 2мя реле через пины D1 и D2
  - platform: gpio
    name: "Realy01"
    pin: D1
    id: realy01
  - platform: gpio
    name: "Realy02"
    pin: D2
    id: realy02
    
# Витруальные переключатели, условия для которых прописаны в сенсорах, состояния передаются в HA
  - platform: template
    name: "One001"
    id: One001
    internal: true
    optimistic: true
  - platform: template
    name: "All002"
    id: All002
    internal: true
    optimistic: true

Да, это всеголиш логика выключателя.

Тут рассмотрено множество режимов работы.

Все данные о состоянии тех или иных состояний пересылаются на сервер, который уже и обрабатывает, выполняет процессы.

В конфиге много примечаний, рассказывающих значение тех или иных функций.


О том где научится составлять конфиг это сам сайт ESPHOME. Если честно, но всё что мне нужно было сделать, вообще всё, в том или ином виде описано на их вики. Не как пример, а как некий шаблон, по которому понятна логика.

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

И нет, конечно же нет, такой заготовки конфига, который нужен мне, вообще даже близко. Тут даже возникает вопрос, я делаю то, до чего еще никто не додумался, или я сделал то, чем никто бы не пользовался в реальности.


WiFi Component - раздел посвещеный соединению с файфаем, из него я подчерпнул очень нужную функцию, проверка подключения, что и позволо, сделать не только выключатель-сервер, но еще и автономный выключатель.

Automations and Templates - тут описано то как создавать физический выключатель, что делать при том или ином состоянии. Но еще крайне важная фишка for Condition. Позволяет проверить было ли указаное состояние чего либо, такое то время, и на основе это сделать условие. Как раз, эту функцию я применил чтобы удерживать активное меню в течении определённого времени и выходить из него.

Template Binary Sensor - Описывает виртуальный сенсор, он позволяет как бы быть внутренним, реагировать на внутринние процессы. Но еще и передавать их в HA

Binary Sensor Component - Описывает физический сенсор, использовался для принятия сигнала с клавишь выключателя. Из него я получил важнейшие функци реакции на активацию on_multi_click:, это и позоволило сделать различные функции: двойное, тройное, долгое, быстрое нажатие.

Template Sensor - Полностью виртуальный сенсор, в моем случае отличий особо нет, только тем что на него можно отправлять данные без применения lambda. Как раз их применил для передачи сингналов в HA.

Switch Component - описывает выключатель с фиксацией, своего рода ячейка памяти, использовал для ВКЛ/ВЫКЛ реле.

Template Switch - То же самое что и обычный выключатель, но для внутренних процессов. Использовал как переменную для удержания меню.

Template Number - тоже интересный компонент, своего рода счетсчик, можно зададать пределы и шаг, значение будет менять например по нажатию. Изначально хотел применить, но концепция изменилась, и подобную операцию решено было перенести на серверную часть HA.

Number Component - Описывается виртуальный счетчик, эдентичен предыдущему.

В общем то вот и все ссылки, метод постоения конфига можно освоить примерно за 6 - 8 часов, после этого времени становиться понятно, что из этого можно собрать. На основе этого уже можно сделать нужную логигу.