amaran-light-cli 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -14
- package/dist/__tests__/autoCct.test.js +27 -0
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/bleHttpControl.test.d.ts +2 -0
- package/dist/__tests__/bleHttpControl.test.d.ts.map +1 -0
- package/dist/__tests__/bleHttpControl.test.js +230 -0
- package/dist/__tests__/bleHttpControl.test.js.map +1 -0
- package/dist/__tests__/bleStack.test.d.ts +2 -0
- package/dist/__tests__/bleStack.test.d.ts.map +1 -0
- package/dist/__tests__/bleStack.test.js +1239 -0
- package/dist/__tests__/bleStack.test.js.map +1 -0
- package/dist/__tests__/cctUtil.test.js +9 -4
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/circadianDashboardSettings.test.d.ts +2 -0
- package/dist/__tests__/circadianDashboardSettings.test.d.ts.map +1 -0
- package/dist/__tests__/circadianDashboardSettings.test.js +82 -0
- package/dist/__tests__/circadianDashboardSettings.test.js.map +1 -0
- package/dist/__tests__/circadianIsolation.test.d.ts +2 -0
- package/dist/__tests__/circadianIsolation.test.d.ts.map +1 -0
- package/dist/__tests__/circadianIsolation.test.js +30 -0
- package/dist/__tests__/circadianIsolation.test.js.map +1 -0
- package/dist/__tests__/cli.config.test.js +49 -0
- package/dist/__tests__/cli.config.test.js.map +1 -1
- package/dist/__tests__/cli.smoke.test.js +34 -0
- package/dist/__tests__/cli.smoke.test.js.map +1 -1
- package/dist/__tests__/currentCct.test.d.ts +2 -0
- package/dist/__tests__/currentCct.test.d.ts.map +1 -0
- package/dist/__tests__/currentCct.test.js +29 -0
- package/dist/__tests__/currentCct.test.js.map +1 -0
- package/dist/__tests__/dashboard.test.d.ts +2 -0
- package/dist/__tests__/dashboard.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard.test.js +126 -0
- package/dist/__tests__/dashboard.test.js.map +1 -0
- package/dist/__tests__/daylightSimulationParseUtils.test.d.ts +2 -0
- package/dist/__tests__/daylightSimulationParseUtils.test.d.ts.map +1 -0
- package/dist/__tests__/daylightSimulationParseUtils.test.js +16 -0
- package/dist/__tests__/daylightSimulationParseUtils.test.js.map +1 -0
- package/dist/__tests__/desktopImport.test.d.ts +2 -0
- package/dist/__tests__/desktopImport.test.d.ts.map +1 -0
- package/dist/__tests__/desktopImport.test.js +234 -0
- package/dist/__tests__/desktopImport.test.js.map +1 -0
- package/dist/__tests__/lightControl.basic.test.d.ts +2 -0
- package/dist/__tests__/lightControl.basic.test.d.ts.map +1 -0
- package/dist/__tests__/lightControl.basic.test.js +119 -0
- package/dist/__tests__/lightControl.basic.test.js.map +1 -0
- package/dist/__tests__/lightControl.colorEffects.test.d.ts +2 -0
- package/dist/__tests__/lightControl.colorEffects.test.d.ts.map +1 -0
- package/dist/__tests__/lightControl.colorEffects.test.js +170 -0
- package/dist/__tests__/lightControl.colorEffects.test.js.map +1 -0
- package/dist/__tests__/lightControl.management.test.d.ts +2 -0
- package/dist/__tests__/lightControl.management.test.d.ts.map +1 -0
- package/dist/__tests__/lightControl.management.test.js +90 -0
- package/dist/__tests__/lightControl.management.test.js.map +1 -0
- package/dist/__tests__/lightControlTestUtils.d.ts +10 -0
- package/dist/__tests__/lightControlTestUtils.d.ts.map +1 -0
- package/dist/__tests__/lightControlTestUtils.js +57 -0
- package/dist/__tests__/lightControlTestUtils.js.map +1 -0
- package/dist/__tests__/meshConfiguration.test.d.ts +2 -0
- package/dist/__tests__/meshConfiguration.test.d.ts.map +1 -0
- package/dist/__tests__/meshConfiguration.test.js +78 -0
- package/dist/__tests__/meshConfiguration.test.js.map +1 -0
- package/dist/__tests__/nativeGroups.test.d.ts +2 -0
- package/dist/__tests__/nativeGroups.test.d.ts.map +1 -0
- package/dist/__tests__/nativeGroups.test.js +104 -0
- package/dist/__tests__/nativeGroups.test.js.map +1 -0
- package/dist/__tests__/programApi.test.d.ts +2 -0
- package/dist/__tests__/programApi.test.d.ts.map +1 -0
- package/dist/__tests__/programApi.test.js +73 -0
- package/dist/__tests__/programApi.test.js.map +1 -0
- package/dist/__tests__/programs.test.d.ts +2 -0
- package/dist/__tests__/programs.test.d.ts.map +1 -0
- package/dist/__tests__/programs.test.js +176 -0
- package/dist/__tests__/programs.test.js.map +1 -0
- package/dist/__tests__/scheduleMaker.test.d.ts +2 -0
- package/dist/__tests__/scheduleMaker.test.d.ts.map +1 -0
- package/dist/__tests__/scheduleMaker.test.js +25 -0
- package/dist/__tests__/scheduleMaker.test.js.map +1 -0
- package/dist/ble/async.d.ts +2 -0
- package/dist/ble/async.d.ts.map +1 -0
- package/dist/ble/async.js +15 -0
- package/dist/ble/async.js.map +1 -0
- package/dist/ble/colors.d.ts +5 -0
- package/dist/ble/colors.d.ts.map +1 -0
- package/dist/ble/colors.js +44 -0
- package/dist/ble/colors.js.map +1 -0
- package/dist/ble/configuration.d.ts +22 -0
- package/dist/ble/configuration.d.ts.map +1 -0
- package/dist/ble/configuration.js +122 -0
- package/dist/ble/configuration.js.map +1 -0
- package/dist/ble/controller.d.ts +118 -0
- package/dist/ble/controller.d.ts.map +1 -0
- package/dist/ble/controller.js +931 -0
- package/dist/ble/controller.js.map +1 -0
- package/dist/ble/crypto.d.ts +34 -0
- package/dist/ble/crypto.d.ts.map +1 -0
- package/dist/ble/crypto.js +178 -0
- package/dist/ble/crypto.js.map +1 -0
- package/dist/ble/daemon.d.ts +2 -0
- package/dist/ble/daemon.d.ts.map +1 -0
- package/dist/ble/daemon.js +76 -0
- package/dist/ble/daemon.js.map +1 -0
- package/dist/ble/dashboard.d.ts +331 -0
- package/dist/ble/dashboard.d.ts.map +1 -0
- package/dist/ble/dashboard.js +280 -0
- package/dist/ble/dashboard.js.map +1 -0
- package/dist/ble/desktop.d.ts +4 -0
- package/dist/ble/desktop.d.ts.map +1 -0
- package/dist/ble/desktop.js +33 -0
- package/dist/ble/desktop.js.map +1 -0
- package/dist/ble/desktopLibrary.d.ts +12 -0
- package/dist/ble/desktopLibrary.d.ts.map +1 -0
- package/dist/ble/desktopLibrary.js +346 -0
- package/dist/ble/desktopLibrary.js.map +1 -0
- package/dist/ble/effects.d.ts +34 -0
- package/dist/ble/effects.d.ts.map +1 -0
- package/dist/ble/effects.js +138 -0
- package/dist/ble/effects.js.map +1 -0
- package/dist/ble/fan.d.ts +244 -0
- package/dist/ble/fan.d.ts.map +1 -0
- package/dist/ble/fan.js +46 -0
- package/dist/ble/fan.js.map +1 -0
- package/dist/ble/library.d.ts +341 -0
- package/dist/ble/library.d.ts.map +1 -0
- package/dist/ble/library.js +201 -0
- package/dist/ble/library.js.map +1 -0
- package/dist/ble/media.d.ts +133 -0
- package/dist/ble/media.d.ts.map +1 -0
- package/dist/ble/media.js +186 -0
- package/dist/ble/media.js.map +1 -0
- package/dist/ble/nativeGroups.d.ts +22 -0
- package/dist/ble/nativeGroups.d.ts.map +1 -0
- package/dist/ble/nativeGroups.js +114 -0
- package/dist/ble/nativeGroups.js.map +1 -0
- package/dist/ble/packets.d.ts +3 -0
- package/dist/ble/packets.d.ts.map +1 -0
- package/dist/ble/packets.js +15 -0
- package/dist/ble/packets.js.map +1 -0
- package/dist/ble/programs.d.ts +318 -0
- package/dist/ble/programs.d.ts.map +1 -0
- package/dist/ble/programs.js +329 -0
- package/dist/ble/programs.js.map +1 -0
- package/dist/ble/provisioning.d.ts +13 -0
- package/dist/ble/provisioning.d.ts.map +1 -0
- package/dist/ble/provisioning.js +39 -0
- package/dist/ble/provisioning.js.map +1 -0
- package/dist/ble/server.d.ts +18 -0
- package/dist/ble/server.d.ts.map +1 -0
- package/dist/ble/server.js +548 -0
- package/dist/ble/server.js.map +1 -0
- package/dist/ble/service.d.ts +2 -0
- package/dist/ble/service.d.ts.map +1 -0
- package/dist/ble/service.js +77 -0
- package/dist/ble/service.js.map +1 -0
- package/dist/ble/settings.d.ts +18 -0
- package/dist/ble/settings.d.ts.map +1 -0
- package/dist/ble/settings.js +25 -0
- package/dist/ble/settings.js.map +1 -0
- package/dist/ble/setup.d.ts +2 -0
- package/dist/ble/setup.d.ts.map +1 -0
- package/dist/ble/setup.js +31 -0
- package/dist/ble/setup.js.map +1 -0
- package/dist/ble/storage.d.ts +94 -0
- package/dist/ble/storage.d.ts.map +1 -0
- package/dist/ble/storage.js +132 -0
- package/dist/ble/storage.js.map +1 -0
- package/dist/ble/telink.d.ts +63 -0
- package/dist/ble/telink.d.ts.map +1 -0
- package/dist/ble/telink.js +108 -0
- package/dist/ble/telink.js.map +1 -0
- package/dist/ble/transitions.d.ts +3 -0
- package/dist/ble/transitions.d.ts.map +1 -0
- package/dist/ble/transitions.js +28 -0
- package/dist/ble/transitions.js.map +1 -0
- package/dist/ble/transport.d.ts +48 -0
- package/dist/ble/transport.d.ts.map +1 -0
- package/dist/ble/transport.js +370 -0
- package/dist/ble/transport.js.map +1 -0
- package/dist/circadian.d.ts +3 -0
- package/dist/circadian.d.ts.map +1 -1
- package/dist/circadian.js +2 -0
- package/dist/circadian.js.map +1 -1
- package/dist/cli.d.ts +3 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +125 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/newCommands.test.js +3 -4
- package/dist/commands/__tests__/newCommands.test.js.map +1 -1
- package/dist/commands/cmdUtils.d.ts +5 -2
- package/dist/commands/cmdUtils.d.ts.map +1 -1
- package/dist/commands/cmdUtils.js +29 -10
- package/dist/commands/cmdUtils.js.map +1 -1
- package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -1
- package/dist/commands/daylightSimulation/autoCct.js +67 -197
- package/dist/commands/daylightSimulation/autoCct.js.map +1 -1
- package/dist/commands/daylightSimulation/graphSchedule.d.ts +1 -1
- package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -1
- package/dist/commands/daylightSimulation/printSchedule.d.ts +1 -1
- package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -1
- package/dist/commands/daylightSimulation/printSchedule.js +2 -2
- package/dist/commands/daylightSimulation/printSchedule.js.map +1 -1
- package/dist/commands/daylightSimulation/service.d.ts +1 -1
- package/dist/commands/daylightSimulation/service.d.ts.map +1 -1
- package/dist/commands/daylightSimulation/service.js +5 -3
- package/dist/commands/daylightSimulation/service.js.map +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.d.ts +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.js +5 -4
- package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -1
- package/dist/commands/deviceControl/ble.d.ts +4 -0
- package/dist/commands/deviceControl/ble.d.ts.map +1 -0
- package/dist/commands/deviceControl/ble.js +214 -0
- package/dist/commands/deviceControl/ble.js.map +1 -0
- package/dist/commands/deviceControl/cct.d.ts.map +1 -1
- package/dist/commands/deviceControl/cct.js +41 -11
- package/dist/commands/deviceControl/cct.js.map +1 -1
- package/dist/commands/deviceControl/color.d.ts.map +1 -1
- package/dist/commands/deviceControl/color.js +13 -3
- package/dist/commands/deviceControl/color.js.map +1 -1
- package/dist/commands/deviceControl/config.d.ts.map +1 -1
- package/dist/commands/deviceControl/config.js +26 -3
- package/dist/commands/deviceControl/config.js.map +1 -1
- package/dist/commands/deviceControl/{discover.d.ts → desktop.d.ts} +3 -2
- package/dist/commands/deviceControl/desktop.d.ts.map +1 -0
- package/dist/commands/deviceControl/desktop.js +66 -0
- package/dist/commands/deviceControl/desktop.js.map +1 -0
- package/dist/commands/deviceControl/effect.d.ts.map +1 -1
- package/dist/commands/deviceControl/effect.js +90 -159
- package/dist/commands/deviceControl/effect.js.map +1 -1
- package/dist/commands/deviceControl/fan.d.ts.map +1 -1
- package/dist/commands/deviceControl/fan.js +77 -95
- package/dist/commands/deviceControl/fan.js.map +1 -1
- package/dist/commands/deviceControl/group.d.ts.map +1 -1
- package/dist/commands/deviceControl/group.js +43 -6
- package/dist/commands/deviceControl/group.js.map +1 -1
- package/dist/commands/deviceControl/hsi.d.ts.map +1 -1
- package/dist/commands/deviceControl/hsi.js +3 -1
- package/dist/commands/deviceControl/hsi.js.map +1 -1
- package/dist/commands/deviceControl/info.d.ts.map +1 -1
- package/dist/commands/deviceControl/info.js +0 -50
- package/dist/commands/deviceControl/info.js.map +1 -1
- package/dist/commands/deviceControl/intensity.d.ts.map +1 -1
- package/dist/commands/deviceControl/intensity.js +32 -8
- package/dist/commands/deviceControl/intensity.js.map +1 -1
- package/dist/commands/deviceControl/list.d.ts.map +1 -1
- package/dist/commands/deviceControl/list.js +3 -2
- package/dist/commands/deviceControl/list.js.map +1 -1
- package/dist/commands/deviceControl/power.d.ts.map +1 -1
- package/dist/commands/deviceControl/power.js +9 -3
- package/dist/commands/deviceControl/power.js.map +1 -1
- package/dist/commands/deviceControl/preset.d.ts.map +1 -1
- package/dist/commands/deviceControl/preset.js +56 -19
- package/dist/commands/deviceControl/preset.js.map +1 -1
- package/dist/commands/deviceControl/program.d.ts +4 -0
- package/dist/commands/deviceControl/program.d.ts.map +1 -0
- package/dist/commands/deviceControl/program.js +199 -0
- package/dist/commands/deviceControl/program.js.map +1 -0
- package/dist/commands/deviceControl/quickshot.d.ts.map +1 -1
- package/dist/commands/deviceControl/quickshot.js +75 -13
- package/dist/commands/deviceControl/quickshot.js.map +1 -1
- package/dist/commands/deviceControl/scene.d.ts.map +1 -1
- package/dist/commands/deviceControl/scene.js +72 -9
- package/dist/commands/deviceControl/scene.js.map +1 -1
- package/dist/commands/deviceControl/status.d.ts.map +1 -1
- package/dist/commands/deviceControl/status.js +26 -3
- package/dist/commands/deviceControl/status.js.map +1 -1
- package/dist/commands/parseUtils.d.ts +1 -1
- package/dist/commands/parseUtils.d.ts.map +1 -1
- package/dist/commands/parseUtils.js +1 -11
- package/dist/commands/parseUtils.js.map +1 -1
- package/dist/commands-api.d.ts +1 -1
- package/dist/commands-api.d.ts.map +1 -1
- package/dist/commands-api.js +1 -1
- package/dist/commands-api.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +4 -2
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +82 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -2
- package/dist/config.js.map +1 -1
- package/dist/daylightSimulation/cctUtil.d.ts.map +1 -1
- package/dist/daylightSimulation/cctUtil.js +2 -2
- package/dist/daylightSimulation/cctUtil.js.map +1 -1
- package/dist/daylightSimulation/constants.d.ts +10 -0
- package/dist/daylightSimulation/constants.d.ts.map +1 -1
- package/dist/daylightSimulation/constants.js +4 -0
- package/dist/daylightSimulation/constants.js.map +1 -1
- package/dist/daylightSimulation/currentCct.d.ts +42 -0
- package/dist/daylightSimulation/currentCct.d.ts.map +1 -0
- package/dist/daylightSimulation/currentCct.js +217 -0
- package/dist/daylightSimulation/currentCct.js.map +1 -0
- package/dist/daylightSimulation/dashboardSettings.d.ts +47 -0
- package/dist/daylightSimulation/dashboardSettings.d.ts.map +1 -0
- package/dist/daylightSimulation/dashboardSettings.js +95 -0
- package/dist/daylightSimulation/dashboardSettings.js.map +1 -0
- package/dist/daylightSimulation/dashboardStatus.d.ts +72 -0
- package/dist/daylightSimulation/dashboardStatus.d.ts.map +1 -0
- package/dist/daylightSimulation/dashboardStatus.js +191 -0
- package/dist/daylightSimulation/dashboardStatus.js.map +1 -0
- package/dist/daylightSimulation/parseUtils.d.ts +3 -0
- package/dist/daylightSimulation/parseUtils.d.ts.map +1 -0
- package/dist/daylightSimulation/parseUtils.js +25 -0
- package/dist/daylightSimulation/parseUtils.js.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts +2 -2
- package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -1
- package/dist/daylightSimulation/scheduleMaker.js +6 -6
- package/dist/daylightSimulation/scheduleMaker.js.map +1 -1
- package/dist/daylightSimulation/types.d.ts +13 -2
- package/dist/daylightSimulation/types.d.ts.map +1 -1
- package/dist/daylightSimulation/types.js +0 -2
- package/dist/daylightSimulation/types.js.map +1 -1
- package/dist/device-control.d.ts +1 -0
- package/dist/device-control.d.ts.map +1 -1
- package/dist/device-control.js +1 -0
- package/dist/device-control.js.map +1 -1
- package/dist/deviceControl/bleHttpControl.d.ts +129 -0
- package/dist/deviceControl/bleHttpControl.d.ts.map +1 -0
- package/dist/deviceControl/bleHttpControl.js +753 -0
- package/dist/deviceControl/bleHttpControl.js.map +1 -0
- package/dist/deviceControl/lightControl.d.ts +8 -68
- package/dist/deviceControl/lightControl.d.ts.map +1 -1
- package/dist/deviceControl/lightControl.js +6 -246
- package/dist/deviceControl/lightControl.js.map +1 -1
- package/dist/deviceControl/lightControlCommands.d.ts +68 -0
- package/dist/deviceControl/lightControlCommands.d.ts.map +1 -0
- package/dist/deviceControl/lightControlCommands.js +244 -0
- package/dist/deviceControl/lightControlCommands.js.map +1 -0
- package/dist/deviceControl/types.d.ts +75 -4
- package/dist/deviceControl/types.d.ts.map +1 -1
- package/dist/deviceControl/types.js +1 -0
- package/dist/deviceControl/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/test/MockLightServer.d.ts +1 -0
- package/dist/test/MockLightServer.d.ts.map +1 -1
- package/dist/test/MockLightServer.js +5 -0
- package/dist/test/MockLightServer.js.map +1 -1
- package/docs/CHANGELOG.md +37 -0
- package/docs/DIRECT_BLE.md +359 -0
- package/package.json +8 -4
- package/scripts/ble-cli-check.ts +129 -0
- package/scripts/ble-config-probe.ts +109 -0
- package/scripts/ble-effects-check.ts +82 -0
- package/scripts/ble-extended-probe.ts +44 -0
- package/scripts/ble-fan-check.ts +129 -0
- package/scripts/ble-feature-probe.ts +37 -0
- package/scripts/ble-followup-check.ts +165 -0
- package/scripts/ble-hardware-check.ts +99 -0
- package/scripts/ble-live-extended-check.ts +205 -0
- package/scripts/ble-non-ota-check.ts +193 -0
- package/scripts/ble-probe.ts +45 -0
- package/scripts/calibrate-webcam.ts +152 -0
- package/scripts/desktop-reference.ts +85 -0
- package/scripts/webcam.ts +129 -0
- package/dist/__tests__/lightControl.test.d.ts +0 -2
- package/dist/__tests__/lightControl.test.d.ts.map +0 -1
- package/dist/__tests__/lightControl.test.js +0 -424
- package/dist/__tests__/lightControl.test.js.map +0 -1
- package/dist/commands/deviceControl/discover.d.ts.map +0 -1
- package/dist/commands/deviceControl/discover.js +0 -29
- package/dist/commands/deviceControl/discover.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { CURVE_HELP_TEXT } from '../../daylightSimulation/constants.js';
|
|
2
|
+
import { CURVE_HELP_TEXT, DEFAULT_CURVE } from '../../daylightSimulation/constants.js';
|
|
3
3
|
import { ScheduleMaker } from '../../daylightSimulation/scheduleMaker.js';
|
|
4
4
|
import { commandCallbackPromise, getLightDevices } from '../cmdUtils.js';
|
|
5
5
|
export function registerSimulateSchedule(program, deps) {
|
|
@@ -8,12 +8,13 @@ export function registerSimulateSchedule(program, deps) {
|
|
|
8
8
|
.command('simulate')
|
|
9
9
|
.description('Simulate a CCT schedule curve in real-time on a specific device')
|
|
10
10
|
.argument('<device>', 'Device name, ID, or node_id to control')
|
|
11
|
-
.option('-
|
|
11
|
+
.option('-b, --backend <backend>', 'Light backend: ble (default) or desktop; websocket is an alias')
|
|
12
|
+
.option('-u, --url <url>', 'Backend URL (BLE HTTP or Desktop WebSocket)')
|
|
12
13
|
.option('-c, --client-id <id>', 'Client ID')
|
|
13
14
|
.option('-d, --debug', 'Enable debug mode')
|
|
14
15
|
.option('--lat <latitude>', 'Manual latitude (-90 to 90)')
|
|
15
16
|
.option('--lon <longitude>', 'Manual longitude (-180 to 180)')
|
|
16
|
-
.option('-C, --curve <curve>', CURVE_HELP_TEXT,
|
|
17
|
+
.option('-C, --curve <curve>', CURVE_HELP_TEXT, DEFAULT_CURVE)
|
|
17
18
|
.option('-L, --max-lux <value>', 'Simulation peak in lux (scales the whole day)')
|
|
18
19
|
.option('--duration <seconds>', 'Simulation duration to compress full day (default: 10 seconds)', '10')
|
|
19
20
|
.option('--cloud-cover <value>', 'Cloud cover (0-1)')
|
|
@@ -70,7 +71,7 @@ function handleSimulateSchedule(deps) {
|
|
|
70
71
|
process.exit(1);
|
|
71
72
|
}
|
|
72
73
|
// 2. Connect to controller and find device
|
|
73
|
-
const controller = await createController(options.url, options.clientId, options.debug);
|
|
74
|
+
const controller = await createController(options.url, options.clientId, options.debug, options.backend);
|
|
74
75
|
let devices;
|
|
75
76
|
if (deviceQuery.toLowerCase() === 'all') {
|
|
76
77
|
devices = getLightDevices(controller.getDevices());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulateSchedule.js","sourceRoot":"","sources":["../../../src/commands/daylightSimulation/simulateSchedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"simulateSchedule.js","sourceRoot":"","sources":["../../../src/commands/daylightSimulation/simulateSchedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ble.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/ble.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,8BAA8B,CAAC;AAIhF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmW7E"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { addStandardOptions, commandCallbackResult, requireBleController, runDeviceAction } from '../cmdUtils.js';
|
|
5
|
+
import { registerPrograms } from './program.js';
|
|
6
|
+
export default function registerBle(program, deps) {
|
|
7
|
+
const { asyncCommand } = deps;
|
|
8
|
+
const ble = program.command('ble').description('Direct Bluetooth Mesh setup and verified local daemon');
|
|
9
|
+
registerPrograms(ble, deps);
|
|
10
|
+
addStandardOptions(ble.command('health').description('Show daemon connectivity, feature flags and fixture capabilities')).action(asyncCommand(async (options) => {
|
|
11
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
12
|
+
try {
|
|
13
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).getHealth(cb)), null, 2));
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
await controller.disconnect();
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
addStandardOptions(ble
|
|
20
|
+
.command('dashboard')
|
|
21
|
+
.description('Print or open the local direct-BLE web dashboard')
|
|
22
|
+
.option('--open', 'Open the dashboard in the default browser')).action(asyncCommand(async (options) => {
|
|
23
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
24
|
+
try {
|
|
25
|
+
await commandCallbackResult((cb) => requireBleController(controller).getHealth(cb));
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
await controller.disconnect();
|
|
29
|
+
}
|
|
30
|
+
const configured = deps.loadConfig?.();
|
|
31
|
+
const baseUrl = String(options.url || configured?.bleUrl || 'http://localhost:2708').replace(/\/+$/, '');
|
|
32
|
+
const url = `${baseUrl}/dashboard`;
|
|
33
|
+
if (options.open === true) {
|
|
34
|
+
const command = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'explorer.exe' : 'xdg-open';
|
|
35
|
+
spawn(command, [url], { detached: true, stdio: 'ignore' }).unref();
|
|
36
|
+
}
|
|
37
|
+
console.log(url);
|
|
38
|
+
}));
|
|
39
|
+
addStandardOptions(ble
|
|
40
|
+
.command('import-desktop <database>')
|
|
41
|
+
.description('Preview or import Desktop effect presets, quickshots, and workspace groups; never applies lighting')
|
|
42
|
+
.option('--apply', 'Apply the validated import plan')
|
|
43
|
+
.option('--replace', 'Allow replacement of previously imported records')
|
|
44
|
+
.option('--allow-partial', 'Explicitly import valid entries despite reported unsupported records')
|
|
45
|
+
.option('--prefix <prefix>', 'Imported record name prefix', 'Desktop')).action(asyncCommand(async (database, options) => {
|
|
46
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
47
|
+
try {
|
|
48
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).importDesktop(realpathSync(database), {
|
|
49
|
+
apply: options.apply === true,
|
|
50
|
+
replace: options.replace === true,
|
|
51
|
+
allowPartial: options.allowPartial === true,
|
|
52
|
+
prefix: String(options.prefix),
|
|
53
|
+
}, cb)), null, 2));
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await controller.disconnect();
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
const mesh = ble.command('mesh').description('Native mesh configuration (no OTA or key rotation)');
|
|
60
|
+
addStandardOptions(mesh
|
|
61
|
+
.command('discover')
|
|
62
|
+
.description('Read-only scan for unprovisioned Mesh devices; does not pair or reset anything')).action(asyncCommand(async (options) => {
|
|
63
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
64
|
+
try {
|
|
65
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).discoverUnprovisioned(cb)), null, 2));
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await controller.disconnect();
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
addStandardOptions(mesh.command('inspect').description('Read live composition, app bindings, subscriptions and key-refresh phase')).action(asyncCommand(async (options) => {
|
|
72
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
73
|
+
try {
|
|
74
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).inspectMesh(cb)), null, 2));
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await controller.disconnect();
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
addStandardOptions(mesh
|
|
81
|
+
.command('import-keys <database>')
|
|
82
|
+
.description('Import matching Device Keys privately after authenticated read-only verification')).action(asyncCommand(async (database, options) => {
|
|
83
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
84
|
+
try {
|
|
85
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).importDeviceKeys(realpathSync(database), cb)), null, 2));
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await controller.disconnect();
|
|
89
|
+
}
|
|
90
|
+
}));
|
|
91
|
+
addStandardOptions(ble
|
|
92
|
+
.command('transition <action> <seconds>')
|
|
93
|
+
.description('Fade CCT, HSI or brightness; cross-mode fades pass through zero output')
|
|
94
|
+
.option('--targets <keys>', 'Comma-separated fixture keys/group IDs or all', 'all')
|
|
95
|
+
.option('--args <json>', 'Target settings (same arguments as the corresponding BLE action)', '{}')).action(asyncCommand(async (action, seconds, options) => {
|
|
96
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
97
|
+
try {
|
|
98
|
+
const targets = options.targets === 'all'
|
|
99
|
+
? 'all'
|
|
100
|
+
: String(options.targets)
|
|
101
|
+
.split(',')
|
|
102
|
+
.map((key) => key.trim());
|
|
103
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).transition(targets, action, z.record(z.unknown()).parse(JSON.parse(String(options.args))), Number(seconds), cb)), null, 2));
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
await controller.disconnect();
|
|
107
|
+
}
|
|
108
|
+
}));
|
|
109
|
+
addStandardOptions(ble
|
|
110
|
+
.command('override <action>')
|
|
111
|
+
.description('Hold, resume or inspect circadian control for selected fixtures')
|
|
112
|
+
.option('--targets <keys>', 'Comma-separated fixture keys/group IDs or all', 'all')
|
|
113
|
+
.option('--minutes <minutes>', 'Manual hold duration, 1-1440 minutes', '30')).action(asyncCommand(async (action, options) => {
|
|
114
|
+
if (!['hold', 'resume', 'status'].includes(action))
|
|
115
|
+
throw new Error('Override action must be hold, resume or status');
|
|
116
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
117
|
+
try {
|
|
118
|
+
const targets = options.targets === 'all'
|
|
119
|
+
? 'all'
|
|
120
|
+
: String(options.targets)
|
|
121
|
+
.split(',')
|
|
122
|
+
.map((key) => key.trim());
|
|
123
|
+
const minutes = action === 'status' ? undefined : action === 'resume' ? 0 : Number(options.minutes);
|
|
124
|
+
if (action === 'hold' && (minutes === undefined || !Number.isFinite(minutes) || minutes < 1 || minutes > 1440))
|
|
125
|
+
throw new Error('Hold duration must be between 1 and 1440 minutes');
|
|
126
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).overrides(targets, minutes, cb)), null, 2));
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await controller.disconnect();
|
|
130
|
+
}
|
|
131
|
+
}));
|
|
132
|
+
addStandardOptions(ble
|
|
133
|
+
.command('info [device]')
|
|
134
|
+
.description('Read native firmware/protocol identifiers and reported product capabilities')).action(asyncCommand(async (deviceQuery, options) => {
|
|
135
|
+
await runDeviceAction({ deps, options: { ...options, backend: 'ble' }, deviceQuery, actionName: 'read product information' }, async (device, controller) => {
|
|
136
|
+
console.log(JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).getProductInfo(device.node_id, cb)), null, 2));
|
|
137
|
+
}, async (controller) => {
|
|
138
|
+
for (const device of controller.getDevices().filter((item) => item.device_type === 'ble-light'))
|
|
139
|
+
console.log(device.node_id, JSON.stringify(await commandCallbackResult((cb) => requireBleController(controller).getProductInfo(device.node_id, cb)), null, 2));
|
|
140
|
+
});
|
|
141
|
+
}));
|
|
142
|
+
addStandardOptions(ble.command('gm <device> <value>').description('150c CCT tint: -100 magenta to +100 green, steps of 10')).action(asyncCommand(async (deviceQuery, value, options) => {
|
|
143
|
+
await runDeviceAction({ deps, options: { ...options, backend: 'ble' }, deviceQuery, actionName: 'adjust G/M' }, async (device, controller) => {
|
|
144
|
+
console.log(JSON.stringify(await commandCallbackResult((callback) => requireBleController(controller).setGM(device.node_id, Number(value), callback)), null, 2));
|
|
145
|
+
}, async () => {
|
|
146
|
+
throw new Error('Select the 150c; the 200x S fixtures do not support G/M');
|
|
147
|
+
});
|
|
148
|
+
}));
|
|
149
|
+
addStandardOptions(ble
|
|
150
|
+
.command('batch <action>')
|
|
151
|
+
.description('Prevalidated group control; explicit broadcast reaches the entire provisioned mesh')
|
|
152
|
+
.option('--targets <keys>', 'Comma-separated fixture keys or all', 'all')
|
|
153
|
+
.option('--args <json>', 'Action arguments; brightness is percent', '{}')
|
|
154
|
+
.option('--broadcast', 'Use mesh-wide broadcast instead of burst unicast')).action(asyncCommand(async (action, options) => {
|
|
155
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
156
|
+
try {
|
|
157
|
+
const targets = String(options.targets) === 'all'
|
|
158
|
+
? 'all'
|
|
159
|
+
: String(options.targets)
|
|
160
|
+
.split(',')
|
|
161
|
+
.map((key) => key.trim());
|
|
162
|
+
const args = z.record(z.unknown()).parse(JSON.parse(String(options.args)));
|
|
163
|
+
console.log(JSON.stringify(await commandCallbackResult((callback) => requireBleController(controller).batch(targets, action, args, options.broadcast === true, callback)), null, 2));
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
await controller.disconnect();
|
|
167
|
+
}
|
|
168
|
+
}));
|
|
169
|
+
addStandardOptions(ble
|
|
170
|
+
.command('fade <brightness> <seconds>')
|
|
171
|
+
.description('Host-paced 0.5-20s brightness fade; preserves power state and verifies endpoints')
|
|
172
|
+
.option('--targets <keys>', 'Comma-separated fixture keys or all', 'all')).action(asyncCommand(async (brightness, seconds, options) => {
|
|
173
|
+
const controller = await deps.createController(options.url, options.clientId, options.debug, 'ble');
|
|
174
|
+
try {
|
|
175
|
+
const targets = String(options.targets) === 'all'
|
|
176
|
+
? 'all'
|
|
177
|
+
: String(options.targets)
|
|
178
|
+
.split(',')
|
|
179
|
+
.map((key) => key.trim());
|
|
180
|
+
console.log(JSON.stringify(await commandCallbackResult((callback) => requireBleController(controller).fade(targets, Number(brightness), Number(seconds), callback)), null, 2));
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
await controller.disconnect();
|
|
184
|
+
}
|
|
185
|
+
}));
|
|
186
|
+
ble
|
|
187
|
+
.command('service <action>')
|
|
188
|
+
.description('Manage the macOS user daemon: install, start, stop or status')
|
|
189
|
+
.action(asyncCommand(async (action) => {
|
|
190
|
+
const { manageBleService } = await import('../../ble/service.js');
|
|
191
|
+
await manageBleService(action);
|
|
192
|
+
}));
|
|
193
|
+
ble
|
|
194
|
+
.command('import <config>')
|
|
195
|
+
.description('Import a private lights.json from the previous BLE project (once)')
|
|
196
|
+
.option('--source <address>', 'Dedicated unused controller unicast address (never the desktop source)', '32766')
|
|
197
|
+
.action(asyncCommand(async (config, options) => {
|
|
198
|
+
const { importMesh } = await import('../../ble/setup.js');
|
|
199
|
+
importMesh(config, Number(options.source));
|
|
200
|
+
}));
|
|
201
|
+
ble
|
|
202
|
+
.command('serve')
|
|
203
|
+
.description('Run a foreground, loopback-only BLE daemon; quit Amaran Desktop first')
|
|
204
|
+
.option('--port <port>', 'Local HTTP port', '2708')
|
|
205
|
+
.option('-d, --debug', 'Log authenticated protocol traffic (no mesh keys)')
|
|
206
|
+
.action(asyncCommand(async (options) => {
|
|
207
|
+
const port = Number(options.port);
|
|
208
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
209
|
+
throw new Error('Port must be an integer from 1 to 65535');
|
|
210
|
+
const { serveBle } = await import('../../ble/daemon.js');
|
|
211
|
+
await serveBle(port, options.debug);
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=ble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ble.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/ble.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cct.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/cct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"cct.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/cct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AASxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAkB9D;AAkMD,eAAe,WAAW,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { VALIDATION_RANGES } from '../../deviceControl/constants.js';
|
|
3
|
-
import { addStandardOptions, commandCallbackPromise, getLightDevices, runDeviceAction } from '../cmdUtils.js';
|
|
3
|
+
import { addStandardOptions, commandCallbackPromise, getAppliedNumber, getLightDevices, runDeviceAction, } from '../cmdUtils.js';
|
|
4
4
|
export function registerCct(program, deps) {
|
|
5
5
|
const { asyncCommand } = deps;
|
|
6
6
|
addStandardOptions(program
|
|
@@ -9,6 +9,7 @@ export function registerCct(program, deps) {
|
|
|
9
9
|
.description(`Set or get color temperature in Kelvin (${VALIDATION_RANGES.cct.min}-${VALIDATION_RANGES.cct.max}). Omit device or use "all" for all lights.`))
|
|
10
10
|
.option('-i, --intensity <value>', `Also set intensity (${VALIDATION_RANGES.intensity.min}-${VALIDATION_RANGES.intensity.max})`)
|
|
11
11
|
.option('-g, --get', 'Get current CCT and intensity instead of setting')
|
|
12
|
+
.option('--relative', 'Apply a signed Kelvin change within each fixture range (requires CCT mode)')
|
|
12
13
|
.action(asyncCommand(handleCct(deps)));
|
|
13
14
|
}
|
|
14
15
|
function handleCct(deps) {
|
|
@@ -104,11 +105,13 @@ function handleCct(deps) {
|
|
|
104
105
|
console.error(chalk.red('Error: temperature is required unless using --get'));
|
|
105
106
|
process.exit(1);
|
|
106
107
|
}
|
|
107
|
-
const temperature =
|
|
108
|
-
if (Number.
|
|
109
|
-
temperature < VALIDATION_RANGES.cct.min ||
|
|
110
|
-
temperature > VALIDATION_RANGES.cct.max) {
|
|
111
|
-
console.error(chalk.red(
|
|
108
|
+
const temperature = Number(tempStr);
|
|
109
|
+
if (!Number.isFinite(temperature) ||
|
|
110
|
+
temperature < (options.relative ? -7500 : VALIDATION_RANGES.cct.min) ||
|
|
111
|
+
temperature > (options.relative ? 7500 : VALIDATION_RANGES.cct.max)) {
|
|
112
|
+
console.error(chalk.red(options.relative
|
|
113
|
+
? 'Relative CCT must be between -7500K and 7500K'
|
|
114
|
+
: `Temperature must be between ${VALIDATION_RANGES.cct.min}K and ${VALIDATION_RANGES.cct.max}K`));
|
|
112
115
|
process.exit(1);
|
|
113
116
|
}
|
|
114
117
|
let intensity;
|
|
@@ -122,6 +125,9 @@ function handleCct(deps) {
|
|
|
122
125
|
}
|
|
123
126
|
intensity = intensity * 10;
|
|
124
127
|
}
|
|
128
|
+
let appliedTemperature = temperature;
|
|
129
|
+
let appliedIntensity = intensity;
|
|
130
|
+
let observedTemperature = false;
|
|
125
131
|
return runDeviceAction({
|
|
126
132
|
deps,
|
|
127
133
|
options,
|
|
@@ -129,18 +135,42 @@ function handleCct(deps) {
|
|
|
129
135
|
actionName: 'set temperature',
|
|
130
136
|
onSuccess: (device) => {
|
|
131
137
|
const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
|
|
132
|
-
let msg =
|
|
138
|
+
let msg = options.relative
|
|
139
|
+
? `✓ ${displayName} temperature adjusted${observedTemperature ? ` to ${appliedTemperature}K` : ''} (relative request ${temperature}K)`
|
|
140
|
+
: `✓ ${displayName} temperature set to ${appliedTemperature}K`;
|
|
141
|
+
if (!options.relative && appliedTemperature !== temperature)
|
|
142
|
+
msg += ` (rounded from ${temperature}K)`;
|
|
133
143
|
if (intensity !== undefined) {
|
|
134
|
-
msg += ` at ${intensity / 10}% intensity`;
|
|
144
|
+
msg += ` at ${(appliedIntensity ?? intensity) / 10}% intensity`;
|
|
135
145
|
}
|
|
136
146
|
return msg;
|
|
137
147
|
},
|
|
138
148
|
}, (device, controller) => {
|
|
139
|
-
return commandCallbackPromise((callback) =>
|
|
149
|
+
return commandCallbackPromise((callback) => {
|
|
150
|
+
const apply = options.relative
|
|
151
|
+
? controller.incrementCCT.bind(controller)
|
|
152
|
+
: controller.setCCT.bind(controller);
|
|
153
|
+
apply(device.node_id, temperature, intensity, (success, message, data) => {
|
|
154
|
+
if (success && device.backend === 'ble' && data && typeof data === 'object') {
|
|
155
|
+
const cct = getAppliedNumber(data, 'cct');
|
|
156
|
+
if (cct !== undefined) {
|
|
157
|
+
appliedTemperature = cct;
|
|
158
|
+
observedTemperature = true;
|
|
159
|
+
}
|
|
160
|
+
appliedIntensity = getAppliedNumber(data, 'intensity') ?? appliedIntensity;
|
|
161
|
+
}
|
|
162
|
+
callback(success, message, data);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
140
165
|
}, async (controller) => {
|
|
141
|
-
|
|
142
|
-
|
|
166
|
+
const apply = options.relative
|
|
167
|
+
? controller.incrementCCTForAllLights.bind(controller)
|
|
168
|
+
: controller.setCCTAndIntensityForAllLights.bind(controller);
|
|
169
|
+
await apply(temperature, intensity, (success, message) => {
|
|
170
|
+
if (!success) {
|
|
171
|
+
process.exitCode = 1;
|
|
143
172
|
console.error(`✗ Failed to set temperature: ${message}`);
|
|
173
|
+
}
|
|
144
174
|
});
|
|
145
175
|
});
|
|
146
176
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cct.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/cct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,
|
|
1
|
+
{"version":3,"file":"cct.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/cct.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAahE;
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAahE;AA0PD,eAAe,aAAa,CAAC"}
|
|
@@ -30,8 +30,12 @@ function handleColor(deps) {
|
|
|
30
30
|
actionName: 'get color',
|
|
31
31
|
}, async (device, controller) => {
|
|
32
32
|
// We use getNodeConfig initially
|
|
33
|
-
return new Promise((resolve) => {
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
34
|
controller.getNodeConfig(device.node_id, async (_success, _messagee, data) => {
|
|
35
|
+
if (!_success && device.backend === 'ble') {
|
|
36
|
+
reject(new Error(_messagee));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
35
39
|
const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
|
|
36
40
|
const config = data?.data ||
|
|
37
41
|
data ||
|
|
@@ -110,8 +114,12 @@ function handleColor(deps) {
|
|
|
110
114
|
}
|
|
111
115
|
for (const device of lightDevices) {
|
|
112
116
|
if (device.node_id) {
|
|
113
|
-
await new Promise((resolve) => {
|
|
117
|
+
await new Promise((resolve, reject) => {
|
|
114
118
|
controller.getNodeConfig(device.node_id, async (_success, _messagee, data) => {
|
|
119
|
+
if (!_success && device.backend === 'ble') {
|
|
120
|
+
reject(new Error(_messagee));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
115
123
|
const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
|
|
116
124
|
const config = data?.data ||
|
|
117
125
|
data ||
|
|
@@ -204,8 +212,10 @@ function handleColor(deps) {
|
|
|
204
212
|
return commandCallbackPromise((callback) => controller.setColor(device.node_id, color, intensity, callback));
|
|
205
213
|
}, async (controller) => {
|
|
206
214
|
await controller.setColorForAllLights(color, intensity, (success, message) => {
|
|
207
|
-
if (!success)
|
|
215
|
+
if (!success) {
|
|
216
|
+
process.exitCode = 1;
|
|
208
217
|
console.error(`✗ Failed to set color: ${message}`);
|
|
218
|
+
}
|
|
209
219
|
});
|
|
210
220
|
});
|
|
211
221
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE9G,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAiB;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,kBAAkB,CAChB,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CACV,yGAAyG,CAC1G,CACJ;SACE,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;SAC1D,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB;IACpC,OAAO,KAAK,EAAE,QAA4B,EAAE,WAA+B,EAAE,OAAuB,EAAE,EAAE;QACtG,kBAAkB;QAClB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,qGAAqG;YACrG,qFAAqF;YACrF,mDAAmD;YACnD,IAAI,YAAY,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC;gBAC9B,2EAA2E;gBAC3E,+GAA+G;gBAC/G,0DAA0D;gBAC1D,YAAY,GAAG,QAAQ,CAAC;YAC1B,CAAC;YAED,OAAO,eAAe,CACpB;gBACE,IAAI;gBACJ,OAAO;gBACP,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,WAAW;aACxB,EACD,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;gBAC3B,iCAAiC;gBACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,8BAA8B,CAAC;AAwBxE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QA4BzE"}
|
|
@@ -7,8 +7,11 @@ export default function registerConfig(program, deps) {
|
|
|
7
7
|
const { asyncCommand } = deps;
|
|
8
8
|
program
|
|
9
9
|
.command('config')
|
|
10
|
-
.description('Configure
|
|
10
|
+
.description('Configure light backend and other settings')
|
|
11
|
+
.option('-b, --backend <backend>', 'Default backend: ble or desktop; websocket is a desktop alias')
|
|
11
12
|
.option('-u, --url <url>', 'WebSocket URL (default: ws://localhost:60124)')
|
|
13
|
+
.option('--ble-url <url>', 'BLE HTTP daemon URL (default: http://localhost:2708)')
|
|
14
|
+
.option('--ble-api-key <key>', 'BLE HTTP daemon API key')
|
|
12
15
|
.option('-c, --client-id <id>', 'Client ID (default: amaran-cli)')
|
|
13
16
|
.option('-d, --debug <boolean>', 'Enable debug mode')
|
|
14
17
|
.option('--lat <latitude>', 'Default latitude for auto-cct (overrides geoip)')
|
|
@@ -19,7 +22,7 @@ export default function registerConfig(program, deps) {
|
|
|
19
22
|
.option('--intensity-max <percent>', 'Maximum intensity for auto-cct in percent (default: 100)')
|
|
20
23
|
.option('--default-curve <curve>', CURVE_HELP_TEXT)
|
|
21
24
|
.option('--auto-start-app <boolean>', 'Automatically start Amaran desktop app on connection failure (default: true)')
|
|
22
|
-
.option('--max-lux <
|
|
25
|
+
.option('--max-lux <value>', 'Maximum lux number or Kelvin map, e.g. 2700:8000,5600:10000')
|
|
23
26
|
.option('--weather <boolean>', 'Enable automatic weather fetching for auto-cct (default: false)')
|
|
24
27
|
.option('--privacy-off', 'Show full coordinates and sensitive data', false)
|
|
25
28
|
.option('--show', 'Show current configuration')
|
|
@@ -31,7 +34,10 @@ function handleConfig(deps) {
|
|
|
31
34
|
throw new Error('loadConfig dependency is required');
|
|
32
35
|
}
|
|
33
36
|
return async (options) => {
|
|
34
|
-
const hasSetOptions = options.
|
|
37
|
+
const hasSetOptions = options.backend !== undefined ||
|
|
38
|
+
options.url !== undefined ||
|
|
39
|
+
options.bleUrl !== undefined ||
|
|
40
|
+
options.bleApiKey !== undefined ||
|
|
35
41
|
options.clientId !== undefined ||
|
|
36
42
|
options.debug !== undefined ||
|
|
37
43
|
options.lat !== undefined ||
|
|
@@ -65,10 +71,27 @@ function handleConfig(deps) {
|
|
|
65
71
|
}
|
|
66
72
|
const config = loadConfig() || {};
|
|
67
73
|
const changes = [];
|
|
74
|
+
if (options.backend !== undefined) {
|
|
75
|
+
const backend = options.backend.trim().toLowerCase();
|
|
76
|
+
if (backend !== 'ble' && backend !== 'desktop' && backend !== 'websocket') {
|
|
77
|
+
console.error(chalk.red('Backend must be "ble" or "desktop" ("websocket" remains an alias)'));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
config.backend = backend;
|
|
81
|
+
changes.push(`Backend: ${backend}`);
|
|
82
|
+
}
|
|
68
83
|
if (options.url) {
|
|
69
84
|
config.wsUrl = options.url;
|
|
70
85
|
changes.push(`WebSocket URL: ${options.url}`);
|
|
71
86
|
}
|
|
87
|
+
if (options.bleUrl) {
|
|
88
|
+
config.bleUrl = options.bleUrl;
|
|
89
|
+
changes.push(`BLE HTTP URL: ${options.bleUrl}`);
|
|
90
|
+
}
|
|
91
|
+
if (options.bleApiKey !== undefined) {
|
|
92
|
+
config.bleApiKey = options.bleApiKey;
|
|
93
|
+
changes.push('BLE HTTP API key: configured');
|
|
94
|
+
}
|
|
72
95
|
if (options.clientId) {
|
|
73
96
|
config.clientId = options.clientId;
|
|
74
97
|
changes.push(`Client ID: ${options.clientId}`);
|