Show HN: Benlink – Control Benshi Radios (e.g. BTech UV-Pro) with Python (github.com)

3 points by khusmann ↗ HN
Hi HN, longtime lurker, first-time poster!

I’m excited to share benlink, a project for reverse-engineering the Bluetooth (BLE & RFCOMM) protocol used by Benshi radios—including the BTech UV-PRO, Vero VR-N7500, and others. It provides:

- A documented implementation of the Benshi Bluetooth protocol in Python

- A cross-platform async Python API for easy integration into new projects

I hope this inspires more folks to build cool apps! One project, HTCommander ([1]), has already reimplemented the Benshi protocol in C# and is building an awesome APRS/WinLink messaging app. If anyone is looking for a fun frontend project, benlink would be a perfect backend for cross-platform Web UI for Benshi radios. I'd also love to see Benshi radios supported in an alternative backend for the KV4P-HT Android app ([2]).

One part I'm particularly proud of: I built a bitfield serialization system inspired by Pydantic and parser combinators. It lets you define bitfields as Python classes with declarative types which automatically handle serialization/deserialization (e.g. [3]). It's super composable but still works within the limits of Python's type hinting system. If there's interest, I might spin this off into a standalone library.

Lastly, I’m proud to have actually shipped a working, documented project! Too often, I start things and never publish them—Benlink is me turning over a new leaf.

Would love your thoughts, feedback, or ideas for where to take this next!

[1] https://github.com/Ylianst/HTCommander

[2] https://github.com/VanceVagell/kv4p-ht

[3] https://github.com/khusmann/benlink/blob/main/src/benlink/pr...

1 comment

[ 0.83 ms ] story [ 12.5 ms ] thread
This is really cool! Thanks for making it. I'm going to try it out today with my UV-PRO. I'd be curious to learn how you go about reversing the protocol. That'd make a really interesting blog post.