refactor: Streamline message processing and visualization updates in heart rate monitoring

This commit is contained in:
2025-06-10 18:15:33 +08:00
parent 65cb8c201d
commit 3a15bd655e

21
main.py
View File

@ -270,11 +270,11 @@ def main():
else:
selected_devices = []
placeholder = st.empty()
while True:
# Process available messages (no infinite loop)
# Process UDP messages (treat as device_id = 0)
message_processed = False
try:
while True: # Process all available UDP messages
message = state["message_queue"].receive_nowait()
hr_value = parse_ble_hr_measurement(message)
if hr_value is not None:
@ -288,10 +288,13 @@ def main():
dev_hist["hr_data"].append(float(hr_value))
logger.debug("UDP Device: HR={}", hr_value)
message_processed = True
except anyio.WouldBlock:
pass
# Process MQTT messages
try:
while True: # Process all available MQTT messages
mqtt_message = state["mqtt_message_queue"].receive_nowait()
if mqtt_message.payload:
try:
@ -330,14 +333,19 @@ def main():
dev_hist["hr_data"].append(float(hr_value))
logger.debug("Device {}: HR={}", device_id, hr_value)
message_processed = True
except Exception as e:
logger.error("Failed to parse MQTT protobuf message: {}", e)
except anyio.WouldBlock:
pass
# Auto-refresh the page if new data was processed
if message_processed:
sleep(0.1) # Small delay to batch multiple messages
st.rerun()
# Update visualization - HR Graphs
with placeholder.container():
if device_histories:
st.subheader("Heart Rate Data")
@ -385,6 +393,11 @@ def main():
st.plotly_chart(fig, use_container_width=True)
else:
st.info("No heart rate data available for selected devices")
else:
st.info("No devices connected yet. Waiting for data...")
sleep(1)
st.rerun()
if __name__ == "__main__":