homebridge-bedjet
v0.3.6
Published
Homebridge plugin for BedJet V3 via Bluetooth LE
Downloads
3,723
Maintainers
Readme
homebridge-bedjet
DISCLAIMER - This project is entirely vibecoded. I don't have development experience.
Homebridge plugin for the BedJet V3 climate comfort system via Bluetooth LE.
Exposes a Thermostat and a Fan accessory in HomeKit so you can control temperature and fan speed from the Home app, Siri, or automations — without needing the BedJet cloud or the BedJet mobile app running.
Features
- Direct BLE connection from the Homebridge host — no cloud required
- Thermostat service: current/target temperature, heating/cooling mode
- FanV2 service: on/off and rotation speed (5–100%)
- Automatic reconnection with exponential backoff (retries indefinitely)
- Multi-device support for dual-zone BedJet setups
- Bluetooth discovery UI built into the Homebridge config panel — no need to find the MAC address manually
Prerequisites
Linux / Raspberry Pi (recommended)
# Install BlueZ
sudo apt-get install bluetooth bluez
# Make sure the Bluetooth service is running
sudo systemctl enable bluetooth
sudo systemctl start bluetooth
# Add the homebridge user to the bluetooth group so it can use BlueZ without root
sudo usermod -aG bluetooth homebridge
# Reboot (or restart Homebridge) for group membership to take effect
sudo rebootThen pair your BedJet once before starting the plugin (see Pairing your BedJet below).
macOS
Works out of the box. A CoreBluetooth permission prompt will appear on first run.
Installation
Search for homebridge-bedjet in the Homebridge UI plugins tab and install from there.
Or via terminal:
npm install -g homebridge-bedjetPairing your BedJet
The BedJet V3 requires a one-time Bluetooth pairing before the plugin can connect to it. You only need to do this once.
On your Raspberry Pi:
bluetoothctlThen inside the bluetoothctl prompt:
scan onWait until you see your BedJet appear (it will show up as BEDJET_V3 with its MAC address). Then:
pair AA:BB:CC:DD:EE:FF
trust AA:BB:CC:DD:EE:FF
disconnect AA:BB:CC:DD:EE:FF
exitNote: When you run
pair, the BedJet will prompt you to press the WiFi/BT button on the top of the unit to confirm the pairing. Press it when prompted.
After pairing, restart Homebridge and the plugin will connect automatically.
Configuration
The easiest way is to use the Bluetooth Discovery panel in the Homebridge plugin settings — click Scan for BedJets, wait ~12 seconds, then click Add to Config next to your device. Restart Homebridge when done.
To configure manually, add to your ~/.homebridge/config.json:
{
"platforms": [
{
"platform": "BedJetPlatform",
"devices": [
{
"name": "BedJet",
"address": "AA:BB:CC:DD:EE:FF"
}
]
}
]
}For a dual-zone setup, add both units:
{
"platforms": [
{
"platform": "BedJetPlatform",
"devices": [
{ "name": "Left BedJet", "address": "AA:BB:CC:DD:EE:FF" },
{ "name": "Right BedJet", "address": "11:22:33:44:55:66" }
]
}
]
}Config options
| Field | Required | Default | Description |
|-------|----------|---------|-------------|
| name | Yes | — | Display name in HomeKit |
| address | Yes | — | BLE MAC address of your BedJet V3 |
| scanTimeout | No | 30 | Seconds to wait for the device on connect |
Troubleshooting
Plugin says "Connect failed" or never shows Ready
1. Check Bluetooth is enabled and unblocked:
# See all radio devices and whether they're blocked
rfkill list
# Unblock Bluetooth if it shows as blocked
sudo rfkill unblock bluetooth
# Check the adapter is up
hciconfig2. Make sure BlueZ is running:
sudo systemctl status bluetooth
# If it's not running:
sudo systemctl enable bluetooth
sudo systemctl start bluetooth3. Check the homebridge user is in the bluetooth group:
groups homebridge
# Should include "bluetooth" in the listIf it's missing:
sudo usermod -aG bluetooth homebridge
sudo reboot4. Make sure the BedJet is paired (see Pairing your BedJet above). Without pairing, BlueZ can see the device during a scan but won't be able to connect to it and access GATT services.
5. Close the BedJet mobile app — the BedJet V3 only allows one BLE connection at a time. If the app is connected, this plugin cannot connect.
Plugin connects but then disconnects frequently
This usually means BLE signal is weak. Move your Raspberry Pi closer to the BedJet, or add a USB Bluetooth adapter with better range.
"Scan found 0 devices" in the discovery panel
- Make sure the BedJet is powered on and not already connected to your phone or the app
- The scan runs for 12 seconds — make sure you wait for it to finish
- Try running
bluetoothctl scan onin a terminal on the Pi to confirm the Pi can see it
Homebridge log shows D-Bus or permissions errors
The plugin uses the BlueZ D-Bus API (the same method used by Python's bleak library and the Home Assistant BedJet integration). If you see D-Bus permission errors, the homebridge user doesn't have access to BlueZ:
sudo usermod -aG bluetooth homebridge
sudo rebootHomeKit behaviour
| HomeKit control | BedJet action | |---|---| | Thermostat → Off | Standby | | Thermostat → Heat | Standard heat mode | | Thermostat → Cool | Fan-only cool mode | | Thermostat → Auto | Heat mode | | Temperature slider | Set target temperature | | Fan → Off | Standby | | Fan → On | Heat mode (if currently off) | | Fan speed slider | Set fan speed (5–100% in 5% steps) |
BedJet BLE limitation
The BedJet V3 only allows one active BLE connection at a time. Close the BedJet mobile app fully before using this plugin.
Credits
The BedJet V3 BLE protocol details — service/characteristic UUIDs, notification packet layout, and command encoding — were derived from the pybedjet library and the Home Assistant BedJet integration. This plugin would not exist without that prior reverse-engineering work.
BLE communication uses node-ble, which wraps the Linux BlueZ D-Bus API — the same approach used by Python's bleak library and the HA integration.
License
MIT
