mirror of
https://github.com/bemble/node-red-contrib-mi-devices.git
synced 2026-03-16 17:42:44 +01:00
Also add gateway search and subdevices discovery. Closes #28, closes #27, closes #26, closes #17 and fixes #12
129 lines
3.8 KiB
TypeScript
129 lines
3.8 KiB
TypeScript
import { EventEmitter } from "events";
|
|
|
|
export module LumiAqara {
|
|
interface Color {
|
|
r:number;
|
|
g:number;
|
|
b:number;
|
|
}
|
|
export interface Gateway extends EventEmitter {
|
|
ip: string;
|
|
sid: string;
|
|
ready: boolean;
|
|
password: string;
|
|
color: Color;
|
|
intensity: number;
|
|
/* Should be public */
|
|
_key: string;
|
|
|
|
setPassword(password:string);
|
|
setColor(color:Color);
|
|
setIntensity(intensity:number);
|
|
/* Should be public */
|
|
_sendUnicast(message:string);
|
|
}
|
|
|
|
/*************** Subdevices ***************/
|
|
interface SubDeviceOptions {
|
|
sid:string;
|
|
type?:string;
|
|
}
|
|
export interface SubDevice extends EventEmitter {
|
|
constructor(opts:SubDeviceOptions);
|
|
getSid(): string;
|
|
getType(): string;
|
|
getBatteryVoltage(): number;
|
|
getBatteryPercentage(): number;
|
|
}
|
|
export interface Cube extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "cube";
|
|
getStatus(): "rotate"|string;
|
|
getRotateDegrees(): number|null;
|
|
/**
|
|
* @event Emitted when a device value updated.
|
|
*/
|
|
on(event: "update", listener: () => void): any;
|
|
}
|
|
export interface Leak extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "leak";
|
|
isLeaking(): boolean;
|
|
/**
|
|
* @event Emitted when a device value updated.
|
|
*/
|
|
on(event: "update", listener: () => void): any;
|
|
}
|
|
export interface Magnet extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "magnet";
|
|
isOpen(): boolean;
|
|
/**
|
|
* @event Emitted when a the door/window just opend.
|
|
*/
|
|
on(event: "open", listener: () => void): any;
|
|
/**
|
|
* @event Emitted when a the door/window just closed.
|
|
*/
|
|
on(event: "close", listener: () => void): any;
|
|
}
|
|
export interface Motion extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "motion";
|
|
hasMotion(): boolean;
|
|
getLux(): number;
|
|
getSecondsSinceMotion(): number;
|
|
/**
|
|
* @event Emitted when a motion has been detected.
|
|
*/
|
|
on(event: "motion", listener: () => void): any;
|
|
/**
|
|
* @event Emitted after a motion ends.
|
|
*/
|
|
on(event: "noMotion", listener: () => void): any;
|
|
}
|
|
export interface Sensor extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "sensor";
|
|
/**
|
|
* @returns Temperature in degrees.
|
|
*/
|
|
getTemperature(): number;
|
|
/**
|
|
* @returns Humidity in percent.
|
|
*/
|
|
getHumidity(): number;
|
|
/**
|
|
* @returns Pressure in kPa
|
|
*/
|
|
getPressure(): number;
|
|
/**
|
|
* @event Emitted when a device value updated.
|
|
*/
|
|
on(event: "update", listener: () => void): any;
|
|
}
|
|
export interface Switch extends SubDevice {
|
|
constructor(opts:SubDeviceOptions);
|
|
getType(): "switch";
|
|
/**
|
|
* @event Emitted when a click is done on the switch.
|
|
*/
|
|
on(event: "click", listener: () => void): any;
|
|
/**
|
|
* @event Emitted when a double click is done on the switch.
|
|
*/
|
|
on(event: "doubleClick", listener: () => void): any;
|
|
/**
|
|
* @event Emitted when a double click is done on the switch.
|
|
*/
|
|
on(event: "doubleClick", listener: () => void): any;
|
|
/**
|
|
* @event Emitted when a long press is done.
|
|
*/
|
|
on(event: "longClickPress", listener: () => void): any;
|
|
/**
|
|
* @event Emitted when release the switch after a long press.
|
|
*/
|
|
on(event: "longClickRelease", listener: () => void): any;
|
|
}
|
|
} |