Quick setup of Badger ORION water meter

In my city, my electric and gas meters are more locked-down, but our water meters are pretty easy to monitor. Here’s a quick guide to how I brought my household water consumption data into HA with just a few steps.

Finding the meter

In my home, our water meter was hidden under a shelf in a basement bedroom closet. It’s probably close to the street, or in a box in the yard between the house and the street. (image removed because of new user link limits)

Test-run / see if you can read it

I purchased a SDR dongle - Amazon.com: Nooelec NESDR Mini USB RTL-SDR & ADS-B Receiver Set, RTL2832U & R820T Tuner, MCX Input. Low-Cost Software Defined Radio Compatible with Many SDR Software Packages. R820T Tuner & ESD-Safe Antenna Input : Electronics on Amazon. There were plenty of options, this one was available with early-next-day delivery.

The rtl_433 documentation at GitHub - merbanan/rtl_433: Program to decode radio transmissions from devices on the ISM bands (and other frequencies) helpfully had this entry on the list of devices:

    [223]  Badger ORION water meter, 100kbps (-f 916.45M -s 1200k)

which meant I knew what options to use.

When the dongle arrived, I ran rtl_433 with it plugged into my laptop on the second story of my house. I found a bunch of water meters - my own, and a few neighbors too.

I was able to distinguish which meter was mine based on comparing the volume_gal broadcast to the numbers displayed on the dials.

Move the dongle to home assistant

Now that I know which meter is mine, it’s time to move the dongle to my homeassistant yellow. I used pbkhrv’s addons (search for github link) to enable collection from the dongle. After adding the add-on repo, I installed only rtl_433.

This add-on created a new file I could see from the homeassistant ssh login - /homeassistant/rtl_433/rtl_433.conf.template

I edited that file to contain

frequency  916.45M
sample_rate 1200k

and restarted the add-on. Checking the logs from the add-on showed me that, yes, I was still receiving usage data from my water meter in the server rack (as well as one of the many meters I saw upstairs - perhaps my closest neighbor?)

Send the data to mqtt
I held back on adding mqtt output to the config file so I could verify the dongle could still get data in the new location. But since I’ve validated that, it’s time to start sending the readings to mqtt.

Install the mqtt add-on. I don’t think I needed to make any changes there, but I did create a user for mqtt in the UI. I added another line to the config template:

output mqtt://homeassistant.local:1883,user=<MQTT USER>,pass=<MQTT USER>

Once I restarted the add-on container, it was no longer printing data in the log, but exporting it to mqtt.

I was able to verify this by connecting mqtt explorer to my server (using the same user and port info). I now know my meter readings are making it into mqtt, and i have the state_topic needed for the next step.

Create the water meter entity

Now all I need to do is take that mqtt data and associate it with an entity.

First, I added an include to my configuration.yaml

mqtt:
  sensor: !include watermeter.yaml

Then I created the watermeter.yaml file, like so:

- name: "Water Meter"
  unique_id: <meter id>
  state_topic: "rtl_433/<host id>-rtl433/devices/Badger-ORION/<meter id>/volume_gal"
  unit_of_measurement: "gal"
  device_class: water
  state_class: total_increasing

I was able to get the state_topic details from my earlier mqtt explorer observation of the data.

Done
The first thing I did was to add a chart on my test dashboard.

type: history-graph
entities:
  - entity: sensor.water_meter
title: Water Usage
hours_to_show: 168

… just an up-to-the-right chart of total increasing usage.

But this data works perfectly with the built-in Energy dashboard wizard to give nicer info, including usage per hour, etc.

(Please comment with tips and tricks, I’m entirely open to editing this guide to make it better)

1 Like

(Sorry for the post quality, but I had to remove all but two of the links as a new user)

@nayfield Really interested in trying this out with my Badger meter by following your approach. Now that it has been a few months, I’m curious if your setup is still working well or if you’ve made any changes/improvements. Thanks again for this great post.

It’s working great, but I finally got an energy bill (for two month period, a month after the period ended).

Turns out that the reading I’m getting is in units of 10 gallons, and I had it entered as one gallon.

Added value_template: "{{ value | multiply(10) }}" to my config, but now it thinks I just filled a dozen swimming pools in the last hour.

I’m ok with throwing in the towel and saying water usage is only accurate after March 2nd, but poking around about how to adjust the internal DB values for the sensor.

After all, it would be as simple as a script “for each sample under 100,000 - replace it with 10x the sample value”

Ended up modifying the database with the SQL plugin to normalize the old values