UNPKG

homebridge-lg-ac

Version:

A Homebridge plugin for controlling/monitoring LG AirConditioning device via LG ThinQ platform.

57 lines 2.34 kB
"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