homebridge-better-miot
Version:
Some xiaomi devices integration
67 lines • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AirPurifierPro = exports.EOperationMode = exports.ESwitchableMode = void 0;
const GenericDevice_1 = require("./GenericDevice");
var ESwitchableMode;
(function (ESwitchableMode) {
ESwitchableMode["ON"] = "on";
ESwitchableMode["OFF"] = "off";
})(ESwitchableMode = exports.ESwitchableMode || (exports.ESwitchableMode = {}));
var EOperationMode;
(function (EOperationMode) {
EOperationMode["AUTO"] = "auto";
EOperationMode["SILENT"] = "silent";
EOperationMode["FAVORITE"] = "favorite";
})(EOperationMode = exports.EOperationMode || (exports.EOperationMode = {}));
const DEFAULT_POLLING_INTERVAL_MS = 2.5 * 1000; // 2.5ms
class AirPurifierPro extends GenericDevice_1.GenericDevice {
constructor(config) {
super({
...config,
properties: [
{ name: 'power', mapper: (value) => value === ESwitchableMode.ON },
{ name: 'mode' },
{ name: 'favorite_level', title: 'favoriteLevel' },
{ name: 'led', mapper: (value) => value === ESwitchableMode.ON },
{ name: 'volume' },
{ name: 'aqi', title: 'pm25' },
{ name: 'humidity' },
{ name: 'temp_dec', title: 'temperature', mapper: (value) => Number(value) / 10 },
{ name: 'bright', title: 'illuminance' },
{ name: 'filter1_life', title: 'filterLifeRemaining' },
{ name: 'motor1_speed', title: 'motorSpeed' },
],
});
this.properties = {};
// TODO: make better poling
setInterval(() => {
this.fetchProperties();
}, config.pollingIntervalMS || DEFAULT_POLLING_INTERVAL_MS);
}
setPower(power) {
this.call('set_power', [power], ['power', 'mode']);
}
setMode(mode) {
this.call('set_mode', [mode], ['power', 'mode']);
}
setLed(led) {
this.call('set_led', [led], ['led']);
}
setFavoriteLevel(level) {
if (level > 17 || level < 0) {
throw Error('Invalid favorite level');
}
this.call('set_level_favorite', [level], ['favoriteLevel']);
}
setVolume(number) {
if (number > 100 || number < 0) {
throw Error('Invalid favorite level');
}
this.call('set_volume', [number], ['volume']);
}
on(property, cb) {
this.subscribe(property, cb);
}
}
exports.AirPurifierPro = AirPurifierPro;
//# sourceMappingURL=AirPurifierPro.js.map