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);
});
}
}