Cybele is a generic and extensible application used to bridge Bluetooth Low Energy devices to MQTT.
It is written in Javascript and utilizes the BlueZ Linux Bluetooth stack via its D-Bus interface.
Cybele can..
- Connect to a multitude of devices
- Use multiple HCI Dongles to work around hardware limitations
- Run own GATT Services
Currently, the following devices/device types are supported:
- GlanceClock Smart Wall Clock
- Xiaomi / Viomi Mi Mija Smart Kettle
- Xiaomi Mi Body Composition Scale
- Oral-B Smart Toothbrushes
- Room Presence tracking using generic BLE Beacons
- Generic BLE Devices which provide battery information
- Xiaomi Mi Flora Plant Sensors
- eQ-3 Eqiva BLUETOOTH® Radiator Thermostats
You can click on the device to jump to its documentation.
Since Cybele uses BlueZ, you will need some GNU+Linux distribution.
You will also need a recent version of nodejs. Development was done using Node 11.
The BlueZ Version needs to be rather new as well. Debian Busters BlueZ 5.50 is sufficient.
Deployment is simple:
- Clone this repo
- Navigate into the cloned repo and run
npm install
- Copy
config.default.json
toconfig.json
and edit according to your needs. Documentation can be found here. - Run
app.js
. Either manually usingnode app.js
or by using the provided systemd unit file.
A sample systemd unit file is included here.
Place it in /etc/systemd/system/
and don't forget to change the paths in it if required.
Please note that Cybele is currently in its early stages. There is still a lot to do regarding both error handling as well as code-cleanup.
To run own GATT services, you also need permission to bring up a service on the system D-Bus.
A sample configuration which grants these rights to a user named pi
is included here.
Just place that file in /etc/dbus-1/system.d
and you should be able to use the included CurrentTimeService
.
No particular reason. I just needed something less generic than ble2mqtt
or bleGateway
.
It also fits nicely with Valetudo