generated from CubeCraft-Creations/Tracehound
feat: add v3 hardware case and update hub network
This commit is contained in:
+5
-5
@@ -36,7 +36,7 @@ RemoteRig is a **multi-camera remote monitoring system**. It provides a camera g
|
||||
```
|
||||
┌──────────────────────────────────────────┐
|
||||
│ Travel Router (self-contained LAN) │
|
||||
│ Subnet: 192.168.4.0/24 │
|
||||
│ Subnet: 10.60.1.0/24 │
|
||||
│ DHCP pool: .100-.200 │
|
||||
└──────┬──────────┬──────────┬──────────────┘
|
||||
│ │ │
|
||||
@@ -44,7 +44,7 @@ RemoteRig is a **multi-camera remote monitoring system**. It provides a camera g
|
||||
▼ ▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
|
||||
│ ESP32 #1 │ │ ESP32 #N │ │ Pi Zero 2 W │
|
||||
│ DHCP addr │ │ DHCP addr │ │ 192.168.4.10 │
|
||||
│ DHCP addr │ │ DHCP addr │ │ 10.60.1.56 │
|
||||
│ │ │ │ │ (static IP) │
|
||||
│ STA→GoPro AP │ │ STA→GoPro AP │ │ │
|
||||
│ STA→Router │ │ STA→Router │ │ Mosquitto :1883 │
|
||||
@@ -67,7 +67,7 @@ RemoteRig is a **multi-camera remote monitoring system**. It provides a camera g
|
||||
**Network is fully self-contained — no internet dependency.** The travel router creates the LAN. All devices connect to it. The Pi runs all services (Mosquitto, Go API, React UI, SQLite). ESP32s bridge the GoPro's AP to the LAN via MQTT.
|
||||
|
||||
### Key Architecture Decisions (revised)
|
||||
- **Closed travel router network** — No venue Wi-Fi dependency. User brings their own router. All devices on `192.168.4.0/24`.
|
||||
- **Closed travel router network** — No venue Wi-Fi dependency. User brings their own router. All devices on `10.60.1.0/24`.
|
||||
- **ESP32 dual-STA** — One STA to GoPro AP (10.5.5.1), one STA to travel router. No channel-hopping concerns on closed network.
|
||||
- **ESP32 → GoPro over Wi-Fi** — Bacpac I²C route rejected (30-pin Herobus connector too complex). HTTP to GoPro AP is proven and reliable.
|
||||
- **MQTT for ESP32 → Hub** — Lightweight, designed for IoT. Mosquitto on Pi. QoS 1 for status, QoS 2 for commands. Full contract: [docs/MQTT_CONTRACT.md](./docs/MQTT_CONTRACT.md)
|
||||
@@ -215,8 +215,8 @@ platform:
|
||||
type: "pi-zero-2w"
|
||||
max_cameras: 16
|
||||
network:
|
||||
subnet: "192.168.4.0/24" # Travel router subnet
|
||||
hub_ip: "192.168.4.10" # Pi Zero 2 W static IP
|
||||
subnet: "10.60.1.0/24" # Travel router subnet
|
||||
hub_ip: "10.60.1.56" # Pi Zero 2 W static IP
|
||||
```
|
||||
|
||||
## Frontend Component Tree
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
```
|
||||
┌──────────────────────────────────┐
|
||||
│ Travel Router (192.168.4.1) │
|
||||
│ Travel Router (10.60.1.1) │
|
||||
│ DHCP: .100-.200 │
|
||||
└──────┬──────────┬──────────┬──────┘
|
||||
│ │ │
|
||||
@@ -15,7 +15,7 @@
|
||||
▼ ▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ ESP32 #1 │ │ ESP32 #2 │ │ Pi Zero 2 W │
|
||||
│ 192.168.4.101│ │ 192.168.4.102│ │ 192.168.4.10 │
|
||||
│ 10.60.1.101│ │ 10.60.1.102│ │ 10.60.1.56 │
|
||||
│ │ │ │ │ │
|
||||
│ STA→GoPro AP │ │ STA→GoPro AP │ │ Mosquitto │
|
||||
│ STA→Router │ │ STA→Router │ │ Go backend │
|
||||
@@ -28,14 +28,14 @@
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
- **Travel router:** Self-contained, no internet. DHCP pool: `192.168.4.100-200`
|
||||
- **Pi Zero 2 W:** Static IP `192.168.4.10`. Runs Mosquitto (port 1883), Go backend (port 8080), serves React UI
|
||||
- **Travel router:** Self-contained, no internet. Gateway `10.60.1.1`. DHCP pool: `10.60.1.100-200`
|
||||
- **Pi Zero 2 W:** Static IP `10.60.1.56`. Runs Mosquitto (port 1883), Go backend (port 8080), serves React UI
|
||||
- **ESP32s:** DHCP from router. Each has dual STA: one to GoPro AP, one to router
|
||||
- **User device:** Connects to router, opens `http://192.168.4.10:8080` for dashboard
|
||||
- **User device:** Connects to router, opens `http://10.60.1.56:8080` for dashboard
|
||||
|
||||
## MQTT Broker
|
||||
|
||||
- **Host:** `192.168.4.10` (Pi Zero 2 W)
|
||||
- **Host:** `10.60.1.56` (Pi Zero 2 W)
|
||||
- **Port:** `1883` (default MQTT, no TLS — closed network)
|
||||
- **Auth:** None (closed network, no external access)
|
||||
- **Client ID format:** `remoterig-<esp32_mac_last6>` (e.g., `remoterig-a1b2c3`)
|
||||
@@ -217,7 +217,7 @@ Hub health status broadcast.
|
||||
ESP32 boots
|
||||
│
|
||||
├── Connects to travel router Wi-Fi
|
||||
├── Connects to MQTT broker (192.168.4.10:1883)
|
||||
├── Connects to MQTT broker (10.60.1.56:1883)
|
||||
├── Publishes announce (retained) on cameras/<id>/announce
|
||||
│
|
||||
▼
|
||||
@@ -268,6 +268,6 @@ When ESP32 loses connection to travel router:
|
||||
|
||||
## Open Questions
|
||||
|
||||
1. **NTP/time sync:** How do ESP32s get accurate time without internet? Options: (a) Pi runs NTP server, (b) ESP32 queries Pi's HTTP /api/v1/time endpoint, (c) GPS module. **Recommendation:** Pi runs NTPd, ESP32s use SNTP from `192.168.4.10`.
|
||||
1. **NTP/time sync:** How do ESP32s get accurate time without internet? Options: (a) Pi runs NTP server, (b) ESP32 queries Pi's HTTP /api/v1/time endpoint, (c) GPS module. **Recommendation:** Pi runs NTPd, ESP32s use SNTP from `10.60.1.56`.
|
||||
2. **Camera naming:** Should `friendly_name` be configurable from dashboard after auto-registration? **Recommendation:** Yes — allow rename via UI, stored in cameras table.
|
||||
3. **Firmware OTA:** Should ESP32 firmware updates be possible over this network? **Recommendation:** Yes but out of scope for MVP.
|
||||
|
||||
Reference in New Issue
Block a user