From 2f47b687787fe1d9b8f2f3129050ec47c27ae97a Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 8 Dec 2025 12:07:15 +0000 Subject: [PATCH] add sleep_stage --- main.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/main.py b/main.py index 9987ab6..b6eed6e 100644 --- a/main.py +++ b/main.py @@ -286,6 +286,33 @@ class GadgetbridgeMQTT: except Exception as e: logger.debug(f"Sleep query failed: {e}") + + # Sleep Stage Data (current stage) + try: + cursor.execute( + """ + SELECT STAGE, TIMESTAMP + FROM XIAOMI_SLEEP_STAGE_SAMPLE + WHERE DEVICE_ID = ? + ORDER BY TIMESTAMP DESC + LIMIT 1 + """, + (self.device_id,) + ) + row = cursor.fetchone() + if row: + stage_code, stage_timestamp = row + + stage_names = { + 0: "awake", 1: "light_sleep", 2: "deep_sleep", + 3: "rem_sleep", 4: "deep_sleep_v2", 5: "light_sleep_v2" + } + + data["sleep_stage"] = stage_names.get(stage_code, f"unknown_{stage_code}") + data["sleep_stage_code"] = stage_code + + except Exception as e: + logger.debug(f"Sleep stage query failed: {e}") # Weight (not device-specific, from scale) try: @@ -325,6 +352,8 @@ class GadgetbridgeMQTT: ("calories", "Calories", "kcal", "mdi:fire", "total_increasing", None), ("sleep_duration", "Sleep Duration", "h", "mdi:sleep", "measurement", None), ("is_awake", "Is Awake", None, "mdi:power-sleep", None, None), + ("sleep_stage", "Sleep Stage", None, "mdi:sleep-cycle", "measurement", None), + ("sleep_stage_code", "Sleep Stage Code", None, "mdi:numeric", "measurement", None), ("weight", "Weight", "kg", "mdi:scale-bathroom", "measurement", None), ("server_time", "Last Update", None, "mdi:clock-outline", None, "timestamp"), ]