This project provides a Bluetooth proxy daemon for ESPHome, designed to run on Linux systems. It listens for Bluetooth Low Energy (BLE) advertisements using the BlueZ stack and forwards them over TCP to ESPHome or other compatible clients. The proxy also advertises itself via mDNS as esphomelib for easy network discovery.
Current version cooperates with desktop and other system usage of the bluetooth hardware by using the bluez stack via dbus. Future work to access raw advertisements via HCI, bypassing any filtering or delay that bluez may be doing is being considered.
Debian/Ubuntu (DEB packages)
System packages for Debian-based systems (Debian, Ubuntu, Pop-OS) are provided as part of the release package:
sudo dpkg -i linux-bt-proxy_*.debRed Hat/Fedora/CentOS (RPM packages)
RPM packages are available for Red Hat-based systems:
sudo rpm -i linux-bt-proxy-*.rpm
# or with dnf/yum:
sudo dnf install linux-bt-proxy-*.rpmArch Linux (Tarball)
For Arch Linux and other distributions, extract the tarball and run the install script:
tar -xzf linux-bt-proxy-*-x86_64-unknown-linux-gnu.tar.gz
cd linux-bt-proxy-*
sudo ./install.shAll packages install the daemon as a systemd service. After installation:
sudo systemctl enable linux-bt-proxy
sudo systemctl start linux-bt-proxyFor testing and development, you may run the proxy daemon with:
cargo run --release -- [OPTIONS]Options:
-a, --hci <INDEX>: Bluetooth adapter index (default: 0 for hci0)-l, --listen <ADDR>: TCP listen address (default: 0.0.0.0:6053)--hostname <NAME>: Hostname to advertise (default: system hostname)-m, --mac <MAC>: MAC address for mDNS (optional)
Example:
cargo run --release -- --hci 1 --listen 192.168.1.10:6053 --hostname my-bt-proxyRequires Rust (edition 2021 or newer) and a Linux system with BlueZ.
cargo build --releaseTo build all package formats (DEB, RPM, and tarball):
./scripts/build-packages.shThis will create packages in the dist/ directory:
*.deb- Debian/Ubuntu packages*.rpm- Red Hat/Fedora/CentOS packages*.tar.gz- Generic tarball for Arch Linux and other distributions
Prerequisites for packaging:
cargo install cargo-deb cargo-generate-rpmReleases are automatically built and published when version tags are pushed:
# Update version in Cargo.toml first, then:
git tag v0.1.1
git push origin v0.1.1This triggers a GitHub Actions workflow that:
- Builds DEB, RPM, and tarball packages
- Creates a GitHub release with auto-generated notes
- Uploads all package formats as release assets
The workflow validates that the tag version matches Cargo.toml before building.
src/main.rs: Entry point and CLI handlingsrc/ble.rs: BLE advertisement listener logicsrc/mdns.rs: mDNS service registrationsrc/server.rs: TCP server implementationsrc/context.rs: Shared proxy contextsrc/utils.rs: Utility functions
This project is licensed under the GPL 3.0 or later.
Pull requests and issues are welcome! Please open an issue for bug reports or feature requests.