npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

homebridge-bedjet

v0.3.6

Published

Homebridge plugin for BedJet V3 via Bluetooth LE

Downloads

3,723

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 reboot

Then 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-bedjet

Pairing 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:

bluetoothctl

Then inside the bluetoothctl prompt:

scan on

Wait 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
exit

Note: 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
hciconfig

2. Make sure BlueZ is running:

sudo systemctl status bluetooth

# If it's not running:
sudo systemctl enable bluetooth
sudo systemctl start bluetooth

3. Check the homebridge user is in the bluetooth group:

groups homebridge
# Should include "bluetooth" in the list

If it's missing:

sudo usermod -aG bluetooth homebridge
sudo reboot

4. 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 on in 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 reboot

HomeKit 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