Room Management
Dashboard: Room Management
Path: room-management
Admin interface for creating, deleting, and managing room configurations and automation helpers.
Summary
The Room Management dashboard serves as the administrative backend for the home's room logic. It allows users to initialize new rooms (creating necessary helper entities) or delete existing ones. It features a dynamic "Configured Rooms" section powered by auto-entities, which automatically lists all configured rooms and provides collapsible controls for their automation modes, occupancy sensors, and timeouts.
Related Packages
This view contains entities managed by:
Dependencies (Custom Cards)
Required HACS frontend resources:
custom:auto-entitiescustom:card-modcustom:mushroom-title-cardcustom:streamline-card
Configuration
title: Room Management
icon: ''
type: sections
max_columns: 3
sections:
- type: grid
cards:
- type: custom:mushroom-title-card
alignment: center
title_tap_action:
action: none
subtitle_tap_action:
action: none
title: Manage Areas
- type: heading
heading: Add / Update Room
icon: mdi:home-plus
- type: markdown
content: '**Instructions:**
1. Select a **Native Area** from the list.
2. Click **Initialize** to create helpers for it.
*Uses Home Assistant Areas as the source.*
'
- type: entities
show_header_toggle: false
title: Register New Area
entities:
- entity: input_select.area_mgmt_create_select
name: Select Area (from HA)
- type: call-service
icon: mdi:refresh
name: Refresh List
action_name: REFRESH
service: automation.trigger
service_data:
entity_id: automation.system_populate_area_list
skip_condition: true
- type: call-service
icon: mdi:plus-box
name: Action
action_name: REGISTER AREA
service: script.create_area_settings
service_data: {}
- type: tile
entity: input_select.area_mgmt_create_select
name: Initialize Area
icon: mdi:content-save
color: green
show_entity_picture: false
vertical: false
tap_action:
action: call-service
service: script.create_area_settings
features_position: bottom
card_mod:
style: "ha-card {\n border: none;\n background: var(--green-color);\n --primary-text-color:\
\ white;\n --secondary-text-color: white;\n --card-mod-icon-color: black;\n\
}\n"
- type: heading
heading: Danger Zone
icon: mdi:alert-circle-outline
- type: entities
show_header_toggle: false
title: Delete Area
entities:
- entity: input_select.area_mgmt_delete_select
name: Select Area to Delete
- type: call-service
icon: mdi:refresh
name: Refresh List
action_name: REFRESH
service: automation.trigger
service_data:
entity_id: automation.system_populate_area_list
skip_condition: true
- type: call-service
icon: mdi:delete-forever
name: Action
action_name: DELETE AREA
service: script.delete_area_settings
service_data: {}
confirmation:
text: Are you sure you want to delete this Area configuration?
- type: tile
entity: input_select.area_mgmt_delete_select
name: Delete Room Config
icon: mdi:delete
color: red
show_entity_picture: false
vertical: false
tap_action:
action: call-service
service: script.delete_area_settings
features_position: bottom
card_mod:
style: "ha-card {\n border: none;\n background: var(--red-color);\n --primary-text-color:\
\ white;\n --secondary-text-color: white;\n --card-mod-icon-color: black;\
\ /* Icon visibility fix */\n}\n"
- type: grid
cards:
- type: custom:mushroom-title-card
alignment: center
title_tap_action:
action: none
subtitle_tap_action:
action: none
title: Area Configurations
- type: heading
heading: Configured Rooms
icon: mdi:view-dashboard-outline
- type: custom:auto-entities
card:
type: entities
title: Area Configurations
show_header_toggle: false
filter:
template: "{% set ns = namespace(rows=[]) %} {# STRICT FILTER: Only look for\
\ selectors starting with 'select.area_' #} {% set mode_selectors = states.select\
\ \n | selectattr('entity_id', 'search', '^select\\.area_.*_automation_mode$')\
\ \n | sort(attribute='entity_id') \n | list %}\n{% for sel in mode_selectors\
\ %}\n {# Extract slug: select.area_kitchen_automation_mode -> kitchen #}\n\
\ {% set raw_id = sel.entity_id.split('.')[1] %}\n {# Remove prefix and\
\ suffix #}\n {% set area_key = raw_id.replace('area_', '').replace('_automation_mode',\
\ '') %}\n {% set name = area_key.replace('_',' ') | title %}\n {# Define\
\ Entity IDs using new 'area_' schema #}\n {% set state_select = 'select.area_'\
\ ~ area_key ~ '_state' %}\n {% set auto_switch = 'switch.area_' ~ area_key\
\ ~ '_automation' %}\n {% set occ_sensor = 'binary_sensor.area_' ~ area_key\
\ ~ '_occupancy' %}\n {% set idle_entity = 'number.area_' ~ area_key ~ '_presence_idle_time'\
\ %}\n {% set delay_entity = 'number.area_' ~ area_key ~ '_lights_presence_delay'\
\ %}\n {% set bed_s = 'select.area_' ~ area_key ~ '_bed_sensor' %}\n\
\ {% set sleep_entry = 'number.area_' ~ area_key ~ '_sleep_entry_delay'\
\ %}\n {% set sleep_exit = 'number.area_' ~ area_key ~ '_sleep_exit_delay'\
\ %}\n {% set occ_source = 'select.area_' ~ area_key ~ '_occupancy_source'\
\ %}\n {% set timer_entity = 'sensor.area_' ~ area_key ~ '_timer' %}\n {%\
\ set entities = [] %}\n \n {# 1. Mode #}\n {% set entities = entities\
\ + [{'entity': sel.entity_id, 'name': 'Mode'}] %}\n {# 2. Switch #}\n {%\
\ if states[auto_switch] is defined %}\n {% set entities = entities + [{'entity':\
\ auto_switch, 'name': 'Automation Enabled'}] %}\n {% endif %}\n {# 3. State\
\ #}\n {% if states[state_select] is defined %}\n {% set entities = entities\
\ + [{'entity': state_select, 'name': 'Current State'}] %}\n {% endif %}\n\
\ {# 4. Occupancy #}\n {% if states[occ_sensor] is defined %}\n {% set\
\ entities = entities + [{'entity': occ_sensor, 'name': 'Occupancy'}] %}\n\
\ {% endif %}\n {# 5. Occupancy Source #}\n {% if states[occ_source] is\
\ defined %}\n {% set entities = entities + [{'entity': occ_source, 'name':\
\ 'Occupancy Sensor'}] %}\n {% endif %}\n {# 6. Timer Bar (Conditional Row)\
\ #}\n {% if states[timer_entity] is defined %}\n {% set entities = entities\
\ + [{\n 'type': 'conditional',\n 'conditions': [\n \
\ {'entity': timer_entity, 'state_not': 'unavailable'},\n {'entity':\
\ timer_entity, 'state_not': 'unknown'},\n {'entity': timer_entity,\
\ 'state_not': 'none'},\n {'entity': timer_entity, 'state_not': ''}\n\
\ ],\n 'row': {\n 'entity': timer_entity,\n \
\ 'name': 'Timer'\n }\n }] %}\n {% endif %}\n {# 7. Config\
\ Numbers #}\n {% if states[idle_entity] is defined %}\n {% set entities\
\ = entities + [{'entity': idle_entity, 'name': 'Idle Time (sec)'}] %}\n \
\ {% endif %}\n {% if states[delay_entity] is defined %}\n {% set entities\
\ = entities + [{'entity': delay_entity, 'name': 'Off Delay (sec)'}] %}\n\
\ {% endif %}\n {# 8. Bed Sensor & Sleep Timers (Conditional) #}\n {% if\
\ states[bed_s] is defined %}\n {% set entities = entities + [{'entity':\
\ bed_s, 'name': 'Bed Occupancy Sensor'}] %}\n \n {# Sleep Entry Delay\
\ #}\n {% if states[sleep_entry] is defined %}\n {% set entities =\
\ entities + [{\n 'type': 'conditional',\n 'conditions': [\n\
\ {'entity': bed_s, 'state_not': '-Select-'},\n {'entity':\
\ bed_s, 'state_not': 'unknown'},\n {'entity': bed_s, 'state_not':\
\ 'unavailable'}\n ],\n 'row': {\n 'entity': sleep_entry,\n\
\ 'name': 'Sleep Entry Delay (sec)'\n }\n }] %}\n\
\ {% endif %}\n {# Sleep Exit Delay #}\n {% if states[sleep_exit]\
\ is defined %}\n {% set entities = entities + [{\n 'type': 'conditional',\n\
\ 'conditions': [\n {'entity': bed_s, 'state_not': '-Select-'},\n\
\ {'entity': bed_s, 'state_not': 'unknown'},\n {'entity':\
\ bed_s, 'state_not': 'unavailable'}\n ],\n 'row': {\n \
\ 'entity': sleep_exit,\n 'name': 'Sleep Exit Delay (sec)'\n\
\ }\n }] %}\n {% endif %}\n {% endif %}\n {# Create the\
\ Group #}\n {% set group = {\n 'type': 'custom:fold-entity-row',\n \
\ 'head': {'type':'section', 'label': name, 'card_mod': {\n 'style':\
\ \".label { color: orange !important; }\"\n }},\n 'entities': entities\n\
\ } %}\n {% set ns.rows = ns.rows + [group] %}\n{% endfor %} {{ ns.rows\
\ | to_json }}\n"
- type: custom:auto-entities
show_empty: true
card:
type: entities
show_header_toggle: false
filter:
template: " {% set ns = namespace(rows=[]) %}\n {% set mode_selectors\
\ = states.select | selectattr('entity_id','search','automation_mode') | sort(attribute='entity_id')\
\ | list %}\n \n {% for sel in mode_selectors %}\n {# Extract base\
\ id and normalize to room_key #}\n {% set raw_id = sel.entity_id.split('.')[1]\
\ %}\n {% set base = raw_id.replace('_automation_mode','') %}\n \
\ {% if base.startswith('room_') %}\n {% set room_key = base[5:] %}\n\
\ {% else %}\n {% set room_key = base %}\n {% endif %}\n\
\ {% set name = room_key.replace('_',' ') | title %}\n\n {# Entity\
\ IDs #}\n {% set state_select = 'select.room_' ~ room_key ~ '_state'\
\ %}\n {% set auto_switch = 'switch.room_' ~ room_key ~ '_automation'\
\ %}\n {% set occ_sensor = 'binary_sensor.room_' ~ room_key ~ '_occupancy'\
\ %}\n {% set idle_entity = 'number.room_' ~ room_key ~ '_presence_idle_time'\
\ %}\n {% set delay_entity = 'number.room_' ~ room_key ~ '_lights_presence_delay'\
\ %}\n {% set bed_s = 'select.room_' ~ room_key ~ '_bed_sensor'\
\ %}\n {% set sleep_entry = 'number.room_' ~ room_key ~ '_sleep_entry_delay'\
\ %}\n {% set sleep_exit = 'number.room_' ~ room_key ~ '_sleep_exit_delay'\
\ %}\n {% set occ_source = 'select.room_' ~ room_key ~ '_occupancy_source'\
\ %}\n {% set timer_entity = 'sensor.room_' ~ room_key ~ '_timer' %}\n\
\n {% set entities = [] %}\n \n {# 1. Mode #}\n {% set\
\ entities = entities + [{'entity': sel.entity_id, 'name': 'Mode'}] %}\n\n\
\ {# 2. Switch #}\n {% if states[auto_switch] is defined %}\n \
\ {% set entities = entities + [{'entity': auto_switch, 'name': 'Automation\
\ Enabled'}] %}\n {% endif %}\n\n {# 3. State #}\n {% if states[state_select]\
\ is defined %}\n {% set entities = entities + [{'entity': state_select,\
\ 'name': 'Current State'}] %}\n {% endif %}\n\n {# 4. Occupancy\
\ #}\n {% if states[occ_sensor] is defined %}\n {% set entities\
\ = entities + [{'entity': occ_sensor, 'name': 'Occupancy'}] %}\n {%\
\ endif %}\n\n {# 5. Occupancy Source #}\n {% if states[occ_source]\
\ is defined %}\n {% set entities = entities + [{'entity': occ_source,\
\ 'name': 'Occupancy Sensor'}] %}\n {% endif %}\n\n {# 6. Timer\
\ Bar (Conditional Row) #}\n {# We only add this block if entity exists,\
\ but logic is handled by frontend #}\n {% if states[timer_entity] is\
\ defined %}\n {% set entities = entities + [{\n 'type':\
\ 'conditional',\n 'conditions': [\n {'entity': timer_entity,\
\ 'state_not': 'unavailable'},\n {'entity': timer_entity, 'state_not':\
\ 'unknown'},\n {'entity': timer_entity, 'state_not': 'none'},\n\
\ {'entity': timer_entity, 'state_not': ''}\n ],\n\
\ 'row': {\n 'entity': timer_entity,\n \
\ 'name': 'Timer'\n }\n }] %}\n {% endif %}\n\n\
\ {# 7. Config Numbers #}\n {% if states[idle_entity] is defined\
\ %}\n {% set entities = entities + [{'entity': idle_entity, 'name':\
\ 'Idle Time (sec)'}] %}\n {% endif %}\n {% if states[delay_entity]\
\ is defined %}\n {% set entities = entities + [{'entity': delay_entity,\
\ 'name': 'Off Delay (sec)'}] %}\n {% endif %}\n\n {# 8. Bed Sensor\
\ & Sleep Timers (Conditional) #}\n {% if states[bed_s] is defined %}\n\
\ {% set entities = entities + [{'entity': bed_s, 'name': 'Bed Occupancy\
\ Sensor'}] %}\n \n {# Sleep Entry Delay #}\n {% if states[sleep_entry]\
\ is defined %}\n {% set entities = entities + [{\n 'type':\
\ 'conditional',\n 'conditions': [\n {'entity':\
\ bed_s, 'state_not': '-Select-'},\n {'entity': bed_s, 'state_not':\
\ 'unknown'},\n {'entity': bed_s, 'state_not': 'unavailable'}\n\
\ ],\n 'row': {\n 'entity': sleep_entry,\n\
\ 'name': 'Sleep Entry Delay (sec)'\n }\n \
\ }] %}\n {% endif %}\n\n {# Sleep Exit Delay #}\n \
\ {% if states[sleep_exit] is defined %}\n {% set entities = entities\
\ + [{\n 'type': 'conditional',\n 'conditions': [\n\
\ {'entity': bed_s, 'state_not': '-Select-'},\n \
\ {'entity': bed_s, 'state_not': 'unknown'},\n {'entity':\
\ bed_s, 'state_not': 'unavailable'}\n ],\n 'row':\
\ {\n 'entity': sleep_exit,\n 'name': 'Sleep\
\ Exit Delay (sec)'\n }\n }] %}\n {% endif %}\n\
\ {% endif %}\n\n {# Create the Group #}\n {% set group = {\n\
\ 'type': 'custom:fold-entity-row',\n 'head': {'type':'section',\
\ 'label': name, 'card_mod': {\n 'style': \".label { color: orange\
\ !important; }\"\n }},\n 'entities': entities\n } %}\n\
\ {% set ns.rows = ns.rows + [group] %}\n {% endfor %}\n \n \
\ {{ ns.rows | to_json }}"
sort:
method: none
- type: grid
cards:
- type: custom:mushroom-title-card
alignment: center
title_tap_action:
action: none
subtitle_tap_action:
action: none
title: Active Areas
- type: custom:mushroom-title-card
alignment: center
subtitle: 2nd Floor
title_tap_action:
action: none
subtitle_tap_action:
action: none
- type: custom:streamline-card
template: area_card
variables:
area_name: sauna
area_title: Sauna
temp_sensor_entity: sensor.ruuvitag_8572_temperature
indicator_1_entity: binary_sensor.sauna_door_contact
indicator_1_icon: mdi:door
indicator_1_state: 'on'
indicator_1_active_color: '#FF4444'
indicator_1_animation_on: blink 1s ease infinite
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: bathroom
area_title: Bathroom
temperature_sensor: sensor.airthings_wave_temperature
indicator_1_state: Running
indicator_1_active_color: '#088CF8'
indicator_1_animation_on: blink 2s ease infinite
indicator_3_state: presence
indicator_3_active_color: '#088CF8'
indicator_5_state: 'on'
indicator_5_active_color: '#FF4444'
indicator_1_entity: input_select.washing_machine_status
indicator_1_icon: mdi:washing-machine
indicator_2_entity: input_select.bathroom_toilet_presence
indicator_2_icon: mdi:toilet
indicator_2_state: presence
indicator_2_active_color: orange
indicator_3_entity: input_select.shower_presence
indicator_3_icon: presence
indicator_6_entity: sensor.aqara_w500_bathroom_heating_hvac
indicator_6_icon: mdi:heating-coil
indicator_6_state: heating
indicator_6_active_color: '#FF4444'
indicator_6_animation_on: blink 2s ease infinite
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: office
area_title: Office
temp_sensor_entity: sensor.bedroom_temperature
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: bedroom
area_title: Bedroom
temperature_sensor: sensor.airthings_wave_temperature
indicator_1_state: open
indicator_1_active_color: lightgreen
temp_sensor_entity: sensor.bedroom_temperature
indicator_1_entity: cover.bedroom_window_blinds
indicator_1_icon: mdi:window-shutter
indicator_2_entity: cover.bedroom_window_roller_cover
indicator_2_icon: mdi:blinds-open
indicator_2_state: open
indicator_2_active_color: lightgreen
indicator_3_entity: input_boolean.bed_Evis_occupancy
indicator_3_icon: mdi:bed
indicator_3_state: 'on'
indicator_3_active_color: '#088CF8'
indicator_4_entity: input_boolean.bed_Guest-1_occupancy
indicator_4_icon: mdi:bed
indicator_4_state: 'on'
indicator_4_active_color: '#FF44C4'
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: Guest-2
area_title: E Bedroom
indicator_3_icon: mdi:bed
indicator_3_state: 'on'
indicator_3_entity: binary_sensor.Guest-2_bed_fp2_presence_sensor
indicator_3_active_color: lightgreen
indicator_4_entity: binary_sensor.Guest-2_desk_fp2_presence_sensor
indicator_4_icon: mdi:chair-rolling
indicator_4_state: 'on'
indicator_4_active_color: '#088CF8'
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: Guest-3
area_title: A Bedroom
indicator_3_icon: mdi:bed
indicator_3_state: 'on'
indicator_3_entity: binary_sensor.Guest-3_bed_fp2_presence_sensor
indicator_3_active_color: lightgreen
temp_sensor_entity: sensor.Guest-3_temperature
indicator_4_entity: binary_sensor.Guest-3_desk_fp2_presence_sensor
indicator_4_icon: mdi:chair-rolling
indicator_4_state: 'on'
indicator_4_active_color: '#088CF8'
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: stairs
area_title: Stairs
temp_sensor_entity: sensor.airthings_wave_temperature
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: lobby
area_title: Lobby
grid_options:
columns: 6
- type: custom:mushroom-title-card
alignment: center
subtitle: 1st Floor
title_tap_action:
action: none
subtitle_tap_action:
action: none
- type: custom:streamline-card
template: area_card
variables:
area_name: hallway
area_title: Hallway
temp_sensor_entity: sensor.airthings_wave_temperature
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: kitchen
area_title: Kitchen
temp_sensor_entity: sensor.kitchen_fridge_door_device_temperature
indicator_1_entity: binary_sensor.kitchen_fridge_door_contact
indicator_1_icon: mdi:fridge
indicator_1_state: 'on'
indicator_1_active_color: '#FF4444'
indicator_1_animation_on: blink 0.5s ease infinite
indicator_2_entity: binary_sensor.kitchen_fridge_leak_sensor_water_leak
indicator_2_icon: mdi:fridge-alert
indicator_2_state: 'on'
indicator_2_active_color: '#088CF8'
indicator_2_animation_on: blink 0.5s ease infinite
indicator_3_entity: sensor.coffee_machine_state
indicator_3_icon: mdi:coffee
indicator_3_active_color: orange
indicator_3_state: Running
indicator_4_entity: switch.schedule_coffee_machine_schedule
indicator_4_icon: mdi:coffee-to-go-outline
indicator_4_state: 'on'
indicator_3_animation_on: blink 2s ease infinite
indicator_4_active_color: lightgreen
indicator_5_entity: sensor.dishwasher_current_status
indicator_5_icon: mdi:dishwasher
indicator_5_state: running
indicator_5_active_color: skyblue
indicator_5_animation_on: blink 2s ease infinite
indicator_6_entity: binary_sensor.kitchen_dishwasher_leak_sensor_water_leak
indicator_6_icon: mdi:dishwasher-alert
indicator_6_state: 'on'
indicator_6_active_color: '#088CF8'
indicator_6_animation_on: blink 0.5s ease infinite
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: Daughter
area_title: Guest Room
temp_sensor_entity: sensor.airthings_wave_temperature
indicator_1_entity: binary_sensor.Daughter_bed_fp2_presence_sensor
indicator_1_icon: mdi:bed-king
indicator_1_state: 'on'
indicator_1_active_color: lightgreen
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: living_room
area_title: Living Room
temp_sensor_entity: sensor.airthings_wave_temperature
indicator_1_entity: light.fireplace
indicator_1_icon: mdi:fireplace
indicator_1_state: 'on'
indicator_1_active_color: orange
indicator_1_animation_on: blink 2s ease infinite
indicator_2_entity: media_player.70pus9005_12_2
indicator_2_icon: mdi:television
indicator_2_state: 'on'
indicator_2_active_color: lightgreen
indicator_2_animation_on: blink 2s ease infinite
indicator_3_entity: input_select.sofa_presence
indicator_3_icon: mdi:sofa
indicator_3_state: presence
indicator_3_active_color: lightgreen
indicator_5_entity: binary_sensor.inner_back_door_contact
indicator_5_icon: mdi:door
indicator_5_state: 'on'
indicator_6_entity: binary_sensor.backyard_door_sensor_contact
indicator_6_icon: mdi:door
indicator_6_state: 'on'
indicator_6_active_color: '#FF4444'
indicator_6_animation_on: blink 0.5s ease infinite
indicator_5_active_color: '#FF4444'
indicator_5_animation_on: blink 0.5s ease infinite
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: toilet
area_title: Toilet
grid_options:
columns: 6
- type: custom:streamline-card
template: area_card
variables:
area_name: mud_room
area_title: Mud Room
temp_sensor_entity: sensor.mud_room_motion_sensor_device_temperature
indicator_1_entity: binary_sensor.front_door_lock_sensor
indicator_1_icon: mdi:door
indicator_1_state: 'on'
indicator_1_active_color: '#FF4444'
indicator_1_animation_on: blink 0.5s ease infinite
indicator_2_entity: lock.front_door_lock
indicator_2_icon: mdi:lock
indicator_2_state: unlocked
indicator_2_active_color: '#FF4444'
indicator_2_animation_on: blink 0.5s ease infinite
indicator_6_entity: binary_sensor.mud_room_door_sensor_contact
indicator_6_icon: mdi:door
indicator_6_state: 'on'
indicator_6_active_color: orange
indicator_6_animation_on: blink 1s ease infinite
grid_options:
columns: 6
path: room-management
cards: []
header:
card:
type: markdown
text_only: true
content: '# Room Management Center
Manage the areas at the home
'
