diff --git a/ESP32/main.py b/ESP32/main.py index e6a418e..1433e87 100644 --- a/ESP32/main.py +++ b/ESP32/main.py @@ -1,6 +1,5 @@ from microdot import Microdot, send_file import machine, sys, neopixel, time -import asyncio app = Microdot() @@ -9,65 +8,46 @@ nbPixels = 12*2 pinPixelStrip = 16 # ESP32 D1 Mini neoPixelStrip = neopixel.NeoPixel(machine.Pin(pinPixelStrip), nbPixels) -# Define BusyLight status -statusDef = { - 'off': {'name': 'off', 'code': 0, 'color': (0, 0, 0)}, # OFF - 'on': {'name': 'on', 'code': 1, 'color': (255, 255, 255)}, # White - 'busy': {'name': 'busy', 'code': 2, 'color': (255, 0, 0)}, # Red - 'available': {'name': 'available', 'code': 3, 'color': (0, 255, 0)}, # Green - 'away': {'name': 'away', 'code': 4, 'color': (246, 190, 0)}, # Yellow - 'blinking': {'name': 'blinking', 'code': 5}, # No defined color - 'colored': {'name': 'colored', 'code': 6} # No defined color -} +# Define status colors +statusColors = { + 'BUSY': (255,0,0), # red + 'AVAILABLE': (0,255,0), # green + 'AWAY': (246,190,0), # cyan + 'OFF': (0, 0, 0), # off + 'ON': (255, 255, 255) # white + } # Store BusyLight default global status -blColor = statusDef.get('off').get('color') -blPreviousColor = statusDef.get('off').get('color') -blStatus = statusDef.get('off') -blPreviousStatus = statusDef.get('off') +blColor = statusColors.get('OFF') +blStatus = 'off' +blPreviousStatus='off' blBrightness = 0.1 # Adjust the brightness (0.0 - 1.0) -blBlinkingTask = None -def __setDimmedColor(color): +def __setColor(color): r, g , b = color r = int(r * blBrightness) g = int(g * blBrightness) b = int(b * blBrightness) return (r, g, b) -def __setBusyLightColorAndBrigthness(color, brightness): +def __setBusyLightColor(color, brightness): global blBrightness blBrightness = brightness - global blColor blColor = color - dimmedColor = __setDimmedColor(color) - - neoPixelStrip.fill(dimmedColor) + neoPixelStrip.fill(__setColor(color)) neoPixelStrip.write() -def __setBusyLightColored(color, brightness): - __setBusyLightColorAndBrigthness(color, brightness) global blStatus - blStatus = statusDef.get('colored') + blStatus = 'colored' -def __setBusyLightStatus(status = statusDef.get('off')): - if status == statusDef.get('colored'): - lColor = blColor - else: - lColor = status.get('color') - __setBusyLightColorAndBrigthness(lColor, blBrightness) +def __setBusyLightStatus(status): + status = status.upper() + color = statusColors.get(status) + __setBusyLightColor(color, blBrightness) global blStatus - blStatus = status - -def __setBusyLightBlinking(time_ms=500): - return 0 - -def __setBusyLightStill(): - return 0 - - + blStatus = status.lower() # Microdot APP routes @@ -100,9 +80,17 @@ async def setBrightness(request): else: return {'error': 'wrong brigthness type (float)'}, 400 + # Save blStatus + global blStatus + status = blStatus + # Apply new brightness to current color - __setBusyLightColorAndBrigthness(blColor, brightness) - + color = blColor + __setBusyLightColor(color, brightness) + + # Restore global status + blStatus = status + global blBrightness blBrightness = brightness @@ -133,71 +121,32 @@ async def setColor(request): brightness = request.json.get("brightness") - if not bool(brightness is None): + if not brightness is None: if type(brightness) is float \ or type(brightness) is int: if brightness < 0 or brightness > 1: return {'error': 'brightness out of bound (0.0 - 1.0)'}, 400 else: return {'error': 'wrong brightness type (float)'}, 400 - __setBusyLightColored(color, brightness) + __setBusyLightColor(color, brightness) - __setBusyLightColored(color, blBrightness) + __setBusyLightColor(color, blBrightness) return {'status': blStatus} -@app.post('/api/blink') -async def setBlink(request): - time_ms = request.json.get("time_ms") - blinking = request.json.get("blinking") - - if not bool(time_ms is None): - if type(time_ms) is int: - if time_ms < 100 or time_ms > 5000: - return {'error': 'parameter "time_ms" out of bound (100 - 5000)'}, 400 - else: - return {'error': 'wrong parameter "time_ms" type (int)'}, 400 - - if bool(blinking is None): - return {'error': 'missing blinking parameter'}, 400 - else: - if type(blinking) is bool: - if blinking: - if time_ms is None: - __setBusyLightBlinking() - else: - __setBusyLightBlinking(time_ms) - else: - __setBusyLightStill() - else: - return {'error': 'wrong blinking type (bool)'}, 400 - - return {'status': 'to be implemented'} - - @app.route('/api/status/', methods=['GET', 'POST']) -async def setStatus(request, status): +async def setStatus(request, status): lStatus = status.lower() if lStatus == 'on': - status = statusDef.get('on') - __setBusyLightStatus(status) - + __setBusyLightStatus('ON') elif lStatus == 'off': - status = statusDef.get('off') - __setBusyLightStatus(status) - + __setBusyLightStatus('OFF') elif lStatus == 'available': - status = statusDef.get('available') - __setBusyLightStatus(status) - + __setBusyLightStatus('AVAILABLE') elif lStatus == 'away': - status = statusDef.get('away') - __setBusyLightStatus(status) - + __setBusyLightStatus('AWAY') elif lStatus == 'busy': - status = statusDef.get('busy') - __setBusyLightStatus(status) - + __setBusyLightStatus('BUSY') else: return {'error': 'unknown /api/status/' + lStatus + ' route'}, 404 @@ -234,11 +183,11 @@ async def mutedeckWebhook(request): isVideoOn = False if isMuted: - __setBusyLightStatus(statusDef.get('away')) + __setBusyLightStatus('away') else: - __setBusyLightStatus(statusDef.get('busy')) + __setBusyLightStatus('busy') else: - __setBusyLightStatus(statusDef.get('available')) + __setBusyLightStatus('available') return {'status': blStatus} @@ -250,17 +199,18 @@ async def shutdown(request): # Startup effect def startUpSeq(): - print('Start seq is started') - __setBusyLightStatus(statusDef.get('off')) + print('Start seq begins') + __setBusyLightStatus('OFF') time.sleep_ms(100) - __setBusyLightStatus(statusDef.get('busy')) + __setBusyLightStatus('BUSY') time.sleep_ms(200) - __setBusyLightStatus(statusDef.get('away')) + __setBusyLightStatus('AWAY') time.sleep_ms(300) - __setBusyLightStatus(statusDef.get('available')) + __setBusyLightStatus('AVAILABLE') time.sleep_ms(500) - __setBusyLightStatus(statusDef.get('off')) + __setBusyLightStatus('OFF') print('Start seq is ended') + __setBusyLightColor(statusColors.get('OFF'), 0.1) startUpSeq() diff --git a/ESP32/static/index.html b/ESP32/static/index.html index 9945a6b..3234a9d 100644 --- a/ESP32/static/index.html +++ b/ESP32/static/index.html @@ -4,38 +4,194 @@ BusyLight + -

Status

- +

BusyLight Status

-
-
-
-
- +
-
@@ -48,7 +204,6 @@ alphaChannel: false }; - //var colorPicker = new JSColor("colorPicker", "{preset:'default', onChange: 'putColor(this)'}") var colorPickerOpts = {}; colorPickerOpts["preset"] = "rgb"; colorPickerOpts["format"] = "rgb"; @@ -102,7 +257,6 @@ statusRadio.checked = true; } - async function putStatus(status) { var s = await setStatus(status); setColorPickerColor(status); @@ -131,6 +285,5 @@ var b = await setBrightness(brightness); } - - \ No newline at end of file + diff --git a/README.md b/README.md index 2449780..15ee8e6 100644 --- a/README.md +++ b/README.md @@ -16,28 +16,33 @@ **Let people know if they can bother you with light signals!** -A simple to build, nice looking, portable DIY **Busy Light**. +A cheap, simple to build, nice looking and portable DIY **Busy Light**. -It comes with a with a rudimentary (and ugly) **Web UI** and a simple (but hopefully convenient) **Rest API**. +It comes with a with a simplistic but neat **Web UI** and a simple (but hopefully convenient) **Rest API**. | Controlled by Stream Deck with REST API | Light roll | |-------------------------------------------------|---------------------------------------| | ![busylight and stream deck](img/busylight.jpg) | ![busylight roll](img/busylight.gif) | +![showoff video](img/busylight-showoff.mp4) + # Web UI -A very simplistic (and ugly) UI is available on port `80`. \ +A very simplistic but neat UI is available on port `80` (thanks @nicolaeser). \ Default hostname is `igox-busylight`. -You can try to reach the web UI @ `http://igox-busylight.local`. +You can try to reach the web UI @ [http://igox-busylight.local](http://igox-busylight.local). -| What an ugly UI ! :smile: | +| What an neat UI ! :smile: | |---------------------------| | ![Web UI](img/web-ui.png) | # Stream Deck plug-in -You can download a Stream Deck plugin to control your BusyLight [here](streamdeck-plugin/README.md). +You can download a Stream Deck plugin to control your BusyLight: -I will (hopefully) publish it to the [Elgato Market Place](https://marketplace.elgato.com/stream-deck/plugins) soon. +[![get it on marketplace](img/elgato-marketplace.png "Get iGoX BusyLight on Marketplace")](https://marketplace.elgato.com/product/igox-busylight-7448a0be-6dd6-4711-ba0d-86c52b9075b9) + + +Or directly from [here](streamdeck-plugin/README.md). # BusyLight API ## End points @@ -154,4 +159,4 @@ https://micropython.org https://microdot.readthedocs.io/en/latest/index.html ## JSColor -https://jscolor.com \ No newline at end of file +https://jscolor.com diff --git a/img/busylight-showoff.mp4 b/img/busylight-showoff.mp4 new file mode 100644 index 0000000..3e45dee Binary files /dev/null and b/img/busylight-showoff.mp4 differ diff --git a/img/elgato-marketplace.png b/img/elgato-marketplace.png new file mode 100644 index 0000000..60b0a12 Binary files /dev/null and b/img/elgato-marketplace.png differ diff --git a/img/web-ui.png b/img/web-ui.png index e5193f0..e610198 100644 Binary files a/img/web-ui.png and b/img/web-ui.png differ diff --git a/streamdeck-plugin/README.md b/streamdeck-plugin/README.md index 134a97d..b594c6d 100644 --- a/streamdeck-plugin/README.md +++ b/streamdeck-plugin/README.md @@ -1,4 +1,59 @@ -# Release notes +# BusyLight Stream Deck plugin - Release notes + +## Version 0.3.1.0 (2024-01-06) + +### Download + +[org.igox.busylight.v0.3.1.0.streamDeckPlugin](download/org.igox.busylight.v0.3.1.0.streamDeckPlugin) + +### Features + +- None added + +### Enhancements + +- Add colored button for "Set color" action. +- Add colored button for "Set brightness" action. +- Update plugin and plugin category icons + +### Fixes + +- None. + +### Bugs & known limitations + +- None known at publication time. + +### Screenshot + +![v0.3.1.0 screenshot](img/v0.3.1.0.png) + +## Version 0.3.0.0 (2024-01-06) + +### Download + +[org.igox.busylight.v0.3.0.0.streamDeckPlugin](download/org.igox.busylight.v0.3.0.0.streamDeckPlugin) + +### Features + +- None added + +### Enhancements + +- Rework icons to comply with plugin guidelines for Elgato Marketplace +- Combine the 3 "status" actions into a single action and having the status be selected with a dropdown + +### Fixes + +- None. + +### Bugs & known limitations + +- None known at publication time. + +### Screenshot + +![v0.3.0.0 screenshot](img/v0.3.0.0.png) ## Version 0.2.0.0 (2024-12-28) diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness.png deleted file mode 100644 index c1f28b5..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness@2x.png deleted file mode 100644 index c1f28b5..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/brightness/brightness@2x.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/available/available.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/available/available.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/available/available.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/available/available.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/available/available@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/available/available@2x.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/available/available@2x.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/available/available@2x.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/away/away.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/away/away.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/away/away.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/away/away.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/away/away@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/away/away@2x.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/away/away@2x.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/away/away@2x.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness.png new file mode 100644 index 0000000..1a58795 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness@2x.png new file mode 100644 index 0000000..1a58795 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/brigthness/brigthness@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/busy/busy.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/busy/busy.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/busy/busy.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/busy/busy.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/busy/busy@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/busy/busy@2x.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/busy/busy@2x.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/busy/busy@2x.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored.png new file mode 100644 index 0000000..280270d Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored@2x.png new file mode 100644 index 0000000..280270d Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/colored/colored@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/off/off.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/off/off.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/off/off.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/off/off.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/off/off@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/off/off@2x.png similarity index 100% rename from streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/off/off@2x.png rename to streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/off/off@2x.png diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on.png new file mode 100644 index 0000000..6b4ea24 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on@2x.png new file mode 100644 index 0000000..6b4ea24 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/buttons/on/on@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color.png deleted file mode 100644 index 82d3f44..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color@2x.png deleted file mode 100644 index 82d3f44..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/color/color@2x.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness.png new file mode 100644 index 0000000..ecadc7b Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness@2x.png new file mode 100644 index 0000000..e49f4aa Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/brightness/brightness@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color.png new file mode 100644 index 0000000..5f6bfb8 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color@2x.png new file mode 100644 index 0000000..5f6bfb8 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/color/color@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status.png new file mode 100644 index 0000000..37e4696 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status@2x.png new file mode 100644 index 0000000..37e4696 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/icons/status/status@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored.png deleted file mode 100644 index 82d3f44..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored@2x.png deleted file mode 100644 index 82d3f44..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/actions/status/colored/colored@2x.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon.png index c9faaa2..0a7bfdc 100644 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon.png and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon@2x.png index cae11dc..9b95bb0 100644 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon@2x.png and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/category-icon@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon.png new file mode 100644 index 0000000..e3811f7 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon@2x.png new file mode 100644 index 0000000..e3811f7 Binary files /dev/null and b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/icon@2x.png differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace.png deleted file mode 100644 index ca6226c..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace@2x.png b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace@2x.png deleted file mode 100644 index e1ce3bf..0000000 Binary files a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/imgs/plugin/marketplace@2x.png and /dev/null differ diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/manifest.json b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/manifest.json index 854197d..673f234 100644 --- a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/manifest.json +++ b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/manifest.json @@ -1,69 +1,21 @@ { "Name": "iGoX BusyLight", - "Version": "0.2.0.0", + "Version": "0.3.1.0", "Author": "iGoX", "$schema": "https://schemas.elgato.com/streamdeck/plugins/manifest.json", "Actions": [ { - "Name": "Set status as 'Available'", - "UUID": "org.igox.busylight.status.available", - "Icon": "imgs/actions/status/available/available", - "Tooltip": "Set status as 'Available'", + "Name": "Set BusyLight status", + "UUID": "org.igox.busylight.status.set", + "Icon": "imgs/actions/icons/status/status", + "Tooltip": "Set BusyLight status", "PropertyInspectorPath": "ui/status-config.html", "Controllers": [ "Keypad" ], "States": [ { - "Image": "imgs/actions/status/available/available", - "TitleAlignment": "bottom" - } - ] - }, - { - "Name": "Set status as 'Away'", - "UUID": "org.igox.busylight.status.away", - "Icon": "imgs/actions/status/away/away", - "Tooltip": "Set status as 'Away'", - "PropertyInspectorPath": "ui/status-config.html", - "Controllers": [ - "Keypad" - ], - "States": [ - { - "Image": "imgs/actions/status/away/away", - "TitleAlignment": "bottom" - } - ] - }, - { - "Name": "Set status as 'Busy'", - "UUID": "org.igox.busylight.status.busy", - "Icon": "imgs/actions/status/busy/busy", - "Tooltip": "Set status as 'Busy'", - "PropertyInspectorPath": "ui/status-config.html", - "Controllers": [ - "Keypad" - ], - "States": [ - { - "Image": "imgs/actions/status/busy/busy", - "TitleAlignment": "bottom" - } - ] - }, - { - "Name": "Turn off the BusyLight", - "UUID": "org.igox.busylight.status.off", - "Icon": "imgs/actions/status/off/off", - "Tooltip": "Turn off the BusyLight", - "PropertyInspectorPath": "ui/status-config.html", - "Controllers": [ - "Keypad" - ], - "States": [ - { - "Image": "imgs/actions/status/off/off", + "Image": "imgs/actions/icons/status/status", "TitleAlignment": "bottom" } ] @@ -71,7 +23,7 @@ { "Name": "Set brightness", "UUID": "org.igox.busylight.brigthness.set", - "Icon": "imgs/actions/brightness/brightness", + "Icon": "imgs/actions/icons/brightness/brightness", "Tooltip": "Set LED brightness", "PropertyInspectorPath": "ui/brightness-config.html", "Controllers": [ @@ -79,7 +31,7 @@ ], "States": [ { - "Image": "imgs/actions/brightness/brightness", + "Image": "imgs/actions/icons/brightness/brightness", "TitleAlignment": "bottom" } ] @@ -87,7 +39,7 @@ { "Name": "Set color", "UUID": "org.igox.busylight.color.set", - "Icon": "imgs/actions/color/color", + "Icon": "imgs/actions/icons/color/color", "Tooltip": "Set BusyLight displayed color", "PropertyInspectorPath": "ui/color-config.html", "Controllers": [ @@ -95,17 +47,17 @@ ], "States": [ { - "Image": "imgs/actions/color/color", + "Image": "imgs/actions/icons/color/color", "TitleAlignment": "bottom" } ] } ], "Category": "iGoX BusyLight", - "CategoryIcon": "imgs/plugin/marketplace", + "CategoryIcon": "imgs/plugin/category-icon", "CodePath": "bin/plugin.js", "Description": "Control your DIY BusyLight (https://github.com/igox/busylight) from your Stream Deck", - "Icon": "imgs/plugin/marketplace", + "Icon": "imgs/plugin/icon", "SDKVersion": 2, "Software": { "MinimumVersion": "6.4" diff --git a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/ui/status-config.html b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/ui/status-config.html index 409695d..cc2cfb2 100644 --- a/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/ui/status-config.html +++ b/streamdeck-plugin/busylight/org.igox.busylight.sdPlugin/ui/status-config.html @@ -25,5 +25,14 @@ value="getGlobalSettings()"> + + + + + + + + + \ No newline at end of file diff --git a/streamdeck-plugin/busylight/src/actions/set-brightness.ts b/streamdeck-plugin/busylight/src/actions/set-brightness.ts index 115026c..4821fc7 100644 --- a/streamdeck-plugin/busylight/src/actions/set-brightness.ts +++ b/streamdeck-plugin/busylight/src/actions/set-brightness.ts @@ -1,4 +1,4 @@ -import streamDeck, { action, DidReceiveSettingsEvent, WillAppearEvent, KeyDownEvent, SingletonAction } from "@elgato/streamdeck"; +import streamDeck, { action, DidReceiveSettingsEvent, WillAppearEvent, KeyDownEvent, PropertyInspectorDidAppearEvent, SingletonAction } from "@elgato/streamdeck"; @action({ UUID: "org.igox.busylight.brigthness.set" }) export class SetBrightness extends SingletonAction { @@ -25,7 +25,13 @@ export class SetBrightness extends SingletonAction { const { settings } = ev.payload; await ev.action.setSettings(settings); - await ev.action.setTitle(`${settings.brightness} %`); + await ev.action.setTitle(`${settings.brightness}%`); + } + + override async onPropertyInspectorDidAppear(ev: PropertyInspectorDidAppearEvent): Promise { + streamDeck.logger.debug(`>>> Received onPropertyInspectorDidAppear. Setting action icon <<<`); + + await ev.action.setImage(`imgs/actions/buttons/brigthness/brigthness.png`); } } diff --git a/streamdeck-plugin/busylight/src/actions/set-color.ts b/streamdeck-plugin/busylight/src/actions/set-color.ts index 6e6d19f..b1839c7 100644 --- a/streamdeck-plugin/busylight/src/actions/set-color.ts +++ b/streamdeck-plugin/busylight/src/actions/set-color.ts @@ -1,4 +1,4 @@ -import streamDeck, { action, JsonObject, KeyDownEvent, DidReceiveSettingsEvent, SingletonAction } from "@elgato/streamdeck"; +import streamDeck, { action, JsonObject, KeyDownEvent, DidReceiveSettingsEvent, PropertyInspectorDidAppearEvent, SingletonAction } from "@elgato/streamdeck"; @action({ UUID: "org.igox.busylight.color.set" }) export class SetColor extends SingletonAction { @@ -18,6 +18,12 @@ export class SetColor extends SingletonAction { const { settings } = ev.payload; await ev.action.setSettings(settings); } + + override async onPropertyInspectorDidAppear(ev: PropertyInspectorDidAppearEvent): Promise { + streamDeck.logger.debug(`>>> Color button property inspector diplayed! <<<`); + + await ev.action.setImage(`imgs/actions/buttons/colored/colored.png`); + } } function hexToRgb(hex: string): { r: number, g: number, b: number } { diff --git a/streamdeck-plugin/busylight/src/actions/set-status.ts b/streamdeck-plugin/busylight/src/actions/set-status.ts index bf90212..59bd9d7 100644 --- a/streamdeck-plugin/busylight/src/actions/set-status.ts +++ b/streamdeck-plugin/busylight/src/actions/set-status.ts @@ -1,31 +1,21 @@ -import streamDeck, { action, KeyDownEvent, SingletonAction } from "@elgato/streamdeck"; +import streamDeck, { action, KeyDownEvent, SingletonAction, DidReceiveSettingsEvent } from "@elgato/streamdeck"; -@action({ UUID: "org.igox.busylight.status.available" }) -export class SetStatusAvailable extends SingletonAction { - override async onKeyDown(ev: KeyDownEvent): Promise { - setStatus('available'); +@action({ UUID: "org.igox.busylight.status.set" }) +export class SetStatus extends SingletonAction { + override async onKeyDown(ev: KeyDownEvent): Promise { + const { settings } = ev.payload; + settings.status ??= 'available'; + setStatus(settings.status); } -} -@action({ UUID: "org.igox.busylight.status.busy" }) -export class SetStatusBusy extends SingletonAction { - override async onKeyDown(ev: KeyDownEvent): Promise { - setStatus('busy'); - } -} + override async onDidReceiveSettings(ev: DidReceiveSettingsEvent): Promise { + const { settings } = ev.payload; + let status = settings.status; + streamDeck.logger.debug(`>>> Config status changed to: ${status} <<<`); + + await ev.action.setImage(`imgs/actions/buttons/${status}/${status}.png`); -@action({ UUID: "org.igox.busylight.status.away" }) -export class SetStatusAway extends SingletonAction { - override async onKeyDown(ev: KeyDownEvent): Promise { - setStatus('away'); - } -} - -@action({ UUID: "org.igox.busylight.status.off" }) -export class SetStatusOff extends SingletonAction { - override async onKeyDown(ev: KeyDownEvent): Promise { - setStatus('off'); - } + } } async function setStatus(status: string) { @@ -43,4 +33,8 @@ async function setStatus(status: string) { }) .then(response => response.json()) .then(data => streamDeck.logger.debug(data)); -} \ No newline at end of file +} + +type statusSettings = { + status?: string; +}; \ No newline at end of file diff --git a/streamdeck-plugin/busylight/src/plugin.ts b/streamdeck-plugin/busylight/src/plugin.ts index a59808e..98e70d5 100644 --- a/streamdeck-plugin/busylight/src/plugin.ts +++ b/streamdeck-plugin/busylight/src/plugin.ts @@ -1,7 +1,6 @@ import streamDeck, { LogLevel, SingletonAction, action, type DidReceiveSettingsEvent } from "@elgato/streamdeck"; -//import { IncrementCounter } from "./actions/increment-counter"; -import { SetStatusAvailable, SetStatusBusy, SetStatusAway, SetStatusOff } from "./actions/set-status"; +import { SetStatus} from "./actions/set-status"; import { SetBrightness } from "./actions/set-brightness"; import { SetColor } from "./actions/set-color"; @@ -9,10 +8,7 @@ import { SetColor } from "./actions/set-color"; streamDeck.logger.setLevel(LogLevel.INFO); // Register the actions. -streamDeck.actions.registerAction(new SetStatusAvailable()); -streamDeck.actions.registerAction(new SetStatusBusy()); -streamDeck.actions.registerAction(new SetStatusAway()); -streamDeck.actions.registerAction(new SetStatusOff()); +streamDeck.actions.registerAction(new SetStatus()); streamDeck.actions.registerAction(new SetBrightness()); streamDeck.actions.registerAction(new SetColor()); diff --git a/streamdeck-plugin/download/org.igox.busylight.v0.3.0.0.streamDeckPlugin b/streamdeck-plugin/download/org.igox.busylight.v0.3.0.0.streamDeckPlugin new file mode 100644 index 0000000..8ce2639 Binary files /dev/null and b/streamdeck-plugin/download/org.igox.busylight.v0.3.0.0.streamDeckPlugin differ diff --git a/streamdeck-plugin/download/org.igox.busylight.v0.3.1.0.streamDeckPlugin b/streamdeck-plugin/download/org.igox.busylight.v0.3.1.0.streamDeckPlugin new file mode 100644 index 0000000..88571e2 Binary files /dev/null and b/streamdeck-plugin/download/org.igox.busylight.v0.3.1.0.streamDeckPlugin differ diff --git a/streamdeck-plugin/img/v0.1.0.0.png b/streamdeck-plugin/img/v0.1.0.0.png index dea12bc..434937b 100644 Binary files a/streamdeck-plugin/img/v0.1.0.0.png and b/streamdeck-plugin/img/v0.1.0.0.png differ diff --git a/streamdeck-plugin/img/v0.2.0.0.png b/streamdeck-plugin/img/v0.2.0.0.png index 6cca3df..3bda0c7 100644 Binary files a/streamdeck-plugin/img/v0.2.0.0.png and b/streamdeck-plugin/img/v0.2.0.0.png differ diff --git a/streamdeck-plugin/img/v0.3.0.0.png b/streamdeck-plugin/img/v0.3.0.0.png new file mode 100644 index 0000000..249e53e Binary files /dev/null and b/streamdeck-plugin/img/v0.3.0.0.png differ diff --git a/streamdeck-plugin/img/v0.3.1.0.png b/streamdeck-plugin/img/v0.3.1.0.png new file mode 100644 index 0000000..9d5e673 Binary files /dev/null and b/streamdeck-plugin/img/v0.3.1.0.png differ