Node-RED
Advanced automations.
A good dashboard makes the difference between a smart home you use daily and one you forget exists. This guide helps you build dashboards that are both beautiful and functional.
| Principle | Description |
|---|---|
| Overview first | See home status at a glance |
| One-click actions | No deep menus for daily tasks |
| Mobile-friendly | Works equally well on phone and tablet |
| Consistent design | Same style and colors everywhere |
| Relevant information | Show only what matters |
┌─────────────────────────────────────────────────────────────┐│ DASHBOARD TYPES │├─────────────────────────────────────────────────────────────┤│ ││ 📱 MOBILE 🖥️ TABLET/WALL 📊 ADMIN ││ ────────── ──────────────── ───────── ││ Quick actions Overview + control Everything ││ Compact layout Room-based Debugging ││ Touch-optimized Ambient display Graphs/stats ││ │└─────────────────────────────────────────────────────────────┘Home Assistant 2024+ introduced Sections - a new way to organize cards:
# Traditional Grid Layoutviews: - title: Home type: masonry # or grid cards: - type: light entity: light.living_room
# New Sections Layout (recommended)views: - title: Home type: sections sections: - title: Lighting cards: - type: light entity: light.living_roomGo to Settings → Dashboards
Click Add Dashboard
Choose a name and icon
Select Start with an empty dashboard
Click the three dots → Edit Dashboard
Choose Sections as layout type
Mushroom is the most popular custom card collection. Modern design, full UI editor support, and it just looks good.
Open HACS → Frontend
Search for “Mushroom”
Install Mushroom and Mushroom Themes
Restart Home Assistant
Clear browser cache (Ctrl+Shift+R)
| Card | Use | Entity Type |
|---|---|---|
| Entity Card | General display | All |
| Light Card | Light with slider | light.* |
| Switch Card | On/off toggle | switch.*, input_boolean |
| Fan Card | Fan control | fan.* |
| Cover Card | Blinds/doors | cover.* |
| Climate Card | Thermostat | climate.* |
| Person Card | Presence | person.* |
| Alarm Card | Alarm panel | alarm_control_panel.* |
| Media Card | Media player | media_player.* |
| Lock Card | Locks | lock.* |
| Vacuum Card | Robot vacuum | vacuum.* |
| Template Card | Custom content | All |
| Chips Card | Small status badges | All |
| Title Card | Section header | - |
type: sectionssections: - title: Living Room cards: # Chips at top for status - type: custom:mushroom-chips-card chips: - type: entity entity: sensor.living_room_temperature icon: mdi:thermometer - type: entity entity: sensor.living_room_humidity icon: mdi:water-percent
# Light with slider - type: custom:mushroom-light-card entity: light.living_room_ceiling name: Ceiling Light show_brightness_control: true show_color_control: true use_light_color: true
# TV control - type: custom:mushroom-media-player-card entity: media_player.living_room_tv use_media_info: true show_volume_level: true volume_controls: - volume_buttons
# Thermostat - type: custom:mushroom-climate-card entity: climate.living_room show_temperature_control: true hvac_modes: - heat - "off"The most flexible card - make exactly what you want:
type: custom:mushroom-template-cardprimary: "{{ states('sensor.power_consumption') }} W"secondary: > {% if states('sensor.power_consumption')|float > 2000 %} High consumption! {% else %} Normal {% endif %}icon: mdi:flashicon_color: > {% if states('sensor.power_consumption')|float > 2000 %} red {% elif states('sensor.power_consumption')|float > 1000 %} orange {% else %} green {% endif %}tap_action: action: navigate navigation_path: /lovelace/energyUse Mushroom Themes for unified look:
# In configuration.yamlfrontend: themes: !include_dir_merge_named themes
# Download themes via HACS:# - Mushroom Shadow (dark)# - Mushroom Square (light)Small badges at top of dashboard showing important info:
type: custom:mushroom-chips-cardchips: # Who's home - type: template icon: mdi:home content: > {{ states.person | selectattr('state', 'eq', 'home') | list | count }} tap_action: action: navigate navigation_path: /lovelace/people
# Lights on count - type: template icon: mdi:lightbulb content: > {{ states.light | selectattr('state', 'eq', 'on') | list | count }} icon_color: > {% if states.light | selectattr('state', 'eq', 'on') | list | count > 0 %} yellow {% else %} grey {% endif %}
# Outside temperature - type: entity entity: sensor.outside_temperature icon: mdi:thermometer
# Alarm status - type: entity entity: alarm_control_panel.home icon: mdi:shield-homeShow cards based on state:
type: conditionalconditions: - entity: binary_sensor.motion_entrance state: "on"card: type: custom:mushroom-entity-card entity: binary_sensor.motion_entrance name: Motion in entrance! icon_color: redOrganize cards in a neat grid:
type: gridcolumns: 2square: falsecards: - type: custom:mushroom-light-card entity: light.living_room layout: vertical - type: custom:mushroom-light-card entity: light.kitchen layout: vertical - type: custom:mushroom-light-card entity: light.bedroom layout: vertical - type: custom:mushroom-light-card entity: light.bathroom layout: vertical# Larger touch area with layout: verticaltype: custom:mushroom-entity-cardentity: light.living_roomlayout: verticalfill_container: truetap_action: action: togglehold_action: action: more-infoviews: # Desktop/Tablet view - title: Home icon: mdi:home path: home visible: - user: desktop_user cards: [...]
# Mobile view - title: Home Mobile icon: mdi:cellphone path: home-mobile panel: true # Full width visible: - user: mobile_user cards: [...]For wall-mounted tablets - navigation at bottom:
# Use custom:layout-card or# navbar integration from HACSFor history and graphs (install via HACS):
type: custom:mini-graph-cardentities: - sensor.living_room_temperature - sensor.bedroom_temperaturehours_to_show: 24points_per_hour: 2line_width: 2show: labels: true points: false legend: trueExtremely flexible button (HACS):
type: custom:button-cardentity: light.living_roomname: Living Roomicon: mdi:sofashow_state: truestyles: card: - background-color: | [[[ if (entity.state === 'on') return 'rgba(255, 200, 100, 0.3)'; return 'rgba(50, 50, 50, 0.3)'; ]]] - border-radius: 15px - padding: 15pxSwipe between multiple cards:
type: custom:swipe-cardcards: - type: custom:mushroom-light-card entity: light.living_room - type: custom:mushroom-light-card entity: light.kitchen - type: custom:mushroom-light-card entity: light.bedroomEnable themes in configuration.yaml:
frontend: themes: !include_dir_merge_named themesCreate folder: config/themes/
Download theme from HACS or manually
Restart Home Assistant
Select theme: Profile → Theme
| Theme | Style | Source |
|---|---|---|
| Mushroom Shadow | Dark, modern | HACS |
| Mushroom Square | Light, sharp corners | HACS |
| Catppuccin | Pastel colors | HACS |
| iOS Theme | Apple-inspired | HACS |
| Noctis | Dark with accents | HACS |
# In your theme YAML:mushroom-shadow: background-image: "center / cover no-repeat url('/local/backgrounds/dark-home.jpg')" # Place image in: config/www/backgrounds/| Practice | Why |
|---|---|
| Group by room | Intuitive for all users |
| Consistent icons | Easier to recognize |
| Limit card count | Overview over everything |
| Test on mobile | Most people use phones |
| Use chips for status | Quick info without clutter |
| Avoid | Why |
|---|---|
| Too many views | Hard to navigate |
| Inconsistent styling | Looks messy |
| Small touch targets | Frustrating on mobile |
| Everything on one page | Information overload |
| Complex YAML without backup | Risk losing work |
# Check:1. Is custom card installed?2. Is browser cache cleared? (Ctrl+Shift+R)3. Is resource added correctly?4. Check browser console for errors (F12)# Check:1. Is themes enabled in configuration.yaml?2. Is themes folder correct?3. Is HA restarted after changes?4. Is theme selected in profile?# Optimize:1. Reduce entities per view2. Use picture-elements sparingly3. Avoid too many mini-graph-cards4. Consider separate views for heavy graphsNode-RED
Advanced automations.
HACS
More custom cards and integrations.
Last updated: December 2025