I enjoy precisely measuring anything I possibly can. Electricity usage is no exception, so for a while I have been stewing over the idea of getting my old meter back up and running. I got an Extech EM100 for a science fair project around 2009, but in the intervening decade I did not keep track of the bundled software CD. The internet lost track of it as well: the only records of the EM100’s existence online are copies of the user’s manual and sold-out reseller pages. When I contacted Extech support, their reply was perhaps predictable:
“Unfortunately, the software for the EM100 is no longer available.”Teledyne Flir Customer Support
An interesting quirk of the EM100 is that it cannot address SD cards that have capacities greater than 2 GB. First I tried tricking it by formatting my existing SD cards with <2 GB file systems, but that didn’t help. So the next step was to track down an extremely old card. After asking around, I finally acquired one the other day and got to work!
Going in, I knew a couple bits of information. Every second, the meter records the voltage, wattage, power factor, and frequency and displays them on its screen. Every minute, it averages the readings from the past 60 seconds and stores them on its internal memory, which has room for about 200 days of stored data.
So I cleared the meter’s internal storage, waited a few minutes, and exported to the SD card. I got two files, one containing 198 bytes and one containing… four. Oops, I guess I got impatient and didn’t wait long enough.
After a few more minutes I tried again, and this time I got a similar 198 byte file and a much more useful 37 byte file. After repeating this process a few times I had enough data that I could work with it.
Long story short, I wrote a python script to convert the data to CSV, which is available on my GitHub. For the curious: the 198 byte file is some kind of header that I haven’t figured out yet, but it always starts with “
INFO:” The actual data is stored in variable length files, which consist of 5-byte records with 8-byte headers, padded at the end with
0xFF bytes. These variable length files max out at 10,564 bytes, and the meter may write several of them. The 8-byte headers always have the same three bytes
E0 C5 EA (which the hex editor converts to the text “alpha + omega”) followed by one byte each for the month, day, year, hour, and minute in that order. For example, the first record I got was
05 1F 17 0C 07 for May 31 2023 12:07.
Next comes the interesting part. It was clear that there was a 5-byte periodicity to the data by inspecting the columns in the editor. After scrubbing back and forth, I started seeing numbers like 1202, 1195, 1210 in the big-endian 16 bit integer box of the inspector. Those look like voltages! With 120 V being the normal value, the meter was saving voltage*10 as an integer in the first two bytes of a record. The next two bytes turned out to be amperage*1000, and the last byte is the power factor, cos phi.
Whenever data is exported, a new “alpha + omega” is added, followed by the date, and then all the data records since the last export.
Using Python’s struct library to decode the data was a cinch, and then Pandas made it a breeze to export a CSV file, which anyone can handle. The only remaining mystery is the 198 byte file. Most of that file stays the same from export to export, but there are a few values that increment. The byte at address
0x54 is almost certainly the “ID” value that you can specify when setting up the meter, but that’s all I know at the moment.