Utilities often use "smart meters" to optimize their residential meter reading infrastructure. Smart meters transmit consumption information in the various ISM bands allowing utilities to simply send readers driving through neighborhoods to collect commodity consumption information. One protocol in particular: Encoder Receiver Transmitter by Itron is fairly straight forward to decode and operates in the 900MHz ISM band, well within the tunable range of inexpensive rtl-sdr dongles.
This project is a software defined radio receiver for these messages. We make use of an inexpensive rtl-sdr dongle to allow users to non-invasively record and analyze the commodity consumption of their household.
There's now experimental support for data collection and aggregation with rtlamr-collect!
To install rtlamr, run the following:
go install github.com/bemasher/rtlamr@latest
go get github.com/bemasher/rtlamr
The command above will add the binary to $HOME/go/bin/
, or if $GOPATH
is set, $GOPATH/bin/
.
To run the rtlamr binary from any directory, ensure the directory containing the binary is in your PATH
(more info).
See the wiki page Configuration for details on configuring rtlamr.
Running the receiver is as simple as starting an rtl_tcp
instance and then starting the receiver:
# Terminal A
$ rtl_tcp
# Terminal B
$ rtlamr
The animation below shows an example of starting rtlamr along with the successful capture of an ERT message.
If you want to run the spectrum server on a different machine than the receiver you'll need to specify an address to listen on with the -a
flag for rtl_tcp
, and the -server
flag for rtlamr
.
The following message types are supported by rtlamr:
Currently the only tested meter is the Itron C1SR and Itron 40G. However, the protocol is designed to be useful for several different commodities and should be capable of receiving messages from any ERT capable smart meter.
Check out the table of meters I've been compiling from various internet sources: ERT Compatible Meters
User provided, but otherwise unverified compatible meters: Google Sheets
Look for an FCC ID label on your meter, it should identify the two-digit commodity or endpoint type and the eight- or ten-digit endpoint ID of your meter: ## ########[##]
. Below are a few examples:
Using a NooElec NESDR Nano R820T with the provided antenna, I can reliably receive standard consumption messages from ~300 different meters and intermittently from another ~600 meters. These figures are calculated from the number of messages received during a 25 minute window. Reliably in this case means receiving at least 10 of the expected 12 messages and intermittently means 3-9 messages.
Do not use this for malicious purposes. If you do, I don't want to know about it, I am not and will not be responsible for your actions. However, if you find a clever non-evil use for this, by all means, share.
These are a few examples of ways this tool could be used:
Ethical
Unethical
The source of this project is licensed under Affero GPL v3.0. According to http://choosealicense.com/licenses/agpl-3.0/ you may:
If you have any questions, comments, feedback or bugs, please submit an issue.