💙 Enjoying this hobby project? Send a voluntary thank-you via Ko-fi.
Local Bluetooth control for app-capable ULTIMEA soundbars, with Poseidon D80 Boom (U2623) as the first hardware-verified model.
No ULTIMEA cloud account, phone app, or internet connection is required after installation.
Important
This is an unofficial community integration. It is not affiliated with, endorsed by, or supported by ULTIMEA.
| Device/protocol | Status |
|---|---|
| ULTIMEA Poseidon D80 Boom (U2623) | ✅ Hardware verified |
| Other ULTIMEA devices that pass the APK common/custom protocol probe | 🧪 Experimental, capability-driven |
The integration is not a D80 model-name allow-list. It discovers likely ULTIMEA advertisements, selects the app protocol transport, asks the device for its model/protocol information, fetches the raw capability block when available, and probes safe read-only states. D80-only advanced functions are enabled by the hardware-verified D80 profile.
- Power on/off
- Absolute volume and volume step
- Mute/unmute
- Sources: eARC, HDMI, Optical, AUX, Bluetooth, USB
- Sound modes: Movie, Music, Voice, Sport, Night, Game, Custom EQ, Style
- X-Upmix switch — hardware-verified SET
02:16 00/01, verified against INFO01:18 - 10-band Custom EQ — ten
numberentities:- 31 Hz
- 62 Hz
- 125 Hz
- 250 Hz
- 500 Hz
- 1 kHz
- 2 kHz
- 4 kHz
- 8 kHz
- 16 kHz
- EQ range: -6 dB … +6 dB
- The integration preserves the other nine EQ bands when changing one band.
- EQ controls are available while the hardware-verified Custom EQ profile
0x07is active.
Select Style in the media-player sound-mode selector to load the bar's stored
profile 0x08. Five buttons apply the captured Style Bass, Style Rock,
Style Pop, Style Classical, and Style Reset curves. Each action selects
Style and requires the complete 41-byte device echo; Reset is the flat center of
Style, not a factory reset. The corner curves come from the later labelled
capture, not the earlier unnamed A/B samples.
Ten Style gain sensors in Diagnostics show the actual confirmed curve in dB,
including half-decibel values. They are read-only. The existing Custom EQ sliders
remain writable only in Custom EQ (profile 0x07). style_preset on the media
player identifies an exact captured curve, or custom for another confirmed curve.
Style values are cleared on disconnect/mode change and are not restored from a
remembered button press. After HA has started or the bar reconnects, the
integration reads current state first; it reads profile 0x08 only when a fresh
mode response identifies it as active. If the device does not provide that
confirmation, Style values remain unavailable until an explicit Style action or
a complete profile notification confirms them. Background refresh never selects
Style or resets its curve. There are no guessed continuous X/Y controls.
See Style capture evidence for the exact curves and limits.
- Display brightness: Dim, Low, Medium, Normal, High
- Screen timeout: Never, 5 s, 30 s, 60 s
- Prompt sound: None, Low, Medium, High
- Automatic standby: Never, 15/30/60 min, 4/8/12/24/48 h
A Capabilities diagnostic sensor exposes:
- the raw
fetchAbilitiesbytes - the recovered semantic capability names for every returned field
- the integration's currently safe/proven feature set
- protocol version and selected BLE transport
For the captured D80 firmware the capability payload contains the first 18 recovered fields, including LED, bass, surround, eARC/ARC/HDMI/Bluetooth/AUX/USB, Dolby Atmos/Vision, OTA, chip code, display-screen and custom-standby flags. Missing later fields are omitted, not silently treated as false.
Release 2026.09.05 added the official 00:01 session exchange required by the app protocol. The integrity byte is:
(MD5(single_byte).last_digest_byte + 5) & 0xff
Every new BLE protocol session establishes safe-code state before normal non-bootstrap commands. Firmware replies are pair-integrity validated. The D80's observed first-byte complement relationship is retained as a diagnostic rather than imposed as an app requirement because static analysis did not prove that the official app enforces it.
Home Assistant does not connect to the soundbar while HA is still booting. The first complete identity/capability/state refresh is scheduled after homeassistant_started; integration reloads run it immediately when HA is already running.
After a reconnect/recovery the integration refreshes every exposed state, including X-Upmix. Custom EQ/Style readback requires fresh current-mode confirmation for profile 0x07/0x08, so background refresh never selects a different profile merely to obtain EQ values.
While a persistent BLE connection is open, valid ULTIMEA notifications update entities without polling. In on-demand mode the connection is released after the configured delay.
The integration uses Home Assistant's shared Bluetooth manager and can use supported local adapters or connectable Bluetooth proxies. It does not start/stop global Bluetooth scanning and does not hard-code a local adapter or test-device MAC address.
The repository includes ULTIMEA Adaptive Room Audio, a room-aware automation blueprint that can:
- use fixed numeric min/max volume or optional numeric entity sources, with opt-in learning from manual volume changes;
- bind an optional
input_select/selectaudio-input selector to each soundbar by Home Assistant area; the picker is searchable by friendly label and ambiguous/unassigned selectors are ignored; - give each soundbar area an optional numeric normal-volume entity, such as an
input_numberdashboard slider, with the global maximum used only as fallback; - apply quiet hours (ώρες κοινής ησυχίας), including event-driven before/after boundary fades and guarded five-second-step handoff/restores without permanent polling triggers;
- lower volume immediately for selected binary conditions, room-list state/attribute sources, TTS playback, active Assist satellites, or a night-mode boolean;
- select Night during quiet conditions;
- follow connected-player content into Movie, Music, Voice, Sport, or Game, with editable keyword matching and an optional provider-neutral AI/snapshot classification hook;
- respect manual ULTIMEA volume and sound-mode changes instead of continuously fighting them, including stopping an in-progress quiet-hours fade when the user changes volume.
The blueprint is bundled with the integration and is automatically installed when ULTIMEA loads at:
/config/blueprints/automation/ultimea/adaptive_room_audio.yaml
No separate import is required for normal use. Existing managed copies are updated only while unchanged; a user-modified or otherwise different blueprint is never overwritten. A byte-identical manually imported copy can be safely adopted for future bundled updates. When a managed blueprint changes after Home Assistant has already loaded its Automation integration, ULTIMEA also reloads the live automation definition after startup so an older expanded trigger set cannot remain active.
HACS itself does not execute custom-integration code at download time. On a new installation with no ULTIMEA config entry yet, the blueprint therefore appears as soon as ULTIMEA is first loaded (for example after the soundbar is added/discovered). Existing configured installations get it on the next Home Assistant start/reload after updating the integration.
The public GitHub blueprint remains available as a manual fallback:
https://github.com/Chreece/HA-Ultimea/blob/master/blueprints/automation/ultimea/adaptive_room_audio.yaml
Minimum/maximum volume can be fixed values or optional numeric entity sources; writable input_number/number sources can also learn manual changes when enabled. See Adaptive Room Audio blueprint documentation for configuration and behavior.
Until the repository is accepted into the default HACS catalog:
- Open HACS → Integrations.
- Open Custom repositories.
- Add
https://github.com/Chreece/HA-ULTIMEAas an Integration. - Install ULTIMEA.
- Restart Home Assistant.
- Open Settings → Devices & services and add/discover the soundbar.
Copy:
custom_components/ultimea/
into:
/config/custom_components/ultimea/
and restart Home Assistant.
| Option | Default | Purpose |
|---|---|---|
| Keep Bluetooth connection open | On | Enables immediate push updates from the physical remote/device |
| On-demand disconnect delay | 15 s | Releases BLE for the official app after a command |
| Maximum protocol volume | 100 | Maps device volume to Home Assistant's 0.0–1.0 scale |
| Unavailable heartbeat interval | 30 s | Retries only this configured soundbar while unavailable |
The integration deliberately does not turn every APK method or capability flag into a Home Assistant control.
Not currently exposed:
- Bass
- Mid/Midrange
- Treble
- Surround level
- Continuous Custom Style XY interpolation
- Current incoming HDMI/eARC codec/format
- Firmware OTA
- Responsive but still unnamed INFO commands
01:0B,01:10,01:11,01:12
Style mode, captured corner actions and confirmed curve readback are exposed. Its continuous XY interpolation is not reconstructed. The separate physical-remote Bass/Mid/Treble/Surround controls remain outside the proven ordinary D80 BLE GET+SET surface and are not guessed.
See docs/PROTOCOL.md for the hardware-verified INFO/CONTROL command maps, safe-code algorithm, Custom EQ payload, X-Upmix verification behavior and capability-field order.
Download diagnostics from:
Settings → Devices & services → ULTIMEA → device → ⋮ → Download diagnostics
If the phone app cannot connect, disable Keep Bluetooth connection open so Home Assistant releases BLE after the configured delay. If the soundbar is powered down/out of range, entities stay unavailable until the configured targeted recovery path reaches it again.
Control is local over Bluetooth. The integration requires no ULTIMEA credentials and intentionally sends no soundbar state to an ULTIMEA cloud service.
Bug reports, additional model/firmware observations, protocol captures, translations and hardware-tested support are welcome. See CONTRIBUTING.md.
See CHANGELOG.md.
MIT. See LICENSE.
This is a private hobby project maintained in my free time and provided independently of contributions.
If you enjoy the project and would like to send me a voluntary personal thank-you, you can use Ko-fi.
Contributions are completely optional and do not buy or guarantee features, support, development work, early access, priority, or any other service. This is not a charitable donation and no donation receipt is issued.
