homebridge-lg-ac
Version:
A Homebridge plugin for controlling/monitoring LG AirConditioning device via LG ThinQ platform.
57 lines • 2.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const baseDevice_1 = require("../baseDevice");
const MainUnit_1 = require("./AirConditioner/MainUnit");
const FanUnit_1 = require("./AirConditioner/FanUnit");
const ACController_1 = require("../lib/controllers/ACController");
const ButtonUnit_1 = require("./AirConditioner/ButtonUnit");
class AirConditioner extends baseDevice_1.baseDevice {
constructor(platform, accessory) {
super(platform, accessory);
this.platform = platform;
this.accessory = accessory;
this.units = [];
const device = this.accessory.context.device;
this.controller = new ACController_1.ACController(this.platform.ThinQ, device);
this.controller.on('UPDATE', (device) => this.updateAccessoryCharacteristic(device));
const mainService = new MainUnit_1.MainUnit(this.controller, platform, accessory, this.config);
this.units.push(mainService);
const fanService = new FanUnit_1.FanUnit(this.controller, platform, accessory);
if (this.config['ac_fan_control']) {
mainService.link(fanService.service);
this.units.push(fanService);
}
else {
fanService.remove();
}
const buttonSet = [
['ac_led_control', 2 /* ButtonType.LED */],
['ac_jetmode_control', 0 /* ButtonType.JET_MODE */],
['ac_comfort_sleep_control', 1 /* ButtonType.COMFORT_SLEEP */],
];
buttonSet.forEach(([config, id]) => {
const button = new ButtonUnit_1.ButtonUnit(this.controller, platform, accessory, id);
if (this.config[config]) {
mainService.link(button.service);
this.units.push(button);
}
else {
button.remove();
}
});
}
get config() {
return Object.assign({}, {
ac_led_control: false,
ac_fan_control: false,
ac_comfort_sleep_control: false,
ac_jetmode_control: false,
}, super.config);
}
updateAccessoryCharacteristic(device) {
this.accessory.context.device = device;
this.units.forEach((unit) => unit.update(device));
}
}
exports.default = AirConditioner;
//# sourceMappingURL=AirConditioner.js.map