amaran-light-cli
Version:
Command line tool for controlling Aputure Amaran lights via WebSocket to a local Amaran desktop app.
105 lines • 4.37 kB
JavaScript
import chalk from 'chalk';
import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
export function registerFan(program, deps) {
const { asyncCommand } = deps;
const fan = program.command('fan').description('Control fan settings');
addStandardOptions(fan.command('mode <device> <mode>').description('Set fan mode (e.g. 0=Auto, 1=Smart, 2=High, 3=Medium, 4=Silent)')).action(asyncCommand(handleFanMode(deps)));
addStandardOptions(fan.command('speed <device> <speed>').description('Set fan speed')).action(asyncCommand(handleFanSpeed(deps)));
addStandardOptions(fan.command('info <device>').description('Get fan status')).action(asyncCommand(handleFanInfo(deps)));
}
function handleFanMode(deps) {
return async (deviceQuery, modeStr, options) => {
const mode = parseInt(modeStr, 10);
if (Number.isNaN(mode)) {
console.error(chalk.red('Fan mode must be a number'));
return;
}
return runDeviceAction({
deps,
options,
deviceQuery,
actionName: `set fan mode to ${mode}`,
}, (device, controller) => {
return new Promise((resolve) => {
controller.setFanMode(device.node_id, mode, (success, message) => {
if (success) {
console.log(chalk.green(`✓ Fan mode set to ${mode} on ${device.device_name || 'device'}`));
}
else {
console.error(chalk.red(`✗ Failed to set fan mode: ${message}`));
}
resolve();
});
});
}, () => {
console.log(chalk.yellow('Bulk fan control not supported.'));
return Promise.resolve();
});
};
}
function handleFanSpeed(deps) {
return async (deviceQuery, speedStr, options) => {
const speed = parseInt(speedStr, 10);
if (Number.isNaN(speed)) {
console.error(chalk.red('Fan speed must be a number'));
return;
}
return runDeviceAction({
deps,
options,
deviceQuery,
actionName: `set fan speed to ${speed}`,
}, (device, controller) => {
return new Promise((resolve) => {
controller.setFanSpeed(device.node_id, speed, (success, message) => {
if (success) {
console.log(chalk.green(`✓ Fan speed set to ${speed} on ${device.device_name || 'device'}`));
}
else {
console.error(chalk.red(`✗ Failed to set fan speed: ${message}`));
}
resolve();
});
});
}, () => {
console.log(chalk.yellow('Bulk fan control not supported.'));
return Promise.resolve();
});
};
}
function handleFanInfo(deps) {
return async (deviceQuery, options) => {
return runDeviceAction({
deps,
options,
deviceQuery,
actionName: 'get fan status',
}, (device, controller) => {
return new Promise((resolve) => {
const nodeId = device.node_id;
controller.getFanMode(nodeId, (success, message, mode) => {
if (success) {
controller.getFanSpeed(nodeId, (successSpeed, _, speed) => {
const displayName = device.device_name || device.name || 'Unknown';
console.log(chalk.blue(`Fan Information for ${displayName}:`));
console.log(` Mode: ${mode}`);
if (successSpeed) {
console.log(` Speed: ${speed}`);
}
resolve();
});
}
else {
console.error(chalk.red(`✗ Failed to get fan info: ${message}`));
resolve();
}
});
});
}, () => {
console.log(chalk.yellow('Bulk fan info not supported.'));
return Promise.resolve();
});
};
}
export default registerFan;
//# sourceMappingURL=fan.js.map