feat(server): per-node state pipeline for multi-node sensing (#249)#326
Merged
feat(server): per-node state pipeline for multi-node sensing (#249)#326
Conversation
Documents the architectural change from single shared state to per-node HashMap<u8, NodeState> in the sensing server. Includes scaling analysis (256 nodes < 13 MB), QEMU validation plan, and aggregation strategy. Also links README hero image to the explainer video. Co-Authored-By: claude-flow <ruv@ruv.net>
…#249) Replaces the single shared state pipeline with per-node HashMap<u8, NodeState>. Each ESP32 node now gets independent: - frame_history (temporal analysis) - smoothed_person_score / prev_person_count - smoothed_motion / baseline / debounce state - vital sign detector + smoothing buffers - RSSI history Multi-node aggregation: - Person count = sum of per-node counts for active nodes (seen <10s) - SensingUpdate.nodes includes all active nodes - estimated_persons reflects cross-node aggregate Single-node deployments behave identically (HashMap has one entry). Simulated data path unchanged for backward compatibility. Closes #249 Refs #237, #276, #282 Co-Authored-By: claude-flow <ruv@ruv.net>
This was referenced Mar 27, 2026
Help Ruvnet! Detection Window showing the same thing regardless of position and people in room.
#249
Closed
Open
taylorjdawson
added a commit
to taylorjdawson/RuView
that referenced
this pull request
Mar 28, 2026
Complements ruvnet#326 (per-node state pipeline) with additional features: - Dynamic adaptive classifier: discover activity classes from training data filenames instead of hardcoded array. Users add classes via filename convention (train_<class>_<desc>.jsonl), no code changes. - Per-node UI cards: SensingTab shows individual node status with color-coded markers, RSSI, variance, and classification per node. - Colored node markers in 3D gaussian splat view (8-color palette). - Per-node RSSI history tracking in sensing service. - XSS fix: UI uses createElement/textContent instead of innerHTML. - RSSI sign fix: ensure dBm values are always negative. - GET /api/v1/nodes endpoint for per-node health monitoring. - node_features field in WebSocket SensingUpdate messages. - Firmware watchdog fix: yield after every frame to prevent IDLE1 starvation. Addresses ruvnet#237, ruvnet#276, ruvnet#282 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
HashMap<u8, NodeState>per-node trackingArchitecture (ADR-068)
Each
NodeStatecontains:frame_history,smoothed_person_score,smoothed_motion,vital_detector,baseline_motion,debouncestate,hr_buffer,br_buffer, andrssi_history.Scaling
Validation
cargo check— 0 errors, 17 pre-existing warningsTest plan
Closes #249
Refs #237, #276, #282
🤖 Generated with claude-flow