Skip to main content

Astro A50 base station HID stats client

Project description

Hyperheadset

PyPI Python License

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.1.tar.gz (9.3 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.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hyperheadset-0.1.1.tar.gz
  • Upload date:
  • Size: 9.3 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.1.tar.gz
Algorithm Hash digest
SHA256 e6725776652126e20da576f6f95eadd8c03edf8cbaa51b2baa4b687327d9d371
MD5 947dc1848809beeff5d9168b8bc09fe2
BLAKE2b-256 d03e2a86cf212a9647c676573317f4c6ccaa13f3b3371a3e643909af0e6eedba

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperheadset-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: hyperheadset-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5c07095b9e739236c5cbf70c94d589e87f137c6fc08719030476c29ff0aa3c00
MD5 457b2658abba1796ef20759d26c79632
BLAKE2b-256 29c8ca33e861e5390547d38292ddcdabc245f1a609426beef54143076aba967c

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperheadset-0.1.1-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