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.
- 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 (from Google Home app), its IP address, or both. At least one is required. You can also set an optional alias as a display name.
- 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 |
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 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
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, criticalset_start_time- Start time (HH:MM)set_end_time- End time (HH:MM)stop_casting- Stop casting on a device or all devicesresume_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
- 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
- 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"
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Tested with Lenovo Smart Display 8, Google Nest Hub (1st Gen)

