homebridge-connect-my-pool-home-automation
Version:
HomeKit integration for Astral Viron Gateway via Home Automation
87 lines • 3.85 kB
JavaScript
"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