UNPKG

homebridge-august-door-sense

Version:
68 lines 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AugustSmartLockAccessory = void 0; const august_1 = require("./august"); class AugustSmartLockAccessory { constructor(platform, accessory) { this.platform = platform; this.accessory = accessory; const lock = accessory.context.device; // set accessory information this.infoService = this.accessory.getService(this.platform.Service.AccessoryInformation); this.infoService .setCharacteristic(this.platform.Characteristic.Manufacturer, 'August') .setCharacteristic(this.platform.Characteristic.Model, 'DoorSense'); if (!this.infoService.getCharacteristic(this.platform.Characteristic.SerialNumber).value) { this.infoService.setCharacteristic(this.platform.Characteristic.SerialNumber, lock.id); } this.service = this.addContactSensorService(); this.service.setCharacteristic(this.platform.Characteristic.Name, lock.name); this.currentStatus = august_1.AugustDoorStatus.UNKNOWN; setInterval(this.updateStatus.bind(this), (this.platform.config['refreshInterval'] || 10) * 1000); } addContactSensorService() { const service = this.accessory.getService(this.platform.Service.ContactSensor) || this.accessory.addService(this.platform.Service.ContactSensor); service.getCharacteristic(this.platform.Characteristic.ContactSensorState) .onGet(this.getOn.bind(this)); return service; } async getOn() { // run status update in the background to avoid blocking the main thread setImmediate(this.updateStatus.bind(this)); switch (this.currentStatus) { case august_1.AugustDoorStatus.CLOSED: return this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED; case august_1.AugustDoorStatus.OPEN: return this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED; default: throw new this.platform.api.hap.HapStatusError(-70402 /* HAPStatus.SERVICE_COMMUNICATION_FAILURE */); } } async updateStatus() { const id = this.accessory.context.device['id']; (0, august_1.augustGetDoorStatus)(this.platform.Session, id, this.platform.log).then((status) => { this.platform.log.debug('Get Door Status ->', status); this.currentStatus = status.doorStatus; if (status.serialNumber && this.infoService.getCharacteristic(this.platform.Characteristic.SerialNumber).value !== status.serialNumber) { this.infoService.updateCharacteristic(this.platform.Characteristic.SerialNumber, status.serialNumber); this.platform.log.debug(`Updating serial number for lock ${id}: ${status.serialNumber}`); } switch (status.doorStatus) { case august_1.AugustDoorStatus.CLOSED: this.service.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED); break; case august_1.AugustDoorStatus.OPEN: this.service.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED); break; default: break; } }).catch((error) => { this.platform.log.error('GetDoorStatus threw an error:\n', error); }); } } exports.AugustSmartLockAccessory = AugustSmartLockAccessory; //# sourceMappingURL=platformAccessory.js.map