Control an Auxbeam AC-1200 12-gang RGB switch panel from Home Assistant and HomeKit using an ESP32 (ESPHome) as a Bluetooth LE bridge — no vendor app required. This repo documents the panel's BLE protocol and provides a ready-to-flash ESPHome config.
Unofficial. Not affiliated with, authorized by, or endorsed by Auxbeam or Qunchen. Product and app names are used only to describe interoperability.
The panel is a two-part system (dash panel + engine-bay control box, 12 circuits, ≤100 A, in toggle/momentary/pulsed modes) with no local API, no MQTT, no HTTP — the only programmable interface is BLE, and the vendor app is a closed box. Reverse-engineering that BLE link turns every circuit into a normal Home Assistant entity, and HomeKit follows for free via HA's HomeKit Bridge. The ESP32 rides in the vehicle as the sole BLE client, so range and the single-connection limit stop being problems, and the wired panel + RF remote keep working as independent overrides.
- PROTOCOL.md — the full decoded BLE protocol (GATT map, frame formats, state feedback) plus a hardware-verification checklist.
- ARCHITECTURE.md — how the whole system fits together: diagram, entity map, and the power/RF/single-central realities that make or break it.
- switchpanel-bridge.esphome.yaml — the ESP32 bridge: 12 switches, an RGB backlight light, a pulse-timing number, and FFF2 state feedback.
- HARDWARE.md — two rugged in-vehicle builds (Olimex ESP32-GATEWAY-EA for antenna flexibility, or Kincony KC868-A4 turnkey/controller-mounted): BOM, automotive power front-end, antenna strategy, and ESPHome board notes.
- ROADMAP.md — phased plan: start on the Pi's own Bluetooth (HA custom integration), graduate to an ESP32 (Bluetooth Proxy) only if range/contention/decoupling demand it — with no rewrite.
- tools/panel_bench.py — Phase 0 bench script: scan/connect/GATT-dump, decode FFF2 state, watch physical-switch notifications, optional relay-toggle test. Read-only by default.
- custom_components/auxbeam/ — Phase 1 Home Assistant custom integration (switches + backlight light + pulse number) on HA's Bluetooth stack. Theoretical sketch — untested on hardware; see its README.
Decoded from the vendor app, ahead of hardware — nothing here has been tested against a real panel
yet. The frame bytes are derived exactly from the app's own logic, and the Python is unit-checked for
correctness, but the behavioral items marked verify in PROTOCOL.md (no-PIN connect, whether the panel
notifies on physical/RF changes, readback framing, pulse units) and the whole Phase 1 integration remain
theoretical until tools/panel_bench.py is run on hardware.
Bench reports welcome — see Contributing.
- Flash
switchpanel-bridge.esphome.yamlto an ESP32 (needs BLE — not an S2). Fill the two TODOs: your WiFi creds and the panel's BLE MAC (grab it with LightBlue/nRF Connect once the panel is powered). - Adopt the device in Home Assistant (ESPHome native API). You get 12 switches, a backlight light, and a pulse-time number.
- For HomeKit, enable HA's HomeKit Bridge (or Homebridge) and expose those entities.
See ARCHITECTURE.md for the design, and PROTOCOL.md if you want to build your own client.
The vendor app is com.qunchen.ble.switchpanel ("SwitchPanel"), a Qunchen white-label app
rebadged across brands. The same BLE core appears to back other Controller4/6/8/10/12 panels and
rebrands (e.g. Rough Country's "Switch Control", com.qunchen.ble.another2.switchpanel), so this
protocol may apply to those too — unverified; confirm against your own hardware. The AC-1200
advertises a BLE name containing Controller12.
This is clean interoperability work: the protocol is documented from the app's own logic. This repo does not redistribute the vendor app — reproduce the analysis yourself:
- App:
com.qunchen.ble.switchpanel, version 2.1.2 (46), SHA-25677ff2ce1128ca9b49700afdc2c5635f0b45907921cbb542bdbec9bbbe94a6de3. - Obtain the APK (Play Store or a mirror), verify the hash, then
jadx -d out <apk>and readcom/qunchen/ble/switchpanel/util/BleUtil.java+entity/LoopState.java.
Reverse engineering for interoperability is protected in the US (DMCA §1201(f)) and EU (Software Directive Art. 6); protocols and API facts aren't copyrightable. We publish the description, not the code.
Have an AC-1200 (or a sibling Controller* panel)? The most valuable contributions right now are
bench confirmations of the verify items in PROTOCOL.md, and reports of which other panels/brands
share the protocol. Open an issue with your panel model, the nRF Connect GATT dump, and what worked.
This controls high-current vehicle circuits — some may drive winches or other momentary/ high-consequence loads. Keep those out of any automation (or manual-only). No warranty; use at your own risk.
MIT © 2026 Casey Bisson.