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/v1574
vault / ruview / v1574

ruview @ v1574

integrity

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

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

unix · zip
curl -fL -o v1574.zip https://ratatoskr.space/pkg/ruview/v1574.zip
                    printf '%s  %s\n' '3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7' 'v1574.zip' | sha256sum -c -
windows · zip
$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" }
unix · tar.gz
curl -fL -o v1574.tar.gz https://ratatoskr.space/pkg/ruview/v1574.tar.gz
                    printf '%s  %s\n' '96c5da685198e37da844d2bfc271c1e0247463ded13d7edb847f6728d544b3c5' 'v1574.tar.gz' | sha256sum -c -
windows · tar.gz
$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
unix · zip
curl -fL -o v1574.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.zip
                    printf '%s  %s\n' '3af5aaa6ceb12a23e77a2ac5347262acb1ffc3a30ae24b1b366f8c804370d2c7' 'v1574.zip' | sha256sum -c -
windows · zip
$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" }
unix · tar.gz
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 -
windows · tar.gz
$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

bazel
http_archive(
    name = "ruview",
    urls = ["https://ratatoskr.space/pkg/ruview/v1574.tar.gz"],
    integrity = "sha256-lsXaaFGY432oRNK/wnHB4CR0Y97RPX7bhH9nKNVEs8U=",
    strip_prefix = "ruview-v1574",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v1574.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
    name = "ruview",
    urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz"],
    integrity = "sha256-lsXaaFGY432oRNK/wnHB4CR0Y97RPX7bhH9nKNVEs8U=",
    strip_prefix = "ruview-v1574",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1574.tar.gz",
← v1576v1572 →