Screenshot of a hex-editor displaying part of an Extech data file. Columns spaced 5 characters apart show various values, indicating the 5-byte periodicity I mention.

Reverse Engineering Extech EM100 Driver Software

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 CD of software and drivers. 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. This is compounded by the fact that at some point Extech was purchased by Flir. When I contacted Extech support, their reply was perhaps predictable:

A photo of the Extech EM100, showing readings of 118.9 V, 0 A, and 59.98 Hz

“Unfortunately, the software for the EM100 is no longer available.”

Teledyne Flir Customer Support

Even if the software had been available, I doubt it would have run on any reasonably modern computer. I have vague memories of using it with Windows XP, which does not bode well.

So, armed with little more than the website, I set out to read the data files anyway. (Continue reading, or just check out the software I wrote!)

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.

Screenshot of a hex-editor displaying part of an Extech data file. Columns spaced 5 characters apart show various values, indicating the 5-byte periodicity I mention.

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.

So there you have it! If you have an Extech EM100 but no software, or software that won’t run due to its age, fret not! The driver can be replaced by the scripts I wrote and put on GitHub, allowing you to continue logging your power usage. You will have to find your own SD card with ≤2 GB capacity. Good luck!





Leave a Reply

Your email address will not be published. Required fields are marked *