homebridge-caddx-interlogix
Version:
A homebridge plugin for integrating the ComNav/NetworX/CaddX NX-595E network module with HomeKit
200 lines • 11.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NX595EPlatformRadarAccessory = exports.NX595EPlatformSmokeSensorAccessory = exports.NX595EPlatformContactSensorAccessory = exports.NX595EPlatformOutputAccessory = exports.NX595EPlatformSecurityAreaAccessory = void 0;
const definitions_1 = require("./definitions");
const definitions_2 = require("./definitions");
const definitions_3 = require("./definitions");
/**
* Platform 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 NX595EPlatformSecurityAreaAccessory {
constructor(platform, accessory, securitySystem) {
this.platform = platform;
this.accessory = accessory;
this.securitySystem = securitySystem;
// set accessory information
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'CaddX')
.setCharacteristic(this.platform.Characteristic.Model, 'Alarm Area')
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.uniqueID)
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.device.firmwareVersion);
this.alarmService = this.accessory.getService(this.platform.Service.SecuritySystem) || this.accessory.addService(this.platform.Service.SecuritySystem);
this.alarmService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName);
this.alarmService.getCharacteristic(this.platform.Characteristic.SecuritySystemTargetState).setProps({
validValues: [
this.platform.Characteristic.SecuritySystemTargetState.STAY_ARM,
this.platform.Characteristic.SecuritySystemTargetState.AWAY_ARM,
this.platform.Characteristic.SecuritySystemTargetState.DISARM,
],
});
this.alarmService.getCharacteristic(this.platform.Characteristic.SecuritySystemTargetState)
.onSet(this.setTargetState.bind(this));
this.chimeService = this.accessory.getService(this.platform.Service.Switch) || this.accessory.addService(this.platform.Service.Switch);
this.chimeService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName + " Chime");
this.chimeService.getCharacteristic(this.platform.Characteristic.On)
.onSet(this.setChimeState.bind(this));
this.platform.log.debug('Alarm system created:', accessory.context.device.displayName);
}
/**
* Handle "SET" requests from HomeKit
* These are sent when the user changes the state of an accessory, for example, turning on a Light bulb.
*/
setTargetState(value) {
// implement your own code to turn your device on/off
const current = this.alarmService.getCharacteristic(this.platform.Characteristic.SecuritySystemCurrentState).value;
const isNotReady = (this.securitySystem.getAreaStatus(this.accessory.context.device.bank) === definitions_3.AreaState.Status[definitions_3.AreaState.State.NOT_READY]) ? true : false;
if (isNotReady && value !== this.platform.Characteristic.SecuritySystemTargetState.DISARM) {
const error = new Error("Area is not ready for arming");
this.platform.log.error(error.message);
return;
}
if (current !== this.platform.Characteristic.SecuritySystemTargetState.DISARM &&
value !== this.platform.Characteristic.SecuritySystemTargetState.DISARM) {
const error = new Error("Attempting to arm already armed area");
this.platform.log.error(error.message);
return;
}
let command = definitions_1.SecuritySystemAreaCommand.AREA_DISARM;
switch (value) {
case this.platform.Characteristic.SecuritySystemTargetState.AWAY_ARM: {
command = definitions_1.SecuritySystemAreaCommand.AREA_AWAY;
break;
}
case this.platform.Characteristic.SecuritySystemTargetState.STAY_ARM: {
command = definitions_1.SecuritySystemAreaCommand.AREA_STAY;
break;
}
case this.platform.Characteristic.SecuritySystemTargetState.DISARM: {
command = definitions_1.SecuritySystemAreaCommand.AREA_DISARM;
break;
}
default: {
return;
}
}
this.securitySystem.sendAreaCommand(command, this.accessory.context.device.bank)
.then(() => {
this.platform.log.debug('Set Alarm State Characteristic On ->', value);
}).catch((error) => {
this.platform.log.error(error.message);
});
}
setChimeState(value) {
// implement your own code to turn your device on/off
this.securitySystem.sendAreaCommand(definitions_1.SecuritySystemAreaCommand.AREA_CHIME_TOGGLE, this.accessory.context.device.bank)
.then(() => {
this.platform.log.debug('Set Chime Characteristic On ->', value);
}).catch((error) => {
this.platform.log.error(error.message);
});
}
}
exports.NX595EPlatformSecurityAreaAccessory = NX595EPlatformSecurityAreaAccessory;
class NX595EPlatformOutputAccessory {
constructor(platform, accessory) {
this.platform = platform;
this.accessory = accessory;
this.outputService = undefined;
this.outputService = this.accessory.getService(this.platform.Service.Switch);
if (this.outputService == undefined) {
this.outputService = this.accessory.addService(this.platform.Service.Switch);
}
this.outputService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName);
this.outputService.getCharacteristic(this.platform.Characteristic.On)
.onSet(this.setOutputState.bind(this));
this.outputService.getCharacteristic(this.platform.Characteristic.On)
.onGet(this.getOutputState.bind(this));
}
setOutputState(value) {
this.platform.securitySystem.sendOutputCommand(Boolean(value), this.accessory.context.device.bank)
.then(() => {
this.platform.log.debug('Set Characteristic On ->', value);
}).catch((error) => {
this.platform.log.error(error.message);
});
}
getOutputState() {
// Get the output value and return it to Homebridge
const value = this.platform.securitySystem.getOutputState(this.accessory.context.device.bank);
this.platform.log.debug('Get Characteristic On ->', value);
return (value == true ? true : false);
}
}
exports.NX595EPlatformOutputAccessory = NX595EPlatformOutputAccessory;
class NX595EPlatformSensorAccessory {
constructor(platform, accessory, displayBypassSwitches) {
this.platform = platform;
this.accessory = accessory;
this.displayBypassSwitches = displayBypassSwitches;
this.bypassService = undefined;
this.bypassService = this.accessory.getService(this.platform.Service.Switch);
if (displayBypassSwitches) {
if (this.bypassService == undefined) {
this.bypassService = this.accessory.addService(this.platform.Service.Switch);
}
this.bypassService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName + " Bypass");
this.bypassService.getCharacteristic(this.platform.Characteristic.On)
.onSet(this.setBypassState.bind(this));
}
else {
if (this.bypassService) {
this.accessory.removeService(this.bypassService);
this.bypassService = undefined;
}
}
}
setBypassState(value) {
// implement your own code to turn your device on/off
this.platform.securitySystem.sendZoneCommand(definitions_2.SecuritySystemZoneCommand.ZONE_BYPASS, this.accessory.context.device.bank)
.then(() => {
this.platform.log.debug('Set Characteristic On ->', value);
}).catch((error) => {
this.platform.log.error(error.message);
});
}
}
class NX595EPlatformContactSensorAccessory extends NX595EPlatformSensorAccessory {
constructor(platform, accessory, displayBypassSwitches) {
super(platform, accessory, displayBypassSwitches);
// set accessory information
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'CaddX')
.setCharacteristic(this.platform.Characteristic.Model, 'Contact Sensor')
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.uniqueID);
this.service = this.accessory.getService(this.platform.Service.ContactSensor) || this.accessory.addService(this.platform.Service.ContactSensor);
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName);
this.platform.log.debug('Contact Sensor created:', accessory.context.device.displayName);
}
}
exports.NX595EPlatformContactSensorAccessory = NX595EPlatformContactSensorAccessory;
class NX595EPlatformSmokeSensorAccessory extends NX595EPlatformSensorAccessory {
constructor(platform, accessory, displayBypassSwitches) {
super(platform, accessory, displayBypassSwitches);
// set accessory information
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'CaddX')
.setCharacteristic(this.platform.Characteristic.Model, 'Smoke Sensor')
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.uniqueID);
this.service = this.accessory.getService(this.platform.Service.SmokeSensor) || this.accessory.addService(this.platform.Service.SmokeSensor);
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName);
this.platform.log.debug('Smoke Sensor created:', accessory.context.device.displayName);
}
}
exports.NX595EPlatformSmokeSensorAccessory = NX595EPlatformSmokeSensorAccessory;
class NX595EPlatformRadarAccessory extends NX595EPlatformSensorAccessory {
constructor(platform, accessory, displayBypassSwitches) {
super(platform, accessory, displayBypassSwitches);
// set accessory information
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'CaddX')
.setCharacteristic(this.platform.Characteristic.Model, 'Motion Sensor')
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.uniqueID);
this.service = this.accessory.getService(this.platform.Service.MotionSensor) || this.accessory.addService(this.platform.Service.MotionSensor);
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.displayName);
this.platform.log.debug('Radar created:', accessory.context.device.displayName);
}
}
exports.NX595EPlatformRadarAccessory = NX595EPlatformRadarAccessory;
//# sourceMappingURL=platformAccessory.js.map