Read Utility Meters Via SDR To Fill Out Smart Home Stats

[Jeff Sandberg] has put a fair bit of effort into adding solar and battery storage with associated smarts to his home, but his energy usage statistics were incomplete. His solution was to read data from the utility meter using RTL-SDR to fill in the blanks. The results are good so far, and there’s no reason similar readings for gas and water can’t also be done.

[Jeff] uses the open source home automation software Home Assistant which integrates nicely with his solar and battery backup system, but due to the way his house is wired, it’s only aware of about half of the energy usage in the house. For example, [Jeff]’s heavy appliances get their power directly from the power company and are not part of the solar and battery systems. This means that Home Assistant’s energy statistics are incomplete.

Fortunately, in the USA most smart meters broadcast their data in a manner that an economical software-defined radio like RTL-SDR can access. That provided [Jeff] with the data he needed to get a much more complete picture of his energy usage.

While getting data from utility meters is conceptually straightforward, actually implementing things in a way that integrated with his system took a bit more work. If you’re finding yourself in the same boat, be sure to look at [Jeff]’s documentation to get some ideas.

21 thoughts on “Read Utility Meters Via SDR To Fill Out Smart Home Stats

    1. DSMR meters in The Netherlands (and I guess other countries too) have this awesome “P1” port that serially spits the meter data, including gas metering if you have the meters linked, as it’s typical. Moreover, the port has a 5V rail that you can draw 100mW from (afaik, for free!)

    1. My thoughts exactly, energy profiles are a giveaway to determine occupancy and user profiles. I never expected this information to be broadcast around without some form of access control.

    2. They do have some encryption… It’s just rtl_433 can decode the packets.

      That would have been the easy button for this project, use rtl_433 to rx, output the rx to json, then pull your specific meter id info

    1. If you look at the front of the meter, the “smart” ones that broadcast like this are usually branded ITron somewhere. In addition to this, there will be a barcode that contains the actual ID of the meter, which you can use to correlate any noise.

      If they don’t say Itron they might still be smart, just using cellular, zigbee, or some other protocol

  1. rtl_433 does this all in one step–decode the signal, format into JSON, and send to your MQTT broker. And it’s already in your favorite package manager’s default repositories.

    1. At the time I wrote the original blog post, I was having some trouble with rtl_433’s ERT decoders. They would get the messages, but would periodically fail to decode them.

      I ultimately went with the rtl_amr solution I mentioned in the post, which has worked just fine several months on.

  2. I have an ESP8266 plugged into my P1 smart meter and a script that fetches the current electricity for the hour and calculates the cost.
    2024-07-31T14:59:39+0200 1094
    1094 watts @ 0.06 = 0.87 KR/Hour inc.VAT,Delivery and tax.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.