ruview @ v1574
integrity
- size
- 61.1 MiB
- downloaded
- last checked
release notes
Automated release from CI pipeline
Changes: fix(mqtt): per-node HA devices use each node's own presence/motion (#872) (#918)
The MQTT bridge fanned out one Home-Assistant device per node (#898) but
applied the room-level aggregate classification to every node — so in a
multi-node setup a node in an empty corner inherited another node's
"present", and motion_level: "absent" was mis-mapped to full motion
(the aggregate match fell through Some(_) => 1.0).
Each node in the sensing broadcast's nodes array already carries its own
classification (motion_level/presence/confidence, see
PerNodeFeatureInfo) and RSSI. Now each per-node snapshot reads that node's
own classification, deferring to the room aggregate only for fields a node
omits. Vitals (breathing/heart rate) and person count stay room-level.
Extracted the JSON→VitalsSnapshot mapping into a pure, testable function
(vitals_snapshots_from_sensing_json) and added 4 unit tests covering
per-node divergence, partial-field fallback, the no-nodes aggregate path,
and the absent→zero-motion fix.
Supersedes #899, which targeted the right bug but read non-existent fields
(node["motion_level"] / node["status"] instead of the nested
node["classification"] + stale).
Verified: builds with --features mqtt; new tests pass; full crate unit
suite 432 + 114 passed, 0 failed.
Docker Image:
ghcr.io/ruvnet/RuView:b12662a54d64be1a22b67820412f63b713d73856
download
curl -fL -o v1574.zip https://ratatoskr.space/pkg/ruview/v1574.zip
printf '%s %s\n' '3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7' 'v1574.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1574.zip"
$out = "v1574.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7") { throw "sha256 mismatch" }
curl -fL -o v1574.tar.gz https://ratatoskr.space/pkg/ruview/v1574.tar.gz
printf '%s %s\n' '96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5' 'v1574.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1574.tar.gz"
$out = "v1574.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v1574.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.zip
printf '%s %s\n' '3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7' 'v1574.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.zip"
$out = "v1574.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7") { throw "sha256 mismatch" }
curl -fL -o v1574.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz
printf '%s %s\n' '96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5' 'v1574.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz"
$out = "v1574.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v1574.zip | zip | 61.1 MiB |
blake3-24 ef0cf3fcbd7ada734e3b0ea1bc554df1db8291dd0e8b87ef
sha256 3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7
sha1 e0dcb2ff8a25be04fa98b4bed3d500005156e36b
|
| v1574.tar.gz | tar.gz | 59.3 MiB |
blake3-24 d0aab2cb6b7ff7a50c0597677a8f99033bba8089f9220051
sha256 96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5
sha1 0e81be8363a70104c3f1d655479cdcf020f3588f
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v1574.tar.gz"],
integrity = "sha256-lsXaaFGY432oRNK/wnHB4CR0Y97RPX7bhH9nKNVEs8U=",
strip_prefix = "ruview-v1574",
)
.url = "https://ratatoskr.space/pkg/ruview/v1574.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz"],
integrity = "sha256-lsXaaFGY432oRNK/wnHB4CR0Y97RPX7bhH9nKNVEs8U=",
strip_prefix = "ruview-v1574",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz",