Home lab

Pi Rack

Four Raspberry Pi 5s live in a custom rack I 3D-printed for them, stacked above a 5-port switch. The red frames are Proto-pasta's Amie's “Blood of My Enemies” HTPLA, a translucent red with a name better suited to a metal album than a home network. The black parts are their carbon fiber HTPLA, which is stiffer than regular PLA. HTPLA can be heat-treated to hold its shape at temperatures that would soften ordinary PLA. That's a good trait in a box of computers that never turns off.

The rack runs Home Assistant, backs it up every day, watches every service, opens the house to me from anywhere over Tailscale, and turns home sensor data into live dashboards and a nightly AI-written digest. It also runs Immich, which finds the faces in our scanned family photos so the photo frame can show who’s in each one. NetAlertX keeps a census of every device on the network, and the coffee maker starts my morning brief.

Atlanta, America/New_YorkRemote access: Tailscale and Raspberry Pi Connect
The home lab rack: four Raspberry Pi 5s stacked in a red 3D-printed case, each cabled down to a 5-port network switch at the base.
Elevation

What sits in each slot

SwitchTop
TP-Link TL-SG1055-port gigabit switch, one port per Pi plus uplink
1Slot
citygroundPi 5, 8 GB, NVMe on Geekworm HAT
Home Assistant OSGA4 sender (3 rest_commands)Coffee trigger
2Slot
mercedesbenzPi 5, 1 GB, NVMe on Geekworm HAT
Tailscale subnet router
3Slot
heinzfieldPi 5, 8 GB, NVMe on Geekworm HAT
Uptime KumaSamba share for HA backupsData server backupsImmich (Docker)NetAlertX device census
4Slot
theforumPi 5, 4 GB, NVMe on Geekworm HAT
Data collector + PostgreSQLNetwork census collectorGrafanaNightly Claude digest
Every Pi gets a DHCP reservationtheforum is the data serverKuma on heinzfield watches every service
Hostnames

Each Pi is named for a stadium

Every Pi takes its name from the home ground of one of my teams.

citygroundSlot 1

City Ground

Nottingham Forest (EPL)

Forest have played here since 1898, on the south bank of the River Trent, about 300 yards from Notts County's ground across the water. The stand built in 1980 on the back of two European Cups now carries Brian Clough's name, and its seats were the first in football to spell out a club name: FOREST. The oldest ground in the rack runs the house.

About the City Ground
mercedesbenzSlot 2

Mercedes-Benz

Atlanta United (MLS)

Open since 2017, with a roof of eight translucent panels that slide open like a pinwheel and a halo video board wrapped around the rim. Atlanta United won MLS Cup 2018 here, beating Portland 2 to 0. It also hosted Super Bowl LIII and a 2026 World Cup semifinal. The roof opens so the world can get in. Slot 2 runs Tailscale, which is how I get into the house from anywhere.

About Mercedes-Benz
heinzfieldSlot 3

Heinz Field

Pittsburgh Steelers (NFL)

Home of the Steelers and Pitt since 2001, on the North Shore along the Ohio River, with giant ketchup bottles that tip over the scoreboard after a score. The sign has said Acrisure Stadium since 2022. I stand with the traditionalists. The Pi that keeps the backups gets the name that never changed. Now it also keeps the names of everyone in our old photos.

About Heinz Field
theforumSlot 4

FedExForum

Memphis Grizzlies (NBA)

Home of the Grizzlies and the Memphis Tigers since 2004, at 191 Beale Street in downtown Memphis. It was the first arena with see-through shot clocks, which the NBA later adopted everywhere, and its floor sits below ground level under a round dome. Slot 4 keeps score for the whole house now. The database, the dashboards, and the nightly digest all live here. The building that made the clock see-through seemed like the right place for it.

About FedExForum
Data path

How data reaches slot 4

Slot 4 reads Home Assistant directly every 15 minutes and pulls the GA4 export from BigQuery each morning. Only computed summaries leave the Pi for Claude.

sends via Measurement Protocol export daily pull, 7:15 AM HA API, read-only token, every 15 min Home Assistantcityground, slot 1 GA4 propertyHome Assistant stream BigQueryhome sensor project theforumdata server, slot 4 GrafanaLAN + Tailscale Claude APIsummaries only Email digestto Gmail, 12:40 AM
More than 5.4 million HA events

Temperature, humidity, air quality, thermostats, lighting, motion, occupancy and weather. Each event carries the entity ID, state and reading.

Still collecting

New readings stream in every day, to BigQuery and to the local database on theforum. The cloud project is locked against deletion, and a copy of the full history lives on the Pi.

Daily rhythm

What runs, and how often

Nothing here needs a person to start it. Uptime Kuma on slot 3 watches every scheduled job and alerts when one fails or goes quiet.

CadenceJobWhereResult
ContinuousSensor events sent to GA4 by Home AssistantcitygroundA cloud copy of every reading in BigQuery
Every 5 minNetAlertX scan of the home networkheinzfieldA current list of every device in the house
Every 10 minPhoto frame asks Immich who’s in each scanthepyramid to heinzfieldNames under the photos on the frame
Every 15 minPull of Home Assistant states, statistics and namestheforumDashboards under an hour old
Every 15 minPull of the NetAlertX device listheinzfield to theforumA Network dashboard showing what’s online and when
HourlyBackup freshness checkheinzfieldAn alert if the newest backup is over 26 hours old
DailyHome Assistant automatic backup, 7 keptcityground to heinzfieldA restorable .tar on the Samba share
5:30 AMNetAlertX device list export, 14 keptheinzfieldEvery device name survives a rebuild
First cup, 5 to 7 AMCoffee maker draws over 500 W, so Home Assistant asks for the morning briefcityground to libertybowlThe brief plays in the kitchen within about 5 seconds, once a day
7:15 AMGA4 pull from BigQuerytheforumHome sensor history in the local database
12:40 AMInsights digest: summaries computed on the Pi, written up by ClaudetheforumAn email to Gmail with trends, anomalies and comparisons
3:30 AMDatabase and Grafana settings backuptheforum to heinzfieldThe data server can be rebuilt from slot 3
Side jobs

A device census and a coffee trigger

NetAlertX counts the house

NetAlertX runs on heinzfield and scans the home network every 5 minutes. The first scan found 84 devices, which says something about how many things in a house now want Wi-Fi. It only listens and counts. It never touches DNS or DHCP, so if it falls over, the internet doesn’t notice. I named every device by room and type, theforum copies the list every 15 minutes, and a Network dashboard in Grafana shows what’s online and when.

Coffee starts the morning brief

The coffee maker sits on a smart plug that measures power. Idle, it draws under 1 watt. Brewing, about 1,300. When Home Assistant sees it cross 500 watts between 5:00 and 7:00 AM, it asks libertybowl, the Pi on the kitchen counter, to read my morning brief aloud. That happens once a day, so a second cup stays quiet. The plug never switches anything. Home Assistant only watches it. Every cup also logs one event to GA4, so the house now keeps data on my caffeine habit.

Resilience

When a Pi goes down

Each job lives apart from what it protects, so one failure never takes out the house.

1
Home Assistant stops

Kuma alerts. Restore the newest backup from slot 3 onto a fresh install.

2
Data server stops

Home Assistant and the GA4 copy keep running. Dashboards and the digest pause until it's back, then the 15-minute pull and the daily GA4 pull catch up.

3
Monitor stops

Kuma can't report its own outage. Home Assistant shows failed backups under Settings, System, Backups, which is the place to check now and then. The photo frame keeps showing the last names it got from Immich. The device census pauses until it’s back.

4
Remote access stops

Without slot 2 there is no Tailscale, so nothing opens from outside the house. Everything at home keeps running, and Raspberry Pi Connect still reaches every Pi from a browser.

Access

Where to reach things

ServiceAddressFrom outside the house
Home Assistanthomeassistant.local:8123Over Tailscale
Grafana dashboardstheforum.local:3000Over Tailscale
Uptime Kumaheinzfield.local:3001Over Tailscale
Immich photo libraryheinzfield.local:2283Over Tailscale
NetAlertX device censusheinzfield.local:20211Over Tailscale
Shell on any PiRaspberry Pi ConnectYes, from a browser
Power and hardware

Specs that matter

BoardSupplyBoot driveNote
Pi 5 (slots 1 to 4)27 W, 5 V / 5 ANVMe on Geekworm HATA 3 A supply caps USB and peripherals at 600 mA.
RAM8 / 1 / 8 / 4 GBSlots 1 to 4 in order. Slot 2 only routes Tailscale, so the data server and its database live on theforum's 4 GB.