mirror of
https://github.com/ruvnet/RuView
synced 2026-07-20 17:03:24 +00:00
2b8a7cc458
* feat: happiness scoring pipeline with ESP32 swarm + Cognitum Seed coordinator ADR-065: Hotel guest happiness scoring from WiFi CSI physiological proxies. ADR-066: ESP32 swarm with Cognitum Seed as coordinator for multi-zone analytics. Firmware: - swarm_bridge.c/h: FreeRTOS task on Core 0, HTTP client with Bearer auth, registers with Seed, sends heartbeats (30s) and happiness vectors (5s) - nvs_config: seed_url, seed_token, zone_name, swarm intervals - provision.py: --seed-url, --seed-token, --zone CLI args - esp32-hello-world: capability discovery firmware for 4MB ESP32-S3 variant WASM edge modules: - exo_happiness_score.rs: 8-dim happiness vector from gait speed, stride regularity, movement fluidity, breathing calm, posture, dwell time (events 690-694, 11 tests, ESP32-optimized buffers + event decimation) - ghost_hunter.rs standalone binary: 5.7 KB WASM, feature-gated default pipeline RuView Live: - --mode happiness dashboard with bar visualization - --seed flag for Cognitum Seed bridge (urllib, background POST) - HappinessScorer + SeedBridge classes (stdlib only, no deps) Examples: - seed_query.py: CLI tool (status, search, witness, monitor, report) - provision_swarm.sh: batch provisioning for multi-node deployment - happiness_vector_schema.json: 8-dim vector format documentation Verified live: ESP32 on COM5 (4MB flash) registered with Seed at 10.1.10.236, vectors flowing, witness chain growing (epoch 455, chain 1108). Co-Authored-By: claude-flow <ruv@ruv.net> * ci: raise firmware binary size gate to 1100 KB for HTTP client stack The swarm bridge (ADR-066) adds esp_http_client for Seed communication, which pulls in the HTTP/TLS stack (~150 KB). Binary grew from ~978 KB to ~1077 KB. Raise the gate from 950 KB to 1100 KB. Still fits comfortably in both 4MB (1856 KB OTA slot, 43% free) and 8MB flash variants. Co-Authored-By: claude-flow <ruv@ruv.net>
61 lines
1.7 KiB
Bash
61 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# ESP32 Swarm Provisioning — ADR-065/066
|
|
#
|
|
# Provisions multiple ESP32-S3 nodes for a hotel happiness sensing deployment.
|
|
# Each node gets WiFi credentials, a unique node_id, zone name, and Seed token.
|
|
#
|
|
# Prerequisites:
|
|
# - ESP-IDF Python venv with esptool and nvs_partition_gen
|
|
# - Firmware already flashed to each ESP32
|
|
# - Seed paired (obtain token via: curl -X POST http://169.254.42.1/api/v1/pair)
|
|
#
|
|
# Usage:
|
|
# bash provision_swarm.sh
|
|
|
|
set -euo pipefail
|
|
|
|
# ---- Configuration ----
|
|
SSID="RedCloverWifi"
|
|
PASSWORD="redclover2.4"
|
|
SEED_URL="http://10.1.10.236"
|
|
SEED_TOKEN="hyHVY4Ux6uBAh8FaQzF_9OwWCWMFB-YuM2OJ3Dcwdm8" # Replace with your token
|
|
|
|
PROVISION="../../firmware/esp32-csi-node/provision.py"
|
|
|
|
# ---- Node definitions: PORT NODE_ID ZONE ----
|
|
NODES=(
|
|
"COM5 1 lobby"
|
|
"COM6 2 hallway"
|
|
"COM8 3 restaurant"
|
|
"COM9 4 pool"
|
|
"COM10 5 conference"
|
|
)
|
|
|
|
echo "========================================"
|
|
echo " ESP32 Swarm Provisioning"
|
|
echo " Seed: $SEED_URL"
|
|
echo " WiFi: $SSID"
|
|
echo " Nodes: ${#NODES[@]}"
|
|
echo "========================================"
|
|
echo
|
|
|
|
for entry in "${NODES[@]}"; do
|
|
read -r port node_id zone <<< "$entry"
|
|
echo "--- Node $node_id: $zone ($port) ---"
|
|
python "$PROVISION" \
|
|
--port "$port" \
|
|
--ssid "$SSID" \
|
|
--password "$PASSWORD" \
|
|
--node-id "$node_id" \
|
|
--seed-url "$SEED_URL" \
|
|
--seed-token "$SEED_TOKEN" \
|
|
--zone "$zone" \
|
|
&& echo " OK" || echo " FAILED (device not connected?)"
|
|
echo
|
|
done
|
|
|
|
echo "========================================"
|
|
echo " Provisioning complete."
|
|
echo " Monitor with: python seed_query.py monitor --seed $SEED_URL --token $SEED_TOKEN"
|
|
echo "========================================"
|