Discussion about this post

User's avatar
Neural Foundry's avatar

Love the air-gap approach with one-way RF. The pipeline architecture is smart especially keeping each stage in its own container so failures dont cascade. I've built similar setups for sensor networks where isolating stateless decoders from stateful backends prevents single points of fialure. The Cloudflare tunnel mention is spot on for remote visibility without opening firewall ports.

Vinnie Moscaritolo's avatar

I occasionally have seen the pi disconnect USB from the SDR.

doing

sudo dmesg -wT | egrep -i "usb|disconnect|reset|2838|Nooelec"

I would see

usb 1-1.4: USB disconnect, device number 12

usb 1-1.4: new high-speed USB device number 13 using xhci_hcd

usb 1-1.4: Product: SMArt XTR v5

--

best I can tell :

- RTL-SDR dongles draw current in short bursts

- rtl_433 defaults to wide bandwidth and AGC

- Gain changes and packet bursts cause sharp current spikes

- The Pi 4 USB power switch detects the spike and momentarily cuts VBUS

- The SDR resets and re-enumerates cleanly

I updated the rtl_433 settings in weather/ws90/entrypoint.sh. to:

rtl_433 \

-f 433920000 \

-s 1024k \

-g 20 \

-R 161 \

-M time:iso

1. `-s 1024k` (sample rate)

- Sets the SDR IQ sample rate to **1.024 MSPS** (1,024,000 samples/sec).

- rtl_433 often defaults to **2.4 MSPS** if you do not specify `-s`.

- Effect:

- Lower ADC and USB throughput load

- Lower average and peak current draw inside the dongle

- Less heat

- Fewer USB power transients

2. `-g 20` (manual gain, disables AGC)

- Sets a **fixed tuner gain** value (here, 20 dB in rtl_433/rtl-sdr units).

- Using `-g` disables the automatic gain control behavior that otherwise jumps gain up/down.

- Effect:

- Eliminates gain “step” transients triggered by bursty packets

- Makes current draw more stable and predictable

- Notes:

- You may need to tune this (typical working range is ~15 to 30) depending on antenna and sensor distance.

3. `-R 161` (restrict decoders)

- Enables **only** decoder number **161** (Ecowitt/WS90-class protocol) instead of running the full “try everything” decoder set.

- Effect:

- Reduces CPU/DSP work per received burst

- Reduces short-lived processing spikes during packet bursts

If this works for a few weeks without issue -- I will update the github

No posts

Ready for more?