#1025210 ITP: rtlamr -- RTL-SDR receiver for smart utility meters

#1025210#5
Date:
2022-11-30 23:03:40 UTC
From:
To:
* Package name    : rtlamr
  Version         : 0.9.1
  Upstream Author : Douglas Hall
* URL             : https://github.com/bemasher/rtlamr
* License         : AGPLv3 only
  Programming Lang: Go
  Description     : RTL-SDR receiver for smart utility meters

rtlamr is a program for using an RTL-SDR (and maybe other SDRs?) to receive readings from smart utility meters. I use this software, an willing to maintain it, and will make sure it stays in good shape. I have confirmed that it works with commonly available meters.

This is useful for a variety of creative purposes, such as analyzing one's own energy usage, or even energy usage within a community, or to identify water leaks. As far as I know, no other packages provide similar functionality. The closest package is rtl_433, and it doesn't support these devices.

I'm neither DD nor DM and will need a sponsor. I will maintain this either within the Go Team or the Ham Radio Team. I've CC'ed both of them to see if it piques their interest or if they have a preference.

I would really like it if a fellow ham would see about getting it to work with an alternate SDR.

#1025210#10
Date:
2022-11-30 23:30:29 UTC
From:
To:
Hey John,

Debian Developer, Amateur Radio nerd (K3XEC), and Go team member here.

I use rtlamr. I'm not a very good sponsor right now, but I can step in if
no one else has bandwidth; my time is a bit more limited than I'd like, and
it'd be cool to have rtlamr in the repos. It'd certainly help save me time
too! Give it a few days to see if anyone here has bandwidth, and if not,
send me your dsc or git repo for review.

On your other points:

rtlamr talks to the rtlsdr via rtltcp (rtl_tcp(1)). It's a simple protocol
I documented at https://hz.tools/rtl_tcp/ . I've also written a daemon for
myself while learning about radio (not released yet; for a few reasons)
that will serve a few radios over rtl_tcp; namely, my Ettus B210/B200mini,
LimeSDR, RTL-SDR, HackRF, PlutoSDR, an airspyhf, or hilariously, another
rtl_tcp endpoint (yo dawg).

The hardest part of this exercise (and to be clear; it's straightforward),
are two big things:

  - translating IQ formats; which I've done a bit of documentation on
https://k3xec.com/packrat-processing-iq/ including some exemplar files to
test with to build confidence in your code
  - accepting rtl_tcp commands (such as AGC enable, Set Gain) - which don't
always translate 1:1. For instance ,some radios don't have automatic gain
control, so the command isn't supported; but the client will expect it to
be enabled. Other radios (like the HackRF, for instance) have multiple gain
stages -- which you can kinda cobble together if you pretend to be a
RTL-SDR E4k (https://hz.tools/e4k/) in the rtl_tcp header, and store the IF
gain stages in memory, compute the net gain, and scale the gain from min to
max -- proxying that into the real radio's gain from min to max.

   paultag