From 12d512a515861c092f8f3f40be760a9547328665 Mon Sep 17 00:00:00 2001 From: serversdwn Date: Wed, 24 Dec 2025 07:16:33 +0000 Subject: [PATCH] sleep mode debug, proper command ref doc added --- app/__pycache__/routers.cpython-310.pyc | Bin 20495 -> 21902 bytes app/__pycache__/services.cpython-310.pyc | Bin 17676 -> 18645 bytes app/routers.py | 59 +++++++++++++++++++ app/services.py | 24 ++++++++ data/slmm.db | Bin 28672 -> 28672 bytes data/slmm.log | 69 +++++++++++++++++++++++ nl43_Command_ref.md | 0 templates/index.html | 41 ++++++++++++++ 8 files changed, 193 insertions(+) create mode 100644 nl43_Command_ref.md diff --git a/app/__pycache__/routers.cpython-310.pyc b/app/__pycache__/routers.cpython-310.pyc index c455f0e54e340754b0288369d725e6f5c61e3dc8..833ee9363b1a626f8f437a65a6b634a53323dacc 100644 GIT binary patch delta 2193 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 u1`)R>A8;#`KLBDL1QCZo#96?h str: + """Get the current sleep mode status.""" + resp = await self._send_command("Sleep Mode?\r\n") + logger.info(f"Sleep mode status on {self.device_key}: {resp}") + return resp.strip() + async def stream_drd(self, callback): """Stream continuous DRD output from the device. diff --git a/data/slmm.db b/data/slmm.db index c8a4bfd794f1e4e8457063141e769c9dbf325477..bfc475c38c19a639c95314fccaef0d78b2ec89df 100644 GIT binary patch delta 164 zcmZp8z}WDBae@>Rm*7MhCm^{oVW~YUzYqhz&}KmaUp^+r)e{?c<}_wA@=H2O3yX@1 z3NrvfQ*d66iLtJsk%5sZkkmCYQ7|yGGBLF>G0`(NG_Wu>@=Z-FE-gwmwlFg>(=&!* oBV9dRpooqFhz};sk=RB$3Z|BN29w|U=}-3c*8t(ofBl&i0EUDohX4Qo delta 290 zcmZp8z}WDBae@>RNB=|_Cm^{oVW~YUUnm1#=w?9yZ@&6w4Mu)RM`=+IU;u(v&%7KH zV_icd10z!)scU4SU|?irY+z+-sAp(uU~X>Uo0?c$T9j&Hre|bgtY>awqGt%CO-wEI z3_xN!3LsG(1ye8yk_C&H07(ghtr$#wqvlh6CJ S;lX-%Get Results (DLC) +
+ Power Management + + + +
+
Device Info @@ -197,6 +204,40 @@ log(`Reset: ${res.status} - ${data.message || JSON.stringify(data)}`); } + // Power management functions + async function sleepDevice() { + const unitId = document.getElementById('unitId').value; + const res = await fetch(`/api/nl43/${unitId}/sleep`, { method: 'POST' }); + const data = await res.json(); + if (res.ok) { + log(`Device entering sleep mode`); + } else { + log(`Sleep failed: ${res.status} - ${data.detail}`); + } + } + + async function wakeDevice() { + const unitId = document.getElementById('unitId').value; + const res = await fetch(`/api/nl43/${unitId}/wake`, { method: 'POST' }); + const data = await res.json(); + if (res.ok) { + log(`Device waking from sleep mode`); + } else { + log(`Wake failed: ${res.status} - ${data.detail}`); + } + } + + async function getSleepStatus() { + const unitId = document.getElementById('unitId').value; + const res = await fetch(`/api/nl43/${unitId}/sleep/status`); + const data = await res.json(); + if (res.ok) { + log(`Sleep Status: ${data.sleep_status}`); + } else { + log(`Get Sleep Status failed: ${res.status} - ${data.detail}`); + } + } + // Device info functions async function getBattery() { const unitId = document.getElementById('unitId').value;