A custom Home Assistant integration that communicates with Jackery solar generators over Bluetooth Low Energy (BLE).
Tested with the Jackery Explorer 240 and Explorer 5000, but should work with other Jackery portable and box models that use the same BLE protocol.
- Auto-discovery of Jackery devices via BLE scan
- Automatic encryption key derivation from BLE advertisements (no manual key entry)
- Real-time sensor data (battery, power, temperature, voltage, frequency)
- Switch controls for AC, DC, USB, car output, UPS mode, and super charge
- Select controls for light mode, charge mode, battery save, and energy saving timer
- Automatic time sync on connection
- Auto-reconnect on connection loss with retry logic
| Model Code | Name | DC | Split DC | AC | UPS | Light | Super Charge |
|---|---|---|---|---|---|---|---|
| 1 | E3000Pro | Y | N | Y | N | Y | N |
| 2 | E2000Plus | Y | N | Y | N | Y | N |
| 4 | E300Plus | Y | N | N | Y | Y | N |
| 5 | E1000Plus | Y | Y | Y | Y | Y | N |
| 6 | E700Plus | Y | Y | N | Y | Y | N |
| 7 | E280Plus | Y | N | Y | Y | Y | N |
| 8 | E1000Pro2 | Y | N | Y | Y | Y | Y |
| 9 | E240 | Y | N | N | Y | N | Y |
| 10 | E600Plus | Y | N | Y | Y | Y | Y |
| 12 | E2000Pro2 | Y | N | Y | Y | Y | Y |
| 13 | E5000Plus | Y | Y | Y | N | Y | N |
| 14 | E3000 | Y | N | Y | N | Y | N |
| 15 | E900 | Y | N | Y | Y | Y | Y |
| 16 | E1800 | Y | N | Y | Y | Y | Y |
| 17 | E1500Ultra | N | N | Y | N | Y | N |
| 18 | E1100Pro2 | Y | N | Y | Y | Y | Y |
| 19 | HP3000 | Y | N | Y | N | Y | N |
| 20 | HP3600 | Y | N | Y | N | Y | N |
| 21 | E1500V2 | Y | N | Y | Y | Y | N |
| 22 | HP5000Plus | Y | Y | Y | N | Y | N |
Encryption: Models 20 (HP3600) and 21 (E1500V2) use AES-128-CBC. All other portable models use RC4. Box/stationary devices use AES-128-CBC. The integration auto-detects the correct encryption method.
Split DC models (5, 6, 13, 22) expose separate USB and car DC outputs instead of a single DC switch.
- Home Assistant instance with Bluetooth adapter available
- Jackery device powered on and within Bluetooth range
- The Jackery device should NOT be connected to the official Jackery app at the same time (only one BLE connection is possible)
- Copy the
custom_components/private_jackfolder into your Home Assistantconfig/custom_components/directory:
config/
custom_components/
private_jack/
__init__.py
config_flow.py
const.py
coordinator.py
manifest.json
select.py
sensor.py
switch.py
strings.json
translations/
en.json
lib/
__init__.py
ble_client.py
commands.py
crc.py
crypto.py
key_derivation.py
parser.py
- Restart Home Assistant
- Go to Settings > Devices & Services
- Click Add Integration
- Search for Private Jack
- The integration will scan for nearby Jackery devices (this takes about 10 seconds)
- Select your device from the list
- The integration will automatically derive the encryption key and set up the device
No manual configuration of addresses or encryption keys is needed.
| Entity | Description | Unit |
|---|---|---|
| Battery Level | Current battery percentage | % |
| Battery Temperature | Battery temperature | °C |
| Total Input Power | Total charging power | W |
| Total Output Power | Total discharge power | W |
| AC Input Power | AC wall charger input | W |
| AC Output Power | AC inverter output | W |
| DC/Solar Input Power | Solar panel / DC input | W |
| AC Output Voltage | AC output voltage | V |
| AC Output Frequency | AC output frequency | Hz |
| Energy Saving Timer | Auto-shutdown timer setting | min |
| Error Code | Device error code (0 = no error) | - |
| Entity | Description |
|---|---|
| AC Output | Turn the AC inverter on/off |
| DC Output | Turn the DC output on/off (single DC models) |
| USB Output | Turn the USB ports on/off (split DC models) |
| Car Output | Turn the car DC output on/off (split DC models) |
| UPS Mode | Enable/disable UPS (uninterruptible power supply) mode |
| Super Charge | Enable/disable super fast charging |
| Entity | Options | Description |
|---|---|---|
| Light Mode | off, low, high, sos | Control the built-in light |
| Charge Mode | fast, silent, custom | Set the charging mode |
| Battery Save | full, save, custom | Battery usage mode (full 0-100%, save 15-85%, custom) |
| Energy Saving | Never, 2h, 8h, 12h, 24h | Auto-shutdown timer |
The integration polls the device every 30 seconds by default. Each poll establishes or reuses a BLE connection, sends a status query, and collects the response.
- Make sure the Jackery device is powered on
- Make sure Bluetooth is enabled on your Home Assistant host
- Move the HA host closer to the Jackery device (BLE range is typically 10-15 meters)
- Make sure the official Jackery app is not connected to the device (only one BLE connection at a time)
- BLE connections can be unreliable over distance; the integration will auto-reconnect on the next poll cycle (with up to 2 retry attempts)
- Check Home Assistant logs for error messages: Settings > System > Logs, filter for
private_jack
- The device must be connected and responding to status queries before control commands will work
- Some commands may not be supported by all models (e.g. UPS mode is not available on all devices)
- Check logs for "Failed to send command" errors
Add the following to your configuration.yaml to enable debug logging:
logger:
logs:
custom_components.private_jack: debugRestart Home Assistant after changing the log level.
- Discovery: Scans for BLE devices with known Jackery name prefixes (HT, JACKERY, JK, EXPLORER)
- Key Derivation: Extracts the device serial number from manufacturer data, decrypts the service data using RC4, and derives an encryption key from the serial number suffix, device GUID, and a static salt
- Connection: Connects via BLE GATT with retry logic, subscribes to notification characteristic for responses
- Encryption: Commands are encrypted (RC4 or AES depending on model) before sending; responses are decrypted and validated via CRC-16
- Polling: A
DataUpdateCoordinatorqueries device properties every 30 seconds and updates all sensor/switch/select entities - Disconnect: Follows the Android app disconnect sequence (stop notifications, disconnect GATT, short delay)
These are installed automatically by Home Assistant:
bleak>= 0.21.0 (BLE communication)pycryptodome>= 3.19.0 (AES encryption)
This integration is provided as-is for personal use. It is based on reverse engineering of the Jackery BLE protocol and is not affiliated with or endorsed by Jackery Inc.