В этой заметке я хочу обратить внимание на существующую “из коробки” возможность фильтровать вывод карточек в интерфейсе lovelace, а так же скрывать или отображать карточки, например, по нажатию кнопки. Что бы не загромождать интерфейс HA и не плодить множество дашбордов, бывает удобно показывать карточки только в определенное время, в зависимости от каких-то событий или условий.
В интерфейсе HA за условия отображения отвечает специальная карточка – Conditional Card. Подробное описание карточки можно (и нужно) почитать в официальной документации, а я покажу ее использование в реальной жизни.
Один из примеров это показ карточки “время в пути”. С утра мне нужно видеть сколько займет путь из дома до работы, а вечером наоборот. При этом днем или в выходные мне эта информация совершенно ни к чему.
Начать здесь нужно с выбора компонента, который позволит получать информацию о времени в пути от одной точки до другой, в моем случае это кастомный sensor.yandex_maps. Конфигурация у него максимально простая, и в моем случае выглядит примерно так:
- platform: yandex_maps start: zone.home destination: !secret yandex_map_dest_1 name: До работы [Саша] - platform: yandex_maps start: !secret yandex_map_dest_1 destination: zone.home name: До дома [Саша] - platform: yandex_maps start: zone.home destination: !secret yandex_map_dest_2 name: До работы [Ира] - platform: yandex_maps start: !secret yandex_map_dest_2 destination: zone.home name: До дома [Ира]
Создается 4 сенсора, для меня и моей второй половины, в двух направлениях для каждого – от дома до работы и от работы до дома.
В secrets.yaml координаты прописаны так:
yandex_map_dest_1: '37.617243,55.750654' yandex_map_dest_2: '37.619067,55.752242'
Обратите внимание, что в конфиге координаты надо указать в обратном Яндекс Картам порядке – долгота, широта.
Дальше, нужно определить время, в течении которого будут отображаться карточки. Сделать это можно с помощью стандартного бинарного сенсора Times of the Day, добавив в конфиг два интервала – например утро (с 7 до 10) и вечер (с 17 до 21).
- platform: tod name: time_between_7_10 after: '7:00' before: '10:00' - platform: tod name: time_between_17_21 after: '17:00' before: '21:00'
Дополнительно, нужен сенсор который позволит определить рабочий ли сегодня день или нет. Для этого в HA существует бинарный сенсор Workday. Конфиг в моем случае у него максимально простой:
- platform: workday country: RU
Основываясь на этих сенсорах Conditional Card и будет отображать нужные карточки. Стоит отметить, что все условия указанные в блоке conditions читаются через “И”. Т.е. для того, что бы карточка была показана, все проверки должны вернуть True.
Важный момент – Conditional Card позволяет указать для отображения только одну карточку, но это легко обойти завернув все что нужно в vertical-stack или horizontal-stack.
В конфиге это будет выглядеть примерно так:
# --- Время в пути (Утро) - type: conditional conditions: # Время сейчас в промежутке с 7-00 до 10-00 - entity: binary_sensor.time_between_7_10 state: "on" # И # Сегодня рабочий день - entity: binary_sensor.workday_sensor state: "on" card: type: vertical-stack cards: - type: markdown content: "### Время в пути:" # Показываем время до работы - type: entities entities: - sensor.do_raboty_sasha - sensor.do_raboty_ira - type: history-graph hours_to_show: 2 refresh_interval: 60 entities: - sensor.do_raboty_sasha - sensor.do_raboty_ira # --- Время в пути (Вечер) - type: conditional conditions: # Время сейчас в промежутке с 17-00 до 21-00 - entity: binary_sensor.time_between_17_21 state: "on" # И # Сегодня рабочий день - entity: binary_sensor.workday_sensor state: "on" card: type: vertical-stack cards: - type: markdown content: "### Время в пути:" # Показываем время до дома - type: entities entities: - sensor.do_doma_sasha - sensor.do_doma_ira - type: history-graph hours_to_show: 2 refresh_interval: 60 entities: - sensor.do_doma_sasha - sensor.do_doma_ira
Как итог, если выполнены все условия, на дашборде появится вот такой блок:
А как только хотя бы одно из условий перестанет выполнятся (время или день недели), все эти 3 карточки пропадут, освободив место для более важной информации =)
– ~ –
Еще один пример использования Conditional Card – пульт управления ТВ прямо в интерфейсе HA.
Со всеми нужными кнопками он получается достаточно громоздким, да к тому же у меня их несколько.
Здесь не нужны сенсоры, время и дни недели. Здесь вполне подойдет кнопка, по нажатию на которую карточка с пультом будет либо показана, либо спрятана.
Вот как это выглядит у меня в интерфейсе:
По нажатию на кнопку “Пульт управления” собственно пульт появляется или исчезает .
Работает это так:
Есть Conditional Card, в условии которой прописана проверка какой либо сущности, в моем случае это Input Boolean.
И есть кнопка, при нажатии на которую вызывается toggle (меняет состояние на противоположное) для input_boolean.
В lovelace’е будет следующий код:
# Кнопка, по нажатию вызывает toggle для input_boolean - type: button entity: input_boolean.tv_remote_show_bedroom name: "\U000021E7 Пульт управления \U000021E9" show_state: false show_icon: false tap_action: action: toggle # В зависимости от состояния input_boolean отображает или нет карточку с пультом - type: conditional conditions: - entity: input_boolean.tv_remote_show_bedroom state: "on" card: !include samsung_tv_remote_ue.yaml
Код для input_boolean особого интереса не представляет:
tv_remote_show_bedroom: icon: mdi:remote-tv