UNPKG

homebridge-caddx-interlogix

Version:

A homebridge plugin for integrating the ComNav/NetworX/CaddX NX-595E network module with HomeKit

200 lines 11.6 kB
"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