58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { Device } from "./device";
|
|
|
|
import { IDeviceInterface } from "../interfaces";
|
|
|
|
import * as Consts from "../consts";
|
|
import { calculateRamp } from "../utils";
|
|
|
|
/**
|
|
* @class Light
|
|
* @extends Device
|
|
*/
|
|
export class Light extends Device {
|
|
|
|
|
|
constructor (hub: IDeviceInterface, portId: number) {
|
|
super(hub, portId, {}, Consts.DeviceType.LIGHT);
|
|
}
|
|
|
|
|
|
/**
|
|
* Set the light brightness.
|
|
* @method Light#setBrightness
|
|
* @param {number} brightness Brightness value between 0-100 (0 is off)
|
|
* @returns {Promise} Resolved upon successful completion of command.
|
|
*/
|
|
public setBrightness (brightness: number, interrupt: boolean = true) {
|
|
if (interrupt) {
|
|
this.cancelEventTimer();
|
|
}
|
|
return new Promise((resolve) => {
|
|
this.writeDirect(0x00, Buffer.from([brightness]));
|
|
return resolve();
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
* Ramp the light brightness.
|
|
* @method Light#rampBrightness
|
|
* @param {number} fromBrightness Brightness value between 0-100 (0 is off)
|
|
* @param {number} toBrightness Brightness value between 0-100 (0 is off)
|
|
* @param {number} time How long the ramp should last (in milliseconds).
|
|
* @returns {Promise} Resolved upon successful completion of command.
|
|
*/
|
|
public rampBrightness (fromBrightness: number, toBrightness: number, time: number) {
|
|
this.cancelEventTimer();
|
|
return new Promise((resolve) => {
|
|
calculateRamp(this, fromBrightness, toBrightness, time)
|
|
.on("changePower", (power) => {
|
|
this.setBrightness(power, false);
|
|
})
|
|
.on("finished", resolve);
|
|
});
|
|
}
|
|
|
|
|
|
}
|