yeelight-service
Version:
Node Yeelight service.
283 lines (282 loc) • 12.2 kB
TypeScript
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
import { Observable } from 'rxjs';
export interface IYeelightDevice {
/**
* @returns {BehaviorSubject<boolean>} Returns connected state of device.
*/
connected: BehaviorSubject<boolean>;
/**
* @returns {string} Unique ID of the device.
*/
id: string;
/**
* @returns {BehaviorSubject<string>} Returns device friendly-name
*/
model: YeelightDeviceModelEnum;
/**
* @returns {YeelightSupportedMethodsEnum[]} Returns list of supported methods for this device. If you run method, that is not listed here, error will be returned.
*/
supportedMethods: YeelightSupportedMethodsEnum[];
/**
* @returns {BehaviorSubject<string>} Returns device friendly-name
*/
name: BehaviorSubject<string>;
/**
* @returns {BehaviorSubject<YeelightPowerState>} Returns device power state - `on` or `off`
*/
power: BehaviorSubject<YeelightPowerState>;
/**
* @returns {BehaviorSubject<number>} Returns brightness of the device (in percent 0 - 100)
*/
brightness: BehaviorSubject<number>;
/**
* @returns {BehaviorSubject<number>} Returns color temperature of the device (in Kelvin of range from 2700 to 6500)
*/
colorTemperature: BehaviorSubject<number>;
/**
* @returns {BehaviorSubject<number>} Returns RGB color (in RGB Hex)
*/
rgb: BehaviorSubject<string>;
/**
* @returns {BehaviorSubject<string>} Returns hue of the device (in degrees 0 - 359)
*/
hue: BehaviorSubject<number>;
/**
* @returns {BehaviorSubject<number>} Returns saturation of the device (0 - 100)
*/
saturation: BehaviorSubject<number>;
/**
* @returns {BehaviorSubject<YeelightColorModeEnum>} Returns color mode of the device
*/
colorMode: BehaviorSubject<YeelightColorModeEnum>;
/**
* Destroys current device and it's socket connection
*/
destroy: () => void;
/**
* Set name of the device
* @param {string} name New friendly-name of the device
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setName: (name: string) => Promise<IYeelightMethodResponse>;
/**
* Set power of the device
* @param {YeelightPowerState} power `on` or `off`
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setPower: (power: YeelightPowerState, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Set color temperature of the device
* @param {number} colorTemperature Number in the range from 2700 to 6500 (Kelvin)
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setColorTemperature: (colorTemperature: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Set RGB color of the device
* @param {string | number | number[]} rgb RGB Color. It can be hex color ("#FFFFFF"), number (16777215) or array of numbers ([255, 255, 255])
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setRgb: (rgb: string | number | number[], effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Set hue and saturation of the device
* @param {number} hue Number in the range from 0 to 359 (degrees)
* @param {number} saturation Number in the range from 0 to 100
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setHsv: (hue: number, saturation: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Set brightness of the device
* @param {number} brightness Number in the range from 0 to 100 (percent)
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setBrightness: (brightness: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Set current device state as default
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
setAsDefault: () => Promise<IYeelightMethodResponse>;
/**
* Toggle current device power state.
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
togglePower: () => Promise<IYeelightMethodResponse>;
/**
* Adjust brightness of the device
* @param {number} difference Number in the range from -100 to 100 (percent)
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
adjustBrightness: (difference: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Adjust color temperature of the device
* @param {number} difference Number in the range from -100 to 100 (percent)
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
adjustTemperature: (difference: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Adjust color of the device
* @param {number} difference Number in the range from -100 to 100 (percent)
* @param {YeelightEffect} effect Optional parameter with effect - `smooth` or `sudden`
* @param {number} duration Optional parameter with duration (in ms)
* @returns {Promise<IYeelightMethodResponse>} Response with status code (and an error if occured)
*/
adjustColor: (difference: number, effect?: YeelightEffect, duration?: number) => Promise<IYeelightMethodResponse>;
/**
* Send custom command supported by the device (https://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf)
* @param {id: number, method: string, params: TYeelightParams} command Command that should be send to device.
* @param {(response: IYeelightMethodResponse) => void} callback Callback after operation finished
*/
sendCommand: (command: {
id: number;
method: string;
params: TYeelightParams;
}) => Promise<IYeelightMethodResponse>;
}
export interface IYeelight {
/**
* List of found Yeelight devices.
*/
devices: BehaviorSubject<IYeelightDevice[]>;
/**
* Get device with given name. If there are two or more devices with given name, this function will return only first one.
* @param {string}
* Name of device
* @returns {Observable<IYeelightDevice>}
* Behaviour subject of device
*/
getDeviceByName: (name: string) => Observable<IYeelightDevice>;
/**
* Get device with defined model. If there are two or more devices with given name, this function will return only first one.
* @param {string}
* Name of device
* @returns {Observable<IYeelightDevice>}
* Behaviour subject of device
*/
getDeviceByModel: (model: string) => Observable<IYeelightDevice>;
/**
* Destroy service by closing all socket connections.
*/
destroy: () => void;
}
export interface IYeelightMethodResponse {
/**
* Status code of operation. See YeelightMethodStatusEnum for more details.
*/
status: YeelightMethodStatusEnum;
/**
* If error occured, reason will be provided here.
*/
errorMessage?: string;
}
export interface IYeelightResponse {
[key: string]: string | number;
}
export declare type TYeelightParams = (string | number)[];
export declare type YeelightPowerState = 'on' | 'off';
export declare type YeelightEffect = 'smooth' | 'sudden';
export declare enum YeelightDeviceModelEnum {
MONO = "mono",
COLOR = "color",
STRIPE = "stripe",
CEILING = "ceiling",
BSLAMP = "bslamp",
LAMP1 = "lamp1"
}
export declare enum YeelightSupportedMethodsEnum {
toggle = "toggle",
setTemperature = "set_ct_abx",
setRgb = "set_rgb",
setHsv = "set_hsv",
setBrightness = "set_bright",
setPower = "set_power",
setDefault = "set_default",
setName = "set_name",
adjustBrightness = "adjust_bright",
adjustTemperature = "adjust_ct",
adjustColor = "adjust_color"
}
export declare enum YeelightColorModeEnum {
RGB = 1,
COLOR_TEMPERATURE = 2,
HSV = 3
}
export declare enum YeelightSupportedPropertiesEnum {
/**
* Current state of LED light
* @returns {string} `on` - smart LED is turned on.
* @returns {string} `off` - smart LED is turned off.
*/
power = "power",
/**
* Current brightness of LED light (in percentage)
* @returns {number} Range `1` ~ `100` percent.
*/
brightness = "bright",
/**
* Current color temperature of LED light (in Kelvin)
* @returns {number} Range `1700` ~ `6500` Kelvin.
*/
colorTemperature = "ct",
/**
* Current RGB color of LED light (in HEX)
* @returns {string} HEX Color.
*/
rgb = "rgb",
/**
* Current hue of LED light (in degrees)
* @returns {number} Range `0` ~ `359` degree.
*/
hue = "hue",
/**
* Current saturation of LED light
* @returns {number} Range `0` ~ `100`.
*/
saturation = "sat",
/**
* LED light color mode. Returns color mode as integer:
* @returns {number} `1` - rgb mode
* @returns {number} `2` - color temperature mode
* @returns {number} `3` - hsv mode
*/
colorMode = "color_mode",
/**
* Fiendly-name of the device
* @returns {string} Name of the device.
*/
name = "name"
}
export declare enum YeelightMethodStatusEnum {
/**
* The device accepted the command correctly. However, this does not necessarily mean that the command has been carried out by the device.
*/
'OK' = 200,
/**
* One or more parameters passed are invalid.
*/
'BAD_REQUEST' = 400,
/**
* Selected method is not supported by the device (e.g. method for change color is not supported by non-color device). Supported methods for the device can be accessed by `supportedMethods` parameter of the device.
*/
'METHOD_NOT_SUPPORTED' = 405,
/**
* An exception thrown when trying to call a method on a disconnected device.
*/
'DEVICE_DISCONNECTED' = 410,
/**
* An exception thrown when the built-in validators did not find an error in the query, and yet it cannot be executed by the device for some reason. In this case, check `errorMessage` for more details.
*/
'YEELIGHT_DEVICE_ERROR' = 500
}