A Bluetooth logger for the Venty
The Storz & Bickel Venty can only be inspected through its official web app, over Web Bluetooth, and it keeps no history. I wanted to know how much I use it per day. So I built a logger.
What it does
It captures everything the device exposes over Bluetooth LE: current and target temperature, boost, battery, charger, total minutes of use, firmware and settings. It stores it in SQLite and shows it as a daily usage calendar.
Stack
- PC: pure Python on top of BlueZ via D-Bus (Gio/GLib), no dependencies, running as a
systemd --userdaemon. A tiny standard-library HTTP server serves the calendar (plain HTML and JS) and receives the phone’s sync. - Android: a native Kotlin app with zero external libraries, no appcompat, no Room. 65 KB release APK, about 250 ms startup, with heater and temperature control.
Status
Connection, full decoding, session logging, the unified calendar and phone-to-PC sync all work. Still to do: test the control buttons in real use and, maybe, a foreground service so the phone keeps logging with the app closed.
Lessons
- The protocol came from reading the official web app’s JavaScript. It already had the byte offsets. It’s a single GATT write+notify characteristic with the command in byte 0.
- Chrome on Linux ships with Web Bluetooth disabled. The “unsupported browser” error was
chrome://flags/#enable-web-bluetooth, not the distro. - The Venty accepts a single BLE client. PC and phone coexist by giving the phone a 15-second head start and merging the data on the PC.
- The USB-C port is charge-only. Even firmware updates go over Bluetooth.