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:
415
hardware/HARDWARE_BACKEND_MAP.md
Normal file
415
hardware/HARDWARE_BACKEND_MAP.md
Normal 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 |
|
||||||
196
hardware/accelerators/ai-compute.md
Normal file
196
hardware/accelerators/ai-compute.md
Normal 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) |
|
||||||
65
hardware/devices/cloud-compute.md
Normal file
65
hardware/devices/cloud-compute.md
Normal 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)
|
||||||
|
```
|
||||||
89
hardware/devices/consumer-devices.md
Normal file
89
hardware/devices/consumer-devices.md
Normal 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 |
|
||||||
103
hardware/devices/edge-compute.md
Normal file
103
hardware/devices/edge-compute.md
Normal 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) │ │
|
||||||
|
│ └──────────────────────────────────┘ │
|
||||||
|
└──────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
133
hardware/devices/iot-sensors.md
Normal file
133
hardware/devices/iot-sensors.md
Normal 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)
|
||||||
|
```
|
||||||
136
hardware/devices/microcontrollers.md
Normal file
136
hardware/devices/microcontrollers.md
Normal 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
|
||||||
|
```
|
||||||
141
hardware/devices/raspberry-pi.md
Normal file
141
hardware/devices/raspberry-pi.md
Normal 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
|
||||||
|
```
|
||||||
467
hardware/fleet-registry.yaml
Normal file
467
hardware/fleet-registry.yaml
Normal 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"
|
||||||
116
hardware/network/services-map.md
Normal file
116
hardware/network/services-map.md
Normal 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 |
|
||||||
190
hardware/network/topology.md
Normal file
190
hardware/network/topology.md
Normal 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
|
||||||
|
```
|
||||||
130
hardware/scripts/fleet-health-check.sh
Executable file
130
hardware/scripts/fleet-health-check.sh
Executable 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 ""
|
||||||
100
hardware/scripts/hardware-inventory.sh
Executable file
100
hardware/scripts/hardware-inventory.sh
Executable 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
|
||||||
Reference in New Issue
Block a user