
Keep your Home Assistant dashboards always visible on Chromecast displays
Installation • Quick Start • Configuration • Migration • 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.
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) |
b0mbays/continuously_casting_dashboards as an Integrationcontinuously_casting_dashboards folder from this repositoryconfig/custom_components/The wizard will guide you through:
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 |
enable_notifications |
No | true |
Show a HA notification when a device becomes unreachable |
| 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 config
Default "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
data:
delay: 60
# Change time window
service: continuously_casting_dashboards.set_start_time
data:
time: "08:00"
# Change logging level
service: continuously_casting_dashboards.set_logging_level
data:
level: debug
# Stop a specific device (omit device_name to stop all)
service: continuously_casting_dashboards.stop_casting
data:
device_name: "Living Room Display"
# Resume a specific device (omit device_name to check all)
service: continuously_casting_dashboards.resume_casting
data:
device_name: "Living Room Display"
Available services:
- set_cast_delay - Cast interval (5-300 seconds)
- set_logging_level - debug, info, warning, error, critical
- set_start_time - Start time (HH:MM)
- set_end_time - End time (HH:MM)
- stop_casting - Stop casting on a device or all devices
- resume_casting - Resume casting on a device or trigger check on all devices
If you're currently using YAML configuration (configuration.yaml), follow these steps to migrate to the new UI-based configuration:
Migration guide: Migrating from YAML to UI
continuously_casting_dashboards: section from your configuration.yamlYour 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 devices
Find 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.
swiergot/ha-catt-fix as a Dashboard (previously called "Lovelace")Cause: ha-catt-fix not installed correctly.
Solution:
1. Set logging_level: debug in your config
2. Check Home Assistant logs for status output
3. Look for Title: Dummy in 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 - In the device settings, add the IP address directly in the IP Address field — this bypasses name lookup entirely and is more reliable
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
If a device temporarily loses network connectivity (e.g. MDNS flakiness), the integration will mark it as unreachable and show a persistent notification in Home Assistant. The dashboard resumes automatically once the device comes back online and the notification is dismissed.
If you have a device with an unreliable network and find the notifications noisy, you can disable them in Settings → Devices & Services → Continuously Casting Dashboards → Configure → uncheck Enable notifications.
Solution: On your Android phone: Settings → Google → Devices & sharing → Cast options → Turn off "Media controls for Cast devices"
Tested with Lenovo Smart Display 8, Google Nest Hub (1st Gen)
$ claude mcp add continuously_casting_dashboards \
-- python -m otcore.mcp_server <graph>