Rework status object #11

Merged
iGoX merged 1 commits from igox/new-status-object into main 2026-04-24 17:42:41 +02:00
2 changed files with 91 additions and 11 deletions
+63 -9
View File
@@ -165,7 +165,7 @@ class LedController:
async def stop(self): async def stop(self):
await self.sendCommand({"type": "off"}) await self.sendCommand({"type": "off"})
def get_state(self): def getStatus(self):
if self.blinking and self.blinkDuration > 0: if self.blinking and self.blinkDuration > 0:
elapsed = time.ticks_diff(time.ticks_ms(), self.blinkStart) / 1000 elapsed = time.ticks_diff(time.ticks_ms(), self.blinkStart) / 1000
remains = max(0.0, self.blinkDuration - elapsed) remains = max(0.0, self.blinkDuration - elapsed)
@@ -258,7 +258,16 @@ async def setColor(request):
await led.set_color((r, g, b), brightness) await led.set_color((r, g, b), brightness)
status = await led.get_status() 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') @app.get('/api/color')
@@ -270,7 +279,16 @@ async def getColor(request):
@app.get('/api/status') @app.get('/api/status')
async def getStatus(request): async def getStatus(request):
status = await led.get_status() 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/<status>', methods=['GET', 'POST']) @app.route('/api/status/<status>', methods=['GET', 'POST'])
@@ -281,7 +299,16 @@ async def setStatus(request, status):
return {'error': 'unknown status'}, 404 return {'error': 'unknown status'}, 404
status = await led.get_status() 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') @app.post('/api/blink')
@@ -300,12 +327,21 @@ async def setBlink(request):
await led.blink(freq, duration) 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') @app.get('/api/blink')
async def getBlink(request): async def getBlinkStatus(request):
state = led.get_state() state = led.getStatus()
return { return {
'isblinking': state["isblinking"], 'isblinking': state["isblinking"],
'frequency': state["frequency"], 'frequency': state["frequency"],
@@ -319,7 +355,16 @@ async def blinkStop(request):
await led.stop() await led.stop()
await led.set_status(led.previousStatus) await led.set_status(led.previousStatus)
status = await led.get_status() 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') @app.get('/api/debug')
@@ -352,7 +397,16 @@ async def mutedeckWebhook(request):
else: else:
await led.set_status('available') 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') @app.post('/shutdown')
+28 -2
View File
@@ -138,11 +138,37 @@ Or directly from **[busyLight-streamdeck-pluing](https://code.igox.org/iGoX/busy
```json ```json
{ {
"status": "<STATUS>" "status": "<STATUS>",
"color": {
"r": 255,
"g": 0,
"b": 110
},
"brightness": 0.1
"isBlinkning": false,
"blinkParameters": {
"frequency": 2,
"duration": 5.0,
"remains": 3.2
}
} }
``` ```
`<STATUS>` : `on` | `off` | `available` | `away` | `busy` | `colored` | `blinking` `<STATUS>` : `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 # MuteDeck integration