# Starlab Observatory

> Source: <https://www.hackster.io/tommy-lather/starlab-observatory-6b2d6f>
> Published: 2026-11-07 14:08:41+00:00

I've always been captivated by the concept that at any given moment, anywhere we are, there's loads of information floating around in the air around us. Out of curiosity I bought a $35 RTL-SDR Blog v3 receiver and started messing around with it. I bought a homemade V-Dipole antenna off ebay made from a couple pieces of copper plumbing pipe and a 3D printed joint and attempted to capture some images from the ISS during one of their events. Reception was sketchy at best, but with about $700 and 5-hours of Claude code in ultra mode, I received a partial image... a VERY partial image. I mean, you really had to use your imagination to see it, but it was there! I was hooked. My collection of receivers and antennas quickly started growing. I'm no engineer, I've worked as a landscape contractor my entire career but I've always had an affinity for all things tech. So, as my RF lab grew and evolved I needed a piece of software to manage all of my captures. So, Starlab Observatory was born!

**The attic antenna farm:** 

Here's what's up there now:

- **Discone** for general VHF/UHF listening, feeding a Nooelec LaNA preamp
- **Copper V-dipole** I made specifically for METEOR weather satellites, about 40 ft off the ground, opening pointed north, with a SAWbird+ NOAA preamp right at the antenna
- **QFH** (Diamond DP-KE137) for 137 MHz weather sats
- **M2 SATPACK eggbeaters** , one for 2m and one for 70cm, for the ISS and amateur satellites
- A loop and a handful of smaller antennas on the switch (more on that next)

The eggbeaters were WAY bigger than I expected when they showed up. Mounting them meant working around slanted braces in the rafters, keeping them clear of ductwork and the refrigerant lines, and giving every antenna a few feet of breathing room so they don't detune each other.

The cable runs were their own adventure. Most of the feedlines are 50-ish feet of KNR240 coax. Lessons learned the hard way: put the preamp at the antenna, not at the radio, or your coax eats the signal before the LNA can help. Watch out for cheap USB power bricks in the attic, because they spray noise right where your antenna is listening. And the air handler blower is a noise source too.

Also: attics in North Carolina are hot as hell, even in November. Plan your trips up there.

One last thing and somewhat separate - this isn't in the attic, but I set it up in my backyard... I bought a KrakenRF Discovery Dish with S-band, H-line, and L-band feeds

The ESP32 antenna switch
I have more antennas than receivers, so I built a little networked antenna switch. An ESP32 controls an 8-port RF switch, and it sits on my network at `antswitch.local` with a simple API. One SDR sits on the switch's output, and software can pick which antenna it listens to: the V-dipole for weather sats, a couple of spring antennas for UHF, an airband antenna, a loop for HF and AM.

The point is that nobody has to climb into the attic to change antennas. The scheduler can flip it before a pass, and eventually my AI agent can flip it on its own while it scans.

It wasn't all smooth. The switch's own port list drifted out of date at one point, so I made the software trust my wiring notes, matched by port number, over the board's labels. I also learned that an SDR with its bias tee stuck on sends DC up the coax into the switch and whatever antenna is selected. Fun!

The hardware is the fun part to look at, but the software is where most of my hours went. I built Starlab in Python, pairing with Claude Code, and it runs as a service on the observatory box (Ubuntu, Core Ultra 7, a small NVIDIA card).

What it does:

- **Knows the RF chain.** A web RF editor shows every receiver with its antenna, preamp, and filters, like Antenna > LaNA > FM bandstop > receiver. Every recording gets stamped with the exact signal path it came through, so I can compare setups later.
- **Predicts and books passes.** It pulls orbital elements, predicts METEOR and ISS passes, and books them on the right receiver. Automatic rules handle the routine ones, and I can still book a one-off from a web form.
- **Brokers the receivers.** One scheduler owns every SDR, locked by serial number, so two jobs can never fight over the same dongle. Manual jobs can bump automatic ones.
- **Records, checks, and decodes.** It records raw IQ, makes waterfalls and spectrum plots, checks the file, then runs the decoder. METEOR goes through SatDump. ISS SSTV decoding is getting built in right now.
- **Keeps me posted.** Passes land on a Google Calendar, and results show up in Slack.

The end goal is an AI agent living on my DGX Spark ("monkeybrain") that I talk to over Slack. It borrows receivers from the broker, scans, flips the antenna switch, notes anything interesting, and pings me about it.

I've done my best at making Starlab portable so I made its github repo public:

[https://github.com/TommytheMonkey/starlab_observatory](https://github.com/TommytheMonkey/starlab_observatory)

Right now I'm chasing pictures from the International Space Station. ARISS runs SSTV events a few times a year, and the current ones are on 437.550 MHz, which is exactly what the 70cm eggbeater is for. I got the ISS in Starlab's catalog on the right frequency, booked the passes on the eggbeater, and Starlab is getting its own SSTV decoder so images show up automatically after each pass.

What's next:

- Get the 2m eggbeater on the air with its SP-200 preamp
- Finish hunting down some mystery interference around 438.1 MHz
- Put my KrakenRF Discovery Dish to work on hydrogen-line and L-band
- Let the AI agent run the antenna switch and go looking for things on its own

If you're thinking about doing something like this, start with one dongle and one antenna. Everything else just kind of happens. Questions welcome in the comments.

[Read more](<javascript:void(0)>)
