From b35582d4e0aeed0c27396cc1ab7bb482d6cefe78 Mon Sep 17 00:00:00 2001 From: Yesuah Date: Sat, 30 May 2026 14:06:10 -0500 Subject: [PATCH] fix: send VitalsSnapshot from simulated_data_task for MQTT state topics broadcast_tick_task only runs for esp32 source. simulate source uses simulated_data_task which never sent to vitals_tx, so MQTT state topics never received messages and all entities stayed unknown in HA. --- .../wifi-densepose-sensing-server/src/main.rs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/v2/crates/wifi-densepose-sensing-server/src/main.rs b/v2/crates/wifi-densepose-sensing-server/src/main.rs index 5c9f2860..1cf40637 100644 --- a/v2/crates/wifi-densepose-sensing-server/src/main.rs +++ b/v2/crates/wifi-densepose-sensing-server/src/main.rs @@ -5300,6 +5300,31 @@ async fn simulated_data_task(state: SharedState, tick_ms: u64) { if let Ok(json) = serde_json::to_string(&update) { let _ = s.tx.send(json); } + #[cfg(feature = "mqtt")] + if let Some(ref vtx) = s.vitals_tx { + if vtx.receiver_count() > 0 { + use wifi_densepose_sensing_server::mqtt::state::VitalsSnapshot; + let vs = &s.latest_vitals; + let snap = VitalsSnapshot { + node_id: "ruview".to_string(), + timestamp_ms: std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_millis() as i64, + presence: update.classification.presence, + fall_detected: false, + motion: s.smoothed_motion, + motion_energy: update.features.motion_band_power, + presence_score: s.smoothed_person_score, + breathing_rate_bpm: vs.breathing_rate_bpm, + heartrate_bpm: vs.heart_rate_bpm, + n_persons: s.person_count() as u32, + rssi_dbm: update.nodes.first().map(|n| n.rssi_dbm), + vital_confidence: (vs.breathing_confidence + vs.heartbeat_confidence) / 2.0, + }; + let _ = vtx.send(snap); + } + } s.latest_update = Some(update); } }