{"id":41899626,"url":"https://github.com/torlando-tech/ble-reticulum","last_synced_at":"2026-02-14T06:00:39.105Z","repository":{"id":321309862,"uuid":"1083889756","full_name":"torlando-tech/ble-reticulum","owner":"torlando-tech","description":"BLE Interface for Reticulum Network","archived":false,"fork":false,"pushed_at":"2026-01-18T20:55:03.000Z","size":1406,"stargazers_count":24,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-04T22:39:30.239Z","etag":null,"topics":["ble","mesh-networks","off-grid","privacy","reticulum","rns"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/torlando-tech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":"FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"torlandotech"}},"created_at":"2025-10-26T22:45:05.000Z","updated_at":"2026-02-02T08:38:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"7d92b207-a84d-4b33-b58c-ca2d9b6fd446","html_url":"https://github.com/torlando-tech/ble-reticulum","commit_stats":null,"previous_names":["torlando-tech/ble-reticulum"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/torlando-tech/ble-reticulum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/torlando-tech%2Fble-reticulum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/torlando-tech%2Fble-reticulum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/torlando-tech%2Fble-reticulum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/torlando-tech%2Fble-reticulum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/torlando-tech","download_url":"https://codeload.github.com/torlando-tech/ble-reticulum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/torlando-tech%2Fble-reticulum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29438641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T05:24:35.651Z","status":"ssl_error","status_checked_at":"2026-02-14T05:24:34.830Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","mesh-networks","off-grid","privacy","reticulum","rns"],"created_at":"2026-01-25T15:00:30.108Z","updated_at":"2026-02-14T06:00:39.099Z","avatar_url":"https://github.com/torlando-tech.png","language":"Python","funding_links":["https://ko-fi.com/torlandotech","https://ko-fi.com/B0B51NFT1Z"],"categories":["Transports and Network Interfaces"],"sub_categories":[],"readme":"# Reticulum BLE Interface\n\nA Bluetooth Low Energy (BLE) interface for [Reticulum Network Stack](https://reticulum.network), enabling mesh networking over BLE without additional hardware on Linux devices.\n\n**⚠️ Platform**: Linux-only (requires BlueZ 5.x for GATT server functionality)\n**✅ Tested on**: Raspberry Pi Zero W\n\n## Features\n\n- **Zero dongle requirements**: Works with built-in BLE radios (Raspberry Pi, Linux laptops, etc.)\n- **Auto-discovery**: Automatically finds and connects to nearby Reticulum BLE nodes\n- **Multi-peer mesh**: Supports up to 7 simultaneous connections for mesh networking (may support more, untested)\n- **Dual mode operation**: Acts as both central (scanner/client) and peripheral (advertiser/server)\n- **Connection prioritization**: RSSI-based smart peer selection with connection history tracking\n- **Packet fragmentation**: Handles BLE MTU limitations (20-512 bytes) transparently\n- **Enhanced error handling**: Retry logic, exponential backoff, connection recovery\n- **Power management**: Three power modes (aggressive/balanced/saver) for battery efficiency or CPU limitations. Saver mode tested on Raspberry Pi Zero W.\n\n## Installation\n\n**Prerequisites:**\n- Python 3.8 or higher\n- Reticulum Network Stack already installed ([installation guide](https://reticulum.network))\n- Linux with BlueZ 5.x\n\n### Option A: Automated Installation (Recommended)\n\nThe installation script automatically detects your Reticulum setup and installs dependencies in the correct environment:\n\n```bash\n# Download and run installer\ngit clone https://github.com/torlando-tech/ble-reticulum.git\ncd ble-reticulum\nchmod +x install.sh\n./install.sh\n\n# For custom config directory:\n# ./install.sh --config /path/to/custom/config\n```\n\nThe script will:\n1. ✓ Detect if Reticulum is in a venv, pipx, or system-wide\n2. ✓ Install system dependencies (BlueZ, dbus, build tools if needed)\n3. ✓ Install Python packages in the correct environment (via pipx inject if needed)\n4. ✓ Copy BLE interface files to `~/.reticulum/interfaces/` (or custom config directory if specified)\n5. ✓ Enable BlueZ experimental mode (required for proper BLE connectivity)\n6. ✓ Optionally set up Bluetooth permissions\n\n**BlueZ Experimental Mode**: The installer automatically enables BlueZ experimental mode, which is required for proper BLE connectivity. This allows the BLE interface to use LE-specific connection methods instead of defaulting to Classic Bluetooth (BR/EDR), preventing connection errors like \"br-connection-profile-unavailable\".\n\nTo skip this configuration (not recommended):\n```bash\n./install.sh --skip-experimental\n```\n\n**Pi Zero W Optimization**: The installer automatically detects Raspberry Pi Zero W (32-bit ARM with Python 3.13) and downloads pre-built wheels for packages with C extensions. This saves ~20 minutes of compilation time compared to building from source. See [Pre-built Wheels](#pre-built-wheels-for-raspberry-pi-zero-w) for details.\n\n### Option B: Manual Installation\n\n#### 1. Install System Dependencies\n\n**Debian/Ubuntu/Raspberry Pi OS:**\n```bash\nsudo apt-get update\nsudo apt-get install python3-pip python3-gi python3-dbus python3-cairo bluez\n```\n\n**Arch Linux:**\n```bash\nsudo pacman -S base-devel gobject-introspection python-pip python-dbus python-cairo bluez bluez-utils\n```\n\n**Why these packages?**\n- `base-devel`: Build tools (gcc, make, meson) required for compiling PyGObject\n- `gobject-introspection`: Development files for GObject introspection (required for PyGObject compilation)\n- `python-dbus`: D-Bus Python bindings for BlueZ communication\n- `python-cairo`: Cairo graphics library\n- `bluez` / `bluez-utils`: Bluetooth stack and utilities for Linux\n\n**Note for Arch users:** PyGObject is intentionally NOT installed as a system package on Arch due to version incompatibility (Arch has 3.54.5, but bluezero requires \u003c3.52.0). Instead, pip will compile the compatible PyGObject version (3.50.2) during installation. This adds ~2 minutes to installation time but ensures compatibility.\n\n#### 2. Install Python Dependencies\n\n**IMPORTANT:** Install in the same environment as Reticulum!\n\nSince we installed system packages for PyGObject, dbus-python, and pycairo in step 1, we only need to install the pure-Python packages:\n\n**If Reticulum is in a virtual environment:**\n```bash\n# Activate the same venv where Reticulum is installed\nsource /path/to/reticulum-venv/bin/activate\npip install bleak==1.1.1 bluezero\n```\n\n**If Reticulum is installed system-wide:**\n```bash\n# Install system-wide (may need sudo)\npip install bleak==1.1.1 bluezero\n# OR\nsudo pip install bleak==1.1.1 bluezero\n```\n\n**Note:** The system packages (python3-gi, python3-dbus, python3-cairo) provide PyGObject, dbus-python, and pycairo, eliminating the need for lengthy compilation from source.\n\n#### 3. Copy BLE Interface Files\n\n```bash\n# Copy to Reticulum's interface directory\nmkdir -p ~/.reticulum/interfaces\ncp src/RNS/Interfaces/BLE*.py ~/.reticulum/interfaces/\n```\n\n#### 4. Enable BlueZ Experimental Mode (Required)\n\nBlueZ experimental mode is required for proper BLE connectivity. Without it, BlueZ may attempt Classic Bluetooth (BR/EDR) connections instead of BLE (LE) connections, causing connection failures.\n\nEnable experimental mode (BlueZ \u003e= 5.49):\n```bash\nsudo systemctl edit bluetooth\n```\n\nAdd these lines:\n```\n[Service]\nExecStart=\nExecStart=/usr/lib/bluetooth/bluetoothd -E\n```\n\nSave and restart Bluetooth:\n```bash\nsudo systemctl daemon-reload\nsudo systemctl restart bluetooth\n```\n\nVerify it's enabled:\n```bash\nps aux | grep bluetoothd\n# Should show: /usr/lib/bluetooth/bluetoothd -E\n```\n\n#### 5. Grant Bluetooth Permissions\n\nFor non-root operation:\n```bash\nsudo setcap 'cap_net_raw,cap_net_admin+eip' $(which python3)\n```\n\n**Note:** If Reticulum is in a venv, grant permissions to that Python:\n```bash\nsudo setcap 'cap_net_raw,cap_net_admin+eip' /path/to/venv/bin/python3\n```\n\n### Option C: pipx Installation (RNS installed via pipx)\n\nIf you installed Reticulum via `pipx install rns`, the BLE interface requires additional setup because pipx creates isolated virtual environments that cannot access system-installed packages.\n\n**Note:** The automated installation script (Option A: `./install.sh`) now detects and handles pipx installations automatically. The instructions below are for manual installation or troubleshooting.\n\n#### 1. Install System Dependencies\n\n**Arch Linux:**\n```bash\nsudo pacman -S base-devel gobject-introspection python-dbus python-cairo bluez bluez-utils\n```\n\n**Debian/Ubuntu/Raspberry Pi OS:**\n```bash\nsudo apt-get update\nsudo apt-get install build-essential python3-dev python3-gi python3-dbus python3-cairo bluez libdbus-1-dev\n```\n\n#### 2. Inject BLE Dependencies into pipx Environment\n\nBecause pipx creates isolated environments, you must inject the BLE dependencies into the RNS environment:\n\n```bash\n# Inject BLE dependencies into pipx RNS environment\npipx inject rns bleak==1.1.1 bluezero dbus-python\n```\n\n**Note:** This will compile `dbus-python` from source, which requires the system development libraries installed in step 1.\n\n#### 3. Copy BLE Interface Files\n\n```bash\n# Copy to Reticulum's interface directory\nmkdir -p ~/.reticulum/interfaces\ncp src/RNS/Interfaces/BLE*.py ~/.reticulum/interfaces/\n```\n\n#### 4. Grant Bluetooth Permissions\n\nFind the Python executable used by pipx for RNS:\n\n```bash\n# Find pipx RNS Python path\nPIPX_RNS_PYTHON=$(pipx runpip rns show rns | grep Location | awk '{print $2}' | sed 's/lib\\/python.*/bin\\/python3/')\n\n# Grant capabilities\nsudo setcap 'cap_net_raw,cap_net_admin+eip' \"$PIPX_RNS_PYTHON\"\n```\n\nAlternatively, find the path manually:\n```bash\n# List pipx environments\nls ~/.local/pipx/venvs/\n\n# Grant capabilities to the rns venv Python\nsudo setcap 'cap_net_raw,cap_net_admin+eip' ~/.local/pipx/venvs/rns/bin/python3\n```\n\n#### 5. Configure BlueZ\n\nThe BLE interface requires BlueZ experimental features and automatic pairing configuration:\n\n**Enable Experimental Mode:**\n\n```bash\n# Edit BlueZ service configuration\nsudo systemctl edit bluetooth.service\n```\n\nAdd the following content:\n```ini\n[Service]\nExecStart=\nExecStart=/usr/lib/bluetooth/bluetoothd --experimental\n```\n\n**Enable JustWorksRepairing for Automatic Pairing:**\n\nEdit `/etc/bluetooth/main.conf` and add to the `[General]` section:\n\n```ini\n[General]\nJustWorksRepairing = always\n```\n\nThis enables automatic pairing for peer-initiated connections, which is required for zero-touch mesh networking. Reticulum provides its own cryptographic security on top of the BLE transport.\n\n**Apply Changes:**\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl restart bluetooth.service\n\n# Verify experimental mode is enabled\nsystemctl status bluetooth.service | grep -i experimental\n\n# Verify JustWorksRepairing is set\ngrep JustWorksRepairing /etc/bluetooth/main.conf\n```\n\n#### Why pipx Requires Special Handling\n\npipx creates isolated virtual environments with `--no-site-packages` to prevent package conflicts. This means:\n- System packages like `python-dbus` (installed via apt/pacman) are not accessible\n- `dbus-python` must be compiled from source within the pipx environment\n- `pipx inject` installs packages directly into RNS's isolated environment\n\nThis isolation is intentional and prevents conflicts, but requires the extra injection step for system-dependent packages like `dbus-python`.\n\n## Quick Start\n\n### 1. Configure Reticulum\n\nAdd the BLE interface to your Reticulum configuration (`~/.reticulum/config`):\n\n```toml\n[[BLE Interface]]\n  type = BLEInterface\n  enabled = yes\n\n  # Optional: set short device name (max 8 chars recommended, default: none)\n  # device_name = RNS\n```\n\nFor detailed configuration options, see [`examples/config_example.toml`](examples/config_example.toml).\n\n**Custom Config Directory**: If you use a custom Reticulum config directory with `--config`, the BLE interface will automatically use that directory to find its companion modules. No additional configuration needed!\n\n### 2. Start Reticulum\n\n```bash\nrnsd --verbose\n```\n\nThe interface will:\n1. Start advertising as a peripheral (if enabled)\n2. Scan for nearby BLE peers\n3. Automatically connect to discovered peers\n4. Form a mesh network with other BLE nodes\n\n### 3. Verify Operation\n\n```bash\n# Check interface status\nrnstatus\n\n# Monitor announces\nrnid -a\n```\n\n## Configuration\n\nThe BLE interface supports extensive configuration options. See [`examples/config_example.toml`](examples/config_example.toml) for a fully documented example with all available options.\n\n### Key Configuration Options\n\n- **`device_name`**: Optional BLE device name (default: none, keep short if used, max 8 chars recommended)\n- **`service_uuid`**: BLE service UUID (must match on all devices)\n- **`enable_peripheral`**: Accept incoming connections (default: yes)\n- **`enable_central`**: Scan and connect to peers (default: yes)\n- **`discovery_interval`**: How often to scan for new peers (default: 5.0 seconds)\n- **`max_connections`**: Maximum simultaneous connections (default: 7)\n- **`min_rssi`**: Minimum signal strength in dBm (default: -85)\n- **`power_mode`**: Power management (aggressive/balanced/saver)\n\n## Testing\n\nFor detailed testing information, see [TESTING.md](TESTING.md).\n\nQuick test using example script (no BLE hardware required):\n```bash\ncd examples\npython ble_minimal_test.py test\n```\n\n## Troubleshooting\n\n### No peers discovered\n- Verify Bluetooth is enabled: `bluetoothctl show`\n- Check `service_uuid` matches on all devices\n- Try `power_mode = aggressive` for faster discovery\n- Increase `min_rssi` to -90 for longer range\n\n### Connection timeouts\n- Increase `connection_timeout` to 60\n- Reduce `max_connections` to 3-5\n- Check for BLE/WiFi interference (both use 2.4 GHz)\n- Verify peer is within range (typically 10-30m)\n- If logs show \"Operation already in progress\" errors, this is handled automatically in v2.2.1+ with connection state tracking and rate limiting (see [BLE_PROTOCOL_v2.2.md](BLE_PROTOCOL_v2.2.md) § Troubleshooting for details)\n\n### GATT server failed to start\n- Ensure BlueZ 5.x is installed: `bluetoothd --version`\n- Check Bluetooth permissions (see Installation → Manual Installation → step 4)\n- Try `sudo rnsd` temporarily to verify (not recommended for production)\n- Set `enable_peripheral = no` to disable peripheral mode\n\n### Permission denied errors\n- Grant capabilities to Python (see Installation → Manual Installation → step 5)\n- Or run with sudo: `sudo rnsd` (not recommended)\n\n### BR/EDR connection errors (br-connection-profile-unavailable, ProfileUnavailable)\nThese errors occur when BlueZ attempts Classic Bluetooth (BR/EDR) connections instead of BLE (LE) connections. This is the most common BLE connection issue.\n\n**Symptoms:**\n- Devices connect then immediately disconnect\n- Errors: \"br-connection-profile-unavailable\", \"ProfileUnavailable\"\n- \"ConnectDevice() unavailable\" in logs\n- Devices get blacklisted after multiple failures\n\n**Solution:**\nEnable BlueZ experimental mode (see Installation → Manual Installation → step 4). If you used the automated installer, re-run it without `--skip-experimental`.\n\n### BLE pairing failures / \"JustWorksRepairing: never\" warning\nThe BLE interface logs a warning that BlueZ's JustWorksRepairing is set to \"never\", which may cause pairing failures in the mesh network.\n\n**Symptoms:**\n- Warning: `BlueZ JustWorksRepairing: never (default - may cause pairing failures)`\n- Recommendation message: `Set JustWorksRepairing=always in /etc/bluetooth/main.conf`\n- Intermittent connection failures with peer devices\n- Pairing requests rejected by BlueZ\n\n**Cause:**\nBlueZ's default `JustWorksRepairing` setting is \"never\", which blocks automatic pairing for peer-initiated connections. This breaks zero-touch mesh networking.\n\n**Solution:**\nEnable JustWorksRepairing in BlueZ configuration (see Installation → Manual Installation → step 5). If you used the automated installer, this is configured automatically. To verify or fix manually:\n\n```bash\n# Edit BlueZ configuration\nsudo nano /etc/bluetooth/main.conf\n\n# Add to [General] section:\nJustWorksRepairing = always\n\n# Restart Bluetooth service\nsudo systemctl restart bluetooth\n\n# Verify the setting\ngrep JustWorksRepairing /etc/bluetooth/main.conf\n```\n\n**Note:** Just Works pairing provides unauthenticated BLE encryption. This is acceptable because Reticulum provides its own cryptographic security on top of the BLE transport layer.\n\n### Bluetooth adapter not powered / \"No powered Bluetooth adapters found\"\nThe Bluetooth adapter exists but is powered off, preventing BLE operations.\n\n**Symptoms:**\n- Error: `dbus.exceptions.DBusException: org.bluez.Error.Failed: Not Powered`\n- Error: `BleakError: No powered Bluetooth adapters found.`\n- BLE interface fails to start or discover peers\n- GATT server startup fails immediately\n\n**Cause:**\nThe Bluetooth adapter is in a powered-off state. This commonly happens on Raspberry Pi after boot or system updates.\n\n**Solution:**\nPower on the Bluetooth adapter:\n\n```bash\n# Option 1: Using bluetoothctl (recommended)\nbluetoothctl power on\n\n# Option 2: If adapter is RF-blocked\nsudo rfkill unblock bluetooth\n\n# Option 3: Using hciconfig (older systems)\nsudo hciconfig hci0 up\n\n# Verify adapter is powered:\nbluetoothctl show\n# Should display \"Powered: yes\"\n```\n\n**Automatic power-on at boot:**\nEnsure Bluetooth service is enabled and starts at boot:\n\n```bash\n# Enable Bluetooth service\nsudo systemctl enable bluetooth\nsudo systemctl start bluetooth\n\n# For persistent power-on, create a systemd service:\n# See examples/bluetooth-power-on.service\n```\n\nThe automated installer (v1.x+) automatically checks and powers on the Bluetooth adapter during installation.\n\n### pipx: ModuleNotFoundError for dbus, gi, or bluezero\nIf you installed RNS via pipx and get import errors like `ModuleNotFoundError: No module named 'dbus'`, `No module named 'gi'`, or `No module named 'bluezero'`:\n\n**Cause:** pipx creates isolated environments that don't access system packages.\n\n**Solution:** Follow the [pipx installation instructions](#option-c-pipx-installation-rns-installed-via-pipx) to inject the required dependencies:\n```bash\npipx inject rns bleak==1.1.1 bluezero dbus-python\n```\n\n**Verification:** Test if the modules are accessible:\n```bash\npipx run rns python3 -c \"import dbus, gi, bleak, bluezero; print('All modules found')\"\n```\n## Architecture\n\nThe BLE interface consists of four main components:\n\n- **`BLEInterface.py`**: Main interface implementation, handles discovery and connections\n- **`BLEGATTServer.py`**: GATT server for peripheral mode (accepting connections)\n- **`BLEFragmentation.py`**: Packet fragmentation/reassembly for BLE MTU limits\n- **`BLEAgent.py`**: Per-peer connection management\n\n## Development Setup\n\nFor contributors and developers who want to work on the BLE interface code itself.\n\n**Note:** This setup is different from the production installation above. Use a virtual environment for development to avoid conflicts.\n\n```bash\n# Clone repository\ngit clone https://github.com/torlando-tech/ble-reticulum.git\ncd ble-reticulum\n\n# Create and activate virtual environment\npython3 -m venv venv\nsource venv/bin/activate\n\n# Install RNS (required for tests)\npip install rns\n\n# Install all dependencies (runtime + development + testing)\npip install -r requirements-dev.txt\n\n# Create package structure for tests\ntouch src/RNS/__init__.py\ntouch src/RNS/Interfaces/__init__.py\n\n# Run tests\npytest\n\n# Run tests with coverage\npytest --cov=src/RNS/Interfaces --cov-report=html\n```\n\nFor detailed development and testing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md) and [TESTING.md](TESTING.md).\n\n## Pre-built Wheels for Raspberry Pi Zero W\n\nTo speed up installation on 32-bit ARM devices (Raspberry Pi Zero W, Pi 1, Pi 2), we provide pre-built wheels for packages with C extensions that would otherwise require lengthy compilation from source.\n\n### Automatic Installation\n\nThe `install.sh` script **automatically detects** 32-bit ARM architecture with Python 3.13 and downloads pre-built wheels from [GitHub Releases](https://github.com/torlando-tech/ble-reticulum/releases/tag/armv6l-wheels-v1).\n\n**Time savings:** ~20 minutes on Pi Zero W (avoids compiling C extensions)\n\n### Available Wheels\n\n| Package | Version | Python | Architecture | Size |\n|---------|---------|--------|--------------|------|\n| dbus_fast | 2.44.5 | 3.13 | ARMv6l | 874KB |\n\n### Manual Installation\n\nIf you need to install wheels manually (e.g., in a custom Python environment):\n\n```bash\n# Download the wheel\nwget https://github.com/torlando-tech/ble-reticulum/releases/download/armv6l-wheels-v1/dbus_fast-2.44.5-cp313-cp313-linux_armv6l.whl\n\n# Install it\npip install dbus_fast-2.44.5-cp313-cp313-linux_armv6l.whl\n```\n\n### Building Your Own Wheels\n\nIf you need to build wheels for a different Python version on 32-bit ARM:\n\n```bash\n# Install build dependencies\nsudo apt-get install python3-dev libdbus-1-dev pkg-config\n\n# Build the wheel\npip wheel dbus_fast==2.44.5\n\n# The wheel will be saved in the current directory\n# You can then share it or install it on other devices\n```\n\n### Why Pre-built Wheels?\n\nPython packages with C extensions (like `dbus_fast`) must be compiled from source when installing via pip if no compatible wheel is available on PyPI. On low-powered devices like the Pi Zero W:\n\n- **Without pre-built wheel:** 15-30 minutes of compilation\n- **With pre-built wheel:** \u003c 10 seconds download and install\n\nThe automated installer makes this transparent - it \"just works\" faster on supported platforms.\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for:\n- Code style guidelines\n- Pull request process\n- Bug report templates\n- Feature request guidelines\n\n## Supporting\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/B0B51NFT1Z)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- [Reticulum Network Stack](https://reticulum.network) by Mark Qvist\n- Built using [bleak](https://github.com/hbldh/bleak) for BLE central operations\n- Built using [bluezero](https://github.com/ukBaz/python-bluezero) for GATT server\n\n## Links\n\n- [Reticulum Network Stack](https://reticulum.network)\n- [Reticulum Documentation](https://markqvist.github.io/Reticulum/manual/)\n- [Reticulum GitHub](https://github.com/markqvist/Reticulum)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftorlando-tech%2Fble-reticulum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftorlando-tech%2Fble-reticulum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftorlando-tech%2Fble-reticulum/lists"}