refactor: Streamline message processing and visualization updates in heart rate monitoring
This commit is contained in:
21
main.py
21
main.py
@ -270,11 +270,11 @@ def main():
|
|||||||
else:
|
else:
|
||||||
selected_devices = []
|
selected_devices = []
|
||||||
|
|
||||||
placeholder = st.empty()
|
# Process available messages (no infinite loop)
|
||||||
|
|
||||||
while True:
|
|
||||||
# Process UDP messages (treat as device_id = 0)
|
# Process UDP messages (treat as device_id = 0)
|
||||||
|
message_processed = False
|
||||||
try:
|
try:
|
||||||
|
while True: # Process all available UDP messages
|
||||||
message = state["message_queue"].receive_nowait()
|
message = state["message_queue"].receive_nowait()
|
||||||
hr_value = parse_ble_hr_measurement(message)
|
hr_value = parse_ble_hr_measurement(message)
|
||||||
if hr_value is not None:
|
if hr_value is not None:
|
||||||
@ -288,10 +288,13 @@ def main():
|
|||||||
dev_hist["hr_data"].append(float(hr_value))
|
dev_hist["hr_data"].append(float(hr_value))
|
||||||
|
|
||||||
logger.debug("UDP Device: HR={}", hr_value)
|
logger.debug("UDP Device: HR={}", hr_value)
|
||||||
|
message_processed = True
|
||||||
except anyio.WouldBlock:
|
except anyio.WouldBlock:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# Process MQTT messages
|
||||||
try:
|
try:
|
||||||
|
while True: # Process all available MQTT messages
|
||||||
mqtt_message = state["mqtt_message_queue"].receive_nowait()
|
mqtt_message = state["mqtt_message_queue"].receive_nowait()
|
||||||
if mqtt_message.payload:
|
if mqtt_message.payload:
|
||||||
try:
|
try:
|
||||||
@ -330,14 +333,19 @@ def main():
|
|||||||
dev_hist["hr_data"].append(float(hr_value))
|
dev_hist["hr_data"].append(float(hr_value))
|
||||||
|
|
||||||
logger.debug("Device {}: HR={}", device_id, hr_value)
|
logger.debug("Device {}: HR={}", device_id, hr_value)
|
||||||
|
message_processed = True
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Failed to parse MQTT protobuf message: {}", e)
|
logger.error("Failed to parse MQTT protobuf message: {}", e)
|
||||||
except anyio.WouldBlock:
|
except anyio.WouldBlock:
|
||||||
pass
|
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
|
# Update visualization - HR Graphs
|
||||||
with placeholder.container():
|
|
||||||
if device_histories:
|
if device_histories:
|
||||||
st.subheader("Heart Rate Data")
|
st.subheader("Heart Rate Data")
|
||||||
|
|
||||||
@ -385,6 +393,11 @@ def main():
|
|||||||
st.plotly_chart(fig, use_container_width=True)
|
st.plotly_chart(fig, use_container_width=True)
|
||||||
else:
|
else:
|
||||||
st.info("No heart rate data available for selected devices")
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user