yggvault ratatoskr-space connected via regular web
Color theme
also available via yggdrasil mesh http://[203:b338:2a84:a18f:986:47ae:1a4:d8d3]/pkg/ruview/v0.5.4-esp32
vault / ruview / v0.5.4-esp32

ruview @ v0.5.4-esp32

integrity

size
26.5 MiB
downloaded
last checked
source https://github.com/ruvnet/RuView · available · github

release notes

ESP32-S3 CSI Firmware v0.5.4 — Cognitum Seed Integration

TL;DR

Your ESP32 can now remember what it senses. By connecting to a Cognitum Seed every presence detection, breathing measurement, and motion event gets stored as a searchable vector with cryptographic proof it happened.

What Changed (v0.5.3 → v0.5.4)

Feature v0.5.3 v0.5.4
CSI sensing ✅ Real-time only Real-time + persistent storage
Data retention ❌ Lost on reboot RVF vector store on Cognitum Seed
Similarity search ❌ None kNN queries ("find states like this one")
Data integrity ❌ None SHA-256 witness chain + Ed25519 signing
AI integration ❌ None 114-tool MCP proxy (Claude, GPT can query sensors)
Environmental sensors ❌ CSI only + BME280, PIR, vibration, ADC (via Seed)
Feature vectors ❌ Raw only 8-dim normalized @ 1 Hz (new packet 0xC5110003)
Security Basic Bearer tokens, TLS, source filtering, NaN rejection

New: 8-Dimension Feature Vector

Every second, the ESP32 sends a compact 48-byte packet summarizing what it sees:

Dim What it measures Example
0 Is someone there? (presence) 0.45 = maybe, 0.95 = definitely
1 Are they moving? (motion) 0.0 = still, 0.87 = active
2 Breathing rate 0.69 = 20.8 BPM (normal)
3 Heart rate 0.75 = 90 BPM (normal)
4 Signal quality (phase variance) Higher = more activity
5 How many people? 0.25 = 1 person, 0.50 = 2
6 Fall detected? 0.0 = no, 1.0 = yes
7 Signal strength (RSSI) 0.54 = -46 dBm (good)

These vectors are stored on the Cognitum Seed and can be searched: "Find the 10 most similar states to right now" — useful for anomaly detection, pattern recognition, and environment fingerprinting.

Architecture

ESP32-S3 ($9)  ──UDP──>  Your laptop  ──HTTPS──>  Cognitum Seed ($15)
  WiFi CSI capture          Bridge script            Stores vectors forever
  28 Hz raw frames          Batches & validates      kNN similarity search
  1 Hz feature vectors      NaN rejection            Witness chain (proof)
  1 Hz vital signs          Source filtering          114-tool AI proxy

How to Use

# 1. Flash firmware to ESP32-S3
python -m esptool --chip esp32s3 --port COM9 --baud 460800 \
  write_flash --flash-mode dio --flash-size 8MB --flash-freq 80m \
  0x0 bootloader.bin 0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin

# 2. Set WiFi + target (your laptop IP)
python firmware/esp32-csi-node/provision.py --port COM9 \
  --ssid "YourWiFi" --password "secret" \
  --target-ip 192.168.1.20 --target-port 5006

# 3. Pair with Cognitum Seed (plug in via USB first)
curl -sk -X POST https://169.254.42.1:8443/api/v1/pair/window
curl -sk -X POST https://169.254.42.1:8443/api/v1/pair \
  -H 'Content-Type: application/json' -d '{"client_name":"my-laptop"}'

# 4. Run the bridge
export SEED_TOKEN="<token-from-step-3>"
python scripts/seed_csi_bridge.py \
  --seed-url https://169.254.42.1:8443 --token "$SEED_TOKEN" --validate

# 5. Check what's stored
python scripts/seed_csi_bridge.py --token "$SEED_TOKEN" --stats

No Cognitum Seed? The ESP32 firmware works exactly as before — all existing features (CSI streaming, vitals, presence, fall detection, mesh TDM) are unchanged. The Seed integration is additive.

Learn more: Cognitum.one · ADR-069 · User Guide

Validation Results

Test Result
Rust workspace 1,463 passed, 0 failed
Python proof VERDICT: PASS
Firmware size 844 KB (55% flash free)
Feature vectors 1 Hz, 8-dim, all in [0.0, 1.0]
Vitals ↔ Features HR delta=0.0, BR delta=0.0
Seed ingest 941 vectors, 100% kNN match
Witness chain SHA-256 verified (1,325 entries)
Regression 6/6 PASSED — NO REGRESSIONS

Binary Hashes (SHA-256)

cf05de2b  esp32-csi-node.bin   (844 KB)
cbb8e3ba  bootloader.bin       (19 KB)
4c2cc4ff  partition-table.bin  (3 KB)
7d2c7ac4  ota_data_initial.bin (8 KB)

Full Changelog: https://github.com/ruvnet/RuView/compare/v0.5.3-esp32...v0.5.4-esp32

download

unix · zip
curl -fL -o v0.5.4-esp32.zip https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.zip
                    printf '%s  %s\n' '8c10c85a80feffaf421bfc1108fd23a43cc68acf6a5a5536fd8ff3738d8a2cd6' 'v0.5.4-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.zip"
$out = "v0.5.4-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8c10c85a80feffaf421bfc1108fd23a43cc68acf6a5a5536fd8ff3738d8a2cd6") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.5.4-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.tar.gz
                    printf '%s  %s\n' '0f91b9ac7f6f76682aae3706dc7cc75e31b576725e57405360dd81f0da8e2566' 'v0.5.4-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.tar.gz"
$out = "v0.5.4-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "0f91b9ac7f6f76682aae3706dc7cc75e31b576725e57405360dd81f0da8e2566") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.5.4-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.zip
                    printf '%s  %s\n' '8c10c85a80feffaf421bfc1108fd23a43cc68acf6a5a5536fd8ff3738d8a2cd6' 'v0.5.4-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.zip"
$out = "v0.5.4-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8c10c85a80feffaf421bfc1108fd23a43cc68acf6a5a5536fd8ff3738d8a2cd6") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.5.4-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.tar.gz
                    printf '%s  %s\n' '0f91b9ac7f6f76682aae3706dc7cc75e31b576725e57405360dd81f0da8e2566' 'v0.5.4-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.tar.gz"
$out = "v0.5.4-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "0f91b9ac7f6f76682aae3706dc7cc75e31b576725e57405360dd81f0da8e2566") { throw "sha256 mismatch" }
artifact format size hashes
v0.5.4-esp32.zip zip 26.5 MiB
blake3-24 b28c83445181f6b6f21f455cfa504d06958df1ea3d084189
sha256 8c10c85a80feffaf421bfc1108fd23a43cc68acf6a5a5536fd8ff3738d8a2cd6
sha1 bd93f80dde2d1e51e5774e161d63352454780a6f
v0.5.4-esp32.tar.gz tar.gz 25.5 MiB
blake3-24 464541ba88bb9431cf9d3d3f7e7e251de094681eef4fd95f
sha256 0f91b9ac7f6f76682aae3706dc7cc75e31b576725e57405360dd81f0da8e2566
sha1 63c69d72486f5d23cbc8dc09283ed55b50bb6482

install

bazel
http_archive(
    name = "ruview",
    urls = ["https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.tar.gz"],
    integrity = "sha256-D5G5rH9vdmgqrjcG3HzHXjG1dnJeV0BTYN2B8NqOJWY=",
    strip_prefix = "ruview-v0.5.4-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.5.4-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
    name = "ruview",
    urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.tar.gz"],
    integrity = "sha256-D5G5rH9vdmgqrjcG3HzHXjG1dnJeV0BTYN2B8NqOJWY=",
    strip_prefix = "ruview-v0.5.4-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.4-esp32.tar.gz",
← v0.5.5-esp32v0.5.3-esp32 →