{"id":18188070,"url":"https://github.com/hypfer/cybele","last_synced_at":"2025-04-02T03:31:27.041Z","repository":{"id":54627077,"uuid":"216662394","full_name":"Hypfer/Cybele","owner":"Hypfer","description":"BLE to MQTT Gateway for Smarthome and IoT Devices","archived":false,"fork":false,"pushed_at":"2023-05-18T11:20:54.000Z","size":183,"stargazers_count":115,"open_issues_count":14,"forks_count":15,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-03-16T08:11:33.971Z","etag":null,"topics":["bluetooth-low-energy","cloud-free","iot","mqtt","smarthome"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hypfer.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-21T20:46:01.000Z","updated_at":"2025-03-10T13:31:56.000Z","dependencies_parsed_at":"2022-08-13T22:00:37.838Z","dependency_job_id":null,"html_url":"https://github.com/Hypfer/Cybele","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypfer%2FCybele","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypfer%2FCybele/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypfer%2FCybele/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypfer%2FCybele/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hypfer","download_url":"https://codeload.github.com/Hypfer/Cybele/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246750938,"owners_count":20827804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluetooth-low-energy","cloud-free","iot","mqtt","smarthome"],"created_at":"2024-11-03T02:04:32.793Z","updated_at":"2025-04-02T03:31:26.445Z","avatar_url":"https://github.com/Hypfer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cybele\n\nCybele is a generic and extensible application used to bridge Bluetooth Low Energy devices to MQTT.\n\nIt is written in Javascript and utilizes the BlueZ Linux Bluetooth stack via its D-Bus interface.\n\n## Features\nCybele can..\n* Connect to a multitude of devices\n* Use multiple HCI Dongles to work around hardware limitations\n* Run own GATT Services\n\n## Supported devices\nCurrently, the following devices/device types are supported:\n\n* GlanceClock Smart Wall Clock\n* [Xiaomi / Viomi Mi Mija Smart Kettle](docs/devices/MiSmartKettle.md)\n* [Xiaomi Mi Body Composition Scale](docs/devices/MiBodyCompositionScale.md)\n* [Oral-B Smart Toothbrushes](docs/devices/OralBToothbrush.md)\n* [Room Presence tracking using generic BLE Beacons](docs/devices/RoomPresenceBeacon.md)\n* [Generic BLE Devices which provide battery information](docs/devices/BatteryPoweredDevice.md)\n* [Xiaomi Mi Flora Plant Sensors](docs/devices/MiFlora.md)\n* [eQ-3 Eqiva BLUETOOTH® Radiator Thermostats](docs/devices/EqivaThermostat.md)\n* [Xiaomi Mijia LYWSD03MMC Bluetooth 4.2 Temperature Humidity sensor](docs/devices/MiLYWSD03MMC.md)\n\n_You can click on the device to jump to its documentation._\n\n## Requirements\nSince Cybele uses BlueZ, you will need some GNU+Linux distribution.\n\nYou will also need a recent version of nodejs. Development was done using Node 11.\n\nThe BlueZ Version needs to be rather new as well. Debian Busters BlueZ 5.50 is sufficient.\n\n## Deployment\nDeployment is simple:\n1. Clone this repo\n2. Navigate into the cloned repo and run `npm install`\n3. Copy `config.default.json` to `config.json` and edit according to your needs. Documentation can be found [here.](docs/index.md)\n4. Run `app.js`. Either manually using `node app.js` or by using the provided systemd unit file.\n\nA sample systemd unit file is included [here.](deployment/systemd/cybele.service)\n\nPlace it in `/etc/systemd/system/` and don't forget to change the paths in it if required.\n\n## Known Issues\nAs 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.\nThis has caused the death of multiple brave 16GB micro sd cards which couldn't handle 50+TBW :(\n\nAs a mitigation, I'm currently using a ramdisk for the bluetooth state directory:\n\nAdd this to your `/etc/fstab`:\n\n```\ntmpfs           /tmp/bluetoothstate        tmpfs   nodev,nosuid,size=60M 0 0\n```\n\nCreate a symlink `ln -s /tmp/bluetoothstate /var/lib/bluetooth`\n\nAnd use this systemd service `/etc/systemd/system/bluetoothramdisk.service`:\n\n```\n[Unit]\nRequiredBy=bluetooth.service\nPartOf=bluetooth.service\n\n[Service]\nType=oneshot\nUser=root\nExecStart=/usr/bin/rsync -ar /opt/bluetooth_backup/ /tmp/bluetoothstate/\nExecStop=/usr/bin/rsync -ar /tmp/bluetoothstate/ /opt/bluetooth_backup/\nRemainAfterExit=yes\n\n[Install]\nWantedBy=multi-user.target\n```\n\nYou may need to create /opt/bluetooth_backup beforehand and initially seed it with your current data.\n\n\n## Misc\nPlease note that Cybele is currently in its early stages.\nThere is still a lot to do regarding both error handling as well as code-cleanup.\n\n##### GATT Services\nTo run own GATT services, you also need permission to bring up a service on the system D-Bus.\n\nA sample configuration which grants these rights to a user named `pi` is included [here.](deployment/dbus/cybele.conf)\n\nJust place that file in `/etc/dbus-1/system.d` and you should be able to use the included `CurrentTimeService`.\n\n##### Why the name?\nNo particular reason. I just needed something less generic than `ble2mqtt` or `bleGateway`.\n\nIt also fits nicely with [Valetudo](https://github.com/Hypfer/Valetudo)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypfer%2Fcybele","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhypfer%2Fcybele","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypfer%2Fcybele/lists"}