A Raspberry Pi that runs the house
One Raspberry Pi 3B+ driving a 3D printer, filtering DNS, terminating a VPN and reporting into a dashboard I wrote so that all of it lives behind a single page.
- When
- Ongoing
- Hardware
- Raspberry Pi 3B+, Anycubic Kobra Neo
- Stack
- Klipper, Mainsail, Moonraker, AdGuard Home
- Extras
- PiVPN, OpenVPN, PiHub dashboard
The problem
Every one of these services is easy on its own and annoying together. Each has its own web interface, its own port, its own idea of how it should be restarted, and its own way of failing quietly. Running them on one small board with limited memory sharpens the question of what is actually worth running.
Printer control
The Anycubic Kobra Neo runs on Klipper, with Moonraker as the API layer and Mainsail as the interface. Moving the motion planning off the printer board and onto the Pi is the point of Klipper, and it means print configuration lives in a text file I can version rather than in a menu on a small screen.
DNS and VPN
AdGuard Home handles DNS for the whole house, which filters advertising and tracking for every device without installing anything on any of them. PiVPN and OpenVPN give me a way back into the network from outside, which matters mostly because the printer is here and I am not always.
Alerts
I wrote a small alerting application so the Pi tells me when something needs attention instead of waiting for me to notice. A print that failed, a service that did not come back, a disk filling up. Anything unattended has to be able to raise its hand.
PiHub
PiHub is my own dashboard, and it exists because four interfaces on four ports is not a system, it is four things in the same room. It pulls the state of everything into one page so that checking on the lab is one look rather than four tabs.
What I took from it
- Constrained hardware is an excellent editor. It removes anything you cannot justify.
- Anything that runs unattended needs to be able to tell you it is unhappy, or you will find out at the worst possible moment.
- The integration layer is usually the part nobody builds, and usually the part that makes the rest usable.