Dagoverzicht stacks one glucose trace per calendar day (small multiples via a shared 0-24h x-axis). The two event pages share a new render_event_level() helper in ui_common.py so Level 1/Level 2 hypo and hyper are rendered identically: count/avg/longest/events-per-week metrics, a time-of-day histogram, and a table of individual events. Co-Authored-By: Claude Sonnet 5 <[email protected]>
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import requests
|
|
import streamlit as st
|
|
|
|
from auth import require_auth
|
|
from nightscout_client import NightscoutConfigError
|
|
from reporting import LOW, VERY_LOW
|
|
from ui_common import (
|
|
get_colors,
|
|
load_range_data,
|
|
render_event_level,
|
|
select_period_days,
|
|
)
|
|
|
|
st.set_page_config(page_title="Glucose dashboard — Hypo events", page_icon="📊", layout="wide")
|
|
require_auth()
|
|
|
|
st.title("Hypo events")
|
|
st.caption(
|
|
"Detectie van hypoglykemie-events volgens de persistentieregel (FR5): een event "
|
|
"telt pas na >=15 minuten ononderbroken onder de drempel, en eindigt pas na "
|
|
">=15 minuten ononderbroken herstel."
|
|
)
|
|
|
|
start, end, days = select_period_days(default_label="90 dagen")
|
|
|
|
try:
|
|
glucose, _treatments = load_range_data(start, end)
|
|
except NightscoutConfigError as exc:
|
|
st.error(str(exc))
|
|
st.stop()
|
|
except (requests.RequestException, ValueError) as exc:
|
|
st.error(f"Kon geen data ophalen van Nightscout: {exc}")
|
|
st.stop()
|
|
|
|
if glucose.empty:
|
|
st.info("Geen glucosemetingen gevonden in deze periode.")
|
|
st.stop()
|
|
|
|
colors = get_colors()
|
|
|
|
render_event_level(glucose, LOW, "below", f"Level 1 (<{LOW} mmol/L)", days, colors)
|
|
st.divider()
|
|
render_event_level(glucose, VERY_LOW, "below", f"Level 2 (<{VERY_LOW} mmol/L)", days, colors)
|
|
|
|
st.caption(f"Periode: {start.strftime('%d-%m-%Y')} t/m {end.strftime('%d-%m-%Y')}")
|