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..
Currently, the following devices/device types are supported:
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:
npm install
config.default.json
to config.json
and edit according to your needs. Documentation can be found here.app.js
. Either manually using node 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.
As of now (2020-10-30), there's a bug in bluetoothd which causes it to constantly write all state changes of everything all the time to disk. This has caused the death of multiple brave 16GB micro sd cards which couldn't handle 50+TBW :(
As a mitigation, I'm currently using a ramdisk for the bluetooth state directory:
Add this to your /etc/fstab
:
tmpfs /tmp/bluetoothstate tmpfs nodev,nosuid,size=60M 0 0
Create a symlink ln -s /tmp/bluetoothstate /var/lib/bluetooth
And use this systemd service /etc/systemd/system/bluetoothramdisk.service
:
[Unit]
RequiredBy=bluetooth.service
PartOf=bluetooth.service
[Service]
Type=oneshot
User=root
ExecStart=/usr/bin/rsync -ar /opt/bluetooth_backup/ /tmp/bluetoothstate/
ExecStop=/usr/bin/rsync -ar /tmp/bluetoothstate/ /opt/bluetooth_backup/
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
You may need to create /opt/bluetooth_backup beforehand and initially seed it with your current data.
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