Decoding Efergy Energy Monitor Signals with RTL-SDR
An Efergy energy monitor is a wireless device with an LCD screen that shows how much power your household is using. The device is useful for helping reduce power usage by determining what appliances cause the largest power draw.
Nathaniel Elijah has posted on his blog about how he was able to create an RTL-SDR based decoder for the FSK data transmissions sent out by the Efergy energy monitor. His program receives and decodes the transmissions, saving the data to an excel file for later analysis.
Gough Lui from the Goughs Techzone blog has also attempted decoding these energy monitors as well, and has written a large writeup on his experiences.
Update: Gough Lui has been working on extending Nathaniels software and now has it working in Windows, and sending broadcast UDP packets of the received data.
UPDATE: That mysterious 9th byte is actually part of a 2 byte crc that’s used on the Efergy Elite 3.0 TPM (and possibly others). The algorithm is CRC-CCIT (Xmodem) and the github code I linked above now also verifies the crc.
Nathaniel and Gough’s program gave me a great head start decoding messages from a new Efergy Elite 3.0 TPM using a Raspberry Pi with an R820T based rtl-sdr device.
The Efergy TPM has an extra byte of data and seems to embed the line voltage into the power number that’s transmitted by the sensor. I don’t know what the extra byte is for yet and I can’t figure out the checksum, but I set VOLTAGE to 1 in EfergyRPI_log.c and the KW numbers I’m getting are within 1-2 watts of what the Efergy receiver is showing. Yay!
I added a new debug/analysis mode to Gough’s EfergyRPI_log.c that might be helpful to folks trying to figure this stuff out. The source code is available here: