Keep your Home Assistant dashboards always visible on Chromecast displays
Installation • Quick Start • Configuration • Troubleshooting
A Home Assistant integration that automatically casts dashboards to your Chromecast devices and keeps them running. If a dashboard gets interrupted (someone asks Google a question, plays music, etc.), it automatically resumes once the device is idle.
- Auto-resume - Dashboard automatically restarts if interrupted
- Smart detection - Won't interrupt Spotify, Netflix, YouTube, timers, or Google Assistant
- Time windows - Only cast during specified hours (e.g., 7am-11pm)
- Multiple dashboards - Different dashboards at different times on the same device
- Entity control - Start/stop casting based on any Home Assistant entity state
- Speaker group aware - Won't cast if device is part of an active speaker group
- Per-device settings - Volume, time windows, and dashboards configured per device
Before installing, ensure you have:
| Requirement | Description |
|---|---|
| HTTPS Access | Home Assistant must be accessible via HTTPS. Use Nabu Casa or set up SSL yourself |
| Trusted Networks | Chromecast devices must be able to access HA without login (setup guide) |
| ha-catt-fix | Prevents display timeout after 10 minutes (install via HACS) |
| Kiosk Mode | Optional - Hides navigation bars for fullscreen display (install via HACS) |
- Open HACS in Home Assistant
- Click the three dots (⋮) → Custom repositories
- Add
b0mbays/continuously_casting_dashboardsas an Integration - Search for "Continuously Casting Dashboards" and click Download
- Restart Home Assistant
- Download the
continuously_casting_dashboardsfolder from this repository - Copy it to
config/custom_components/ - Restart Home Assistant
- Go to Settings → Devices & Services
- Click Add Integration
- Search for "Continuously Casting Dashboards"
- Follow the setup wizard
The wizard will guide you through:
- Global settings - Logging level, cast delay, default time window
- Add device - Enter your Chromecast display name (find it in Google Home app or device settings)
- Dashboard URL - The full URL to your dashboard (e.g.,
http://192.168.1.100:8123/lovelace/dashboard?kiosk)
Tip: Use your Home Assistant's local IP address in the dashboard URL, not
homeassistant.local
The integration will start casting your dashboard during the configured time window.
All settings can be managed through Settings → Devices & Services → Continuously Casting Dashboards.
Managing device dashboards
- Click Configure on a device to edit its dashboard settings in a single form.
- To add another dashboard, enable “Add another dashboard after saving”.
- If a device has multiple dashboards, use “Edit a different dashboard” to switch which one you’re editing.
Note: UI configuration is now the recommended method. YAML configuration is supported for backward compatibility but new features may only be available in the UI.
Add to your configuration.yaml:
continuously_casting_dashboards:
logging_level: warning # debug, info, warning, error, critical
cast_delay: 45 # Seconds between device checks (5-300)
start_time: "07:00" # Global start time (HH:MM)
end_time: "01:00" # Global end time (HH:MM)
devices:
"Living Room Display": # Device name from Google Home app
- dashboard_url: "http://192.168.1.100:8123/lovelace/home?kiosk"
volume: 5 # Optional: 0-100
start_time: "06:00" # Optional: Override global time
end_time: "23:00"
"Kitchen Hub":
- dashboard_url: "http://192.168.1.100:8123/lovelace/kitchen?kiosk"
volume: 7| Option | Required | Default | Description |
|---|---|---|---|
logging_level |
Yes | warning |
Log verbosity: debug, info, warning, error, critical |
cast_delay |
Yes | 45 |
Seconds between checking each device (5-300) |
start_time |
No | 07:00 |
When to start casting (HH:MM format) |
end_time |
No | 01:00 |
When to stop casting (HH:MM format) |
switch_entity_id |
No | - | Entity that controls casting on/off globally |
switch_entity_state |
No | on |
State value that enables casting |
| Option | Required | Default | Description |
|---|---|---|---|
dashboard_url |
Yes | - | Full URL to the dashboard |
volume |
No | - | Device volume (0-100) |
start_time |
No | Global | Override the global start time |
end_time |
No | Global | Override the global end time |
switch_entity_id |
No | - | Entity that controls this specific device |
switch_entity_state |
No | on |
State value that enables casting for this device |
speaker_groups |
No | - | Speaker groups to check before casting |
Cast different dashboards at different times:
devices:
"Office Display":
- dashboard_url: "http://192.168.1.100:8123/lovelace/day?kiosk"
start_time: "07:00"
end_time: "18:00"
- dashboard_url: "http://192.168.1.100:8123/lovelace/night?kiosk"
start_time: "18:00"
end_time: "23:59"Control casting globally or per-device using any Home Assistant entity:
# Create a toggle in configuration.yaml
input_boolean:
enable_dashboard_casting:
name: "Enable Dashboard Casting"
initial: on
# Reference it in the integration config
continuously_casting_dashboards:
switch_entity_id: "input_boolean.enable_dashboard_casting"
# ... rest of configDefault "on" states: on, true, home, open
For custom states, use switch_entity_state:
continuously_casting_dashboards:
switch_entity_id: "sensor.house_mode"
switch_entity_state: "occupied"Prevent casting when the device is playing in a speaker group:
devices:
"Kitchen Hub":
- dashboard_url: "http://192.168.1.100:8123/lovelace/kitchen?kiosk"
speaker_groups:
- "Kitchen Speakers"
- "Whole House Audio"Adjust settings without restarting using Home Assistant services:
# Change cast delay
service: continuously_casting_dashboards.set_cast_delay
target:
entity_id: sensor.cast_delay
data:
value: 60
# Change time window
service: continuously_casting_dashboards.set_start_time
target:
entity_id: sensor.start_time
data:
value: "08:00"
# Change logging level
service: continuously_casting_dashboards.set_logging_level
target:
entity_id: sensor.logging_level
data:
value: debugAvailable services:
set_cast_delay- Cast interval (5-300 seconds)set_logging_level- debug, info, warning, error, criticalset_start_time- Start time (HH:MM)set_end_time- End time (HH:MM)set_switch_entity- Global control entityset_switch_state- State that enables casting
If you're currently using YAML configuration (configuration.yaml), follow these steps to migrate to the new UI-based configuration:
- Update the integration via HACS
- Restart Home Assistant
- Your YAML config will be automatically imported into the UI
- A notification will appear confirming the import
- Remove the
continuously_casting_dashboards:section from yourconfiguration.yaml - Restart Home Assistant again
Your devices will continue working. You can now manage everything through the UI.
Once migrated, each device appears separately on the integration page:
Settings → Devices & Services → Continuously Casting Dashboards
├── ⚙️ Configure (Global Settings)
├── 📱 Living Room Display → Configure
├── 📱 Kitchen Hub → Configure
└── ➕ Add Device
Click Configure on any device to manage its dashboards individually. Use “Add another dashboard after saving” to add more dashboards for a device, and “Edit a different dashboard” when multiple dashboards exist.
Important: After migration, remove the YAML configuration to avoid conflicts. The integration will show a warning if YAML config is detected alongside UI config.
Chromecast devices need to access Home Assistant without logging in.
-
Find your Chromecast device IPs (Settings → Device Information → Technical Information on each device)
-
Add to your
configuration.yaml:
homeassistant:
auth_providers:
- type: trusted_networks
trusted_networks:
- 192.168.1.50/32 # Living Room Display
- 192.168.1.51/32 # Kitchen Hub
trusted_users:
192.168.1.50: YOUR_USER_ID
192.168.1.51: YOUR_USER_ID
allow_bypass_login: true
- type: homeassistant # Keep normal login for other devicesFind your user ID: Go to your profile in Home Assistant and look at the URL - the ID is the long string after
/profile/
This prevents the dashboard from timing out after 10 minutes.
- Open HACS → Click three dots (⋮) → Custom repositories
- Add
swiergot/ha-catt-fixas a Dashboard (previously called "Lovelace") - Go to Frontend tab → Search "ha-catt-fix" → Download
- Restart Home Assistant
- Verify installation: Open your dashboard → Edit → Manage resources → Confirm ha-catt-fix is listed
Cause: ha-catt-fix not installed correctly.
Solution:
- Set
logging_level: debugin your config - Check Home Assistant logs for status output
- Look for
Title: Dummyin the logs - if missing, reinstall ha-catt-fix
DEBUG Status output for Office display: Title: Dummy 22:27:13 GMT+0000
Cause: Device name doesn't match exactly.
Solution:
- Check the exact name in Google Home app or on the device itself
- Try using the device's IP address instead of its name
Checklist:
- HTTPS is configured for Home Assistant
- Device IP is in trusted networks
- Dashboard URL uses local IP (not
homeassistant.local) - Current time is within the configured time window
- No media is playing on the device
Solution: On your Android phone: Settings → Google → Devices & sharing → Cast options → Turn off "Media controls for Cast devices"
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Tested with Lenovo Smart Display 8 and Google Nest Hub (1st Gen)

