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+
hidapibindings (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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f43106f3623a968cd4d0e10b77ef4a603a2da65fac4d94492e5b521f0c9eca6
|
|
| MD5 |
efb0d4fee4eaebbfa534476e5062f8ba
|
|
| BLAKE2b-256 |
89936844a8beb5f923d318d62f44d425d890cf5b1976decd8dea5be5d7e469b9
|
Provenance
The following attestation bundles were made for hyperheadset-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on HyperRaccoon13/HyperHeadset
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hyperheadset-0.1.0.tar.gz -
Subject digest:
9f43106f3623a968cd4d0e10b77ef4a603a2da65fac4d94492e5b521f0c9eca6 - Sigstore transparency entry: 946896211
- Sigstore integration time:
-
Permalink:
HyperRaccoon13/HyperHeadset@6984240bf1c0384e8b11bc454e4c86ab22fac08c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HyperRaccoon13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6984240bf1c0384e8b11bc454e4c86ab22fac08c -
Trigger Event:
workflow_dispatch
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e61e03e404a5ece82efbfa1adab2b768f858654b4d7bed511c7be77156adb2d
|
|
| MD5 |
3116f33c492b5c82fb46acd2a2333662
|
|
| BLAKE2b-256 |
a5b3ff92c4948338ac672be82d5a28d39a3bf3a9e34330c0524ee47f856297af
|
Provenance
The following attestation bundles were made for hyperheadset-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on HyperRaccoon13/HyperHeadset
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hyperheadset-0.1.0-py3-none-any.whl -
Subject digest:
1e61e03e404a5ece82efbfa1adab2b768f858654b4d7bed511c7be77156adb2d - Sigstore transparency entry: 946896226
- Sigstore integration time:
-
Permalink:
HyperRaccoon13/HyperHeadset@6984240bf1c0384e8b11bc454e4c86ab22fac08c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HyperRaccoon13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6984240bf1c0384e8b11bc454e4c86ab22fac08c -
Trigger Event:
workflow_dispatch
-
Statement type: