No description
  • HTML 68.8%
  • Python 31.2%
Find a file
nunim db65654edc Aura: drop dead CSV columns, add live session log table + graph persistence
- 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.
2026-08-24 08:05:55 +00:00
aura Aura: drop dead CSV columns, add live session log table + graph persistence 2026-08-24 08:05:55 +00:00
lumen Lumen: housekeeping pass + README 2026-08-24 06:24:48 +00:00
onyx Onyx/Tare: consistency pass to match the other three tools 2026-08-24 06:31:27 +00:00
tasi Repo reorg: give Lumen and Vane their own folders, fix filename bug 2026-08-24 06:21:04 +00:00
vane Vane: housekeeping pass + README 2026-08-24 06:28:42 +00:00
.gitignore Repo reorg: give Lumen and Vane their own folders, fix filename bug 2026-08-24 06:21:04 +00:00
README.md Add root README indexing the whole repo 2026-08-24 06:32:33 +00:00

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.html per device — no build step, no server, no account. Open it via file:// 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 in tasi/. 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.