Як в Home Assistant перетворити спадаючий список для вибору станів на гарні кнопки

У Home Assistant спадаючий список (select) з’являється в інтерфейсі досить часто. Цей елемент управління зручний з точки зору логіки платформи, але з погляду інтерфейсу – не завжди найкраще рішення. Особливо тоді, коли йдеться не про налаштування, а про щоденне керування режимами: підсвітка, потужність, швидкість, рівні яскравості. У таких випадках спадаючий список виглядає зайвим, адже користувачу доводиться відкривати список, шукати потрібний пункт і лише тоді змінювати стан. На дашборді це сприймається важче, ніж могло б, особливо якщо керування відбувається з телефону, а не мишею.

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

Передумови

У прикладі нижче використовується custom:button-card, тому він має бути встановлений в вашому Home Assistant, щоб наведений код працював. Також у вас уже повинна існувати сутність типу select з фіксованими значеннями.

Приклад: спадаючий список станів LED-підсвітки EcoFlow River 3 Plus

В моєму випадку я покращувала інтерфейс керування LED-підсвіткою зарядної станції EcoFlow River 3 Plus. Після інтеграції EcoFlow у Home Assistant з’являється сутність select.

спадаючий список станів LED підсвітки Ecoflow River 3 Plus

Вона має кілька режимів роботи підсвітки, зокрема off, dim,bright, та sos. За замовчуванням Home Assistant показує їх як спадаючий список:

спадаючий список станів LED підсвітки Ecoflow River 3 Plus

Ми ж замінимо його чотирма кнопками, кожна з яких відповідатиме одному режиму. Логіка проста: кнопка при натисканні викликає сервіс select.select_option і передає потрібне значення. Додатково можна описатистиль для стану, коли цей режим активний – таким чином кнопка підсвічується.

Короткий розбір конфігурації

Поле name визначає текст, який ви бачите на кнопці. Саме тут варто писати коротку й зрозумілу назву режиму – Off, Dim, Bright або SOS. Це не технічне поле, а частина інтерфейсу, тому воно напряму впливає на читабельність дашборду.

Поле icon відповідає за іконку кнопки. Іконки беруться з бібліотеки Material Design Icons, яку Home Assistant використовує за замовчуванням, тому вони не потребують додаткового підключення.

Поле tap_action визначає, що при натисканні викликається сервіс select.select_option, а в option передається конкретне значення, яке прив’язано до поточної кнопки.

Блок state відповідає за підсвічування активної кнопки. Коли значення select.river_3_plus_led дорівнює, наприклад, dim, Home Assistant застосовує стилі, описані для цього стану. Завдяки цьому користувач одразу бачить, який режим увімкнений, без додаткових індикаторів чи тексту.

Блок styles задає базовий вигляд кнопки. Тут можна контролювати форму, відступи, рамку, радіус заокруглення. Важливий момент: фоновий колір у звичайному стані залишається прозорим, а активний колір з’являється лише через state. Це створює чітку різницю між «вибрано» і «не вибрано» без перевантаження інтерфейсу.

YAML коди кнопок

Кнопка для режиму Off

type: custom:button-card
entity: select.river_3_plus_led
name: "Off"
icon: mdi:lightbulb-off-outline
show_state: false
tap_action:
  action: call-service
  service: select.select_option
  target:
    entity_id: select.river_3_plus_led
  data:
    option: "off"
state:
  - value: "off"
    styles:
      card:
        - background-color: "#009ac7"
      name:
        - color: white
      icon:
        - color: white
styles:
  card:
    - background-color: rgba(0,0,0,0%)
    - border: 1px solid rgba(0,0,0,0.15)
    - border-radius: 14px
    - padding: 30px 10px
  name:
    - font-weight: 400
    - padding-top: 8px
  icon:
    - width: 28px
    - height: 28px
grid_options:
  columns: 3
  rows: 2

Кнопка для режиму Dim

type: custom:button-card
entity: select.river_3_plus_led
name: Dim
icon: mdi:lightbulb-on-10
show_state: false
tap_action:
  action: call-service
  service: select.select_option
  target:
    entity_id: select.river_3_plus_led
  data:
    option: dim
state:
  - value: dim
    styles:
      card:
        - background-color: "#009ac7"
      name:
        - color: white
      icon:
        - color: white
styles:
  card:
    - background-color: rgba(0,0,0,0%)
    - border: 1px solid rgba(0,0,0,0.15)
    - border-radius: 14px
    - padding: 30px 10px
  name:
    - font-weight: 400
    - padding-top: 8px
  icon:
    - width: 28px
    - height: 28px
grid_options:
  columns: 3
  rows: 2

Кнопка для режиму Bright

type: custom:button-card
entity: select.river_3_plus_led
name: Bright
icon: mdi:lightbulb-on
show_state: false
tap_action:
  action: call-service
  service: select.select_option
  target:
    entity_id: select.river_3_plus_led
  data:
    option: bright
state:
  - value: bright
    styles:
      card:
        - background-color: "#009ac7"
      name:
        - color: white
      icon:
        - color: white
styles:
  card:
    - background-color: rgba(0,0,0,0%)
    - border: 1px solid rgba(0,0,0,0.15)
    - border-radius: 14px
    - padding: 30px 10px
  name:
    - font-weight: 400
    - padding-top: 8px
  icon:
    - width: 28px
    - height: 28px
grid_options:
  columns: 3
  rows: 2

Кнопка для режиму SOS

type: custom:button-card
entity: select.river_3_plus_led
name: SOS
icon: mdi:alert
show_state: false
tap_action:
  action: call-service
  service: select.select_option
  target:
    entity_id: select.river_3_plus_led
  data:
    option: sos
state:
  - value: sos
    styles:
      card:
        - background-color: "#009ac7"
      name:
        - color: white
      icon:
        - color: white
styles:
  card:
    - background-color: rgba(0,0,0,0%)
    - border: 1px solid rgba(0,0,0,0.15)
    - border-radius: 14px
    - padding: 30px 10px
  name:
    - font-weight: 400
    - padding-top: 8px
  icon:
    - width: 28px
    - height: 28px
grid_options:
  columns: 3
  rows: 2

Як це працює на практиці

У цьому прикладі кнопки існують як елементи секції на дашборді Lovelace, й працюють як єдиний елемент керування. Якщо ви використовуєте не секції, а розкладку, grid_options усередині кожної кнопки вже не потрібні, бо розмірами та позиціонуванням керує контейнер, а не окрема картка. В такому випадку grid_options можна прибрати і огорнути всі чотири кнопки в горизонтальний стек, який буде поводитись як сегментований контрол.

спадаючий список станів LED підсвітки Ecoflow River 3 Plus перетворено на кнопки

Кожна кнопка завжди прив’язана до тієї ж сутності select.river_3_plus_led. При натисканні вона змінює значення select через стандартний сервіс Home Assistant. Блок state відстежує поточний стан сутності й застосовує стилі, якщо значення збігається.

У результаті ви отримуєте повноцінний сегментований контрол. Активний режим видно одразу, без відкриття списків і додаткових кліків.

Підсумок

Стандартний select добре підходить для налаштувань, але для частого керування режимами він швидко починає заважати. Перетворення його на набір кнопок робить дашборд зрозумілішим і візуально акуратнішим. Цей підхід однаково добре працює для підсвітки, режимів потужності, швидкостей вентиляторів або будь-яких інших станів з фіксованим набором значень.

Джерело: community.home-assistant.io

Від Тетяна

IT-спеціалістка, викладачка, фанатка сучасних технологій. З 2009 року занурена у світ цифрового дизайну, веб-розробки та адміністрування систем. Ділюсь знаннями про веб-технології, IT-інструменти та корисні лайфхаки, викладаю студентам, навчаюсь сама.

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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *