{"id":27933605,"url":"https://github.com/eiselems/btle-poc","last_synced_at":"2025-07-12T09:33:14.254Z","repository":{"id":289840726,"uuid":"972577015","full_name":"eiselems/btle-poc","owner":"eiselems","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-29T13:10:30.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T04:59:28.265Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eiselems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-04-25T09:57:17.000Z","updated_at":"2025-04-29T13:10:45.000Z","dependencies_parsed_at":"2025-04-25T10:47:58.274Z","dependency_job_id":"7a277d95-3150-4568-8862-ddeda81e4a25","html_url":"https://github.com/eiselems/btle-poc","commit_stats":null,"previous_names":["eiselems/btle-poc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eiselems/btle-poc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiselems%2Fbtle-poc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiselems%2Fbtle-poc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiselems%2Fbtle-poc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiselems%2Fbtle-poc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eiselems","download_url":"https://codeload.github.com/eiselems/btle-poc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiselems%2Fbtle-poc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264972148,"owners_count":23691375,"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":[],"created_at":"2025-05-07T04:59:26.988Z","updated_at":"2025-07-12T09:33:14.234Z","avatar_url":"https://github.com/eiselems.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Bluetooth LE IoT Device Configuration PoC\n\nThis repository contains a proof of concept (PoC) demonstrating BLE (Bluetooth Low Energy) communication between an IoT device and a customer setup application. The project simulates the common use case of configuring an IoT device with WiFi credentials via BLE.\n\n---\n\n## Project Overview\n\nThe project includes two separate implementations:\n\n### Node.js Implementation\n- **IoT Device (Peripheral/GATT Server)** – Advertises and accepts configuration data  \n\n### Python Implementation\n- **Customer App (Central/Client)** – Discovers and sends data to the IoT device\n\n---\n\n## Prerequisites\n\n### Node.js Implementation\n- Node.js (v12 or later recommended)\n- Bluetooth adapter with BLE support\n- Linux/macOS (Node.js BLE libraries have limited Windows support)\n\n### Python Implementation\n- Python 3.9 or later\n- Bluetooth adapter with BLE support\n- Platform requirements for [Bleak](https://github.com/hbldh/bleak):\n  - macOS 10.15+ (Catalina or newer)\n  - Linux with BlueZ ≥ 5.43\n  - Windows 10 (May 2019 Update or newer)\n\n---\n\n## Setup Instructions\n\n### Node.js Setup\nInstall dependencies:\n\n\u003e **Note:** Node.js BLE packages may require additional system dependencies:\n\n#### Linux (not tested):\n```bash\nsudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev\n```\n\n#### macOS:\n- Xcode Command Line Tools\n\n---\n\n### Python Setup\nCreate and activate a virtual environment:\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # or `venv\\Scripts\\activate` on Windows\n```\n\nInstall dependencies:\n\n```bash\npip install -r requirements.txt\n```\n\n---\n\n## Running the Applications\n\n### Node.js Implementation\nStart the IoT device simulator (in one terminal):\n\n```bash\nnode iot-device.js\n```\n\n### Python Implementation\nStart the customer setup app (in another terminal):\n\n```bash\npython customer-app.py\n```\n\n---\n\n## Architecture\n\n### Service \u0026 Characteristic UUIDs\n- **Service UUID:** `12345678-1234-5678-1234-56789abcdef0`\n- **Characteristic UUID:** `12345678-1234-5678-1234-56789abcdef1`\n\n\n---\n\n## Communication Flow\n\n1. IoT device advertises its presence with a specific service UUID\n2. Customer app scans for devices with that service UUID\n3. Customer app connects to the IoT device\n4. Customer app writes configuration data (as JSON) to the characteristic\n5. IoT device receives and processes the configuration\n\n---\n\n## Troubleshooting\n\n- Ensure Bluetooth is enabled on your system\n- Check that your Bluetooth adapter supports BLE\n- Run the applications with elevated permissions if needed (e.g., `sudo` on Linux)\n- Make sure no other applications are using the Bluetooth adapter\n- Verify that the device is discoverable with a Bluetooth scanner app\n\n---\n\n## License\n\nISC License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feiselems%2Fbtle-poc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feiselems%2Fbtle-poc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feiselems%2Fbtle-poc/lists"}