Skip to main content

Astro A50 base station HID stats client

Project description

Hyperheadset

A small Python CLI and library for reading live status data from the Astro A50 base station over HID.

This started as a side project because I wanted to see battery %, dock state, and sidetone levels without running the official Astro software in the background. That turned into reverse-engineering the HID protocol... which turned into this.

It talks directly to the base station, parses the response frames, and exposes the useful bits in a clean way.


What it can do

Right now it focuses on reading states.

  • Read battery percentage + charging state
  • Detect whether the headset is docked / powered
  • Read sidetone slider values (active + saved)
  • Output as JSON (compact or pretty)
  • CSV logging
  • Watch mode (with change detection)
  • Filter specific fields (--fields)
  • List matching HID devices
  • Usable as both a CLI tool and a Python module

Install

Not on PyPI (yet).

Local install:

pip install .

Editable dev install:

pip install -e .

CLI Usage

Default snapshot:

hyperheadset

Some common flags:

  • Battery only → --battery
  • JSON output → --json
  • Pretty JSON → --json --p
  • Watch mode → --watch
  • Only show changes (watch mode) → --changes-only
  • List matching HID devices → --device-list

Examples

Watch only sidetone, and only print when it changes:

hyperheadset --fields sidetone --watch --changes-only

Log everything to CSV every 2 seconds:

hyperheadset --csv --watch --interval 2 > log.csv

Pretty JSON snapshot without timestamp:

hyperheadset --json --p --no-timestamp

Python Usage

You can also use it directly in code:

from hyperheadset import AstroA50Client, SliderType

client = AstroA50Client()

battery = client.getBatteryStatus()
print(battery.chargePercent, battery.isCharging)

sidetone = client.getSliderValue(SliderType.sidetone)
print(sidetone)

Snapshot helper:

snap = client.getSnapshot(battery=True, headset=True, sidetone=True)
print(snap)

Requirements

  • Python 3.10+
  • hidapi bindings (pip install hidapi)
  • Astro A50 base station connected over USB
  • OS must expose the device as a standard HID interface

If your OS doesn't see it as HID, this won't work. No custom drivers included here.

Scope (and what this is not)

This project focuses on:

  • Reading device state
  • Protocol framing
  • Simple query commands

It's not:

  • A replacement for the official Astro software
  • A firmware updater
  • An EQ editor

Write/set commands might be added later, but only after making sure they're safe. Bricking a headset is not on the roadmap.

Credits / Prior Work

Huge credit to the eh-fifty project by Tom Dryer.

That project documents and reverse-engineers large parts of the Astro A50 USB/HID protocol. I studied their research to understand the framing and command structure, then re-implemented what I needed in a smaller codebase focused purely on stats and queries.

No source code from eh-fifty is included here but their work made this possible.

If you want broader device coverage or deeper protocol exploration, definitely check that repository out.

License

MIT

Disclaimer

Not affiliated with or endorsed by Astro, Logitech, or the eh-fifty project authors.

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

hyperheadset-0.1.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

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

hyperheadset-0.1.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hyperheadset-0.1.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hyperheadset-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9f43106f3623a968cd4d0e10b77ef4a603a2da65fac4d94492e5b521f0c9eca6
MD5 efb0d4fee4eaebbfa534476e5062f8ba
BLAKE2b-256 89936844a8beb5f923d318d62f44d425d890cf5b1976decd8dea5be5d7e469b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperheadset-0.1.0.tar.gz:

Publisher: publish-pypi.yml on HyperRaccoon13/HyperHeadset

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: hyperheadset-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hyperheadset-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1e61e03e404a5ece82efbfa1adab2b768f858654b4d7bed511c7be77156adb2d
MD5 3116f33c492b5c82fb46acd2a2333662
BLAKE2b-256 a5b3ff92c4948338ac672be82d5a28d39a3bf3a9e34330c0524ee47f856297af

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperheadset-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on HyperRaccoon13/HyperHeadset

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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