Add comprehensive hardware backend map with fleet registry

13 files documenting the full BlackRoad device fleet:
- HARDWARE_BACKEND_MAP.md: Master reference (21 devices, ~135 TOPS AI)
- fleet-registry.yaml: Machine-readable fleet definition (v2.0.0)
- devices/: Per-category docs (Pi cluster, cloud, edge, MCUs, IoT, consumer)
- network/: Topology diagram and services map
- accelerators/: AI compute inventory (Hailo-8, Jetson, M1, Ethos-U55)
- scripts/: hardware-inventory.sh and fleet-health-check.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alexa Amundson
2026-02-20 23:17:17 -06:00
parent ccd429b89a
commit 9ad83a06cf
13 changed files with 2281 additions and 0 deletions

View File

@@ -0,0 +1,415 @@
# BlackRoad Hardware Backend Map
**Canonical source of truth for all BlackRoad physical infrastructure.**
| Field | Value |
|-------|-------|
| Owner | BlackRoad OS, Inc. |
| Updated | 2026-02-20 |
| Fleet Version | 2.0.0 |
| Total Devices | 21 |
| Total AI Compute | ~135 TOPS |
| Network | 192.168.4.0/24 LAN + Tailscale mesh |
---
## 1. Fleet Summary
| # | Name | Type | Hardware | IP (Local) | IP (Tailscale) | Accelerator | Role | Status |
|---|------|------|----------|------------|----------------|-------------|------|--------|
| 1 | Cecilia | Pi 5 | 8GB + Hailo-8 + 500GB NVMe | 192.168.4.89 | 100.72.180.98 | Hailo-8 26 TOPS | Primary AI / CECE OS | Active |
| 2 | Octavia | Pi 5 | 8GB + Pironman + Hailo-8 | 192.168.4.38 | 100.83.149.86 | Hailo-8 26 TOPS | AI Inference | Active |
| 3 | Lucidia | Pi 5 | 8GB + ElectroCookie | 192.168.4.81 | 100.66.235.47 | — | NATS + Ollama Brain | Active |
| 4 | Aria | Pi 5 | 8GB + Pironman + Hailo-8 | 192.168.4.82 | 100.109.14.17 | Hailo-8 26 TOPS | API Services | Active |
| 5 | Anastasia | Pi 5 | 8GB + Pironman + NVMe | 192.168.4.33 | — | — | AI Inference Secondary | Active |
| 6 | Cordelia | Pi 5 | 8GB | 192.168.4.27 | — | — | Orchestration | Active |
| 7 | Alice | Pi 400 | 4GB | 192.168.4.49 | 100.77.210.18 | — | Gateway / Auth | Active |
| 8 | Olympia | Pi 4B | PiKVM | — | — | — | KVM Console | Offline |
| 9 | Codex-Infinity | DO Droplet | 1 vCPU / 1GB | 159.65.43.12 | 100.108.132.8 | — | Codex Server | Active |
| 10 | Shellfish | DO Droplet | 1 vCPU / 1GB | 174.138.44.45 | 100.94.33.37 | — | Cloud Edge | Active |
| 11 | Jetson-Agent | Jetson Orin Nano | 8GB + GPU | — | — | 40 TOPS GPU | Agent UI / Inference | Pending |
| 12 | Alexandria | MacBook Pro M1 | 8GB | 192.168.4.28 | — | M1 Neural Engine 15.8 TOPS | Operator Workstation | Active |
| 13 | Athena | Heltec LoRa ESP32 | ESP32 + SX1276 | 192.168.4.45 | — | — | LoRa Mesh Node | Active |
| 14 | Persephone | Sipeed RISC-V | — | — | — | — | Portable Compute | Active |
| 15 | Iris | Roku | — | 192.168.4.26 | — | — | Streaming | Active |
| 16 | Ares | Xbox | — | 192.168.4.90 | — | — | Gaming | Active |
| 17 | Phoebe | iPhone | — | 192.168.4.88 | — | — | Mobile | Active |
| 18 | Calliope | Unidentified IoT | — | — | — | — | IoT Node | Active |
| 19 | Sophia | Unidentified IoT | — | — | — | — | IoT Node | Active |
| 20 | SenseCAP W1-A | IoT AI Agent | ESP32-S3 + HX6538 | — | — | Ethos-U55 ~1 TOPS | Vision AI | Returned |
| 21 | Pi-Holo | Pi 5 (planned) | 8GB | — | — | — | Hologram Renderer | Planned |
---
## 2. Production Cluster — Raspberry Pis
Eight Raspberry Pi nodes form the always-on backbone.
| Node | Board | RAM | Storage | Case | Accelerator | Cooling | PSU | Role |
|------|-------|-----|---------|------|-------------|---------|-----|------|
| Cecilia | Pi 5 | 8GB | 500GB NVMe | Standard | Hailo-8 M.2 (26 TOPS) | Active fan | 27W USB-C | Primary AI, CECE OS |
| Octavia | Pi 5 | 8GB | 235GB SD | Pironman | Hailo-8 M.2 (26 TOPS) | Pironman dual-fan tower | 27W USB-C | AI Inference |
| Lucidia | Pi 5 | 8GB | 117GB SD | ElectroCookie Radial Tower | — | ElectroCookie tower | 27W USB-C | NATS bus, Ollama |
| Aria | Pi 5 | 8GB | 29GB SD | Pironman | Hailo-8 M.2 (26 TOPS) | Pironman dual-fan tower | 27W USB-C | API Services |
| Anastasia | Pi 5 | 8GB | NVMe (Pironman) | Pironman | — | Pironman dual-fan tower | 27W USB-C | AI Inference Secondary |
| Cordelia | Pi 5 | 8GB | SD | Standard | — | Active cooler | 27W USB-C | Orchestration |
| Alice | Pi 400 | 4GB | 32GB SD | Built-in keyboard | — | Passive (built-in) | 15W USB-C | Gateway, Auth |
| Olympia | Pi 4B | 4GB | SD | PiKVM case | — | Passive | 15W USB-C | KVM Console |
### SSH Access
```bash
ssh alice # 192.168.4.49
ssh lucidia # 192.168.4.81 (or lucidia-ts for Tailscale)
ssh aria # 192.168.4.82 (or aria-ts)
ssh cecilia # 192.168.4.89 (or cecilia-ts)
ssh octavia # 192.168.4.38 (or octavia-ts)
ssh anastasia # 192.168.4.33
ssh cordelia # 192.168.4.27
```
### OS Baseline
All Pis run Debian 12 (Bookworm) with:
- Kernel: 6.1 LTS
- User: `alexandria` (uid 1000)
- SSH: key-only, no password auth
- Firewall: UFW (deny by default, allow 22/80/443/41641)
- Time sync: chrony → time.cloudflare.com
- Auto-updates: unattended-upgrades + fail2ban
---
## 3. Cloud Compute
Two DigitalOcean droplets provide cloud presence.
| Node | Region | Spec | Public IP | Tailscale IP | Storage | Role |
|------|--------|------|-----------|--------------|---------|------|
| Codex-Infinity | NYC | 1 vCPU / 1GB | 159.65.43.12 | 100.108.132.8 | 78GB SSD | Codex DB, cloud services |
| Shellfish | NYC | 1 vCPU / 1GB | 174.138.44.45 | 100.94.33.37 | 25GB SSD | Edge compute, tunnels |
### OS Baseline
- Debian 12 (Bookworm), Kernel 5.15 LTS
- Same user/SSH/firewall config as Pis
- Cloudflare tunnels for ingress
---
## 4. Edge Compute
| Node | Hardware | Status | Purpose |
|------|----------|--------|---------|
| Jetson-Agent | NVIDIA Jetson Orin Nano 8GB | Pending setup | Agent UI on 10.1" touch, GPU inference |
| Pi-Holo | Pi 5 8GB (planned) | Planned | Hologram renderer on 4" 720x720 display |
| Pi-Ops | Pi 5 8GB (planned) | Planned | MQTT broker + ops monitor on 9.3" ultrawide |
| Pi-Zero-Sim | Pi Zero W | Ready | Lightweight sim output on 7" display |
| Persephone | Sipeed RISC-V | Active | Portable RISC-V compute experiments |
---
## 5. Microcontroller Array
| MCU | Chip | Qty | Connectivity | Form Factor | Purpose |
|-----|------|-----|--------------|-------------|---------|
| ESP32-S3 SuperMini | ESP32-S3 | 5 | WiFi + BLE | Tiny USB-C | General IoT |
| ESP32-S3 N8R8 | ESP32-S3 | 2 | WiFi + BLE + OTG | Dev board | 8MB PSRAM apps |
| ESP32 Touchscreen | ESP32 | 3 | WiFi + BLE | 2.8" TFT (320x240) | Standalone sensor display |
| Athena (Heltec LoRa) | ESP32 + SX1276 | 1 | WiFi + LoRa 868/915MHz | OLED 0.96" | LoRa mesh node |
| M5Stack Atom Lite | ESP32-PICO | 2 | WiFi + BLE | 24x24mm cube | Button/LED/Grove |
| Raspberry Pi Pico | RP2040 | 2 | USB only | Breadboard | MicroPython prototyping |
| ATTINY88 | AVR 8-bit | 3 | None (I2C/SPI slave) | DIP | Low-power peripherals |
| ELEGOO UNO R3 | ATmega328P | 2 | USB | Arduino form factor | Starter kit projects |
| WCH CH32V003 | RISC-V | 1 | USB | Minimal | Ultra-cheap RISC-V |
**Total MCUs: 21 units**
### Flashing Tools
- `esptool.py` / `espflash` for ESP32 family
- `arduino-cli` for Arduino/ATmega boards
- PlatformIO for cross-platform builds
- `picotool` for Pico RP2040
---
## 6. IoT & Sensor Devices
### SenseCAP Watcher W1-A
| Field | Value |
|-------|-------|
| Name | SenseCAP Watcher W1-A |
| Type | IoT AI Agent |
| Status | **Returned** (August 2025) |
| Processor | ESP32-S3 |
| AI Chip | Himax WiseEye2 HX6538 (Arm Cortex-M55 + Arm Ethos-U55 NPU) |
| AI Compute | ~1 TOPS (Ethos-U55) |
| Camera | Image recognition (person/animal/gesture detection) |
| Microphone | Voice-activated commands |
| Speaker | Audio output |
| Touch | Capacitive touch interface |
| Connectivity | WiFi |
| Features | On-device AI inference, SenseCraft AI, no-code workflows, OTA |
| Notes | Purchased and returned Aug 2025. Standalone edge AI unit with dedicated Himax coprocessor. Could be re-acquired for doorbell/monitor use case. |
### Sensor Inventory
| Sensor | Type | Interface | Attached To |
|--------|------|-----------|-------------|
| DHT22 | Temperature / Humidity | GPIO | Available |
| Radar (HLK-LD2410 / RCWL-0516) | Presence / Motion | GPIO/UART | Available |
| GPS Module | NMEA Location | UART | Available |
| ToF (VL53L0X / VL53L1X) | Distance (mm) | I2C | Available |
| AS7341 | Spectral 11-channel | I2C | Available |
| Pi Camera V2 | 8MP IMX219 | CSI | Available |
| USB + I2S MEMS Mics | Audio capture | USB / I2S | Available |
| Ultrasonic | Distance | GPIO | ELEGOO kit |
| PIR | Motion | GPIO | ELEGOO kit |
| Photoresistor | Light level | ADC | ELEGOO kit |
| IR Receiver | Remote control | GPIO | ELEGOO kit |
| Joystick | Analog input | ADC | ELEGOO kit |
### IoT Nodes (Unidentified)
| Name | Platform | Status | Notes |
|------|----------|--------|-------|
| Calliope | Unknown IoT | Active | Registered in agent registry, needs identification |
| Sophia | Unknown IoT | Active | Registered in agent registry, needs identification |
---
## 7. Consumer Devices
| Name | Hardware | IP | Role | Notes |
|------|----------|-----|------|-------|
| Iris | Roku | 192.168.4.26 | Streaming | Media playback |
| Ares | Xbox | 192.168.4.90 | Gaming | Entertainment |
| Phoebe | iPhone | 192.168.4.88 | Mobile | Monitoring, OOB access |
| Alexandria | MacBook Pro M1 8GB | 192.168.4.28 | Primary operator | Development, orchestration |
| MacBook #1 | ~2014 Intel MacBook | — | Monitoring station | Secondary display |
| MacBook #2 | ~2014 Intel MacBook | — | Agent orchestrator | Secondary display |
| iPad Pro | 2015 iPad Pro | — | Tablet | Touch interface |
---
## 8. AI Accelerator Summary
| Accelerator | Location | Architecture | Compute | Status |
|-------------|----------|--------------|---------|--------|
| Hailo-8 M.2 #1 | Cecilia | Hailo-8 (serial: HLLWM2B233704667) | 26 TOPS | Active |
| Hailo-8 M.2 #2 | Octavia | Hailo-8 (serial: HLLWM2B233704606) | 26 TOPS | Active |
| Hailo-8 M.2 #3 | Aria | Hailo-8 M.2 | 26 TOPS | Active |
| Jetson Orin Nano | Jetson-Agent | NVIDIA Ampere GPU | 40 TOPS | Pending |
| Apple M1 Neural Engine | Alexandria | Apple Neural Engine | 15.8 TOPS | Active |
| Himax Ethos-U55 | SenseCAP W1-A | Arm Ethos-U55 NPU | ~1 TOPS | Returned |
### Total AI Compute Budget
| Category | TOPS |
|----------|------|
| Hailo-8 (3 units) | 78 |
| Jetson Orin Nano | 40 |
| Apple M1 Neural Engine | 15.8 |
| Ethos-U55 (returned) | ~1 |
| **Total (active)** | **~134 TOPS** |
| **Total (including returned/pending)** | **~135 TOPS** |
### Model Compatibility
| Model | Hailo-8 | Jetson | M1 |
|-------|---------|--------|----|
| YOLOv5m | HEF compiled | TensorRT | CoreML |
| YOLOv8 | HEF compiled | TensorRT | CoreML |
| Llama 2 7B | — | CUDA | Ollama (Metal) |
| Whisper | — | CUDA | Ollama |
| ResNet-50 | HEF compiled | TensorRT | CoreML |
---
## 9. Network Topology
### LAN (192.168.4.0/24)
```
┌──────────────┐
│ TP-Link │
│ Router/WiFi │
│ 192.168.4.1 │
└──────┬───────┘
┌──────────┴──────────┐
│ TP-Link TL-SG105 │
│ 5-Port Gigabit SW │
└┬────┬────┬────┬────┘
│ │ │ │
┌──────┘ │ │ └──────┐
│ │ │ │
┌────┴────┐ ┌───┴──┐ ┌┴────┐ ┌──┴──────┐
│ Cecilia │ │Lucia │ │Aria │ │ Octavia │
│ .89 │ │ .81 │ │ .82 │ │ .38 │
│ Hailo-8 │ │ NATS │ │Hail │ │ Hailo-8 │
└─────────┘ └──────┘ └─────┘ └─────────┘
WiFi:
┌─────────┐ ┌──────┐ ┌───────┐ ┌───────────┐
│ Alice │ │Anast.│ │Cordel.│ │Alexandria │
│ .49 │ │ .33 │ │ .27 │ │ .28 │
└─────────┘ └──────┘ └───────┘ └───────────┘
┌─────────┐ ┌──────┐ ┌───────┐ ┌───────────┐
│ Athena │ │Phoebe│ │ Ares │ │ Iris │
│ .45 │ │ .88 │ │ .90 │ │ .26 │
└─────────┘ └──────┘ └───────┘ └───────────┘
```
### Tailscale Mesh Overlay
| Node | Tailscale IP | Connected |
|------|-------------|-----------|
| Cecilia | 100.72.180.98 | Yes |
| Lucidia | 100.66.235.47 | Yes |
| Octavia | 100.83.149.86 | Yes |
| Aria | 100.109.14.17 | Yes |
| Alice | 100.77.210.18 | Yes |
| Codex-Infinity | 100.108.132.8 | Yes |
| Shellfish | 100.94.33.37 | Yes |
### DNS & Tunnels
- Cloudflare DNS: `blackroad.io` zone
- Cloudflare tunnels per node: `tunnel-{hostname}.blackroad.io`
- Headscale: self-hosted coordination on Alice (planned)
---
## 10. Storage Infrastructure
| Node | Type | Capacity | Interface | Used | Notes |
|------|------|----------|-----------|------|-------|
| Cecilia | NVMe M.2 | 500GB | PCIe | ~50% | Crucial P310 |
| Anastasia | NVMe M.2 | 1TB | PCIe (Pironman) | — | Crucial P310 |
| Octavia | microSD | 235GB | SD slot | ~90% | Samsung EVO Select, needs cleanup |
| Lucidia | microSD | 117GB | SD slot | ~60% | Samsung EVO Select |
| Alice | microSD | 32GB | SD slot | ~93% | Needs cleanup |
| Aria | microSD | 29GB | SD slot | ~70% | Samsung EVO Select |
| Codex-Infinity | SSD | 78GB | Cloud block | ~40% | DigitalOcean |
| Shellfish | SSD | 25GB | Cloud block | ~50% | DigitalOcean |
---
## 11. Power & Cooling
| Node | PSU | Watts | Cooling |
|------|-----|-------|---------|
| Pi 5 nodes (Cecilia, Lucidia, Aria, Octavia, Anastasia, Cordelia) | Geekworm 27W 5V/5A USB-C | 27W | Pironman dual-fan / ElectroCookie tower / Active cooler |
| Alice (Pi 400) | 5V/3A USB-C | 15W | Passive (built-in) |
| Olympia (Pi 4B) | 5V/3A USB-C | 15W | Passive |
| Jetson Orin Nano | Barrel jack | 15W | Dev kit heatsink + fan |
| Pi Zero W | 5V/2A Micro USB | 10W | None |
| Displays | Various 5V wall adapters | 5-15W each | N/A |
| DigitalOcean droplets | Cloud-managed | — | Cloud-managed |
### Total Power Budget (On-Premises)
| Category | Devices | Est. Draw |
|----------|---------|-----------|
| Pi 5 cluster (6) | Cecilia, Lucidia, Aria, Octavia, Anastasia, Cordelia | ~60W peak |
| Pi 400 + Pi 4B | Alice, Olympia | ~20W peak |
| Jetson Orin Nano | Jetson-Agent | ~15W peak |
| Displays (5) | Various | ~30W |
| Networking | Router + Switch | ~15W |
| Mac + peripherals | Alexandria | ~30W |
| **Total** | | **~170W peak** |
---
## 12. Display Inventory
| Size | Resolution | Model | Assigned To | Interface |
|------|-----------|-------|-------------|-----------|
| 10.1" | 1024x600 | ROADOM Touch IPS | Jetson-Agent | HDMI + USB touch |
| 9.3" | 1600x600 | Waveshare Ultrawide | Pi-Ops (shared via HDMI switch) | HDMI |
| 7" | 1024x600 | Waveshare Touch | Pi-Zero-Sim | HDMI + USB touch |
| 4" | 720x720 | Waveshare Square | Pi-Holo | HDMI |
| 2.8" | 320x240 | ESP32 Touch TFT (x3) | ESP32 MCUs | SPI |
| 0.96" | 128x64 | OLED (x3) | Arduino / ESP32 | I2C |
### Video Routing
- UGREEN HDMI Switch 5-in-1: shares 9.3" between Pi-Ops and Pi 400
- WAVLINK HDMI Splitter: clone Pi-Holo to second display
- WARRKY USB-C to HDMI (2-pack): Mac to display
- JSAUX Micro HDMI adapters: Pi to display
---
## 13. Management Tools
| Script | Location | Purpose |
|--------|----------|---------|
| `hardware.sh` | `~/hardware.sh` | Interactive fleet overview menu |
| `hailo.sh` | `~/hailo.sh` | Hailo-8 detection, benchmarks, inference |
| `mcus.sh` | `~/mcus.sh` | Microcontroller fleet status |
| `sensors.sh` | `~/sensors.sh` | Sensor inventory and live readings |
| `espflash.sh` | `~/espflash.sh` | ESP32 flashing tool |
| `i2c.sh` | `~/i2c.sh` | I2C bus scanning |
| `lora.sh` | `~/lora.sh` | LoRa network tools |
| `blackroad-network-scan.sh` | `~/blackroad-network-scan.sh` | ARP + ping sweep + Tailscale status |
| `blackroad-network-discovery.sh` | `~/blackroad-network-discovery.sh` | SSH probe all devices |
| `pifleet.sh` | `~/pifleet.sh` | Pi-specific fleet management |
| `hardware-inventory.sh` | `hardware/scripts/hardware-inventory.sh` | Registry query + live scan (this repo) |
| `fleet-health-check.sh` | `hardware/scripts/fleet-health-check.sh` | Ping + port check (this repo) |
---
## 14. Provisioning Phases
All nodes follow a 4-phase provisioning process:
1. **Base Image** — Flash Debian 12, create `alexandria` user, deploy SSH keys, enable UFW
2. **Fleet Identity** — Install Tailscale, configure `/etc/hosts`, deploy SSH aliases, set MOTD banner
3. **Role Provisioning** — Install role-specific packages/services, deploy systemd units, configure Cloudflare tunnel
4. **Cloud Integration** — Deploy GitHub deploy key, register in fleet inventory, verify connectivity
See `~/blackroad-fleet.yaml` for the full provisioning spec.
---
## Appendix A: IP Address Registry
### LAN (192.168.4.0/24)
| IP | Hostname | Type |
|----|----------|------|
| 192.168.4.1 | Router | TP-Link |
| 192.168.4.26 | Iris | Roku |
| 192.168.4.27 | Cordelia | Pi 5 |
| 192.168.4.28 | Alexandria | MacBook Pro M1 |
| 192.168.4.33 | Anastasia | Pi 5 |
| 192.168.4.38 | Octavia | Pi 5 |
| 192.168.4.45 | Athena | Heltec LoRa ESP32 |
| 192.168.4.49 | Alice | Pi 400 |
| 192.168.4.81 | Lucidia | Pi 5 |
| 192.168.4.82 | Aria | Pi 5 |
| 192.168.4.88 | Phoebe | iPhone |
| 192.168.4.89 | Cecilia | Pi 5 |
| 192.168.4.90 | Ares | Xbox |
### Cloud
| IP | Hostname | Provider |
|----|----------|----------|
| 159.65.43.12 | Codex-Infinity | DigitalOcean |
| 174.138.44.45 | Shellfish | DigitalOcean |
### Tailscale (100.x.x.x)
| IP | Hostname |
|----|----------|
| 100.66.235.47 | Lucidia |
| 100.72.180.98 | Cecilia |
| 100.77.210.18 | Alice |
| 100.83.149.86 | Octavia |
| 100.94.33.37 | Shellfish |
| 100.108.132.8 | Codex-Infinity |
| 100.109.14.17 | Aria |

View File

@@ -0,0 +1,196 @@
# AI Compute Accelerators
Total fleet AI compute: **~135 TOPS** across Hailo-8, NVIDIA Jetson, Apple M1, and Arm Ethos-U55.
---
## Accelerator Inventory
| # | Accelerator | Node | Architecture | TOPS | Interface | Serial | Status |
|---|-------------|------|-------------|------|-----------|--------|--------|
| 1 | Hailo-8 M.2 | Cecilia | Hailo-8 | 26 | M.2 PCIe | HLLWM2B233704667 | Active |
| 2 | Hailo-8 M.2 | Octavia | Hailo-8 | 26 | M.2 PCIe | HLLWM2B233704606 | Active |
| 3 | Hailo-8 M.2 | Aria | Hailo-8 | 26 | M.2 PCIe | — | Active |
| 4 | Jetson Orin Nano GPU | Jetson-Agent | NVIDIA Ampere | 40 | Onboard | — | Pending |
| 5 | Apple M1 Neural Engine | Alexandria | Apple NE | 15.8 | Onboard | — | Active |
| 6 | Himax Ethos-U55 NPU | SenseCAP W1-A | Arm Ethos-U55 | ~1 | Onboard | — | Returned |
### Compute Budget
| Category | TOPS | Status |
|----------|------|--------|
| Hailo-8 (3x) | 78 | Active |
| NVIDIA Jetson Orin Nano | 40 | Pending setup |
| Apple M1 Neural Engine | 15.8 | Active |
| Arm Ethos-U55 | ~1 | Returned |
| **Total Active** | **93.8** | |
| **Total (incl. pending)** | **~135** | |
---
## Hailo-8 M.2 Modules (3 units)
### Specifications
| Spec | Value |
|------|-------|
| Architecture | Hailo-8 |
| Compute | 26 TOPS (INT8) |
| Interface | M.2 Key M (PCIe Gen 3.0 x1) |
| Power | ~2.5W typical |
| Price | $214.99 each |
| Compatible Hosts | Raspberry Pi 5 (via HAT), Pironman case |
### Software Stack
- **HailoRT:** Runtime library for model execution
- **Hailo Model Zoo:** Pre-compiled HEF files
- **Hailo TAPPAS:** Application examples and pipelines
- **Hailo Dataflow Compiler:** Convert ONNX/TF models to HEF format
### Detection & Management
```bash
# Detect Hailo devices
hailortcli scan
# Identify firmware version
hailortcli fw-control identify
# Run inference benchmark
hailortcli benchmark --hef /usr/share/hailo-models/yolov5m_wo_spp_60p.hef
# List installed models
ls /usr/share/hailo-models/*.hef
# Check installed packages
dpkg -l | grep hailo
# Management script
~/hailo.sh
```
### Benchmark Results
Hailo-8 vs NVIDIA Jetson benchmarks (from BlackRoad testing):
- **Power Efficiency:** 15-30x more efficient than NVIDIA Jetson (TOPS/Watt)
- **YOLOv5m:** Real-time 30+ FPS at 2.5W power draw
- **Latency:** Sub-10ms inference for object detection
### Model Compatibility
| Model | Format | Use Case | Status |
|-------|--------|----------|--------|
| YOLOv5m | HEF | Object detection | Compiled |
| YOLOv8n/s/m | HEF | Object detection | Compiled |
| ResNet-50 | HEF | Image classification | Compiled |
| MobileNet v2 | HEF | Classification (lightweight) | Compiled |
| SSD MobileNet | HEF | Detection (lightweight) | Compiled |
| Custom models | ONNX → HEF | Via Dataflow Compiler | Supported |
---
## NVIDIA Jetson Orin Nano
### Specifications
| Spec | Value |
|------|-------|
| GPU | NVIDIA Ampere (1024 CUDA cores) |
| AI Compute | 40 TOPS (INT8) |
| CPU | 6-core Arm Cortex-A78AE |
| RAM | 8GB LPDDR5 |
| Storage | microSD + NVMe M.2 |
| Power | 7-15W configurable TDP |
| Price | $114.29 (base dev kit) |
| Display | HDMI + DisplayPort |
### Software Stack
- **JetPack SDK:** Ubuntu-based OS with CUDA, cuDNN, TensorRT
- **TensorRT:** Optimized inference engine
- **DeepStream:** Video analytics SDK
- **Ollama:** LLM inference via CUDA
### Capabilities
| Task | Framework | Notes |
|------|-----------|-------|
| LLM inference | Ollama (CUDA) | Llama 2 7B, Mistral 7B |
| Object detection | TensorRT | YOLOv8 real-time |
| Speech-to-text | Whisper (CUDA) | Real-time transcription |
| Image generation | Stable Diffusion | Small models only (8GB RAM) |
| Video analytics | DeepStream | Multi-stream pipeline |
### Status
Pending initial setup. Dev kit available with 10.1" ROADOM touchscreen.
---
## Apple M1 Neural Engine
### Specifications
| Spec | Value |
|------|-------|
| Architecture | Apple Neural Engine (16-core) |
| AI Compute | 15.8 TOPS |
| Host | MacBook Pro M1 (Alexandria) |
| Framework | CoreML, MLX |
| Power | Integrated (shared power budget) |
### Capabilities
- CoreML model inference (Vision, NLP, Audio)
- Ollama via Metal GPU acceleration
- MLX framework for on-device ML
- Whisper transcription
- Stable Diffusion (via MLX)
---
## Arm Ethos-U55 NPU (SenseCAP Watcher — Returned)
### Specifications
| Spec | Value |
|------|-------|
| Architecture | Arm Ethos-U55 microNPU |
| Host Processor | Arm Cortex-M55 (Himax HX6538) |
| AI Compute | ~1 TOPS (INT8) |
| Device | SenseCAP Watcher W1-A |
| Status | Returned (August 2025) |
### Capabilities (When Active)
- Person/animal/gesture detection via camera
- Low-power always-on vision inference
- Voice keyword detection
- Designed for battery-powered edge AI
---
## Model Compatibility Matrix
| Model | Hailo-8 (HEF) | Jetson (TRT) | M1 (CoreML) | Ethos-U55 (TFLite) |
|-------|---------------|--------------|-------------|---------------------|
| YOLOv5m | Yes | Yes | Yes | — |
| YOLOv8n | Yes | Yes | Yes | — |
| ResNet-50 | Yes | Yes | Yes | — |
| MobileNet v2 | Yes | Yes | Yes | Yes |
| Llama 2 7B | — | Yes (CUDA) | Yes (Metal) | — |
| Whisper | — | Yes (CUDA) | Yes (Metal) | — |
| Stable Diffusion | — | Yes (limited) | Yes (MLX) | — |
| Person Detection | Yes | Yes | Yes | Yes |
---
## Power Efficiency Comparison
| Accelerator | TOPS | Power (W) | TOPS/W | Notes |
|-------------|------|-----------|--------|-------|
| Hailo-8 | 26 | 2.5 | **10.4** | Best efficiency |
| Jetson Orin Nano | 40 | 15 | 2.7 | Most versatile |
| M1 Neural Engine | 15.8 | ~5 | 3.2 | Integrated in laptop |
| Ethos-U55 | ~1 | 0.05 | 20.0 | Ultra-low-power (returned) |

View File

@@ -0,0 +1,65 @@
# Cloud Compute
**2 DigitalOcean droplets** providing cloud presence and edge compute.
---
## Fleet Overview
| Node | Region | Spec | Public IP | Tailscale IP | Storage | Role | Status |
|------|--------|------|-----------|--------------|---------|------|--------|
| Codex-Infinity | NYC | 1 vCPU / 1GB | 159.65.43.12 | 100.108.132.8 | 78GB SSD | Codex server, oracle | Active |
| Shellfish | NYC | 1 vCPU / 1GB | 174.138.44.45 | 100.94.33.37 | 25GB SSD | Edge compute, tunnels | Active |
---
## Per-Node Details
### Codex-Infinity — Codex Server / Oracle
- **Role:** Codex database host, cloud services oracle
- **Provider:** DigitalOcean
- **Region:** NYC
- **Spec:** 1 vCPU, 1GB RAM, 78GB SSD
- **OS:** Debian 12 (Bookworm), Kernel 5.15 LTS
- **Public IP:** 159.65.43.12
- **Tailscale IP:** 100.108.132.8
- **Services:** codex-db, cloud-services
- **Tunnel:** tunnel-codex.blackroad.io
- **SSH:** `ssh codex-infinity` or `ssh 159.65.43.12`
- **User:** alexandria
### Shellfish — Edge Compute
- **Role:** Cloud edge node, Cloudflare tunnel relay
- **Provider:** DigitalOcean
- **Region:** NYC
- **Spec:** 1 vCPU, 1GB RAM, 25GB SSD
- **OS:** Debian 12 (Bookworm), Kernel 5.15 LTS
- **Public IP:** 174.138.44.45
- **Tailscale IP:** 100.94.33.37
- **Services:** Cloudflare tunnels, edge-agent
- **Tunnel:** tunnel-cadence.blackroad.io
- **SSH:** `ssh shellfish` or `ssh 174.138.44.45`
- **User:** alexandria
---
## Security Baseline
Both droplets follow the standard BlackRoad OS baseline:
- SSH key-only authentication (no passwords)
- UFW firewall: deny by default, allow 22/80/443/41641
- fail2ban enabled
- unattended-upgrades enabled
- chrony time sync to time.cloudflare.com
- Tailscale mesh connected
## Management
```bash
ssh codex-infinity # Direct SSH
ssh shellfish # Direct SSH
doctl compute droplet list # DigitalOcean CLI (if installed)
```

View File

@@ -0,0 +1,89 @@
# Consumer Devices
Non-server devices on the BlackRoad network — workstations, entertainment, mobile.
---
## Overview
| Name | Hardware | IP (Local) | Role | Status |
|------|----------|------------|------|--------|
| Alexandria | MacBook Pro M1 8GB | 192.168.4.28 | Primary operator workstation | Active |
| MacBook #1 | ~2014 Intel MacBook | — | Monitoring station | Available |
| MacBook #2 | ~2014 Intel MacBook | — | Agent orchestrator | Available |
| iPad Pro | 2015 iPad Pro | — | Touch interface | Available |
| Iris | Roku | 192.168.4.26 | Streaming / media | Active |
| Ares | Xbox | 192.168.4.90 | Gaming | Active |
| Phoebe | iPhone | 192.168.4.88 | Mobile access / OOB | Active |
---
## Per-Device Details
### Alexandria — Primary Operator Workstation
- **Hardware:** MacBook Pro M1 (2020/2021)
- **CPU:** Apple M1 (4 performance + 4 efficiency cores)
- **RAM:** 8GB unified memory
- **GPU:** Apple M1 integrated (8-core)
- **AI:** Neural Engine (15.8 TOPS)
- **Storage:** SSD (256GB or 512GB)
- **IP:** 192.168.4.28
- **OS:** macOS
- **Role:** Development, orchestration, fleet management
- **Tools:** Terminal (zsh), VS Code, Claude Code, SSH to all fleet nodes
- **Input:** Apple Magic Keyboard ($98.50), Apple Magic Mouse ($79.99)
- **Docking:** TobenONE 15-in-1 USB-C Dock ($129.99)
- **Notes:** Primary workstation. All scripts and CLI tools run from here.
### MacBook #1 — Monitoring Station
- **Hardware:** ~2014 Intel MacBook
- **Role:** Secondary display for monitoring dashboards
- **Status:** Available for deployment
### MacBook #2 — Agent Orchestrator
- **Hardware:** ~2014 Intel MacBook
- **Role:** Dedicated agent orchestration display
- **Status:** Available for deployment
### iPad Pro — Touch Interface
- **Hardware:** 2015 iPad Pro
- **Role:** Touch-based control interface, remote monitoring
- **Status:** Available
### Iris — Streaming
- **Hardware:** Roku
- **IP:** 192.168.4.26
- **Agent Registry:** Registered as "Iris" (streaming role)
- **Role:** Media playback and streaming
### Ares — Gaming
- **Hardware:** Xbox
- **IP:** 192.168.4.90
- **Agent Registry:** Registered as "Ares" (gaming role)
- **Role:** Entertainment
### Phoebe — Mobile
- **Hardware:** iPhone
- **IP:** 192.168.4.88
- **Agent Registry:** Registered as "Phoebe" (mobile role)
- **Role:** Mobile monitoring, out-of-band access, notifications
---
## Input Peripherals
| Device | Price | Connection | Used With |
|--------|-------|------------|-----------|
| Apple Magic Keyboard | $98.50 | Bluetooth | Alexandria / Jetson |
| Apple Magic Mouse | $79.99 | Bluetooth | Alexandria |
| Logitech H390 USB Headset | $28.84 | USB | Voice I/O for agents |
| Pi 400 Keyboard | $119 | Built-in | Alice (admin console) |
| Apple USB-C SD Reader | $45 | USB-C | Alexandria (flashing) |
| Anker USB 3.0 SD Reader (x2) | — | USB-A | Flashing stations |

View File

@@ -0,0 +1,103 @@
# Edge Compute
Specialized compute nodes for AI inference, visualization, and constellation workstation.
---
## Active Edge Nodes
| Node | Hardware | Accelerator | Display | Status |
|------|----------|-------------|---------|--------|
| Jetson-Agent | NVIDIA Jetson Orin Nano 8GB | 40 TOPS GPU | 10.1" Touch | Pending setup |
| Persephone | Sipeed RISC-V | — | — | Active |
## Planned Constellation Nodes
| Node | Hardware | Display | Purpose | Status |
|------|----------|---------|---------|--------|
| Pi-Holo | Pi 5 8GB | 4" 720x720 Square | Hologram renderer (Pepper's Ghost) | Planned |
| Pi-Ops | Pi 5 8GB | 9.3" 1600x600 Ultrawide | MQTT broker + ops monitor | Planned |
| Pi-Zero-Sim | Pi Zero W | 7" 1024x600 Touch | Lightweight sim output | Ready |
---
## Per-Node Details
### Jetson-Agent — GPU AI Workstation
- **Hardware:** NVIDIA Jetson Orin Nano Developer Kit
- **RAM:** 8GB LPDDR5
- **GPU:** NVIDIA Ampere architecture, 40 TOPS
- **Storage:** microSD + NVMe slot
- **Display:** 10.1" ROADOM Touch IPS (1024x600) via HDMI
- **Input:** Apple Magic Keyboard (Bluetooth), Apple Magic Mouse
- **PSU:** Barrel jack (15W TDP)
- **Cooling:** Dev kit heatsink + fan
- **Status:** Pending initial setup
- **Capabilities:**
- Full CUDA support for LLM inference
- TensorRT optimized model execution
- Real-time object detection (YOLOv8)
- Agent UI touchscreen interface
### Persephone — RISC-V Experimental
- **Hardware:** Sipeed RISC-V board
- **Role:** Portable RISC-V compute experiments
- **Status:** Active in agent registry
- **Notes:** Experimental platform for RISC-V software testing
### Pi-Holo — Hologram Renderer (Planned)
- **Hardware:** Raspberry Pi 5 8GB (new, ready to flash)
- **Display:** 4" Waveshare Square 720x720 (under pyramid)
- **Cooling:** GeeekPi Active Cooler RGB
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Purpose:** Render holographic content via Pepper's Ghost optics
- **Build Materials:** 50x 4" glass mirrors, 5x 6" beveled mirrors, bamboo frame, LED light bases, acrylic risers
- **Camera:** Pi Camera V2 (8MP IMX219) for input tracking
### Pi-Ops — Operations Monitor (Planned)
- **Hardware:** Raspberry Pi 5 8GB (new, ready to flash)
- **Display:** 9.3" Waveshare Ultrawide 1600x600 (shared via UGREEN HDMI switch with Pi 400)
- **Cooling:** ElectroCookie Radial Tower
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Purpose:** MQTT broker (Mosquitto), real-time ops dashboard
- **Services (planned):** Mosquitto, monitoring dashboard
### Pi-Zero-Sim — Simulation Output (Ready)
- **Hardware:** Raspberry Pi Zero W
- **Display:** 7" Waveshare Touch 1024x600
- **PSU:** 5V/2A Micro USB
- **Purpose:** Lightweight simulation and output display
- **Notes:** WiFi-connected (no Ethernet)
---
## Constellation Workstation Layout
```
┌──────────────────────────────────────────────────────────┐
│ BLACKROAD WORKSTATION │
├──────────────────────────────────────────────────────────┤
│ │
│ LEFT CENTER RIGHT │
│ ┌───────┐ ┌──────────┐ ┌───────┐ │
│ │ 4" │ │ 10.1" │ │ 7" │ │
│ │ HOLO │ │ AGENT │ │ SIM │ │
│ │ Pi-5 │ │ JETSON │ │ Pi-0W │ │
│ └───────┘ └──────────┘ └───────┘ │
│ [Pyramid] [Touch UI] [Output] │
│ │
│ ┌────────────────┐ │
│ │ 9.3" OPS │ │
│ │ Pi-5 #2 │ ← MQTT BROKER │
│ └────────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Pi-400 KEYBOARD (Admin/KVM) │ │
│ └──────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```

View File

@@ -0,0 +1,133 @@
# IoT & Sensor Devices
Sensor inventory, IoT nodes, and the SenseCAP Watcher W1-A.
---
## SenseCAP Watcher W1-A
| Field | Value |
|-------|-------|
| **Name** | SenseCAP Watcher W1-A |
| **Manufacturer** | Seeed Studio |
| **Type** | IoT AI Agent |
| **Status** | **Returned** (August 2025) |
| **Processor** | ESP32-S3 |
| **AI Chip** | Himax WiseEye2 HX6538 |
| **AI Architecture** | Arm Cortex-M55 + Arm Ethos-U55 NPU |
| **AI Compute** | ~1 TOPS (Ethos-U55) |
| **Camera** | Built-in (person/animal/gesture detection) |
| **Microphone** | Built-in (voice-activated commands) |
| **Speaker** | Built-in (audio output) |
| **Touch** | Capacitive touch interface |
| **Connectivity** | WiFi |
| **Power** | USB-C |
### Features
- On-device AI inference (no cloud required for basic detection)
- Person, animal, and gesture detection via camera
- Voice-activated command processing
- SenseCraft AI platform integration
- No-code workflow configuration via web UI
- OTA firmware updates
### Assessment
Purchased and returned August 2025. A compact standalone edge AI unit combining ESP32-S3 with a dedicated Himax AI coprocessor. The Ethos-U55 NPU provides ~1 TOPS specifically for vision inference tasks. The form factor (camera + mic + speaker + touch in a small enclosure) makes it suitable for doorbell, room monitor, or security camera applications. Could be re-acquired if a self-contained vision AI device is needed.
---
## Sensor Inventory
### Environmental
| Sensor | Type | Interface | Range | Notes |
|--------|------|-----------|-------|-------|
| DHT22 | Temperature + Humidity | GPIO (digital) | -40°C to 80°C, 0-100% RH | ±0.5°C accuracy |
| Photoresistor | Light level | ADC (analog) | Relative lux | From ELEGOO kit |
| Tilt switch | Orientation | GPIO (digital) | Binary tilt detect | From ELEGOO kit |
### Motion & Presence
| Sensor | Type | Interface | Range | Notes |
|--------|------|-----------|-------|-------|
| PIR | Passive infrared motion | GPIO (digital) | ~7m | From ELEGOO kit |
| Radar (HLK-LD2410) | mmWave presence | UART | ~6m | Stationary + moving detection |
| Radar (RCWL-0516) | Doppler motion | GPIO (digital) | ~7m | Microwave motion sensor |
| Ultrasonic (HC-SR04) | Distance | GPIO (trigger/echo) | 2cm-4m | From ELEGOO kit |
### Precision Distance
| Sensor | Type | Interface | Range | Notes |
|--------|------|-----------|-------|-------|
| VL53L0X | Time-of-Flight laser | I2C | 30mm-2m | ±3% accuracy |
| VL53L1X | Time-of-Flight laser | I2C | 40mm-4m | Improved version |
### Spectral & Light
| Sensor | Type | Interface | Channels | Notes |
|--------|------|-----------|----------|-------|
| AS7341 | Spectral sensor | I2C | 11 channels (visible + NIR) | Lab-grade spectroscopy |
### Audio & Vision
| Sensor | Type | Interface | Spec | Notes |
|--------|------|-----------|------|-------|
| Pi Camera V2 | Camera | CSI | 8MP Sony IMX219, 1080p30 | On Pi-Holo for tracking |
| USB Microphone | Audio capture | USB | 16-bit 44.1kHz | Logitech H390 headset |
| I2S MEMS Mic | Audio capture | I2S | Digital output | For Pi/ESP32 |
### Input
| Sensor | Type | Interface | Notes |
|--------|------|-----------|-------|
| IR Receiver | Remote control | GPIO | 38kHz carrier, from ELEGOO kit |
| Joystick | 2-axis analog | ADC | X/Y + button, from ELEGOO kit |
---
## I2C Device Map
Common I2C addresses for connected sensors:
| Address | Device | Bus |
|---------|--------|-----|
| 0x29 | VL53L0X / VL53L1X | I2C-1 |
| 0x39 | AS7341 | I2C-1 |
| 0x3C | SSD1306 OLED 0.96" | I2C-1 |
| 0x40 | DHT22 (if I2C variant) | I2C-1 |
| 0x76/0x77 | BME280 (if present) | I2C-1 |
### I2C Scan
```bash
# On any Pi node:
i2cdetect -y 1
# Via management script:
~/i2c.sh
```
---
## Unidentified IoT Nodes
Two devices registered in the agent registry with unknown hardware:
| Name | Platform | IP | Role | Status |
|------|----------|-----|------|--------|
| Calliope | Unknown IoT | — | iot_node | Active |
| Sophia | Unknown IoT | — | iot_node | Active |
**Action:** Identify hardware and update registry.
---
## Management Scripts
```bash
~/sensors.sh # Interactive sensor menu with live readings
~/i2c.sh # I2C bus scan
~/mcus.sh # MCU fleet (many sensors attach to MCUs)
```

View File

@@ -0,0 +1,136 @@
# Microcontroller Array
**21 MCU units** across 9 types — ESP32, Arduino, Pico, ATTINY, and RISC-V.
---
## Inventory
| MCU | Chip | Qty | Connectivity | Flash | RAM | Purpose |
|-----|------|-----|--------------|-------|-----|---------|
| ESP32-S3 SuperMini | ESP32-S3 | 5 | WiFi + BLE | 8MB | 512KB | General IoT, tiny form factor |
| ESP32-S3 N8R8 | ESP32-S3 | 2 | WiFi + BLE + USB OTG | 8MB | 8MB PSRAM | High-memory applications |
| ESP32 2.8" Touchscreen | ESP32 | 3 | WiFi + BLE | 4MB | 520KB | Standalone sensor display |
| Heltec WiFi LoRa 32 (Athena) | ESP32 + SX1276 | 1 | WiFi + LoRa 868/915MHz | 4MB | 520KB | LoRa mesh node |
| M5Stack Atom Lite | ESP32-PICO | 2 | WiFi + BLE | 4MB | 520KB | Button/LED/Grove peripherals |
| Raspberry Pi Pico | RP2040 | 2 | USB only | 2MB | 264KB SRAM | MicroPython prototyping |
| ATTINY88 | AVR 8-bit | 3 | None (I2C/SPI) | 8KB | 512B | Low-power peripherals |
| ELEGOO UNO R3 | ATmega328P | 2 | USB | 32KB | 2KB SRAM | Starter kit projects |
| WCH CH32V003 | RISC-V | 1 | USB | 16KB | 2KB SRAM | Ultra-cheap RISC-V |
**Total: 21 units**
---
## ESP32 Family (13 units)
### ESP32-S3 SuperMini (x5)
- **Chip:** ESP32-S3 dual-core LX7 @ 240MHz
- **Memory:** 8MB Flash, 512KB SRAM
- **Connectivity:** WiFi 802.11 b/g/n + BLE 5.0
- **Interface:** USB-C
- **Form Factor:** Ultra-compact
- **Use Cases:** Distributed sensor mesh, beacon, environmental monitoring
### ESP32-S3 N8R8 (x2)
- **Chip:** ESP32-S3 dual-core LX7 @ 240MHz
- **Memory:** 8MB Flash, 8MB PSRAM (octal SPI)
- **Connectivity:** WiFi + BLE + USB OTG
- **Use Cases:** Camera applications, audio processing, edge ML (TFLite Micro)
### ESP32 2.8" Touchscreen (x3)
- **Chip:** ESP32 dual-core @ 240MHz
- **Display:** ILI9341 TFT 320x240, XPT2046 resistive touch
- **Memory:** 4MB Flash, 520KB SRAM
- **Connectivity:** WiFi + BLE
- **Interface:** SPI display
- **Use Cases:** Standalone sensor dashboards, room status displays
### Athena — Heltec WiFi LoRa 32 (x1)
- **Chip:** ESP32 + Semtech SX1276
- **Display:** 0.96" OLED (128x64, I2C)
- **LoRa:** 868/915MHz, up to 10km range
- **Connectivity:** WiFi + LoRa
- **IP:** 192.168.4.45
- **Agent Registry:** Registered as "Athena" (lora_mesh_node)
- **Use Cases:** Long-range sensor relay, remote monitoring, mesh backbone
### M5Stack Atom Lite (x2)
- **Chip:** ESP32-PICO-D4
- **Form Factor:** 24x24mm cube
- **Features:** Programmable button, SK6812 RGB LED, Grove port, IR LED
- **Connectivity:** WiFi + BLE
- **Use Cases:** IoT triggers, LED indicators, Grove sensor hub
---
## Arduino Family (5 units)
### ELEGOO UNO R3 (x2 kits)
- **Chip:** ATmega328P @ 16MHz
- **Memory:** 32KB Flash, 2KB SRAM
- **Kit Contents:** 200+ components including sensors, LEDs, motors, relays, LCD
- **Use Cases:** Learning, prototyping, sensor integration
### ATTINY88 (x3)
- **Chip:** AVR 8-bit @ 16MHz
- **Memory:** 8KB Flash, 512B SRAM
- **Interface:** I2C / SPI slave
- **Use Cases:** Dedicated low-power sensor readers, peripheral controllers
---
## Other (3 units)
### Raspberry Pi Pico (x2)
- **Chip:** RP2040 dual-core Cortex-M0+ @ 133MHz
- **Memory:** 2MB Flash, 264KB SRAM
- **Interface:** USB 1.1, 26 GPIO pins
- **Languages:** MicroPython, CircuitPython, C/C++
- **Use Cases:** Real-time I/O, PIO state machines, breadboard projects
### WCH CH32V003 (x1)
- **Chip:** RISC-V (QingKe V2A core) @ 48MHz
- **Memory:** 16KB Flash, 2KB SRAM
- **Interface:** USB
- **Cost:** ~$0.10/unit
- **Use Cases:** RISC-V experimentation, ultra-low-cost embedded
---
## Flashing & Development Tools
| Tool | Boards | Install |
|------|--------|---------|
| `esptool.py` | All ESP32 | `pip install esptool` |
| `espflash` | All ESP32 | `cargo install espflash` |
| `arduino-cli` | UNO, ATTINY, ESP32 | `brew install arduino-cli` |
| PlatformIO | All boards | VS Code extension |
| `picotool` | Pico RP2040 | `brew install picotool` |
| `wchisp` | WCH CH32V003 | `cargo install wchisp` |
### Serial Monitor
```bash
screen /dev/ttyUSB0 115200 # Linux
screen /dev/tty.usbserial-* 115200 # macOS
minicom -D /dev/ttyUSB0 -b 115200
```
### Management Script
```bash
~/mcus.sh # Interactive MCU fleet menu
~/espflash.sh # ESP32 flashing workflow
~/i2c.sh # I2C bus scanning
~/lora.sh # LoRa network tools
```

View File

@@ -0,0 +1,141 @@
# Raspberry Pi Fleet
**8 nodes** forming the always-on production backbone of BlackRoad infrastructure.
---
## Fleet Overview
| Node | Board | RAM | Storage | Case | Accelerator | IP (Local) | IP (Tailscale) | Status |
|------|-------|-----|---------|------|-------------|------------|----------------|--------|
| Cecilia | Pi 5 | 8GB | 500GB NVMe | Standard | Hailo-8 26T | 192.168.4.89 | 100.72.180.98 | Active |
| Octavia | Pi 5 | 8GB | 235GB SD | Pironman | Hailo-8 26T | 192.168.4.38 | 100.83.149.86 | Active |
| Lucidia | Pi 5 | 8GB | 117GB SD | ElectroCookie | — | 192.168.4.81 | 100.66.235.47 | Active |
| Aria | Pi 5 | 8GB | 29GB SD | Pironman | Hailo-8 26T | 192.168.4.82 | 100.109.14.17 | Active |
| Anastasia | Pi 5 | 8GB | NVMe | Pironman | — | 192.168.4.33 | — | Active |
| Cordelia | Pi 5 | 8GB | SD | Standard | — | 192.168.4.27 | — | Active |
| Alice | Pi 400 | 4GB | 32GB SD | Built-in | — | 192.168.4.49 | 100.77.210.18 | Active |
| Olympia | Pi 4B | 4GB | SD | PiKVM | — | — | — | Offline |
---
## Per-Node Details
### Cecilia — Primary AI Host
- **Role:** CECE OS orchestrator, primary AI inference
- **Hardware:** Pi 5 8GB + Hailo-8 M.2 (serial: HLLWM2B233704667) + 500GB NVMe
- **Case:** Standard with active fan
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** Ollama, CECE OS (68 sovereign apps), Hailo runtime
- **Storage:** 500GB Crucial P310 NVMe (~50% used)
- **SSH:** `ssh cecilia` / `ssh cecilia-ts`
- **Tunnel:** tunnel-cecilia.blackroad.io
- **Notes:** Houses the 68-app CECE OS sovereign stack. Primary inference node.
### Octavia — AI Inference + Auth
- **Role:** AI inference, PowerDNS, auth gateway
- **Hardware:** Pi 5 8GB + Hailo-8 M.2 (serial: HLLWM2B233704606) + Pironman case
- **Case:** Pironman with dual-fan tower cooler
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** Hailo runtime, PowerDNS, PowerDNS-Admin, RoadAuth, RoadAPI, auth-gateway
- **Storage:** 235GB Samsung EVO Select microSD (~90% used — needs cleanup)
- **SSH:** `ssh octavia` / `ssh octavia-ts`
- **Tunnel:** tunnel-octavia.blackroad.io
- **Known Issues:** Disk nearly full at 90%. Schedule cleanup.
### Lucidia — Event Bus + LLM Brain
- **Role:** NATS event bus, Ollama LLM server, edge agent
- **Hardware:** Pi 5 8GB + ElectroCookie Radial Tower case
- **Case:** ElectroCookie with tower cooler
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** NATS (port 4222), Ollama (port 11434), edge-agent
- **Storage:** 117GB Samsung EVO Select microSD (~60% used)
- **SSH:** `ssh lucidia` / `ssh lucidia-ts`
- **Tunnel:** tunnel-lucidia.blackroad.io
- **Notes:** Central event bus. All MQTT/NATS traffic routes through here.
### Aria — API Services
- **Role:** Web services, API hosting, compute
- **Hardware:** Pi 5 8GB + Pironman case + Hailo-8 M.2
- **Case:** Pironman with dual-fan tower cooler
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** Compute workloads, 9 containers
- **Storage:** 29GB Samsung EVO Select microSD (~70% used)
- **SSH:** `ssh aria` / `ssh aria-ts`
- **Notes:** Rock-solid uptime (4+ weeks continuous). Low storage — consider NVMe upgrade.
### Anastasia — AI Inference Secondary
- **Role:** Secondary AI inference node
- **Hardware:** Pi 5 8GB + Pironman case + NVMe
- **Case:** Pironman with dual-fan tower cooler
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** (Pending deployment)
- **Storage:** NVMe via Pironman (Crucial P310)
- **SSH:** `ssh anastasia` (192.168.4.33)
### Cordelia — Orchestration
- **Role:** Fleet orchestration
- **Hardware:** Pi 5 8GB
- **Case:** Standard with active cooler
- **PSU:** Geekworm 27W 5V/5A USB-C
- **Services:** (Pending deployment)
- **SSH:** `ssh cordelia` (192.168.4.27)
### Alice — Gateway / Admin
- **Role:** Gateway, auth, development, built-in admin console
- **Hardware:** Pi 400 (keyboard built-in) 4GB
- **Case:** Built-in keyboard enclosure
- **PSU:** 5V/3A USB-C (15W)
- **Services:** Worker node, 7 containers
- **Storage:** 32GB microSD (~93% used — needs cleanup)
- **SSH:** `ssh alice` / `ssh alice-ts`
- **Known Issues:** Disk critically full at 93%. Immediate cleanup needed.
### Olympia — KVM Console
- **Role:** Remote KVM access to other nodes
- **Hardware:** Pi 4B 4GB + PiKVM case
- **Case:** PiKVM enclosure
- **PSU:** 5V/3A USB-C (15W)
- **Services:** PiKVM OS
- **Status:** **Offline** — needs recommissioning
- **Notes:** Used for headless recovery of other Pis.
---
## Maintenance Notes
### Disk Cleanup Priority
1. **Alice** (93% full) — Critical
2. **Octavia** (90% full) — High
3. **Aria** (70% full) — Monitor
### SSH Config
All nodes use key-only authentication. SSH config on Alexandria (Mac):
```
Host cecilia
HostName 192.168.4.89
User alexandria
Host cecilia-ts
HostName 100.72.180.98
User alexandria
```
### Management Scripts
```bash
~/pifleet.sh # Fleet overview
~/hardware.sh # Interactive hardware menu
~/blackroad-network-scan.sh # Scan all Pi IPs
```

View File

@@ -0,0 +1,467 @@
# BlackRoad Fleet Registry — Machine-Readable Device Inventory
# Source of truth for automation and tooling
# Version: 2.0.0
# Updated: 2026-02-20
fleet:
version: "2.0.0"
updated: "2026-02-20"
owner: "BlackRoad OS, Inc."
domain: "blackroad.io"
tailnet: "blackroad"
total_devices: 21
total_ai_tops: 135
tiers:
production:
description: "Always-on Pi cluster"
count: 8
cloud:
description: "DigitalOcean droplets"
count: 2
edge:
description: "Jetson + constellation Pis"
count: 4
mesh:
description: "ESP32 LoRa + MCU array"
count: 21
consumer:
description: "Roku, Xbox, iPhone, MacBooks"
count: 7
retired:
description: "Returned or decommissioned"
count: 1
devices:
# ── Production Cluster ──────────────────────────────────────
- name: cecilia
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "500GB NVMe (Crucial P310)"
case: "Standard"
accelerator: "Hailo-8 M.2 26 TOPS"
accelerator_serial: "HLLWM2B233704667"
cooling: "Active fan"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.89"
ip_tailscale: "100.72.180.98"
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- primary_ai_host
- orchestration
- inference
services:
- ollama
- cece-os
- hailo-runtime
ssh: "ssh cecilia"
tunnel: "tunnel-cecilia.blackroad.io"
status: active
- name: octavia
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "235GB microSD (Samsung EVO Select)"
case: "Pironman"
accelerator: "Hailo-8 M.2 26 TOPS"
accelerator_serial: "HLLWM2B233704606"
cooling: "Pironman dual-fan tower"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.38"
ip_tailscale: "100.83.149.86"
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- ai_inference
- auth
- dns
services:
- hailo-runtime
- powerdns
- powerdns-admin
- roadauth
- roadapi
- auth-gateway
ssh: "ssh octavia"
tunnel: "tunnel-octavia.blackroad.io"
status: active
- name: lucidia
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "117GB microSD (Samsung EVO Select)"
case: "ElectroCookie Radial Tower"
accelerator: null
cooling: "ElectroCookie tower cooler"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.81"
ip_tailscale: "100.66.235.47"
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- nats_bus
- llm_inference
- edge
services:
- nats
- ollama
- edge-agent
ssh: "ssh lucidia"
tunnel: "tunnel-lucidia.blackroad.io"
status: active
- name: aria
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "29GB microSD (Samsung EVO Select)"
case: "Pironman"
accelerator: "Hailo-8 M.2 26 TOPS"
cooling: "Pironman dual-fan tower"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.82"
ip_tailscale: "100.109.14.17"
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- api_services
- compute
services:
- compute
ssh: "ssh aria"
status: active
- name: anastasia
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "NVMe (Crucial P310, Pironman)"
case: "Pironman"
accelerator: null
cooling: "Pironman dual-fan tower"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.33"
ip_tailscale: null
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- ai_inference_secondary
services: []
ssh: "ssh anastasia"
status: active
- name: cordelia
tier: production
hardware: "Raspberry Pi 5"
ram: "8GB"
storage: "microSD"
case: "Standard"
accelerator: null
cooling: "Active cooler"
psu: "Geekworm 27W 5V/5A USB-C"
ip_local: "192.168.4.27"
ip_tailscale: null
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- orchestration
services: []
ssh: "ssh cordelia"
status: active
- name: alice
tier: production
hardware: "Raspberry Pi 400"
ram: "4GB"
storage: "32GB microSD"
case: "Built-in keyboard"
accelerator: null
cooling: "Passive (built-in)"
psu: "5V/3A USB-C (15W)"
ip_local: "192.168.4.49"
ip_tailscale: "100.77.210.18"
os: "Debian 12 (Bookworm)"
kernel: "6.1 LTS"
roles:
- gateway
- development
services:
- worker
ssh: "ssh alice"
status: active
- name: olympia
tier: production
hardware: "Raspberry Pi 4B"
ram: "4GB"
storage: "microSD"
case: "PiKVM case"
accelerator: null
cooling: "Passive"
psu: "5V/3A USB-C (15W)"
ip_local: null
ip_tailscale: null
os: "PiKVM OS"
roles:
- kvm_console
services: []
ssh: null
status: offline
# ── Cloud Compute ───────────────────────────────────────────
- name: codex-infinity
tier: cloud
hardware: "DigitalOcean Droplet"
ram: "1GB"
storage: "78GB SSD"
ip_local: "159.65.43.12"
ip_tailscale: "100.108.132.8"
os: "Debian 12 (Bookworm)"
kernel: "5.15 LTS"
roles:
- codex_server
- oracle
services:
- codex-db
- cloud-services
tunnel: "tunnel-codex.blackroad.io"
status: active
- name: shellfish
tier: cloud
hardware: "DigitalOcean Droplet"
ram: "1GB"
storage: "25GB SSD"
ip_local: "174.138.44.45"
ip_tailscale: "100.94.33.37"
os: "Debian 12 (Bookworm)"
kernel: "5.15 LTS"
roles:
- cloud_infrastructure
- edge
services:
- tunnels
- edge-agent
tunnel: "tunnel-cadence.blackroad.io"
status: active
# ── Edge Compute ────────────────────────────────────────────
- name: jetson-agent
tier: edge
hardware: "NVIDIA Jetson Orin Nano"
ram: "8GB"
storage: "microSD + NVMe"
accelerator: "NVIDIA Ampere GPU 40 TOPS"
cooling: "Dev kit heatsink + fan"
psu: "Barrel jack (15W)"
ip_local: null
display: "10.1\" ROADOM Touch IPS 1024x600"
roles:
- agent_ui
- gpu_inference
services: []
status: pending
- name: persephone
tier: edge
hardware: "Sipeed RISC-V"
roles:
- portable_compute
status: active
# ── Planned Edge Nodes ──────────────────────────────────────
- name: pi-holo
tier: edge
hardware: "Raspberry Pi 5"
ram: "8GB"
display: "4\" Waveshare 720x720 Square"
roles:
- hologram_renderer
status: planned
- name: pi-ops
tier: edge
hardware: "Raspberry Pi 5"
ram: "8GB"
display: "9.3\" Waveshare 1600x600 Ultrawide"
roles:
- mqtt_broker
- ops_monitor
status: planned
- name: pi-zero-sim
tier: edge
hardware: "Raspberry Pi Zero W"
display: "7\" Waveshare 1024x600 Touch"
roles:
- sim_output
status: ready
# ── Consumer Devices ────────────────────────────────────────
- name: alexandria
tier: consumer
hardware: "MacBook Pro M1"
ram: "8GB"
accelerator: "Apple M1 Neural Engine 15.8 TOPS"
ip_local: "192.168.4.28"
roles:
- operator_workstation
status: active
- name: iris
tier: consumer
hardware: "Roku"
ip_local: "192.168.4.26"
roles:
- streaming
status: active
- name: ares
tier: consumer
hardware: "Xbox"
ip_local: "192.168.4.90"
roles:
- gaming
status: active
- name: phoebe
tier: consumer
hardware: "iPhone"
ip_local: "192.168.4.88"
roles:
- mobile
status: active
# ── Retired ─────────────────────────────────────────────────
- name: sensecap-watcher-w1a
tier: retired
hardware: "SenseCAP Watcher W1-A"
processor: "ESP32-S3"
ai_chip: "Himax WiseEye2 HX6538 (Arm Cortex-M55 + Arm Ethos-U55 NPU)"
ai_tops: 1
peripherals:
- "Camera (image recognition)"
- "Microphone (voice control)"
- "Speaker (audio output)"
- "Capacitive touch interface"
connectivity: "WiFi"
features:
- "On-device AI inference (person/animal/gesture detection)"
- "SenseCraft AI integration"
- "Voice-activated commands"
- "No-code workflow configuration"
- "OTA updates"
status: returned
notes: >
Purchased and returned August 2025. ESP32-S3 base with dedicated
Himax AI coprocessor. Standalone edge AI unit with camera + mic +
speaker. Could be re-acquired for doorbell/monitor use case.
Ethos-U55 NPU adds ~1 TOPS for vision inference.
# ── MCU Array ───────────────────────────────────────────────
microcontrollers:
- type: "ESP32-S3 SuperMini"
quantity: 5
connectivity: "WiFi + BLE"
form_factor: "Tiny USB-C"
purpose: "General IoT"
- type: "ESP32-S3 N8R8"
quantity: 2
connectivity: "WiFi + BLE + OTG USB"
specs: "8MB PSRAM, 8MB Flash"
purpose: "High-memory apps"
- type: "ESP32 2.8\" Touchscreen"
quantity: 3
display: "ILI9341 320x240"
connectivity: "WiFi + BLE"
purpose: "Standalone sensor display"
- type: "Heltec WiFi LoRa 32 (Athena)"
quantity: 1
connectivity: "WiFi + LoRa 868/915MHz"
display: "0.96\" OLED"
ip_local: "192.168.4.45"
purpose: "LoRa mesh node"
- type: "M5Stack Atom Lite"
quantity: 2
chip: "ESP32-PICO"
connectivity: "WiFi + BLE"
form_factor: "24x24mm cube"
purpose: "Button/LED/Grove peripherals"
- type: "Raspberry Pi Pico"
quantity: 2
chip: "RP2040"
connectivity: "USB only"
purpose: "MicroPython prototyping"
- type: "ATTINY88"
quantity: 3
chip: "AVR 8-bit"
connectivity: "I2C/SPI (slave only)"
purpose: "Low-power peripherals"
- type: "ELEGOO UNO R3"
quantity: 2
chip: "ATmega328P"
purpose: "Starter kit projects"
- type: "WCH CH32V003"
quantity: 1
chip: "RISC-V"
purpose: "Ultra-cheap RISC-V experiments"
# ── Network ─────────────────────────────────────────────────
network:
lan:
subnet: "192.168.4.0/24"
gateway: "192.168.4.1"
router: "TP-Link"
switch: "TP-Link TL-SG105 (5-port gigabit)"
wifi: "TP-Link AX3000 PCIe WiFi 6"
tailscale:
tailnet: "blackroad"
nodes: 7
tunnels:
provider: "Cloudflare"
format: "tunnel-{hostname}.blackroad.io"
config_path: "/etc/cloudflared/config.yml"
dns:
provider: "Cloudflare"
zone: "blackroad.io"
internal_dns: "PowerDNS on Octavia"
# ── OS Baseline ─────────────────────────────────────────────
os_baseline:
distribution: "Debian 12 (Bookworm)"
kernel_pi: "6.1 LTS"
kernel_cloud: "5.15 LTS"
init: "systemd"
shell: "bash"
package_manager: "apt"
operator_user: "alexandria"
operator_uid: 1000
ssh:
permit_root: false
password_auth: false
pubkey_auth: true
firewall:
tool: "ufw"
default: "deny"
allowed_ports: [22, 80, 443, 41641]
security:
unattended_upgrades: true
fail2ban: true
time_sync:
tool: "chrony"
server: "time.cloudflare.com"

View File

@@ -0,0 +1,116 @@
# Services Map
Which services run on which device, and on which ports.
---
## Service-to-Device Matrix
| Service | Port | Node(s) | Protocol | Notes |
|---------|------|---------|----------|-------|
| NATS | 4222 | Lucidia | TCP | Central event bus |
| Ollama | 11434 | Lucidia, Cecilia | HTTP | LLM inference |
| Hailo Runtime | — | Cecilia, Octavia, Aria | Local | AI accelerator driver |
| CECE OS | 8080+ | Cecilia | HTTP | 68 sovereign apps |
| PowerDNS | 53 | Octavia | TCP/UDP | Internal DNS |
| PowerDNS-Admin | 8080 | Octavia | HTTP | DNS management UI |
| RoadAuth | — | Octavia | HTTP | Authentication service |
| RoadAPI | — | Octavia | HTTP | API gateway |
| Auth-Gateway | — | Octavia | HTTP | Auth proxy |
| Cloudflared | — | Cecilia, Lucidia, Octavia, Codex-Infinity, Shellfish | — | Cloudflare tunnel agent |
| Edge-Agent | — | Lucidia, Shellfish | — | Edge compute agent |
| Worker | — | Alice | — | Task worker |
| Codex-DB | — | Codex-Infinity | SQLite | Component index |
| Cloud-Services | — | Codex-Infinity | — | Cloud oracle |
| MQTT (planned) | 1883 | Pi-Ops (planned) | TCP | IoT pub/sub broker |
---
## Per-Node Service List
### Cecilia (192.168.4.89)
- Ollama (LLM inference)
- CECE OS (68 sovereign apps)
- Hailo runtime (26 TOPS accelerator)
- Cloudflared tunnel
### Lucidia (192.168.4.81)
- NATS event bus (port 4222)
- Ollama (LLM inference, port 11434)
- Edge-agent
- Cloudflared tunnel
### Octavia (192.168.4.38)
- Hailo runtime (26 TOPS accelerator)
- PowerDNS (port 53)
- PowerDNS-Admin (port 8080)
- RoadAuth
- RoadAPI
- Auth-Gateway
- Cloudflared tunnel
### Aria (192.168.4.82)
- Hailo runtime (26 TOPS accelerator)
- Compute workloads (9 containers)
### Alice (192.168.4.49)
- Worker node (7 containers)
### Anastasia (192.168.4.33)
- (Pending service deployment)
### Cordelia (192.168.4.27)
- (Pending service deployment)
### Codex-Infinity (159.65.43.12)
- Codex database
- Cloud services
- Cloudflared tunnel
### Shellfish (174.138.44.45)
- Cloudflare tunnels
- Edge-agent
---
## Service Dependencies
```
┌───────────┐
│ NATS │
│ (Lucidia) │
└─────┬─────┘
┌───────────────┼───────────────┐
│ │ │
┌──────┴──────┐ ┌─────┴─────┐ ┌──────┴──────┐
│ Ollama │ │ Edge-Agent │ │ CECE OS │
│(Lucidia/Cec)│ │(Lucidia) │ │ (Cecilia) │
└─────────────┘ └───────────┘ └─────────────┘
┌─────┴─────┐
│ Hailo RT │
│(Cec/Oct/Ar)│
└───────────┘
┌───────────┐ ┌───────────┐
│ PowerDNS │ │ Auth-GW │
│ (Octavia) │◄───────│ (Octavia) │
└───────────┘ └───────────┘
┌────────────────┐
│ Cloudflared │ ← All production nodes
│ (5 tunnels) │
└────────────────┘
```
---
## Planned Services
| Service | Port | Target Node | Purpose |
|---------|------|-------------|---------|
| Mosquitto MQTT | 1883 | Pi-Ops | IoT sensor pub/sub |
| Headscale | 443 | Alice | Self-hosted Tailscale control |
| Monitoring Dashboard | 3000 | Pi-Ops | Grafana/custom dashboard |
| Agent UI | 8080 | Jetson-Agent | Touch-based agent control |

View File

@@ -0,0 +1,190 @@
# Network Topology
BlackRoad fleet network architecture — LAN, Tailscale mesh, cloud entry points.
---
## Physical LAN (192.168.4.0/24)
### Network Equipment
| Device | Model | Ports | Role |
|--------|-------|-------|------|
| Router/WiFi | TP-Link | — | Gateway (192.168.4.1), DHCP, WiFi |
| Switch | TP-Link TL-SG105 | 5-port Gigabit | Wired backbone |
| WiFi Card | TP-Link AX3000 PCIe WiFi 6 | — | High-speed wireless |
### Topology Diagram
```
┌─────────────────────┐
│ INTERNET │
└──────────┬──────────┘
┌──────────┴──────────┐
│ TP-Link Router │
│ 192.168.4.1 │
│ DHCP / WiFi / NAT │
└──────────┬──────────┘
┌──────────────────┼──────────────────┐
│ │ │
┌──────┴──────┐ ┌──────┴──────┐ WiFi Clients
│ TL-SG105 │ │ WiFi AP │
│ Gigabit SW │ │ (built-in) │
└┬───┬───┬───┬┘ └─────────────┘
│ │ │ │
│ │ │ └── Cecilia .89 [Hailo-8, CECE OS]
│ │ └────── Lucidia .81 [NATS, Ollama]
│ └────────── Aria .82 [Hailo-8, API]
└────────────── Octavia .38 [Hailo-8, DNS]
WiFi:
├── Alexandria .28 [MacBook Pro M1]
├── Alice .49 [Pi 400]
├── Anastasia .33 [Pi 5]
├── Cordelia .27 [Pi 5]
├── Athena .45 [Heltec LoRa ESP32]
├── Phoebe .88 [iPhone]
├── Ares .90 [Xbox]
└── Iris .26 [Roku]
```
### IP Address Map
| IP | Hostname | Type | Wired/WiFi |
|----|----------|------|------------|
| .1 | Router | TP-Link Gateway | — |
| .26 | Iris | Roku | WiFi |
| .27 | Cordelia | Pi 5 | WiFi |
| .28 | Alexandria | MacBook Pro M1 | WiFi |
| .33 | Anastasia | Pi 5 | WiFi |
| .38 | Octavia | Pi 5 | Wired |
| .45 | Athena | Heltec LoRa ESP32 | WiFi |
| .49 | Alice | Pi 400 | WiFi |
| .81 | Lucidia | Pi 5 | Wired |
| .82 | Aria | Pi 5 | Wired |
| .88 | Phoebe | iPhone | WiFi |
| .89 | Cecilia | Pi 5 | Wired |
| .90 | Ares | Xbox | WiFi |
---
## Tailscale Mesh Overlay
Encrypted WireGuard mesh connecting on-premises and cloud nodes.
```
┌───────────────┐
│ Tailscale │
│ Control Plane│
└───────┬───────┘
┌───────────────────┼───────────────────┐
│ │ │
On-Premises Cloud Cloud
┌─────────┐ ┌──────────────┐ ┌──────────────┐
│ Cecilia │ │Codex-Infinity│ │ Shellfish │
│ 100.72. │ │ 100.108. │ │ 100.94. │
│ 180.98 │ │ 132.8 │ │ 33.37 │
└────┬─────┘ └──────────────┘ └──────────────┘
┌────┼────┬────────┬─────────┐
│ │ │ │ │
Lucidia │ Aria Octavia Alice
100.66 │ 100.109 100.83 100.77
.235.47 │ .14.17 .149.86 .210.18
(Full mesh — every
node can reach
every other node)
```
### Tailscale Node Table
| Node | Tailscale IP | OS | Connected |
|------|-------------|-----|-----------|
| Cecilia | 100.72.180.98 | Linux | Yes |
| Lucidia | 100.66.235.47 | Linux | Yes |
| Octavia | 100.83.149.86 | Linux | Yes |
| Aria | 100.109.14.17 | Linux | Yes |
| Alice | 100.77.210.18 | Linux | Yes |
| Codex-Infinity | 100.108.132.8 | Linux | Yes |
| Shellfish | 100.94.33.37 | Linux | Yes |
### SSH via Tailscale
```bash
ssh cecilia-ts # → 100.72.180.98
ssh lucidia-ts # → 100.66.235.47
ssh octavia-ts # → 100.83.149.86
ssh aria-ts # → 100.109.14.17
ssh alice-ts # → 100.77.210.18
```
### Nodes Not Yet on Tailscale
- Anastasia (192.168.4.33)
- Cordelia (192.168.4.27)
- Olympia (offline)
- Jetson-Agent (pending setup)
- Pi-Holo, Pi-Ops, Pi-Zero-Sim (planned)
---
## Cloud Entry Points
### Cloudflare Tunnels
Each production node has a Cloudflare tunnel for HTTPS ingress:
| Tunnel | Node | Config |
|--------|------|--------|
| tunnel-cecilia.blackroad.io | Cecilia | /etc/cloudflared/config.yml |
| tunnel-lucidia.blackroad.io | Lucidia | /etc/cloudflared/config.yml |
| tunnel-octavia.blackroad.io | Octavia | /etc/cloudflared/config.yml |
| tunnel-codex.blackroad.io | Codex-Infinity | /etc/cloudflared/config.yml |
| tunnel-cadence.blackroad.io | Shellfish | /etc/cloudflared/config.yml |
### DNS
- **Provider:** Cloudflare
- **Zone:** blackroad.io
- **Internal DNS:** PowerDNS on Octavia
- **Time Sync:** chrony → time.cloudflare.com (all nodes)
---
## LoRa Network (Planned)
Athena (Heltec WiFi LoRa 32) serves as the LoRa mesh backbone:
- **Frequency:** 868/915 MHz
- **Range:** Up to 10km line-of-sight
- **Protocol:** LoRaWAN or point-to-point
- **Use Cases:** Remote sensor relay, out-of-WiFi-range monitoring
- **Management:** `~/lora.sh`
---
## Firewall Rules (All Nodes)
| Port | Protocol | Service | Direction |
|------|----------|---------|-----------|
| 22 | TCP | SSH | Inbound |
| 80 | TCP | HTTP | Inbound |
| 443 | TCP | HTTPS | Inbound |
| 41641 | UDP | Tailscale | Inbound |
Default policy: **deny** all other inbound traffic.
---
## Network Diagnostics
```bash
~/blackroad-network-scan.sh # ARP + ping sweep + Tailscale status
~/blackroad-network-discovery.sh # SSH probe all known devices
tailscale status # Tailscale mesh state
tailscale ping <hostname> # Test Tailscale connectivity
```

View File

@@ -0,0 +1,130 @@
#!/bin/bash
# BlackRoad Fleet Health Check
# Pings all devices and checks key service ports
# Usage: ./fleet-health-check.sh [--verbose]
set -e
PINK='\033[38;5;205m'
GREEN='\033[38;5;82m'
AMBER='\033[38;5;214m'
RED='\033[38;5;196m'
CYAN='\033[38;5;81m'
RESET='\033[0m'
BOLD='\033[1m'
VERBOSE=false
[ "$1" = "--verbose" ] && VERBOSE=true
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e "${BOLD} BLACKROAD FLEET HEALTH CHECK${RESET}"
echo -e " $(date '+%Y-%m-%d %H:%M:%S')"
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo ""
# Define fleet with name:ip:ports
declare -A FLEET_IPS=(
["cecilia"]="192.168.4.89"
["octavia"]="192.168.4.38"
["lucidia"]="192.168.4.81"
["aria"]="192.168.4.82"
["anastasia"]="192.168.4.33"
["cordelia"]="192.168.4.27"
["alice"]="192.168.4.49"
["athena"]="192.168.4.45"
["codex-infinity"]="159.65.43.12"
["shellfish"]="174.138.44.45"
)
# Service ports to check per node
declare -A NODE_SERVICES=(
["cecilia"]="22:SSH 11434:Ollama"
["lucidia"]="22:SSH 4222:NATS 11434:Ollama"
["octavia"]="22:SSH 53:DNS 8080:PowerDNS-Admin"
["aria"]="22:SSH"
["anastasia"]="22:SSH"
["cordelia"]="22:SSH"
["alice"]="22:SSH"
["athena"]=""
["codex-infinity"]="22:SSH"
["shellfish"]="22:SSH"
)
TOTAL=0
UP=0
DOWN=0
check_port() {
local ip=$1 port=$2
nc -z -w 2 "$ip" "$port" &>/dev/null
return $?
}
echo -e "${CYAN} Node Health:${RESET}"
echo ""
printf " ${BOLD}%-16s %-18s %-10s %-30s${RESET}\n" "NODE" "IP" "PING" "SERVICES"
echo " ────────────────────────────────────────────────────────────────────────"
for node in cecilia octavia lucidia aria anastasia cordelia alice athena codex-infinity shellfish; do
ip="${FLEET_IPS[$node]}"
TOTAL=$((TOTAL + 1))
# Ping check
if ping -c 1 -W 2 "$ip" &>/dev/null; then
ping_status="${GREEN}UP${RESET}"
UP=$((UP + 1))
else
ping_status="${RED}DOWN${RESET}"
DOWN=$((DOWN + 1))
fi
# Service checks
services="${NODE_SERVICES[$node]}"
service_results=""
if [ -n "$services" ]; then
for svc in $services; do
port="${svc%%:*}"
name="${svc##*:}"
if check_port "$ip" "$port"; then
service_results+="${GREEN}${name}${RESET} "
else
service_results+="${RED}${name}!${RESET} "
fi
done
else
service_results="—"
fi
printf " %-16s %-18s " "$node" "$ip"
echo -ne "$ping_status"
printf "%*s" $((10 - 2)) ""
echo -e "$service_results"
done
echo ""
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e " ${BOLD}Results:${RESET} $TOTAL checked | ${GREEN}Up: $UP${RESET} | ${RED}Down: $DOWN${RESET}"
# Overall health
if [ "$DOWN" -eq 0 ]; then
echo -e " ${GREEN}${BOLD}Fleet Status: ALL HEALTHY${RESET}"
elif [ "$DOWN" -le 2 ]; then
echo -e " ${AMBER}${BOLD}Fleet Status: DEGRADED ($DOWN node(s) down)${RESET}"
else
echo -e " ${RED}${BOLD}Fleet Status: CRITICAL ($DOWN node(s) down)${RESET}"
fi
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
# Tailscale mesh check
if command -v tailscale &>/dev/null; then
echo ""
echo -e "${CYAN} Tailscale Mesh Status:${RESET}"
TS_NODES=$(tailscale status 2>/dev/null | grep -c "online" || echo 0)
echo " Connected nodes: $TS_NODES"
if $VERBOSE; then
tailscale status 2>/dev/null || echo " (tailscale not available)"
fi
fi
echo ""

View File

@@ -0,0 +1,100 @@
#!/bin/bash
# BlackRoad Hardware Inventory
# Queries agent registry + live network scan to produce fleet status
# Usage: ./hardware-inventory.sh [--live] [--json]
set -e
PINK='\033[38;5;205m'
GREEN='\033[38;5;82m'
AMBER='\033[38;5;214m'
RED='\033[38;5;196m'
CYAN='\033[38;5;81m'
RESET='\033[0m'
BOLD='\033[1m'
DB="$HOME/.blackroad-agent-registry.db"
LIVE_SCAN=false
JSON_OUTPUT=false
for arg in "$@"; do
case $arg in
--live) LIVE_SCAN=true ;;
--json) JSON_OUTPUT=true ;;
--help|-h)
echo "Usage: $0 [--live] [--json]"
echo " --live Ping each device to check reachability"
echo " --json Output as JSON instead of table"
exit 0
;;
esac
done
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e "${BOLD} BLACKROAD HARDWARE INVENTORY${RESET}"
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo ""
# Check database exists
if [ ! -f "$DB" ]; then
echo -e "${RED} Error: Agent registry not found at $DB${RESET}"
exit 1
fi
# Query hardware agents
echo -e "${CYAN} Hardware Agents from Registry:${RESET}"
echo ""
printf " ${BOLD}%-15s %-28s %-16s %-16s %-8s${RESET}\n" "NAME" "PLATFORM" "IP (LOCAL)" "IP (TAILSCALE)" "STATUS"
echo " ─────────────────────────────────────────────────────────────────────────────────────"
sqlite3 -separator '|' "$DB" \
"SELECT name, platform, COALESCE(ip_local,'—'), COALESCE(ip_tailscale,'—'), status FROM agents WHERE type='hardware' ORDER BY name;" \
| while IFS='|' read -r name platform ip_local ip_ts status; do
if [ "$status" = "active" ]; then
status_color="${GREEN}active${RESET}"
elif [ "$status" = "offline" ]; then
status_color="${RED}offline${RESET}"
else
status_color="${AMBER}${status}${RESET}"
fi
if $LIVE_SCAN && [ "$ip_local" != "—" ]; then
if ping -c 1 -W 1 "$ip_local" &>/dev/null; then
status_color="${GREEN}online${RESET}"
else
status_color="${RED}unreachable${RESET}"
fi
fi
printf " %-15s %-28s %-16s %-16s " "$name" "$platform" "$ip_local" "$ip_ts"
echo -e "$status_color"
done
echo ""
# Summary stats
TOTAL=$(sqlite3 "$DB" "SELECT COUNT(*) FROM agents WHERE type='hardware';")
ACTIVE=$(sqlite3 "$DB" "SELECT COUNT(*) FROM agents WHERE type='hardware' AND status='active';")
OFFLINE=$(sqlite3 "$DB" "SELECT COUNT(*) FROM agents WHERE type='hardware' AND status='offline';")
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e " ${BOLD}Total:${RESET} $TOTAL devices | ${GREEN}Active:${RESET} $ACTIVE | ${RED}Offline:${RESET} $OFFLINE"
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
# Accelerator summary
echo ""
echo -e "${CYAN} AI Accelerators:${RESET}"
echo " ─────────────────────────────────────────"
echo " Hailo-8 M.2 x3 78 TOPS (Cecilia, Octavia, Aria)"
echo " Jetson Orin Nano 40 TOPS (pending setup)"
echo " Apple M1 NE 15.8 TOPS (Alexandria)"
echo " ─────────────────────────────────────────"
echo -e " ${BOLD}Total: ~135 TOPS${RESET}"
echo ""
# Tailscale nodes
if command -v tailscale &>/dev/null; then
echo -e "${CYAN} Tailscale Mesh:${RESET}"
tailscale status 2>/dev/null | head -10 || echo " (tailscale not running)"
echo ""
fi