{"id":18746698,"url":"https://github.com/matrixeditor/oralb-io","last_synced_at":"2025-10-07T03:33:26.240Z","repository":{"id":215952857,"uuid":"740121137","full_name":"MatrixEditor/oralb-io","owner":"MatrixEditor","description":"Client and CLI to interact with and configure OralB toothbrushes.","archived":false,"fork":false,"pushed_at":"2024-12-29T20:17:36.000Z","size":4950,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-07T10:02:09.377Z","etag":null,"topics":["ble","bluetooth-low-energy","oralb","oralb-io","toothbrush"],"latest_commit_sha":null,"homepage":"https://matrixeditor.github.io/oralb-io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MatrixEditor.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-07T15:36:55.000Z","updated_at":"2025-02-14T02:37:32.000Z","dependencies_parsed_at":"2024-01-13T17:42:31.698Z","dependency_job_id":"5ec7936a-1b68-4ec6-85ce-b7c588adee04","html_url":"https://github.com/MatrixEditor/oralb-io","commit_stats":null,"previous_names":["matrixeditor/oralb-io"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/MatrixEditor/oralb-io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixEditor%2Foralb-io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixEditor%2Foralb-io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixEditor%2Foralb-io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixEditor%2Foralb-io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MatrixEditor","download_url":"https://codeload.github.com/MatrixEditor/oralb-io/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixEditor%2Foralb-io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278716069,"owners_count":26033402,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ble","bluetooth-low-energy","oralb","oralb-io","toothbrush"],"created_at":"2024-11-07T16:26:33.866Z","updated_at":"2025-10-07T03:33:26.209Z","avatar_url":"https://github.com/MatrixEditor.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OralB IO\n\n[![python](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2FMatrixEditor%2Foralb-io%2Fmaster%2Fpyproject.toml\u0026logo=python)](https://www.python.org/downloads/)\n![GitHub issues](https://img.shields.io/github/issues/MatrixEditor/oralb-io?logo=github)\n![GitHub License](https://img.shields.io/github/license/MatrixEditor/oralb-io?logo=github)\n\n\u003e [!WARNING]\n\u003e This library uses [red functions](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/)! Be aware of that before using the API of this project.\n\nA small project to be able to configure an Oral-B toothbrush using\nthe command line. Current features are:\n\n* Discover all brushes in the local area\n* Get specific characteristics from a brush\n\nThe following features are proposed but not implemented yet:\n\n* Modify specific characteristics of a brush (partial support)\n* Request metadata information\n* Update the brush using the CLI\n* Protocol documentation\n\n## Installation\n\n```bash\npip install git+https://github.com/MatrixEditor/oralb-io.git\n```\n\n## Protocol\n\nA final documentation is not published yet, but WIP. Use [/oralb/blesdk/model](https://github.com/MatrixEditor/oralb-io/blob/master/oralb/blesdk/model.py) as a reference.\n\n## Usage\n\nTo start the CLI just type `oralbcli`.\n\n### Discover nearby Bluetooth devices\n\nThe `ble` command can be used to view all Bluetooth devices in the area. Additionally,\nadvertisements from brushes will be displayed in detail:\n\n![ble-discover](/Docs/source/_static/ble-discover.gif)\n\n### Connect to a toothbrush\n\nBefore we can read data from the device, we have to connect to it.\n\n\u003e [!WARNING]\n\u003e The device **must** be actived the whole time. Otherwise you have to\n\u003e restart the shell and connect again. The *re-connect* mechanism is not\n\u003e fully applicable by now.\n\u003e You can try to extend the using `dm extend-connection`. If that fails,\n\u003e you have to connect again.\n\n```bash\n(oralb)\u003e dm connect \"FF:FF:FF:FF:FF:FF\"\n[   Ok   ] Connected to 'FF:FF:FF:FF:FF:FF'\n```\n\nNote that you may need to retry to connect to the device as sometimes\nparing fails.\n\n### Read characteristics\n\nIn order to read attributes, the device must be active:\n\n```bash\n(oralb)\u003e dm getchar my_color\n[   Ok   ] Value of 'A0F0FF2B-5047-4D53-8208-4F72616C2D42':\n\nColor(red=0, green=255, blue=61, identifier=0)\n```\n\nis equivalent to\n\n```bash\n(oralb)\u003e dm getchar FF2B\n[   Ok   ] Value of 'A0F0FF2B-5047-4D53-8208-4F72616C2D42':\n\nColor(red=0, green=255, blue=61, identifier=0)\n```\n\nand\n\n```bash\n(oralb)\u003e dm getchar \"A0F0FF2B-5047-4D53-8208-4F72616C2D42\"\n[   Ok   ] Value of 'A0F0FF2B-5047-4D53-8208-4F72616C2D42':\n\nColor(red=0, green=255, blue=61, identifier=0)\n```\n\n### Write characterisitcs\n\nYou can try to write new characteristics using `dm putchar`. The following example illustrates a sample write-process using the characteristic `00002a00` (device name):\n\n```bash\n(oralb)\u003e dm putchar --no-response name --text \"Hello, World!\"\n```\n\n\u003e [!TIP]\n\u003e Retrieve a list of all available structs using `dm putchar -h` and\n\u003e view specific options for a characteristic with `dm putchar $NAME -h`.\n\n### List Bluetooth cpabilities\n\nThe device manager (`dm`) command supports displaying all bluetooth services\nof a device:\n\n```bash\n(oralb)\u003e dm list services\n[  Info  ] Device services:\n\nDevice: FF:FF:FF:FF:FF:FF\n├── 00001800-0000-1000-8000-00805f9b34fb (Handle: 1): 'Generic Access Profile'\n│   ├── 00002a00-0000-1000-8000-00805f9b34fb (Handle: 2): 'Device Name' ['read', 'write-without-response', 'write']\n...\n├── 00001801-0000-1000-8000-00805f9b34fb (Handle: 12): 'Generic Attribute Profile'\n├── a0f0ff00-5047-4d53-8208-4f72616c2d42 (Handle: 13): 'Unknown'\n│   ├── a0f0ff01-5047-4d53-8208-4f72616c2d42 (Handle: 14): 'Handle ID' ['read']\n│   ├── a0f0ff02-5047-4d53-8208-4f72616c2d42 (Handle: 17): 'Handle Type' ['read']\n...\n│   ├── a0f0ff0c-5047-4d53-8208-4f72616c2d42 (Handle: 55): 'Cache' ['read', 'write', 'notify']\n│   └── a0f0ff0d-5047-4d53-8208-4f72616c2d42 (Handle: 59): 'Sensor Data' ['read', 'notify']\n├── a0f0ff20-5047-4d53-8208-4f72616c2d42 (Handle: 63): 'Unknown'\n│   ├── a0f0ff21-5047-4d53-8208-4f72616c2d42 (Handle: 64): 'Command Status' ['read', 'write', 'notify']\n│   ├── a0f0ff22-5047-4d53-8208-4f72616c2d42 (Handle: 68): 'RTC' ['read', 'write']\n...\n└── a0f0ff80-5047-4d53-8208-4f72616c2d42 (Handle: 95): 'Unknown'\n    ├── a0f0ff81-5047-4d53-8208-4f72616c2d42 (Handle: 96): 'OTA Command' ['read', 'write']\n    ...\n```\n\n\n## Firmware\n\nNothing interesting, seems to be encrypted and compressed.\n\n\n## License\n\nDistributed under the GNU General Public License (V3). See [License](LICENSE) for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrixeditor%2Foralb-io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatrixeditor%2Foralb-io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrixeditor%2Foralb-io/lists"}