Full working prototype

The complete Haven Home system, built on the bare minimum prototype: whole-house Wi-Fi, a 1TB offline library, AI on the hub, a solar rooftop relay, NOAA weather alerts and battery backup.

Stage
Stage 2
Time
A weekend

This guide builds on Stage 1, the bare minimum prototype. It is the complete Haven Home system a buyer would get:

  • Everything in the bare minimum: shared offline library, push-to-talk at home, and family texting over the mesh.
  • Whole-house Wi-Fi: a real router replaces the Pi’s built-in Wi-Fi, so more phones connect from farther away.
  • Bigger library: a 1TB SSD holds Wikipedia with pictures, medical references, and map files phones can download from the hub.
  • AI on the hub: any phone on the network can ask questions in a browser, even without an AI app installed.
  • Rooftop relay: a solar Meshtastic node on the roof gives the family radios much more range.
  • Four family radios instead of one.
  • Weather alerts: the hub listens to NOAA Weather Radio and forwards alerts to every family radio.
  • Battery backup: the hub keeps running through a power outage.
  • Faraday bag and wall card for a spare radio and quick instructions.

What it looks like

Full working prototype: the hub runs everything at home; a roof relay stretches the mesh across townHome: the Haven hub (Raspberry Pi 5, 8GB) keeps the library and maps on a 1TB SSD and runs the Haven AI chat page, a Mumble push-to-talk server, a weather alert forwarder and UPS battery backup. It connects by Ethernet to the router (Beryl AX, whole-house Wi-Fi, power bank backup), which serves phones at home over Wi-Fi (HavenHub) for the home page, AI and push-to-talk, with no app needed for AI. The hub also connects by USB to the hub radio (T1000-E) and by USB to the weather receiver (RTL-SDR, NOAA radio). The hub radio talks over LoRa to the roof relay (Solar Node P1-Pro, role ROUTER). Away from home: the roof relay carries text and GPS over the LoRa mesh to four family radios (T1000-E, carried; text, GPS, alerts), which pair over Bluetooth with family phones running the Meshtastic app with no cell service needed.HOMEAWAY FROM HOMEHaven hub (Pi 5, 8GB)Library + maps on 1TB SSDHaven AI chat pagePush-to-talk server (Mumble)Weather alert forwarderUPS battery backupHub radioT1000-Eon hub USBRouter (Beryl AX)whole-house Wi-Fipower bank backupRoof relaySolar Node P1-Prorole: ROUTERPhones at homehome page, AI, push-to-talkno app needed for AIWeather receiverRTL-SDR, NOAA radioFamily radios (4)T1000-E, carriedtext, GPS, alertsFamily phonesMeshtastic appno cell service neededEthernetWi-Fi: HavenHubUSBUSBLoRaBluetoothLoRa meshtext + GPSKEYcableWi-Fi / BluetoothLoRa mesh radio
Full prototype layout · hub, router, roof relay, 5 radios

The Pi hub plugs into the router by Ethernet and runs the library, AI, push-to-talk and weather alerts. The roof relay passes mesh messages between the hub radio and the family radios carried around town.

Blueprint 1: Wiring diagram

Full prototype wiring: one power cable feeds the hub; four cables connect the restPower path: wall outlet (120V AC) to the 27W USB-C power supply, then by USB-C into the X1202 UPS board (4 × 18650 cells), which powers the Raspberry Pi 5 (8GB) through pogo pins. The Pi takes power from the UPS board only, uses Ethernet for the router LAN port, USB 3 for the SSD enclosure and weather receiver, USB 2 for the hub radio, and a microSD card for the operating system. Cables from the Pi: Ethernet to the router (Beryl AX; LAN port from Pi; power from an adapter or bank), USB 3 (blue) to the SSD enclosure (1TB NVMe for library, maps and AI), USB 3 to the weather receiver (RTL-SDR V4 with a dipole antenna on SMA), and USB 2 to the hub radio (T1000-E, magnetic USB cable). Wireless: the router serves phones at home (browser, Mumble and Meshtastic apps) over Wi-Fi (HavenHub). The hub radio talks over LoRa to the roof relay (Solar Node P1-Pro, own solar and battery), which talks over LoRa to four carried family radios (T1000-E, Bluetooth to phones). Key: solid lines are cables, grey dashed lines are Wi-Fi or Bluetooth, blue dashed lines are mesh radio.Wall outlet120V ACPower supply27W USB-CX1202 UPS board4 × 18650 cellsRaspberry Pi 5 (8GB)Power: from the UPS board onlyEthernet: router LAN portUSB 3: SSD enclosure, weather receiverUSB 2: hub radiomicroSD: operating systemRouter (Beryl AX)LAN port from Pipower: adapter or bankSSD enclosure1TB NVMelibrary, maps, AIWeather receiverRTL-SDR V4dipole antenna on SMAHub radioT1000-Emagnetic USB cablePhones at homebrowser, Mumble,Meshtastic appsFamily radios (4)T1000-E, carriedBluetooth to phonesRoof relaySolar Node P1-Proown solar + batteryUSB-C into UPSpogo pinsEthernetUSB 3 (blue)USB 3USB 2Wi-Fi: HavenHubLoRaLoRaKEYpower cablecableWi-Fi / Bluetoothmesh radioLoRa
Full prototype wiring · power path and data cables
From Port Cable To Port
Wall outlet AC socket Power supply plug 27W power supply AC input
27W power supply USB-C Attached cable X1202 UPS board USB-C input
X1202 UPS board Pogo pins None (stacked) Raspberry Pi 5 Underside power contacts
Raspberry Pi 5 Ethernet Short Ethernet cable Router LAN port (leave WAN empty)
Raspberry Pi 5 USB 3 (blue) Enclosure’s USB cable SSD enclosure USB
Raspberry Pi 5 USB 3 (blue) Direct, or a short USB extension RTL-SDR V4 USB
RTL-SDR V4 SMA Dipole antenna cable Dipole antenna SMA
Raspberry Pi 5 USB 2 (black) T1000-E magnetic cable Hub radio Magnetic pogo pins
Router’s adapter or power bank USB-C Router power cable Router USB-C power

The roof relay powers itself from its panel and batteries, and the family radios charge on any USB charger with their magnetic cables.

Blueprint 2: Cage and caddy drawing

Hub cage is 116.4 × 104 × 69.2 mm; the caddy holds the SSD, SDR and a radioCage, top view: 116.4 mm wide and 104 mm deep, with 8 × 8 mm corner posts, the 97.4 × 85 mm X1202 board outline and four standoffs on a 58 × 49 mm pattern. Cage, side view: 116.4 mm wide and 69.2 mm tall, 64 mm inside between the plates; the UPS board, Pi 5 and cooler stack is about 58 mm tall (measure yours) on 6 mm standoffs. Accessory caddy, top view: 106.8 × 81.1 mm with an SSD enclosure pocket of 100 × 32 mm (measure yours), an SDR pocket of 70 × 27 mm (measure) and a T1000-E slot 22 mm deep. Pockets are 14 mm deep and cable exits face the hub. Notes: all sizes in mm; plates 2.6 thick; posts 8 × 8 with M3 pilots; sides stay open so every port is reachable; dashed grey marks sizes to measure before printing, which you edit at the top of the .scad file.CAGE · TOP VIEWX1202 outline97.4 × 8558 × 49 standoffs104116.4CAGE · SIDE VIEWUPS board + Pi 5 + cooler58 tall, measure your stack6 mm standoffs64 inside69.2116.4ACCESSORY CADDY · TOP VIEWSSD enclosure pocket100 × 32, measure yoursSDR pocket70 × 27, measureT1000-E slot, 22 deep106.881.1Pockets 14 deep; cable exits face the hub.NOTESAll sizes in mm.Plates 2.6 thick; posts 8 × 8 with M3 pilots.Sides stay open, so every port is reachable.Dashed grey = sizes to measure before printing.Edit them at the top of the .scad file.
Full prototype cage and caddy · top and side views, mm

The cage is open on all four sides, so every port and the UPS power jack stay reachable without exact cutouts. It is sized from the X1202’s published 97.4 × 85 mm board (source) and the Pi 5’s 58 × 49 mm hole pattern.

Four values are placeholders you must measure before printing:

Value in the .scad file Default (mm) What to measure
pi_off_x, pi_off_y 6.2, 14.5 Distance from the X1202’s board edges to the Pi 5’s board edges once stacked
base_standoff_h 6 Clearance needed under the X1202 (solder joints, battery holders)
stack_h 58 Bottom of the X1202 to the top of the Pi’s cooler, plus 4 mm air gap
ssd_l, ssd_w, sdr_l, sdr_w 100, 32, 70, 27 Your SSD enclosure and RTL-SDR dongle

Blueprint 3: 3D-printable cage and caddy

The printed cage holds the Pi and UPS board stack, and the caddy keeps the SSD, weather receiver and a radio tidy beside it. The print files, haven_full_cage_base.stl, haven_full_cage_top.stl and haven_full_caddy.stl, and the editable source haven_full_hub.scad will be published here alongside the guide.

Setting Value
Material PETG (handles the Pi and battery heat better than PLA)
Layer height 0.2 mm
Walls 3 perimeters; 4 for the cage posts
Infill 25%
Supports None needed
Orientation Cage base: plate on the bed, posts up. Top plate: label side on the bed. Caddy: floor on the bed.
Bed size needed At least 120 × 110 mm

Hardware: 4 M2.5 × 6 mm screws for the board stack, 4 M3 × 8 mm screws to fix the top plate to the posts, and 4 self-adhesive rubber feet 10 mm across (the base has recesses for them).

Assembly order:

  1. Measure your stacked X1202 and Pi 5, enter the values from the table above in the .scad file, and export new STLs with the free OpenSCAD program.
  2. Print one cage base first and test-fit the board stack before printing the rest.
  3. Screw the X1202 and Pi stack onto the standoffs, connect all cables, then screw on the top plate.
  4. Set the caddy beside the cage on the side with the Pi’s USB ports, so the short cables reach.

Build steps

Plan on a weekend: one day for the hub and network, one for the radios, roof relay and weather alerts. If you built the bare minimum version, skip the steps marked (done in Stage 1) and keep its library, Mumble server and channel.

1. Assemble the hub

  1. Fit the active cooler to the Pi 5.
  2. Mount the X1202 UPS board under the Pi following the Geekworm wiki (wiki.geekworm.com/X1202). Insert the four 18650 cells, checking the polarity marks.
  3. Put the stack in the metal case.
  4. Plug power into the UPS board’s USB-C or DC jack, never the Pi’s own USB-C port. Geekworm warns against powering both.
  5. Put the SSD in the USB enclosure and plug it into one of the Pi’s blue USB 3 ports.

2. Load and update the operating system (done in Stage 1)

Flash Raspberry Pi OS Lite (64-bit) to the microSD card with Raspberry Pi Imager, hostname haven, SSH enabled, home Wi-Fi set. Then:

sudo apt update && sudo apt full-upgrade -y
sudo reboot

3. Prepare the SSD

  1. Find the drive name (usually sda) with lsblk.
  2. Format it and mount it at /srv/haven (this erases the drive):
sudo mkfs.ext4 -L haven /dev/sda
sudo mkdir -p /srv/haven
echo 'LABEL=haven /srv/haven ext4 defaults,nofail 0 2' | sudo tee -a /etc/fstab
sudo mount -a
sudo chown -R $USER:$USER /srv/haven
mkdir -p /srv/haven/library /srv/haven/files /srv/haven/models

If you’re upgrading from the bare minimum build, move the library over with mv ~/library/*.zim /srv/haven/library/.

4. Load the library and map files

  1. Install Kiwix if needed: sudo apt install -y kiwix-tools

  2. From download.kiwix.org/zim/, download into /srv/haven/library with wget -c. With 1TB you can use the full English Wikipedia with pictures (wikipedia_en_all_maxi), plus WikiMed and Wikivoyage.

  3. Download offline map files for your state into /srv/haven/files. OsmAnd .obf files can be imported from a phone’s downloads folder.

  4. Point the Kiwix service at the SSD. Edit /etc/systemd/system/kiwix.service (create it as in the bare minimum guide if you don’t have it) so the start line reads:

    ExecStart=/bin/sh -c '/usr/bin/kiwix-serve --port=8080 /srv/haven/library/*.zim'
    sudo systemctl daemon-reload && sudo systemctl enable --now kiwix

5. Add a home page and file downloads

  1. Install a small web server: sudo apt install -y nginx

  2. Replace the default page so phones see one Haven home page:

    sudo nano /var/www/html/index.html
    <!doctype html><meta name="viewport" content="width=device-width">
    <h1>Haven</h1>
    <p><a href="http://haven.lan:8080">Library</a></p>
    <p><a href="http://haven.lan:8081">Ask Haven AI</a></p>
    <p><a href="/files/">Map and file downloads</a></p>
  3. Serve the downloads folder. In /etc/nginx/sites-available/default, inside the server { } block, add:

    location /files/ { alias /srv/haven/files/; autoindex on; }
    sudo systemctl reload nginx

6. Install the walkie-talkie server (done in Stage 1)

sudo apt install -y mumble-server
sudo dpkg-reconfigure mumble-server

7. Install AI on the hub

This runs a small model with llama.cpp’s built-in chat page. Expect slower answers than on a phone; measure it in the tests.

sudo apt install -y git cmake build-essential
git clone https://github.com/ggml-org/llama.cpp ~/llama.cpp
cd ~/llama.cpp && cmake -B build && cmake --build build --config Release -j4
  1. From Hugging Face, download a small instruction model in GGUF format, about 3B parameters at 4-bit (Q4_K_M), into /srv/haven/models. Read its license file before you use it.

  2. Create /etc/systemd/system/haven-ai.service (replace yourusername and the model file name):

    [Unit]
    Description=Haven AI
    After=network.target
    
    [Service]
    User=yourusername
    ExecStart=/home/yourusername/llama.cpp/build/bin/llama-server -m /srv/haven/models/MODEL.gguf --host 0.0.0.0 --port 8081 -c 2048
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    sudo systemctl daemon-reload && sudo systemctl enable --now haven-ai

8. Set up the router

  1. Power the Beryl AX and join its default Wi-Fi (the name and password are on its label). Open 192.168.8.1 and set an admin password.
  2. Under Wireless, rename both bands to HavenHub and set your password.
  3. Connect the Pi to one of the router’s Ethernet ports. Leave the WAN (internet) port empty.
  4. Under Network, then LAN, reserve a fixed address for the Pi (for example 192.168.8.10) and add a local name entry haven.lan pointing to it, if your firmware version offers custom DNS entries. Otherwise, use the IP address everywhere this guide says haven.lan.
  5. On the Pi, turn off its own hotspot if you made one: sudo nmcli connection delete Hotspot
  6. For outages, plan to run the router from a USB-C power bank of 100Wh or less. Check the router’s power rating before relying on it.

9. Set up the radios

  1. Charge all five T1000-E radios and the solar relay.

  2. In the Meshtastic app, pair each radio in turn. On each, set Region: US and join the private channel (create it once, then share the QR code).

  3. Set the hub radio and family radios to role CLIENT. Give each a name, such as Hub, Dad, Mom.

  4. Plug the hub radio into a Pi USB port with its magnetic cable.

  5. Install the Meshtastic command-line tool on the Pi and confirm it sees the radio:

    sudo apt install -y pipx && pipx ensurepath
    pipx install meshtastic
    meshtastic --info

10. Install the roof relay

  1. Pair the Solar Node P1-Pro, set Region: US, join the same channel, and set its role to ROUTER, Meshtastic’s role for a fixed, well-placed relay.
  2. Mount it on the bracket as high as you safely can, panel facing south, antenna vertical. Use its included antenna.

11. Set up weather alerts

  1. Install the RTL-SDR Blog V4 drivers by following the V4 user guide at rtl-sdr.com (the V4 needs these instead of the stock drivers), then the decoder: sudo apt install -y multimon-ng

  2. Plug the SDR into the Pi and set the dipole antenna up vertically, near a window or outside.

  3. Look up the NOAA Weather Radio station that covers your area and note its frequency (between 162.400 and 162.550 MHz).

  4. Create /home/yourusername/weather-alerts.sh (replace the frequency with yours):

    #!/bin/bash
    rtl_fm -f 162.550M -s 22050 - \
     | multimon-ng -t raw -a EAS - \
     | grep --line-buffered 'EAS:' \
     | while read -r line; do
         meshtastic --sendtext "WEATHER ALERT: ${line:0:180}"
       done
  5. Make it executable (chmod +x ~/weather-alerts.sh) and run it as a service the same way as Kiwix, with ExecStart=/home/yourusername/weather-alerts.sh.

  6. The alert arrives as raw alert codes. A decoder such as dsame3 can turn them into plain English later.

12. Finish the kit

  1. Print and laminate the wall card: network name and password, http://haven.lan, the Mumble address, and the Meshtastic channel QR code.
  2. Put a spare radio and a backup copy of the microSD card in the Faraday bag. Test the bag by trying to message the sealed radio.
  3. On each phone: join HavenHub, bookmark http://haven.lan, add the Mumble server at haven.lan port 64738, and install the offline AI app as a backup.

Tests that prove it works

Run every test with your home internet unplugged, and record each result.

  • Home page: five phones open http://haven.lan at once and load the library, AI page and file downloads.
  • Wi-Fi coverage: walk the house and yard and mark where the library stops loading.
  • Push-to-talk: three phones talk on Mumble from different rooms and the yard.
  • Hub AI: ask three real questions from a phone browser. Record seconds to the first word and whether the answers are right.
  • Mesh range: with the roof relay up, carry a family radio away from the house and note the farthest point messages still arrive. Repeat with the relay unplugged to see the difference.
  • Location: confirm every family radio’s position shows on the Meshtastic map.
  • Weather alerts: leave the alert service running through a NOAA weekly test broadcast and confirm the message reaches every radio.
  • Power outage: flip the breaker or unplug the hub and router power. Record how long the hub runs on the UPS board and the router on the power bank.
  • Restart: after power returns, confirm the Wi-Fi, library, Mumble, AI and alert services all come back on their own.
  • Faraday bag: message the sealed spare radio and confirm nothing gets through, including after folding the bag 20 times.

Notes and cautions

  • Radio rules: buy radios that are FCC-certified, as the T1000-E is. Use the relay’s included antenna; a different antenna can change a device’s certification.
  • Batteries: the UPS cells, relay batteries and radios all contain lithium. Use protected cells from a reputable seller, ship them by ground only, follow UN 38.3 rules, and keep each pack under 100Wh.
  • Voice range: push-to-talk works only within the router’s Wi-Fi. Long-distance contact is text and location over the mesh.
  • Hub AI speed: a Pi runs a 3B model slowly. If the test answers are too slow, keep AI on the phones and drop the 8GB Pi for a 4GB one.
  • Weather alerts: the script forwards raw alert codes. Treat it as an extra warning, never a replacement for official alerts.
  • Content licensing: Wikipedia-family files and OpenStreetMap maps can be shared with attribution. Check each AI model’s license file before you use it.
  • Roof work: use a stable ladder, have a second person present, and stay well away from power lines.