- HTML 68.8%
- Python 31.2%
- Removed layout/extra_hex from the session CSV -- confirmed they've never once been populated on real hardware, so two permanently-blank columns weren't earning their place. An anomaly is now surfaced live instead (a row-level warning in the new log table, and the existing decoded-row warning under Advanced), where it'll actually get seen. - Added a paginated table of the full session log below the session controls, same pattern as the Download Memory table. Auto-follows the newest page like tail -f, unless you've paged back to look at something earlier -- re-pins to live once you page forward to the end again. - Session graph now survives a page reload: trace (capped at 300 samples) + stats are saved to localStorage on every update and restored on load, with a message pointing you to reconnect. The full log is deliberately NOT persisted this way -- it's unbounded, could exceed localStorage's ~5-10MB quota on a long session (exactly when losing it would hurt most), and file:// origin storage behaves inconsistently across browsers. Download CSV remains the durable save; documented the reasoning in a new "Local storage" README section so this isn't a mystery later. |
||
|---|---|---|
| aura | ||
| lumen | ||
| onyx | ||
| tasi | ||
| vane | ||
| .gitignore | ||
| README.md | ||
environmental-meters
Tools for reading cheap USB environmental/utility meters that don't ship with any Linux- or browser-friendly software of their own. Each device gets a single-file browser tool (WebHID or Web Serial, no install) and/or a Python CLI, reverse-engineered from real USB captures rather than trusted vendor documentation — several of the protocol docs turned out to have real errors, caught and documented along the way.
Devices
| Device | Browser tool | CLI | Interface | Status |
|---|---|---|---|---|
| TASI TA652B Sound Level Meter | aura/ |
tasi/tasi652b.py |
USB HID | Confirmed against real hardware |
| TASI TA632 Illuminance Meter | lumen/ |
tasi/tasi632b.py |
USB HID | Confirmed against real hardware |
| Stamps.com Model 510 USB Scale (Onyx and compatible rebrands) | onyx/ ("Tare") |
— | USB HID | Confirmed against real hardware |
| BT-856A / HP-856A Anemometer | vane/ |
— | USB serial | Checked against a known reference implementation, not independently confirmed against hardware in this repo |
Each folder's own README has the protocol details, confirmed behavior, known quirks, and usage instructions for that specific device.
How this works
- Browser tools are a single
index.htmlper device — no build step, no server, no account. Open it viafile://or serve the folder with any static file server. They talk to the device directly from the browser over WebHID (USB HID devices) or Web Serial (the anemometer), so they only work in Chrome, Edge, or Opera on desktop — Safari, Firefox, and mobile browsers don't support either API. Nothing leaves the browser: readings, session stats, and CSV/image exports all happen client-side. - CLI tools (where they exist) are single Python files —
pip install hidapi click, then run. Useful for scripting, logging to a file over a long session, or headless use. - The two TASI meters share one USB HID transport and command protocol
(see
tasi/REVERSE_ENGINEERING.md), so their CLIs and shared protocol docs live together intasi/. Each device's own browser tool is a peer-level top-level folder, named after the tool rather than the device (Aura, Lumen, Tare, Vane).
Getting started
Find your device in the table above and open its folder — each one is
self-contained with its own setup instructions. If you're on Linux and
using a TASI meter's CLI, tasi/README.md has the udev rule you'll need
to run it without sudo.
Contributing a new device
tasi/REVERSE_ENGINEERING.md documents the general approach used
throughout this repo: capture real USB traffic (Wireshark/usbmon or
similar) rather than trusting a vendor doc, size frames from the wire
rather than assumed constants, and label anything not independently
confirmed as such rather than implying more certainty than exists.