Custom Home Assistant integration for BUSY Bar using the official BUSY Bar HTTP API.
Local-first integration for Home Assistant. USB and LAN control work without any BUSY cloud dependency.
- Config-entry-based custom integration under
custom_components/busybar - Polling sensors for device status, firmware info, API version, and battery charge
- Additional Home Assistant entities for BUSY Bar battery, power, firmware, security, auto-update status, audio volume, device naming, and device controls
- Services for drawing text, clearing the display, setting display brightness, and setting audio volume
- A generic dashboard service that lets Home Assistant send a full BUSY Bar display layout
- A higher-level dashboard service that renders Home Assistant entity states without raw BUSY Bar payload JSON
- Specialized helpers for weather, room climate, and percent/progress layouts
- A live entity-dashboard mode that redraws automatically when Home Assistant entities change
- BUSY Bar button events exposed into Home Assistant, with optional runtime service bindings
- BUSY timer entities for mode, pause state, time left, current interval, and editable theme
- BUSY input command controls through buttons and a dedicated service
- Support for BUSY Bar over USB, LAN, or the BUSY cloud endpoint
- Open HACS in Home Assistant.
- Open the custom repositories dialog.
- Add
https://github.com/devrsw/busybar-homeassistantas anIntegrationrepository. - Install
BUSY Barfrom HACS. - Restart Home Assistant.
- Go to Settings -> Devices & Services -> Add Integration.
- Search for
BUSY Bar.
- Copy
custom_components/busybarinto your Home Assistant config directory. - Restart Home Assistant.
- In Home Assistant, go to Settings -> Devices & Services -> Add Integration.
- Search for
BUSY Bar.
Use one of these base URLs:
- USB:
http://10.0.4.20/api - LAN:
http://<busy-bar-ip>/api - Internet:
https://api.busy.app/busybar
Authentication rules:
- USB: no token required
- LAN: provide the HTTP API password; the integration sends it as
X-API-Token - Internet: provide an API token; the integration sends it as
Authorization: Bearer <token>
For a fully local setup, use USB or LAN. A BUSY cloud account is not required unless you intentionally use the internet endpoint.
Draw printable ASCII text on the front or back display.
Example:
service: busybar.draw_text
data:
text: Washer done
color: "#00FF00FF"
led_notification_color: "#00FF00FF"
priority: 80
duration: 30Clear the integration's display content, or a specific application name.
Send a full BUSY Bar DisplayElements payload from Home Assistant. This is the flexible path for building a custom Busy Bar dashboard from automations, scripts, or template-generated service data.
Example:
service: busybar.draw_dashboard
data:
clear_before_draw: true
payload:
application_name: home_assistant
priority: 80
elements:
- id: headline
type: text
text: OFFICE
font: bold
color: "#FFFFFFFF"
display: front
align: top_mid
x: 0
y: 2
- id: temp
type: text
text: 72F
font: large
color: "#00FFCCFF"
display: front
align: center
x: 0
y: 6
- id: bar_bg
type: rectangle
display: front
x: 4
y: 28
width: 64
height: 8
radius: 2
fill: solid
fill_colors:
- "#333333FF"
- id: bar_fg
type: rectangle
display: front
x: 4
y: 28
width: 48
height: 8
radius: 2
fill: solid
fill_colors:
- "#00FF00FF"Build a simple dashboard directly from Home Assistant entity values. The integration reads the entities, formats label/value rows, and generates the BUSY Bar payload for you.
Example:
service: busybar.draw_entity_dashboard
data:
title: HOME
display: back
clear_before_draw: true
entities:
- entity_id: sensor.living_room_temperature
label: TEMP
- entity_id: sensor.office_humidity
label: HUMID
- entity_id: weather.home
label: WEATHER
- entity_id: sensor.washer_state
label: WASHEREach entity item supports:
entity_idrequiredlabeloptional override for the row labelattributeoptional attribute name to display instead of the state
Build a weather layout from a Home Assistant weather.* entity.
service: busybar.draw_weather_dashboard
data:
weather_entity_id: weather.home
title: WEATHER
display: backBuild a room climate layout from temperature and optional humidity entities.
service: busybar.draw_room_climate_dashboard
data:
title: OFFICE
temperature_entity_id: sensor.office_temperature
humidity_entity_id: sensor.office_humidity
display: backBuild a progress card from any Home Assistant entity whose state is a numeric percentage.
service: busybar.draw_progress_card
data:
entity_id: sensor.phone_battery
label: PHONE
display: frontKeep an entity-based dashboard live. The integration subscribes to the listed Home Assistant entities and redraws the BUSY Bar whenever one of them changes.
service: busybar.enable_live_entity_dashboard
data:
title: HOME
display: back
entities:
- entity_id: sensor.living_room_temperature
label: TEMP
- entity_id: sensor.office_humidity
label: HUMID
- entity_id: weather.home
label: WEATHERDisable it with:
service: busybar.disable_live_dashboardThe integration listens to the BUSY Bar websocket stream and fires a Home Assistant event named busybar_button whenever the device reports a button event.
Event data includes:
entry_idnamebuttonaction
You can use normal Home Assistant automations to react to those events, or register runtime button bindings with the helper services below.
Bind a BUSY Bar button event to a Home Assistant service call for the current runtime.
service: busybar.bind_button_action
data:
button: START
action: PRESS
service: light.toggle
service_data:
entity_id: light.office_lampRemove bindings with:
service: busybar.clear_button_actions
data:
button: STARTSet display brightness to auto or a numeric value from 0 to 100.
Set device audio volume from 0 to 100 in 5% increments.
service: busybar.set_volume
data:
volume: 55
silent: trueSend a BUSY input key command (up, down, ok, back, start, busy, custom, off, apps, or settings).
service: busybar.send_input_command
data:
key: startThe integration now exposes a wider set of Home Assistant entities backed by the BUSY Bar HTTP API, including:
- Battery charge, voltage, current, and power state
- USB voltage
- Firmware version, branch, target, and firmware security state
- API version and last boot time
- Serial number
- Display brightness as a writable number plus a brightness-mode select
- Auto-update enabled
- Audio volume as a writable number entity
- Device name as a writable text entity
- Busy theme as a writable text entity
- Busy timer mode and current interval sensors
- Busy time-left duration sensor and paused-state binary sensor
- Buttons to clear the Home Assistant display namespace and stop audio playback
- Buttons for common BUSY input commands (Start, Busy, Custom, OK, Back)
- The text draw service intentionally starts with text-only rendering because that is the smallest stable control surface for Home Assistant automations.
- The dashboard service is a direct pass-through for BUSY Bar display payloads, so you can build richer layouts in Home Assistant without waiting on dedicated entity types.
- The entity dashboard helper is intentionally simple and text-based. It is meant to cover common status dashboards without forcing you to hand-author BUSY Bar element JSON.
- The specialized helpers are thin layout builders on top of the BUSY Bar draw API. They are meant to cover common automation use cases with less templating.
- Runtime button bindings are not persisted across Home Assistant restarts. Use the
busybar_buttonevent in automations if you need persistent behavior. - BUSY Bar text rendering accepts printable ASCII only.
- If you configure more than one BUSY Bar, include
entry_idin service calls to target a specific device.
- Description:
Local-first Home Assistant integration for BUSY Bar via the official HTTP API - Topics:
home-assistant,home-assistant-integration,hacs,busybar,busy-bar,iot,local-polling,smart-home
- This repository is structured as a HACS custom integration repository.
- To make version selection work cleanly in HACS, publish GitHub releases as you tag versions.