Code Monkey home page Code Monkey logo

cybele's Introduction

Cybele

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.

Features

Cybele can..

  • Connect to a multitude of devices
  • Use multiple HCI Dongles to work around hardware limitations
  • Run own GATT Services

Supported devices

Currently, the following devices/device types are supported:

You can click on the device to jump to its documentation.

Requirements

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

Deployment is simple:

  1. Clone this repo
  2. Navigate into the cloned repo and run npm install
  3. Copy config.default.json to config.json and edit according to your needs. Documentation can be found here.
  4. Run 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.

Known Issues

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.

Misc

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.

GATT Services

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.

Why the name?

No particular reason. I just needed something less generic than ble2mqtt or bleGateway.

It also fits nicely with Valetudo

cybele's People

Contributors

hypfer avatar kbedra-tbscg avatar lknop avatar wberrazeg avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.