-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Add support for Badger ORION water meter #2089
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for Badger ORION water meter #2089
Conversation
Looks very good, thanks! |
88700ac
to
5114a7c
Compare
@zuckschwerdt Thanks for the feedback. I have made the changes that you suggested. |
I also have a Badger water meter with fixed (916.45 MHz) carrier and tested this on my own meter with: I can confirm that it displays the correct volume (so the offset of the volume field is correct) but cannot attest to the accuracy of the other fields. I do know that some meters have bits set in the "Flags-2" byte, though in my own meter -- the only one in range, sadly -- this byte is always zero. The first 4 bytes for me are constant (for as long as I have been capturing signals from that meter; my first sample was a little over 4 years ago), so I have no way of knowing where the Flags-1 field ends and ID field begins. The ID field also does not match the number on the label on the meter, but should work to identify it nonetheless. Note that this PR closes #1779. Note also that this PR is based partially on my own analysis of the protocol (in which I made some mistakes, believing that there was only a 32-bit sender followed by a 32-bit volume) so please don't give my confirmation as much weight as someone testing this truly independently. :) |
@CFSworks Thanks for testing this and for your pervious analysis which set me on the right path. Thanks also for your pointing me to the rtl_433 project in the first place, since otherwise I wouldn't have done this PR! Regarding the ID field, can you check if the extracted ID field matches the number stamped on your meter mod 2^24? This is the case for my meter and the meters on the adjacent houses to mine. I've documented this assumption in the comment on line 36 but it would be good to get further validation. Regarding the flags, my guess (based on far too few observations) is that the byte at offset 3 has flags about the device hardware itself and the byte at offset 7 has status flags for the "Premise Leak Detection", "Cut-Wire Indication", "Reverse Flow Indication", "No Usage Indication" and "Encoder Error" conditions described in the documentation. In my neighbourhood most devices have data[3] == 0 but one device (which looks noticeably different and seems more modern) has one of these bits set. There is more variation in the bits in byte 7. Unfortunately without deliberately triggering a variety of fault conditions it is a little hard to accurately identify which flag is which. |
Hmm... I'm comparing the binary representations of these, and found a possible match: The number stamped on my meter is an 8-digit number; if I drop the highest digit, then the low 19(?!?) bits of the 7-digit number do match the low 19 bits of your ID field. This suggests a few more bits of flags (at least 5, but possibly more if the highest of those 19 bits are matching only coincidentally for me) and correspondingly fewer bits belonging to ID.
Hah, I might be able to trigger the "premise leak detection" intentionally, but I don't want to commit to doing that. :) |
5114a7c
to
8449e19
Compare
@CFSworks You might want to try your tests on the device ID field again now that I've fixed a very dumb bug in my code! |
Much better now! The ID field matches the low 7 digits of the serial on the label (so, not mod 2^24, but mod 10^7) |
@CFSworks That is interesting. My guess is that the allocation of meter IDs is performed by the utility company that deploys them rather than by Badger, and the utility choose how these get programmed into the meter. I guess that some companies truncate the decimal value to fit it in and some truncate the binary value. I will update the comment in the code to reflect this variation. |
Seems so, my meter ID, the one which is indicated on the wire is Thanks for the PR! Finally can monitor the water usage |
@merbanan @zuckschwerdt Any update on if this could be merged? |
I think I have the frequency hopping version I can’t seem to receive any readings from my badger meter on the 916.45 frequency. Do you have any suggested next steps to pin down the frequency? I’m in an urban area so there is a lot of background. |
@caliKev what's the fccid of yours? |
I have a Badger 100WRD - FCC ID ewq100wd. I'm new to radio - does this spectrum grant mean that the 100WRD could possibly be listening on the same 916.45 freq, or is it more likely that it stayed on 908? I'm not at the location with this meter right now to test Edit: appears it supports multi-freq. I'll do some more digging later
|
You can add frequency hopping parameters to rtl_433 command line. You can then add the option to output the frequency in the decoded output and then just let rtl_433 scan the frequency band for a while. |
For later readers, The Badger 100WRD is actually using an Itron radio and is supported already with SCM+. Example:
|
My water company recently installed a new meter. It's a "BadgerMeter Recordall Model 25". I have no idea if this is a smart meter or not (I know previously water company would read the meters manually). Unfortunately water meter is out on the street so I can't easily use a pulse counter or similar. Any chance this is supported as well? I have tried
but I don't get any output. Any advice for debug? |
Does the metal cover for the meter have a plastic insert, and if so, does it have an FCC ID stamped into it (or can you find such an ID anywhere else in the meter housing)? If so it's possible to look up the FCC certification and get quite a bit of detail about the transmissions. |
@segdy the meter itself does not need to be "smart". they can attach a device to the pipe that is able to calculate flow using ultrasonic 'waves'. that being said it doesn't look like you have one installed unless its outside of the photo. most of the time you'll see a wire that connects to a antenna on the "lid" of the meter enclosure lid |
Thanks, so probably no smart meter the … One question, slightly OT: I know many meters have a pulse counter. Do you know from how far this can be read out? Does it have to be immediately on top of the meter? Or could it be “hidden” a few centimeters on the side of the meter? |
@segdy That doesn't look like a meter that is remotely readable. For most models of Badger water meter the radio interface that allows remote reading is a separate unit that is attached by a wire and is fitted into the lid that covers the hole where the mechanical water meter is mounted to the pipe. To answer your later question, at least for Badger, the pulse recorder is connected to the flow meter by a cable, but the radio signal from the recorder can be picked tens of meters away; with a tuned directional antenna pointing straight at it you could probably do even better. The receiver that I have picks up some signal from each of the meters on my block, although with a small, cheap, omnidirectional antenna the more distant ones tend to have rather weak signals. In my town the water company reads the all the meters just by driving slowly down the street in a car with an antenna on the roof. |
Any chance to read meter with this? I would also need help on what arguments to run rtl433 with? https://fccid.io/GIF2014W-OSE Thanks in advance. |
Greetings! It appears my device (FCC ID GIF2006B) also uses frequency hopping. Hoping to find a way to utilize it. Any ideas? |
@jschwalbe First off, it should be noted that meters with FCC ID GIF2006B can operate in either fixed frequency or hopping mode. It can run continuously on 911.65MHz, 916.45MHz and 921.25MHz, or it can hop on the 25 channels at 400kHz spacing starting with the lowest fixed frequency and running up to the highest fixed frequency (i.e. hops are at If that fails, you have two option: try to work out the order in which the hops are made, or ignore the issue and only collect 1 in 25 packets. The later option is much simpler, but the unit transmits ever 4 seconds so you'll only have the chance to pick up a reading every 100 seconds, and if you have interference then you'd need to wait another 100 seconds for the next one. Working out the hopping sequence is not horribly hard, but it's sort of time consuming. The way I'd do it is to write a script that runs the I hope this helps! |
Hi @nickovs any help on this meter https://fccid.io/GIF2014W-OSE I couldn’t find what frequencies I should try listen on |
@nickovs Thank you so much for the detailed reply! I have two units in the basement. One for inside water, and one for outside water.
For each time, I gave it a good 3 minutes (and much longer on the middle one). Didn't pick up any others, so that makes me wonder if the update interval is slower than the transmit interval. I'll report back on my findings as I take more readings over time! Thanks again!! @nijhawank try this command Edit to add: seems like those are the ones; still trying to figure out how long it takes to update. Will keep track over a day or so. Edit to add again: can confirm that the values only update once an hour. Pretty cool to see! Thanks for the help and hard work! |
@nickovs I have a badger meter labeled "Orion Cellular LTE" but FCC ID GIF20170CEV5D0M. I am able to see transmissions when running |
@mgorbach Firstly, given that the device as a cellular interface, do you know if it is going to also transmit in the 915MHz band. Finding a certification number on the device and looking up FCC certification documents would tell you this, even if the rest of the documentation is somewhat opaque. The way I decoded the data in the first place was to read this [wiki page (https://github.com/merbanan/rtl_433/wiki/Decipher-a-new-device-and-write-a-decoder) and the FCC certification documents and then write some Python code to first visualise the data, followed by some trial and error. I can't really recommend a better option. Given that you seem to already be seeing some data, just printing it as binary and eyeballing it is not a bad place to start. Looking at your test command line, I note that you didn't disable the other decoders. Just to check, are you seeing output packets that are tagged as |
I'm in the same boat @mgorbach did you ever fin da solution? I get this kind of data when I run you above command. New defaults active, use "-Y classic -s 250k" if you need the old defaults [Protocols] Registered 228 out of 263 device decoding protocols [ 1-4 8 10-12 15-17 19-23 25-26 29-36 38-47 49-60 63 67-71 73-85 87-100 102-105 108-116 119-122 124-128 130-149 151-161 163-168 170-175 177-197 199 201-215 217-232 234-241 243-244 246-247 249-259 261-263 time : 2024-09-11 17:01:44 time : 2024-09-11 17:01:51 time : 2024-09-11 17:02:01 time : 2024-09-11 17:02:17 time : 2024-09-11 17:02:32 time : 2024-09-11 17:02:34 time : 2024-09-11 17:02:46 time : 2024-09-11 17:02:46 time : 2024-09-11 17:02:46 time : 2024-09-11 17:02:50 time : 2024-09-11 17:03:06 time : 2024-09-11 17:03:06 time : 2024-09-11 17:03:22 |
@nijhawank @Michael55123 - just had my meter replaced with a similar model to what you seem to have. Both the old one and new one are Badger branded, but the old one worked fine with the |
This PR provides support for the Badger ORION series of remotely readable water meters. According to the FCC certification there are two variants, one with a fixed 916.45MHz frequency and one frequency hopping; this code has only been tested with the single frequency version (since that's all they have around me) but it should work with the other version if given the correct list of hop frequencies.
The encoding is similar to M-Bus mode T, using the same 4:6 DC-balanced encoding and the same CRC16 polynomial, but with a totally different payload format. This is documented in a comment in the code.
This is my first PR to this project; I've tried to follow all of the contributing guidelines but if there are any changes required then I'm more than happy to squash them in.