Custom Home Assistant integration for ISDT chargers and the MASS2 USB power adapter with Bluetooth Low Energy (BLE) connectivity. Communicates directly with the device via a persistent BLE connection — no cloud, no app required.
Supports the C4 Air (6-channel charger), A8 Air (8-channel charger), and MASS2 (8-port USB adapter).
A matching dashboard card is available: ISDT Charger Card — battery-style slots with live charge timer, connection indicator, and full HA theme support.
Note: This integration has been tested with the ISDT C4 Air, ISDT A8 Air (chargers), and the ISDT MASS2 (USB power adapter). Other ISDT devices with BLE support may work but are untested.
| Model | Type | Status |
|---|---|---|
| ISDT C4 Air | 6-Channel Charger | Tested ✓ (@mtheli) |
| ISDT A8 Air | 8-Channel Charger | Tested ✓ (@stuartp44) |
| ISDT MASS2 | USB Adapter | Tested ✓ (@mtheli) |
| ISDT NP2 Air | Charger | Untested |
| ISDT LP2 Air | Charger | Untested |
| ISDT K4 | Charger | Untested |
| ISDT 608PD | Charger | Untested |
The integration auto-detects the device model from BLE manufacturer data and exposes the appropriate entities (6 slot sub-devices for C4 Air, 8 slot sub-devices for A8 Air, 8 USB port sub-devices for MASS2). Other ISDT devices using the same BLE protocol may also work — feedback and reports are welcome.
- Auto-discovery via Bluetooth — the device appears automatically in Home Assistant
- One-time pairing — the bind UUID is stored in the config entry, so the device recognises Home Assistant across restarts (no repeated button presses)
- Persistent BLE connection with automatic reconnect
- Slot / port sub-devices with detailed per-slot or per-port sensors (6 slots for chargers, 8 USB ports for MASS2)
- Live charge timer (chargers) using timestamp-based tracking — updates in real-time in the frontend
- Hardware info — firmware version, hardware version, serial number in the device registry
- Configurable poll interval (3–300 seconds) via options flow
Main device:
| Sensor | Type | Description |
|---|---|---|
| Connected | Binary (Connectivity) | BLE connection active |
| Input Voltage | Voltage (V) | Power supply voltage |
| Input Current | Current (A) | Total input current |
| Total Charging Current | Current (A) | Sum of all slot currents |
| Slot 1–6/1–8 Status | Enum | empty, idle, charging, done, error (6 slots for C4 Air, 8 slots for A8 Air) |
| Signal Strength | RSSI (dBm) | BLE signal strength (disabled by default) |
| Beep | Switch | Toggle the charger alarm/beep tone (C4 Air only) |
Per slot (sub-device):
| Sensor | Type | Description |
|---|---|---|
| Charging | Binary (Charging) | Whether the slot is actively charging |
| Battery Inserted | Binary (Plug) | Whether a battery is present in the slot |
| Error | Binary (Problem) | Whether the slot has a charging error |
| Output Voltage | Voltage (V) | Slot output voltage |
| Charging Current | Current (A) | Slot charging current |
| Capacity | Battery (%) | Current charge level (hidden when no battery inserted) |
| Capacity Charged | mAh | Charged capacity in current session |
| Energy Charged | Energy (Wh) | Charged energy in current session |
| Charging Since | Timestamp | Charge start time (live-updating) |
| Battery Type | Text | Detected chemistry (LiPo, NiMH, LiFe, etc.) |
| Internal Resistance | mOhm | Battery internal resistance |
| Cell 1–16 Voltage | Voltage (V) | Individual cell voltages (C4 Air only, disabled by default) |
Main device:
| Entity | Type | Description |
|---|---|---|
| Connected | Binary (Connectivity) | BLE connection active |
| Total Power | Power (W) | Sum of all port power draw |
| USB-C1…C6 / USB-A1–A2 Status | Enum | off, idle, active |
| Signal Strength | RSSI (dBm) | BLE signal strength (disabled by default) |
| Beep | Switch | Toggle the buzzer for USB events |
| Volume | Select | Buzzer volume — low / medium / high |
Per USB port (sub-device):
| Sensor | Type | Description |
|---|---|---|
| Active | Binary (Power) | Whether the port is delivering power |
| Voltage | Voltage (V) | Output voltage |
| Current | Current (A) | Output current |
| Power | Power (W) | Current power draw |
| Protocol | Enum | Charging protocol (None, USB PD, Fast Charge) |
| Config Flow | Device Overview | Slot Detail |
|---|---|---|
![]() |
![]() |
![]() |
- Open HACS in Home Assistant
- Go to Integrations → ... (top right) → Custom repositories
- Add
https://github.com/mtheli/isdt_air_bleas Integration - Search for "ISDT" and install
- Restart Home Assistant
- Copy the
custom_components/isdt_air_blefolder into your Home Assistantconfig/custom_components/directory - Restart Home Assistant
- Make sure your Home Assistant has a Bluetooth adapter (built-in or USB)
- Power on your ISDT device
- It should be auto-discovered — check Settings → Devices & Services → Discovered
- Click Configure and follow the pairing prompt — press any button on the device within 30 seconds to confirm pairing (the MASS2 will beep, chargers wait silently). After the first pairing, subsequent reconnects are silent.
After setup, you can adjust the poll interval via the integration options:
- Go to Settings → Devices & Services
- Find the ISDT device entry
- Click Configure
- Set the poll interval (default: 5 seconds, range: 3–300)
The integration communicates directly via BLE — no cloud, no account required. All communication is fully local.
Both chargers and the MASS2 adapter use a single GATT service with two characteristics:
- AF01 – Data polling via continuous command cycling (charger: workstate, electric, IR, alarm tone; MASS2: port status, settings)
- AF02 – Bind handshake and hardware info query (once after connect, before polling)
Chargers run a 19-command cycle (1 alarm-tone + 6 channels × 3 commands) at 100 ms intervals. The MASS2 uses a single WorkStatus poll per cycle. BLE notifications for the MASS2 are reassembled across fragments to handle the default 23-byte ATT MTU correctly.
For a detailed technical description of the BLE protocol including packet formats, command reference, and timing, see PROTOCOL.md.
This is an independent community project and is not affiliated with, endorsed by, or sponsored by ISDT. All product names, trademarks, and registered trademarks are property of their respective owners.



