- Customizer component
- CustomUI panel
- Global Features
- Features available for all domains
- Features available for almost all domains
- Features available for light, cover, climate, "plain", and "toggle" cards
- Features available for light and cover domains only
- Complete example
See instruction in a dedicated repository: https://github.com/andrey-git/home-assistant-customizer Provides the following features:
- Load CustomUI files (HA 0.53+)
- Register CustomUI panel (HA 0.52 and below).
- Hide CustomUI attributes in
more-info
(HA 0.50 - 0.52) - Hide arbitrary attributes in
more-info
(Requires HA 0.50+) - Dynamic customization.
- Set the width and number of UI columns (Requires CustomUI 20180112+)
In HA 0.53+ is added automatically to configuration panel.
Those features do not require setting custom_ui_state_card: state-card-custom-ui
on any entity. Just loading is enough.
Requires HA 0.62+
If you don't have a default_view
view defined you still hide some entities from the Home tab by setting hide_in_default_view: true
attribute.
If applied to a View (a group with view: true
) hide_in_default_view
will hide everything under that view (not just the view group itself).
You can set entity's attributes or state using JavaScript templates. See Templates for more info.
For example to show "Active" instead of "on" for binary sensor:
homeassistant:
customize:
binary_sensor.my_sensor:
templates:
state: if (state === 'on') return 'Active'; else return state;
This is very powerful feature that can do a lot of cool things, but it could also have performance implications.
Starting from version 2018-04-27 you can set an icon color by specifying icon_color
attribute which was removed from core in HA 0.66
For example:
homeassistant:
customize:
light.bed_light:
icon_color: green
The color could take any CSS color value. For example: #FFACAC
, red
, rgba(10, 20, 30, 0.5)
etc.
Note that the color will be applied as-is and it won't be affected by the brightness
attribute.h
Starting from version 2018-04-29 you change the displayed action name by specifying action_name
attribute.
Action name is the button used to activate scenes and to execute non-interruptible scripts.
For example:
homeassistant:
customize:
scene.dark:
action_name: Darken
You can use context-aware attributes to give different names/attributes for the same entity in different groups, views, or devices. See context-aware.md
If you like badges, you can now put them in the state cards. This also works for domains that are usually not used as a badge. Lights for example. There are 4 ways to put badges in a state card.
- Turn a single state card into a badge. Adjacent badges will clamp together to a single line.
homeassistant:
customize_glob:
"*.*":
custom_ui_state_card: state-card-custom-ui
sensor.door_sensor:
state_card_mode: badges
sensor.yard_sensor:
state_card_mode: badges
group:
my_group:
entities:
- sensor.door_sensor
- sensor.yard_sensor
- Create a dedicated group of devices you want to display as badges and apply
state_card_mode: badges
to it. Note that this group must be in another group. The example below will show 2 sensors as badges in outer_group's card.
homeassistant:
customize_glob:
"*.*":
custom_ui_state_card: state-card-custom-ui
group.inner_group:
state_card_mode: badges
group:
inner_group:
entities:
- sensor.door_sensor
- sensor.yard_sensor
outer_group:
entities:
- group.inner_group
*all other devices of outer_group*
- If you already have a group, part of which you want to display as badges inside another group - use
badges_list
to filter badge wannabe entities. In the previous example, if you wanted to show onlysensor.door_sensor
as a badge in outer_group:
...
group.inner_group:
state_card_mode: badges
badges_list:
- sensor.door_sensor
group:
inner_group:
...
outer_group:
...
...
- Creating a dedicated group has a downside that the group will also show in the UI as whole in the default_view. To prevent that, you can make the group include itself. In the following example
inner_group
andouter_group
are the same group:
homeassistant:
customize_glob:
"*.*":
custom_ui_state_card: state-card-custom-ui
group.my_group:
state_card_mode: badges
group:
my_group:
entities:
- sensor.door_sensor
- sensor.yard_sensor
- group.my_group
*all other devices of outer_group*
If you use this example as-is you will notice that all of your devices in the group appear both as regular state cards and as badges. To limit badges to the door/yard sensors only use badges_list
from Example 2. To hide door/yard sensor cards (but leave them as badges) use the Context-aware hide attribute feature.
Full example:
homeassistant:
customize_glob:
"*.*":
custom_ui_state_card: state-card-custom-ui
group.my_group:
state_card_mode: badges
badges_list:
- sensor.door_sensor
- sensor.yard_sensor
sensor.door_sensor:
group:
group.my_group:
hidden: true
sensor.yard_sensor:
group:
group.my_group:
hidden: true
group:
my_group:
entities:
- sensor.door_sensor
- sensor.yard_sensor
- light.mylight
- group.my_group
Requires HA 0.50+
You can select per-entity theme from the list of defined themes
frontend:
themes:
green_example:
paper-toggle-button-checked-button-color: green
light.yard:
theme: green_example
Starting from version 2018-01-26 per-entity theming can also affect top-of-the-page badges.
If you would like to use your own state-card-custom-alarm.html for alarm_control_panel
but still enjoy framework features of CustomUI, like theming, you can use state_card_custom_ui_secondary
:
homeassistant:
customize_glob:
"*.*":
custom_ui_state_card: state-card-custom-ui
alarm_control_panel.alarm:
state_card_custom_ui_secondary: state-card-custom_alarm
The following is supported for all state cards except configurator
Use show_last_changed: true
Note that if you use the extra_data_template below it will take precedence over show_last_changed
The next features are available for 4 types of cards:
- Light
- Cover
- Climate
- "Plain" i.e. card with icon, name, and state.
- "Toggle" i.e. card with icon, name, and toggle.
Use hide_control: true
to hide the control (toggle / cover buttons) altogether.
Use extra_data_template
to add extra data below the entity name. The format is a Templates.
For example to show power consumption from the power_consumption
attribute use:
extra_data_template: ${attributes.power_consumption}W
Use can add several lines by using an array:
extra_data_template:
- ${attributes.power_consumption}W
- ${attributes.temperature}C
Instead of using a gray text below the entity name you can add a sensor-like badge. There are two ways to do that:
- Specify a real sensor by entity ID:
extra_badge:
entity_id: sensor.my_sensor
- Make a fake sensor from entity's attribute:
extra_badge:
attribute: power_consumption
unit: W
If you use the first format, i.e. a real sensor, you can use context-aware theming on it.
In both cases you can specify a blacklist of badge "states", when you don't want to see the badge.
extra_badge:
entity_id: sensor.my_sensor
blacklist_states: 0
You can also provide a list of badges:
extra_badge:
- entity_id: sensor.my_sensor1
blacklist_states: 0
- entity_id: sensor.my_sensor2
blacklist_states: 'z'
Sometimes you don't want to flip a switch by mistake.
Use confirm_controls_show_lock
to block the control and show a transparent lock icon over it. Tapping on the lock will open it for 5 seconds allowing to use the control. If you would like to prevent accidental flip without the visual lock hint, use confirm_controls
instead.
You can replace the default control with another control by using control_element
attribute.
For example:
switch.my:
control_element: my-custom-switch-element
You can also use control_element: ''
to show the state, like the "plain" card does.
If there is enough space the card will have icon+name on the left, optional slider in the middle and toggle on the right:
state_card_mode value |
description |
---|---|
break-slider-toggle | Move the slider and the toggle together to a second line. |
single-line | Never use more than one line. Shrink the name and the slider. |
break-slider | Move slider to second line. Leave toggle on the first line. |
hide-slider | Hide the slider. |
no-slider (default) | Never show the slider even if there is enough space. |
Use stretch_slider
attribute to make it stretch to all available space.
In that dictionary the following optional fields are available:
field | default | description |
---|---|---|
min | 0 | Minimum slider value |
max | 255 for light, 100 for cover | Maximum slider value |
pin | False | Display numeric value when moving the slider |
off_when_min | True | Whether to turn the light off when moving the slider to the minimum value if that value is not 0 |
report_when_not_changed | True | Whether to send the light-controlling command if the slider was returned to the initial position. I.e. you moved the slider and then changed your mind |
homeassistant:
customize:
light.bedroom:
custom_ui_state_card: state-card-custom-ui
state_card_mode: break-slider
stretch_slider: true
extra_data_template: "${attributes.power_consumption !== 0 ? (attributes.power_consumption + 'W') : ''}"
hide_control: false
show_last_changed: false
theme: happy
confirm_controls_show_lock: true
slider_theme:
min: 10
max: 200
pin: true
off_when_min: false
report_when_not_changed: false
extra_badge:
entity_id: sensor.my_sensor # Will take precedence over attribute and unit below.
attribute: power_consumption
unit: W
blacklist_states: 0
frontend:
extra_html_url:
- /local/custom_ui/state-card-custom-ui.html