An Elitech temperature logger without the manufacturer's software
I bought an Elitech RC-5 USB temperature logger. It is a small cheap box with a button, a screen and a USB plug. The normal route is to go to Elitech’s site, download ElitechLog and install it on Windows. I didn’t bother to look. I plugged it into my Linux machine and started writing the software myself.
Now that I am writing the post I am actually looking at the site and there is no Linux software so it wasn’t quite as stupid as I thought.
A year or two ago that would have been a silly way to spend a n hour or so. Now it is quicker than reading the manual.
What the box is
lsusb says 246c:9001. It turns up as a USB mass storage device and a HID
device. The HID side is where the data is: 64 byte reports, a frame with a
command, an address and a length, and a flat parameter space holding the clock,
sampling interval, start and stop modes and the records.
Claude turned up two projects that had already done the hard part: elitech-hid-webui, which reverse engineered the flows from the Windows program and tested them on the same hardware, and python-elitech for the earlier models. So the first step was to distil those into a single protocol reference, cross-checked between the two, with the unknowns marked as unknowns.
Writing it
With the protocol written down, Claude and I wrote
go-elite-log in an hour or so.
It is pure Go with no cgo and talks to /dev/hidrawN directly. There is a
CLI (elitelog info, records, start, stop) and a
lofigui web UI with a device page, a
records page with charts, and a monitor page that refreshes every five seconds.

Most of the protocol was tested against a fake logger first, with worked frames from the reference as test vectors, then against the real thing.
Where the reference was wrong
The fun part was the freezer. I put the logger in the freezer to get some negative temperatures and the records came back as nonsense. The records encode temperature in tenths of a degree, and the sign is bit 12, not bit 15:
| Bytes | Temperature |
|---|---|
00 01 | 0.1 |
10 05 | -0.5 |
10 0B | -1.1 |
The live status reading uses bit 15 (80 BC is -18.8), so the same device uses
two different conventions for negative numbers. Nobody had written that down
because nobody had tested it below zero. That is the bit of reverse
engineering that was actually mine, and it took a freezer rather than a
disassembler.
Problems
The logger doesn’t record while it is plugged in over USB. Save the settings, unplug it and hold the button for ten seconds. Also you need a udev rule to get at the hidraw node without root.
What’s the point
I now have a logger that works on Linux, charts in a browser, CSV export, and a protocol document that anyone can read.
Tomorrow the engineer is going to arrive as to why my Freezer is not working well and I will have some real data to show. The world is changing fast.
This is partly written by claude and partly by me.