NOTE: This integration is NOT active at the moment, the code is public anyway, but the app does NOT support the features here.
Display overlays, PiP cameras, and rich notifications on Android/Google TV via the QuickBars TV app — controlled by your Home Assistant automations.
- Instant control: open a QuickBar overlay on the TV with your favorite entities (lights, climate, scenes, etc.).
- Camera PiP: show/hide a camera as picture-in-picture anywhere on screen; supports entity MJPEG as well as direct RTSP URLs.
- Actionable notifications: send rich TV notifications with buttons and handle the resulting events in automations.
- Local first: runs entirely on your LAN with real-time push.
- No entities created: the integration exposes services and emits events; it doesn’t create entities in HA.
- Home Assistant 2025.10.0 or newer
- Android/Google TV (Android 9+) device with the QuickBars for Home Assistant TV app installed
- TV and Home Assistant on the same LAN
- Keep the TV app open in foreground during first pairing
Option A — Today (custom repo):
- In Home Assistant: HACS → ⋮ (menu) → Custom repositories.
- Add
https://github.com/Trooped/home-assistant-quickbarsas Integration. - Search QuickBars in HACS → Install → Restart Home Assistant.
Option B — Later (default store): once accepted into the HACS default store, just search “QuickBars” inside HACS.
- Settings → Devices & Services → Add Integration → QuickBars
- If discovered via Zeroconf, just confirm the device; otherwise enter TV IP and port (default
9123). - Enter the pairing code shown on the TV.
- (Optional) Provide your HA URL + long-lived token to let the TV app talk back to HA for real-time actions.
Tip: If discovery doesn’t show up, ensure mDNS/zeroconf is allowed on your network and the TV app is open.
Open or close a QuickBar overlay by its alias (as configured in the TV app).
service: quickbars.quickbar_toggle
data:
alias: living_room # required
target:
device_id: 1234567890abcdef # optional (broadcasts if omitted)Show/hide a camera as PiP. Use a Home Assistant camera entity (with MJPEG) or a direct RTSP URL.
# Using a camera entity (MJPEG)
service: quickbars.camera_toggle
data:
camera_entity: camera.front_door
position: top_right # top_left | top_right | bottom_left | bottom_right
size: large # small | medium | large
auto_hide: 25 # seconds (0 = never)
target:
device_id: abcdef123456# Using a direct RTSP URL (no camera entity needed)
service: quickbars.camera_toggle
data:
rtsp_url: rtsp://user:pass@192.168.1.200:554/stream1
position: bottom_left
size_px:
w: 640
h: 360
target:
device_id: abcdef123456Optional fields:
show_title: true|falsesizeorsize_px: { w: <int>, h: <int> }
Send a rich TV notification with optional icon, image, sound, and buttons.
service: quickbars.notify
data:
title: "New Visitor!"
message: "Someone is at the door"
mdi_icon: mdi:doorbell
length: 15
position: bottom_left
image:
path: images/doorbell.jpg # or url / media_id
sound:
path: chimes/ding.mp3 # or url / media_id
sound_volume_percent: 120
actions:
- id: open
label: Open
- id: ignore
label: Ignore
target:
device_id: abcdef123456When a user presses a button in a TV notification, the app fires a Home Assistant event:
- Event type:
quickbars.action - Payload includes:
action_id(the id you supplied inactions)
Example automation:
alias: "Handle TV Notification Action - Unlock Door"
triggers:
- trigger: event
event_type: quickbars.action
event_data:
action_id: unlock_door
actions:
- action: lock.unlock
target:
entity_id: lock.front_dooralias: "Doorbell Pressed - Show on TV"
triggers:
- trigger: state
entity_id: binary_sensor.doorbell
to: "on"
actions:
- action: quickbars.camera_toggle
data:
device_id: abcdef123456
camera_entity: camera.front_door
position: top_right
auto_hide: 25
- action: quickbars.notify
data:
device_id: abcdef123456
title: "Doorbell"
message: "Someone is at the door"
mdi_icon: mdi:doorbell
length: 25
actions:
- id: open
label: "Open"
- id: ignore
label: "Ignore"-
TV not reachable / pairing fails
- Ensure the TV app is open in foreground and both devices are on the same LAN.
- Verify your network allows mDNS/zeroconf.
- If entering an HA URL, use a LAN-reachable hostname/IP (not
localhost).
-
No PiP / notification appears
- In the TV app, enable “Persistent background connection.”
- For camera entities, ensure the entity provides MJPEG; or use an RTSP URL.
QuickBars communicates on your local network and does not require any cloud service. Commands are pushed over a persistent local connection for real-time control.
- HACS default-store listing
- More camera layouts & presets
- Additional actions & overlay types
- (Longer-term) retry for official core inclusion
Issues and PRs welcome!
- Issues: https://github.com/Trooped/home-assistant-quickbars/issues
- Discussions: ideas/feedback and UX suggestions are appreciated.
Choose a license you prefer (MIT is common for HA custom integrations). Add LICENSE to the repo.
Does this create HA entities?
No — it exposes services and emits events so you can build automations without clutter.
Can I use both MJPEG and RTSP?
Yes. If you send both a camera entity and an rtsp_url, the TV app will prefer RTSP for that request.
Does it work on non-Android TVs?
No. Android/Google TV only (permissions like “Display over other apps” / Accessibility are Android-specific).
- Folder:
custom_components/quickbars/ manifest.jsonmust include"version"for custom integrations.- Add
hacs.jsonat repo root with your minimum HA version andrender_readme: true.