Skip to main content

Hubble SDK host-side tools

Project description

pyhubblenetwork

PyPI Python License

pyhubblenetwork is a Python SDK for communicating with Hubble Network devices over Bluetooth Low Energy (BLE) and securely relaying data to the Hubble Cloud. It provides a simple API for scanning, sending, and managing devices—no embedded firmware knowledge required.

Table of contents

Quick links

Requirements & supported platforms

  • Python 3.9+ (3.11/3.12 recommended)
  • BLE platform prerequisites (only needed if you use ble.scan()):
    • macOS: CoreBluetooth; run in a regular user session (GUI).
    • Linux: BlueZ required; user must have permission to access the BLE adapter (often bluetooth group).
    • Windows: Requires a compatible BLE stack/adapter.

Installation

Users (stable release)

pip install pyhubblenetwork
# or install CLI into an isolated environment:
pipx install pyhubblenetwork

Developers (editable install)

From the repo root (recommended):

cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'

Quick start

Scan locally, then ingest to backend

from hubblenetwork import ble, Organization

org = Organization(org_id="org_123", api_token="sk_XXX")
pkts = ble.scan(timeout=5.0)
if len(pkts) > 0:
    org.ingest_packet(pkts[0])
else:
    print("No packet seen within timeout")

Manage devices and query packets

from hubblenetwork import Organization

org = Organization(org_id="org_123", api_token="sk_XXX")

# Create a new device
new_dev = org.register_device()
print("new device id:", new_dev.id)

# List devices
for d in org.list_devices():
    print(d.id, d.name)

# Get packets from a device (returns a list of DecryptedPacket)
packets = org.retrieve_packets(new_dev)
if len(packets) > 0:
    print("latest RSSI:", packets[0].rssi, "payload bytes:", len(packets[0].payload))

Local decryption (when you have the key)

from hubblenetwork import Device, ble, decrypt
from typing import Optional

dev = Device(id="dev_abc", key=b"<secret-key>")

pkts = ble.scan(timeout=5.0)  # might return a list or a single packet depending on API
for pkt in pkts:
    maybe_dec = decrypt(dev.key, pkt)
    if maybe_dec:
        print("payload:", maybe_dec.payload)
    else:
        print("failed to decrypt packet")

CLI usage (optional)

If installed, the hubblenetwork command is available:

hubblenetwork --help
hubblenetwork ble scan

Configuration

Some functions read defaults from environment variables if not provided explicitly. Suggested variables:

  • HUBBLE_ORG_ID — default organization id
  • HUBBLE_API_TOKEN — API token (base64 encoded)

Example:

export HUBBLE_ORG_ID=org_123
export HUBBLE_API_TOKEN=sk_XXXX

You can also pass org ID and API token into API calls.

Public API (summary)

Import from the package top-level for a stable surface:

from hubblenetwork import (
    ble, cloud,
    Organization, Device, Credentials, Environment,
    EncryptedPacket, DecryptedPacket, Location,
    decrypt, InvalidCredentialsError,
)

Key objects & functions:

  • Organization provides credentials for performing cloud actions (e.g. registering devices, retrieving decrypted packets, retrieving devices, etc.)
  • EncryptedPacket a packet that has not been decrypted (can be decrypted locally given a key or ingested to the backend)
  • DecryptedPacket a packet that has been successfully decrypted either locally or by the backend.
  • Location data about where a packet was seen.
  • ble.scan function for locally scanning for devices with BLE.

See code for full details.

Development & tests

Set up a virtualenv and install dev deps:

cd python
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'

Run linters:

ruff check src

Troubleshooting

  • ble.scan() finds nothing: verify BLE permissions and adapter state; try increasing timeout.
  • Auth errors: confirm Organization(org_id, api_token) or env vars are set; check token scope/expiry.
  • Import errors: ensure you installed into the Python you’re running (python -m pip …). Prefer pipx for CLI-only usage.

Releases & versioning

  • Follows SemVer (MAJOR.MINOR.PATCH).
  • Tagged releases (e.g., v0.1.0) publish wheels/sdists to PyPI.
  • Release process: (add short steps for how to cut a release—tagging, CI release job, PyPI publish credentials).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyhubblenetwork-0.1.0.tar.gz (31.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyhubblenetwork-0.1.0-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file pyhubblenetwork-0.1.0.tar.gz.

File metadata

  • Download URL: pyhubblenetwork-0.1.0.tar.gz
  • Upload date:
  • Size: 31.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for pyhubblenetwork-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3b6fa6c4554c689e785e3add62af6492bf53d1323a9a00500d4d0d47437dd07f
MD5 2f770928ee4816ce48cbb64c409d7ce0
BLAKE2b-256 e45b09fbe53abf1a9473ffbf9ffab419b98e15f35f0c2bd7a323a8c8d35d79b9

See more details on using hashes here.

File details

Details for the file pyhubblenetwork-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyhubblenetwork-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d6115693b91a4e2bf01ad114f35a06b2bedfcd9b33b96fb9a90f334f7eb60338
MD5 4e7da969bd754406662f0afd49bd4bb4
BLAKE2b-256 57abb0830a8be5937dc11e36cf657c6bb36a9776f087b8d4a05e9dc0a8691f46

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page