Hi, I've been maintaining a macOS fork of this project and wanted to share some findings that might be useful upstream.
Finding
Through hardware testing, the Z407 has confirmed step limits:
- Volume: 32 steps total (range 0–32; the speaker beeps when you reach the maximum)
- Bass: 15 steps total (range 0–15)
The current percentage-based estimate drifts over time and doesn't reflect the real hardware state.
How to track it
The BLE notification characteristic already sends confirmation bytes after each command. You can listen in _receive_data and increment/decrement counters accordingly:
| Byte sequence |
Meaning |
c0 02 |
Volume up confirmed |
c0 03 |
Volume down confirmed |
c0 00 |
Bass up confirmed |
c0 01 |
Bass down confirmed |
d4 00 03 |
Speaker connected |
Tracking these lets you display a real step counter instead of an estimate. A Calibrate function (send vol_down × 37 + bass_down × 20 to drive both to zero) can anchor the counter at startup.
I've implemented this in the macOS fork if you want to reference the code:
https://github.com/LCY000/Logitech-Z407-Remote-Control-Web-App---MacOS
Hope this helps. Happy to answer any questions.
Hi, I've been maintaining a macOS fork of this project and wanted to share some findings that might be useful upstream.
Finding
Through hardware testing, the Z407 has confirmed step limits:
The current percentage-based estimate drifts over time and doesn't reflect the real hardware state.
How to track it
The BLE notification characteristic already sends confirmation bytes after each command. You can listen in
_receive_dataand increment/decrement counters accordingly:c0 02c0 03c0 00c0 01d4 00 03Tracking these lets you display a real step counter instead of an estimate. A Calibrate function (send vol_down × 37 + bass_down × 20 to drive both to zero) can anchor the counter at startup.
I've implemented this in the macOS fork if you want to reference the code:
https://github.com/LCY000/Logitech-Z407-Remote-Control-Web-App---MacOS
Hope this helps. Happy to answer any questions.