Hubble Network IoT device tools and testing frameworks
npx claudepluginhub hubblenetwork/pyhubblenetworkPython SDK and CLI for communicating with Hubble Network IoT devices over Bluetooth Low Energy (BLE)
Claude Code marketplace entries for the plugin-safe Antigravity Awesome Skills library and its compatible editorial bundles.
Production-ready workflow orchestration with 79 focused plugins, 184 specialized agents, and 150 skills - optimized for granular installation and minimal token usage
Agent skills for building and maintaining promptfoo evaluations
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.
pip install pyhubblenetworkble.scan()):
bluetooth group).sat.scan()):
pip install pyhubblenetwork
# or install CLI into an isolated environment:
pipx install pyhubblenetwork
From the repo root (recommended):
cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
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")
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))
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")
from hubblenetwork import sat
# sat.scan() manages the Docker container automatically:
# pulls the image, starts the container, polls for packets, and stops on exit.
for pkt in sat.scan(timeout=60.0):
print(f"device={pkt.device_id} seq={pkt.seq_num} rssi={pkt.rssi_dB} dB payload={pkt.payload.hex()}")
Docker must be running before calling sat.scan(). The PlutoSDR dongle must be connected.
If installed, the hubblenetwork command is available:
hubblenetwork --help
hubblenetwork ble scan
hubblenetwork ble scan --payload-format hex
hubblenetwork org get-packets --payload-format string
Commands that output packet data (ble scan, ble detect, org get-packets) support the --payload-format flag to control how payloads are displayed:
base64 (default) — encode payloads as base64hex — display payloads as hexadecimalstring — decode payloads as UTF-8 text (falls back to <invalid UTF-8> if bytes are not valid UTF-8)This applies to all output formats (tabular, json, csv).