diff --git a/src/homeworksAccessory.ts b/src/homeworksAccessory.ts index abeb030..343f05e 100644 --- a/src/homeworksAccessory.ts +++ b/src/homeworksAccessory.ts @@ -8,80 +8,74 @@ interface SetLutronBrightnessCallback { (value: number, isDimmable:boolean, Acce * HomeworksAccessory * An instance of this class is created for each accessory your platform registers */ + export class HomeworksAccessory { - private service: Service; + private _service: Service; public lutronBrightnessChangeCallback? : SetLutronBrightnessCallback; - public dimmerState = { + public _dimmerState = { On: false, Brightness: 0, PositionState: 2 } private _name; - private _integrationId; - private _UUID; - private _deviceType: string; - private _dimmable = true; - + constructor( - private readonly platform: HomeworksPlatform, - private readonly accessory: PlatformAccessory, - private readonly uuid: string, - private readonly integrationId: string, - private readonly deviceType: string, - private readonly dimmable: boolean, + private readonly _platform: HomeworksPlatform, + private readonly _accessory: PlatformAccessory, + private readonly _uuid: string, + private readonly _integrationId: string, + private readonly _deviceType: string, + private readonly _dimmable: boolean, ) { //Assign local variables - this._name = accessory.context.device.name; - this._UUID = uuid; - this._integrationId = integrationId; - this._deviceType = deviceType || 'light'; - this._dimmable = dimmable; + this._name = _accessory.context.device.name; + this._deviceType = this._deviceType || 'light'; //Set Info - this.accessory.getService(this.platform.Service.AccessoryInformation)! - .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Homebridge') - .setCharacteristic(this.platform.Characteristic.Model, 'Homeworks Plugin') - .setCharacteristic(this.platform.Characteristic.SerialNumber, 'n/a') + this._accessory.getService(this._platform.Service.AccessoryInformation)! + .setCharacteristic(this._platform.Characteristic.Manufacturer, 'Homebridge') + .setCharacteristic(this._platform.Characteristic.Model, 'Homeworks Plugin') + .setCharacteristic(this._platform.Characteristic.SerialNumber, 'n/a') // .setCharacteristic(this.platform.Characteristic.FirmwareRevision, '0.2'); if (this._deviceType === 'shade') { - this.service = this.accessory.getService(this.platform.Service.WindowCovering) || this.accessory.addService(this.platform.Service.WindowCovering); - this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.name); + this._service = this._accessory.getService(this._platform.Service.WindowCovering) || this._accessory.addService(this._platform.Service.WindowCovering); + this._service.setCharacteristic(this._platform.Characteristic.Name, _accessory.context.device.name); // Current position of the shade - this.service.getCharacteristic(this.platform.Characteristic.CurrentPosition) + this._service.getCharacteristic(this._platform.Characteristic.CurrentPosition) .on('set', this.setCurrentPosition.bind(this)) .on('get', this.getCurrentPosition.bind(this)); // Target position of the shade - this.service.getCharacteristic(this.platform.Characteristic.TargetPosition) + this._service.getCharacteristic(this._platform.Characteristic.TargetPosition) .on('set', this.setTargetPosition.bind(this)) .on('get', this.getTargetPosition.bind(this)); // Current status of shade motion // TODO: Is this ever invoked? - this.service.getCharacteristic(this.platform.Characteristic.PositionState) + this._service.getCharacteristic(this._platform.Characteristic.PositionState) .on('set', this.setPositionState.bind(this)) .on('get', this.getPositionState.bind(this)); - this.dimmerState.PositionState = this.platform.Characteristic.PositionState.STOPPED; + this._dimmerState.PositionState = this._platform.Characteristic.PositionState.STOPPED; } else { //Assign HK Service - this.service = this.accessory.getService(this.platform.Service.Lightbulb) || this.accessory.addService(this.platform.Service.Lightbulb); + this._service = this._accessory.getService(this._platform.Service.Lightbulb) || this._accessory.addService(this._platform.Service.Lightbulb); //Set Characteristic Name - this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.name); + this._service.setCharacteristic(this._platform.Characteristic.Name, _accessory.context.device.name); // register handlers for the On/Off Characteristic (minimum for lightbulb) - this.service.getCharacteristic(this.platform.Characteristic.On) + this._service.getCharacteristic(this._platform.Characteristic.On) .on('set', this.setOn.bind(this)) // SET - bind to the `setOn` method below .on('get', this.getOn.bind(this)); // GET - bind to the `getOn` method below // register handlers for the Brightness Characteristic - if (dimmable === true) { - this.service.getCharacteristic(this.platform.Characteristic.Brightness) + if (_dimmable === true) { + this._service.getCharacteristic(this._platform.Characteristic.Brightness) .on('set', this.setBrightness.bind(this)) // SET - bind to the 'setBrightness` method below .on('get', this.getBrightness.bind(this)); // GET - bind to the 'getBrightness` method below } @@ -114,14 +108,14 @@ export class HomeworksAccessory { * getUUID() */ public getUUID() { - return this._UUID; + return this._uuid; } /** - * Handle the "GET" UUID + * Handle the "GET" is dimmable * @example - * getUUID() + * getIsDimable() */ public getIsDimmable() { return this._dimmable; @@ -137,39 +131,39 @@ export class HomeworksAccessory { private setOn(targetValue: CharacteristicValue, callback: CharacteristicSetCallback) { const isDimmable = this.getIsDimmable(); - if (targetValue === this.dimmerState.On) { + if (targetValue === this._dimmerState.On) { callback(null); return; } - this.dimmerState.On = targetValue as boolean; + this._dimmerState.On = targetValue as boolean; if (targetValue === true) { - this.dimmerState.Brightness = 100; + this._dimmerState.Brightness = 100; } else { - this.dimmerState.Brightness = 0; + this._dimmerState.Brightness = 0; } if (this.getIsDimmable() === false) { //If we are not dimmable. Assume 100% brightness on on state. - this.service.updateCharacteristic(this.platform.Characteristic.Brightness, this.dimmerState.Brightness); + this._service.updateCharacteristic(this._platform.Characteristic.Brightness, this._dimmerState.Brightness); } if (this.lutronBrightnessChangeCallback) { - this.lutronBrightnessChangeCallback(this.dimmerState.Brightness, isDimmable, this); + this.lutronBrightnessChangeCallback(this._dimmerState.Brightness, isDimmable, this); } - this.platform.log.debug('[Accessory][setOn] %s [name: %s|dim: %s]', this.dimmerState.On, this._name, this._dimmable); + this._platform.log.debug('[Accessory][setOn] %s [name: %s|dim: %s]', this._dimmerState.On, this._name, this._dimmable); callback(null); } private getOn(callback: CharacteristicGetCallback) { - const isOn = this.dimmerState.On; + const isOn = this._dimmerState.On; if (isOn === true) { - this.platform.log.debug('[Accessory][getOn] %s is ON', this.getName()); + this._platform.log.debug('[Accessory][getOn] %s is ON', this.getName()); } else { - this.platform.log.debug('[Accessory][getOn] %s is OFF', this.getName()); + this._platform.log.debug('[Accessory][getOn] %s is OFF', this.getName()); } callback(null, isOn); //error,value @@ -180,27 +174,27 @@ export class HomeworksAccessory { */ private getBrightness(callback: CharacteristicGetCallback) { - const brightness = this.dimmerState.Brightness; + const brightness = this._dimmerState.Brightness; - this.platform.log.debug('[Accessory] Get Characteristic Brightness -> %i %s', brightness, this._name); + this._platform.log.debug('[Accessory] Get Characteristic Brightness -> %i %s', brightness, this._name); callback(null, brightness); //error,value } private setBrightness(targetValue: CharacteristicValue, callback: CharacteristicSetCallback) { - if (targetValue === this.dimmerState.Brightness) { + if (targetValue === this._dimmerState.Brightness) { callback(null); return; } - this.platform.log.debug('[Accessory] Set Characteristic Brightness -> %i %s', targetValue, this.getName()); + this._platform.log.debug('[Accessory] Set Characteristic Brightness -> %i %s', targetValue, this.getName()); const targetBrightnessVal = targetValue as number; - this.dimmerState.Brightness = targetBrightnessVal; + this._dimmerState.Brightness = targetBrightnessVal; if (this.lutronBrightnessChangeCallback) { - this.lutronBrightnessChangeCallback(targetBrightnessVal, this.getIsDimmable(), this); + this.lutronBrightnessChangeCallback(targetBrightnessVal, this.getIsDimmable(), this); } @@ -212,24 +206,24 @@ export class HomeworksAccessory { */ private getCurrentPosition(callback: CharacteristicGetCallback) { - const brightness = this.dimmerState.Brightness; + const brightness = this._dimmerState.Brightness; - this.platform.log.info('[Accessory] Get CurrentPosition -> %i %s', brightness, this._name); + this._platform.log.info('[Accessory] Get CurrentPosition -> %i %s', brightness, this._name); callback(null, brightness); //error,value } private setCurrentPosition(targetValue: CharacteristicValue, callback: CharacteristicSetCallback) { - this.platform.log.info('[Accessory] Set CurrentPosition -> %i %s', targetValue, this.getName()); + this._platform.log.info('[Accessory] Set CurrentPosition -> %i %s', targetValue, this.getName()); - if (targetValue === this.dimmerState.Brightness) { + if (targetValue === this._dimmerState.Brightness) { callback(null); return; } const targetBrightnessVal = targetValue as number; - this.dimmerState.Brightness = targetBrightnessVal; + this._dimmerState.Brightness = targetBrightnessVal; if (this.lutronBrightnessChangeCallback) { this.lutronBrightnessChangeCallback(targetBrightnessVal, this.getIsDimmable(), this); @@ -243,24 +237,24 @@ export class HomeworksAccessory { */ private getTargetPosition(callback: CharacteristicGetCallback) { - const brightness = this.dimmerState.Brightness; + const brightness = this._dimmerState.Brightness; - this.platform.log.info('[Accessory] Get TargetPosition -> %i %s', brightness, this._name); + this._platform.log.info('[Accessory] Get TargetPosition -> %i %s', brightness, this._name); callback(null, brightness); //error,value } private setTargetPosition(targetValue: CharacteristicValue, callback: CharacteristicSetCallback) { - this.platform.log.info('[Accessory] Set TargetPosition -> %i %s', targetValue, this.getName()); + this._platform.log.info('[Accessory] Set TargetPosition -> %i %s', targetValue, this.getName()); - if (targetValue === this.dimmerState.Brightness) { + if (targetValue === this._dimmerState.Brightness) { callback(null); return; } const targetBrightnessVal = targetValue as number; - this.dimmerState.Brightness = targetBrightnessVal; + this._dimmerState.Brightness = targetBrightnessVal; if (this.lutronBrightnessChangeCallback) { this.lutronBrightnessChangeCallback(targetBrightnessVal, this.getIsDimmable(), this); @@ -274,14 +268,14 @@ export class HomeworksAccessory { */ private getPositionState(callback: CharacteristicGetCallback) { - this.platform.log.info('[Accessory] Get PositionState -> %i %s', this.dimmerState.PositionState, this._name); + this._platform.log.info('[Accessory] Get PositionState -> %i %s', this._dimmerState.PositionState, this._name); - callback(null, this.dimmerState.PositionState); //error,value + callback(null, this._dimmerState.PositionState); //error,value } private setPositionState(targetValue: CharacteristicValue, callback: CharacteristicSetCallback) { - this.platform.log.info('[Accessory] Set PositionState -> %i %s', targetValue, this.getName()); + this._platform.log.info('[Accessory] Set PositionState -> %i %s', targetValue, this.getName()); // Don't know what to do here. callback(null); // null or error @@ -295,20 +289,20 @@ export class HomeworksAccessory { * With new values from processor. (set externally) */ public updateBrightness(targetBrightnessVal: CharacteristicValue) { - this.platform.log.info('[Accessory][updateBrightness] to %i for %s', targetBrightnessVal, this._name); + this._platform.log.info('[Accessory][updateBrightness] to %i for %s', targetBrightnessVal, this._name); - if (targetBrightnessVal === this.dimmerState.Brightness) { //If the value is the same. Ignore to save network traffic. + if (targetBrightnessVal === this._dimmerState.Brightness) { //If the value is the same. Ignore to save network traffic. return; } if (targetBrightnessVal > 0) { - this.dimmerState.On = true; + this._dimmerState.On = true; } else if (targetBrightnessVal <= 0) { - this.dimmerState.On = false; + this._dimmerState.On = false; } - this.dimmerState.Brightness = targetBrightnessVal as number; - this.service.updateCharacteristic(this.platform.Characteristic.On, this.dimmerState.On); - this.service.updateCharacteristic(this.platform.Characteristic.Brightness, this.dimmerState.Brightness); + this._dimmerState.Brightness = targetBrightnessVal as number; + this._service.updateCharacteristic(this._platform.Characteristic.On, this._dimmerState.On); + this._service.updateCharacteristic(this._platform.Characteristic.Brightness, this._dimmerState.Brightness); } }