homebridge-august-door-sense
Version:
Homebridge Plugin for August DoorSense.
68 lines • 3.74 kB
JavaScript
"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