From 4efb3ad58108d153a6df802fedcfc7690133aafc Mon Sep 17 00:00:00 2001 From: iGoX Date: Fri, 24 Apr 2026 17:42:40 +0200 Subject: [PATCH] Rework status object (#11) Co-authored-by: Copilot Reviewed-on: https://code.igox.org/iGoX/busylight/pulls/11 --- ESP32/main.py | 72 ++++++++++++++++++++++++++++++++++++++++++++------- README.md | 30 +++++++++++++++++++-- 2 files changed, 91 insertions(+), 11 deletions(-) diff --git a/ESP32/main.py b/ESP32/main.py index 44208ac..4a57221 100644 --- a/ESP32/main.py +++ b/ESP32/main.py @@ -165,7 +165,7 @@ class LedController: async def stop(self): await self.sendCommand({"type": "off"}) - def get_state(self): + def getStatus(self): if self.blinking and self.blinkDuration > 0: elapsed = time.ticks_diff(time.ticks_ms(), self.blinkStart) / 1000 remains = max(0.0, self.blinkDuration - elapsed) @@ -258,7 +258,16 @@ async def setColor(request): await led.set_color((r, g, b), brightness) status = await led.get_status() - return {'status': status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.get('/api/color') @@ -270,7 +279,16 @@ async def getColor(request): @app.get('/api/status') async def getStatus(request): status = await led.get_status() - return {'status': status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.route('/api/status/', methods=['GET', 'POST']) @@ -281,7 +299,16 @@ async def setStatus(request, status): return {'error': 'unknown status'}, 404 status = await led.get_status() - return {'status': status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.post('/api/blink') @@ -300,12 +327,21 @@ async def setBlink(request): await led.blink(freq, duration) - return {'status': led.status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.get('/api/blink') -async def getBlink(request): - state = led.get_state() +async def getBlinkStatus(request): + state = led.getStatus() return { 'isblinking': state["isblinking"], 'frequency': state["frequency"], @@ -319,7 +355,16 @@ async def blinkStop(request): await led.stop() await led.set_status(led.previousStatus) status = await led.get_status() - return {'status': status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.get('/api/debug') @@ -352,7 +397,16 @@ async def mutedeckWebhook(request): else: await led.set_status('available') - return {'status': led.status} + state = led.getStatus() + return {'status': state["status"], + 'color': state["color"], + 'brightness': state["brightness"], + 'isblinking': state["isblinking"], + 'blinkParameters': { + 'frequency': state["frequency"], + 'duration': state["duration"], + 'remains': state["remains"]} + } @app.post('/shutdown') diff --git a/README.md b/README.md index 6fcacdd..1659f74 100644 --- a/README.md +++ b/README.md @@ -138,11 +138,37 @@ Or directly from **[busyLight-streamdeck-pluing](https://code.igox.org/iGoX/busy ```json { - "status": "" + "status": "", + "color": { + "r": 255, + "g": 0, + "b": 110 + }, + "brightness": 0.1 + "isBlinkning": false, + "blinkParameters": { + "frequency": 2, + "duration": 5.0, + "remains": 3.2 + } } ``` -`` : `on` | `off` | `available` | `away` | `busy` | `colored` | `blinking` +`` : `on` | `off` | `available` | `away` | `busy` | `colored` + +`color`: +- `r`: RED color | integer | [0 .. 255] +- `g`: GREEN color | integer | [0 .. 255] +- `b`: BLUE color | integer | [0 .. 255] + +`brightness`: LED brightness (optional) | float | [0.0 .. 1.0] + +`isblinking`: whether the BusyLight is currently blinking | boolean + +`blinkParameters` +- `frequency`: blink frequency | integer | Hz +- `duration`: total blink duration | float | seconds | 0 = endless +- `remains`: remaining blink time | float | seconds | 0 if endless # MuteDeck integration