UNPKG

homebridge-connect-my-pool-home-automation

Version:
87 lines 3.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FavouriteAccessory = void 0; const action_1 = require("../action"); const settings_1 = require("../settings"); const status_1 = require("../status"); const accessory_1 = require("./accessory"); /** * Favourite Accessory * An instance of this class is created for each accessory your platform registers * Each accessory may expose multiple services of different service types. */ class FavouriteAccessory extends accessory_1.Accessory { constructor(platform, accessory, device, status) { super(platform, accessory, device, status); this.stateOn = false; this.favouritesModes = []; this.favouriteConfigStatus = this.getFavouritesConfigStatus(status); this.favouritesModes.push({ key: settings_1.FAVOURITE_ALL_OFF, value: 'All Off' }); this.favouritesModes.push({ key: settings_1.FAVOURITE_ALL_AUTO, value: 'All Auto' }); this.favouritesModes.push({ key: settings_1.FAVOURITE_DEFAULT, value: 'Default' }); } setUpServices() { super.setUpServices(); this.createFavouriteServices(); this.services[0].setPrimaryService(true); super.updatePlatform(); } createFavouriteServices() { this.log.debug('Creating %s service for controller', this.deviceName); const zoneService = this.accessory.getServiceById(this.service.Switch, this.deviceType) || this.accessory.addService(this.service.Switch, this.deviceName, this.deviceType); zoneService.getCharacteristic(this.Characteristic.On) .onGet(this.getOnState.bind(this)) .onSet(this.setOnState.bind(this)); this.services.push(zoneService); return zoneService; } /// ///////////////////// // GET AND SET CONFIG STATUS /// ///////////////////// getFavouritesConfigStatus(status) { const currentStatus = status; const currentDevice = this.device; const currentConfig = currentDevice.data; if (currentStatus) { const configStatus = Object.assign({}, new status_1.FavouriteStatus(currentStatus.active_favourite, true), currentConfig); this.debugLog('favouriteConfigStatus', configStatus); return configStatus; } else { const configStatus = Object.assign({}, currentConfig, new status_1.FavouriteStatus(settings_1.FAVOURITE_DEFAULT, false)); this.debugLog('favouriteConfigStatus', configStatus); return configStatus; } } setConfigStatus(status) { this.favouriteConfigStatus = this.getFavouritesConfigStatus(status); } async updateStatus(status) { await super.updateStatus(status); this.services[0].getCharacteristic(this.Characteristic.On) .updateValue(this.getOnState()); } /// ///////////////////// // GET AND SET FUNCTIONS /// ///////////////////// getOnState() { const favouriteConfigStatus = this.favouriteConfigStatus; const value = favouriteConfigStatus.active_favourite === favouriteConfigStatus.favourite_number; this.debugLog('getOnState', value); this.stateOn = value; return this.stateOn; } setOnState(value) { this.log.debug('setOnState', value); if (this.stateOn === value) { return; } this.stateOn = value; this.platform.setPoolAction(action_1.PoolAction.SetActiveFavourite, value ? this.device.deviceTypeNumber : settings_1.FAVOURITE_ALL_AUTO).then((res) => { this.debugLog('setOnState Result', res); }); } } exports.FavouriteAccessory = FavouriteAccessory; //# sourceMappingURL=favouriteAccessory.js.map