@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
181 lines • 8.1 kB
JavaScript
import { Family } from '../../Definitions/Global/Families.js';
import { ISYDeviceNode } from '../ISYDeviceNode.js';
import { ElkAlarmSensorDevice } from './ElkAlarmSensorDevice.js';
/////////////////////////////
// ELKAlarmPanelDevice
//
export class ELKAlarmPanelDevice extends ISYDeviceNode {
setFromAreaUpdate(nodes) {
throw new Error('Method not implemented.');
}
alarmTripState;
alarmState;
alarmMode;
area;
deviceFriendlyName;
deviceType;
connectionType;
batteryOperated;
voltage;
constructor(isy, area) {
super(isy, {
family: Family.Global, type: '0.0.0.0', enabled: true, address: `ElkAlarmPanel_${area}`, name: `Elk Alarm Panel ${area}`,
pnode: undefined,
startDelay: 0,
hint: '',
endDelay: 0,
wattage: 0,
dcPeriod: 0
});
this.area = area;
this.alarmTripState = AlarmTripState.DISARMED;
this.alarmState = AlarmState.NOT_READY_TO_ARM;
this.alarmMode = AlarmMode.DISARMED;
this.deviceFriendlyName = 'Elk Alarm Panel ' + area;
this.connectionType = 'Elk Network Module';
this.batteryOperated = false;
this.voltage = 71;
this
.lastChanged = new Date();
}
async sendCommand(command) {
return this.isy.sendISYCommand(`elk/area/${this.area}/cmd/${command}`);
}
async sendSetAlarmModeCommand(alarmMode) {
if (alarmMode === 'disarm') {
return this.sendCommand('disarm');
}
else {
return this.sendCommand(`arm?armType=${alarmMode}`);
}
}
async clearAllBypasses() {
return this.sendCommand('unbypass');
}
getAlarmStatusAsText() {
return `AM [${this.alarmMode}] AS [${this.alarmState}] ATS [${this.alarmTripState}]`;
}
getAlarmTripState() {
return this.alarmTripState;
}
getAlarmState() {
return this.alarmState;
}
getAlarmMode() {
return this.alarmMode;
}
handleEvent(event) {
const areaUpdate = event.eventInfo.ae;
const areaId = areaUpdate.attr.area;
const updateType = areaUpdate.attr.type;
const valueToSet = Number(areaUpdate.attr.val);
let valueChanged = false;
if (areaId === this.area) {
if (updateType === AlarmPanelProperty.AlarmTripState) {
if (this.alarmTripState !== valueToSet) {
const oldVal = this.alarmTripState;
this.alarmTripState = valueToSet;
this.emit('propertyChanged', 'alarmTripState', this.alarmTripState, oldVal, AlarmTripState[this.alarmTripState]);
valueChanged = true;
}
}
else if (updateType === AlarmPanelProperty.AlarmState) {
if (this.alarmState !== valueToSet) {
const oldVal = this.alarmState;
this.alarmState = valueToSet;
this.emit('propertyChanged', 'alarmState', this.alarmState, oldVal, AlarmState[this.alarmState]);
valueChanged = true;
}
}
else if (updateType === AlarmPanelProperty.AlarmMode) {
if (this.alarmMode !== valueToSet) {
const oldVal = this.alarmMode;
this.alarmMode = valueToSet;
this.emit('propertyChanged', 'alarmMode', this.alarmState, oldVal, AlarmMode[this.alarmMode]);
valueChanged = true;
}
}
}
if (valueChanged) {
this.lastChanged = new Date();
}
return valueChanged;
}
}
export var AlarmPanelProperty;
(function (AlarmPanelProperty) {
AlarmPanelProperty[AlarmPanelProperty["AlarmMode"] = 3] = "AlarmMode";
AlarmPanelProperty[AlarmPanelProperty["AlarmState"] = 2] = "AlarmState";
AlarmPanelProperty[AlarmPanelProperty["AlarmTripState"] = 1] = "AlarmTripState";
})(AlarmPanelProperty || (AlarmPanelProperty = {}));
export var AlarmMode;
(function (AlarmMode) {
AlarmMode[AlarmMode["DISARMED"] = 0] = "DISARMED";
AlarmMode[AlarmMode["AWAY"] = 1] = "AWAY";
AlarmMode[AlarmMode["STAY"] = 2] = "STAY";
AlarmMode[AlarmMode["STAY_INSTANT"] = 3] = "STAY_INSTANT";
AlarmMode[AlarmMode["NIGHT"] = 4] = "NIGHT";
AlarmMode[AlarmMode["NIGHT_INSTANT"] = 5] = "NIGHT_INSTANT";
AlarmMode[AlarmMode["VACATION"] = 6] = "VACATION";
})(AlarmMode || (AlarmMode = {}));
export var AlarmTripState;
(function (AlarmTripState) {
AlarmTripState[AlarmTripState["DISARMED"] = 0] = "DISARMED";
AlarmTripState[AlarmTripState["EXIT_DELAY"] = 1] = "EXIT_DELAY";
AlarmTripState[AlarmTripState["TRIPPED"] = 2] = "TRIPPED";
})(AlarmTripState || (AlarmTripState = {}));
export var AlarmState;
(function (AlarmState) {
AlarmState[AlarmState["NOT_READY_TO_ARM"] = 0] = "NOT_READY_TO_ARM";
AlarmState[AlarmState["READY_TO_ARM"] = 1] = "READY_TO_ARM";
AlarmState[AlarmState["READY_TO_ARM_VIOLATION"] = 2] = "READY_TO_ARM_VIOLATION";
AlarmState[AlarmState["ARMED_WITH_TIMER"] = 3] = "ARMED_WITH_TIMER";
AlarmState[AlarmState["ARMED_FULLY"] = 4] = "ARMED_FULLY";
AlarmState[AlarmState["FORCE_ARMED_VIOLATION"] = 5] = "FORCE_ARMED_VIOLATION";
AlarmState[AlarmState["ARMED_WITH_BYPASS"] = 6] = "ARMED_WITH_BYPASS";
})(AlarmState || (AlarmState = {}));
// Alarm mode constanrs
ELKAlarmPanelDevice.prototype.ALARM_MODE_DISARMED = 0;
ELKAlarmPanelDevice.prototype.ALARM_MODE_AWAY = 1;
ELKAlarmPanelDevice.prototype.ALARM_MODE_STAY = 2;
ELKAlarmPanelDevice.prototype.ALARM_MODE_STAY_INSTANT = 3;
ELKAlarmPanelDevice.prototype.ALARM_MODE_NIGHT = 4;
ELKAlarmPanelDevice.prototype.ALARM_MODE_NIGHT_INSTANT = 5;
ELKAlarmPanelDevice.prototype.ALARM_MODE_VACATION = 6;
// Alarm trip state
ELKAlarmPanelDevice.prototype.ALARM_TRIP_STATE_DISARMED = 0;
ELKAlarmPanelDevice.prototype.ALARM_TRIP_STATE_EXIT_DELAY = 1;
ELKAlarmPanelDevice.prototype.ALARM_TRIP_STATE_TRIPPED = 2;
// Alarm state
ELKAlarmPanelDevice.prototype.ALARM_STATE_NOT_READY_TO_ARM = 0;
ELKAlarmPanelDevice.prototype.ALARM_STATE_READY_TO_ARM = 1;
ELKAlarmPanelDevice.prototype.ALARM_STATE_READY_TO_ARM_VIOLATION = 2;
ELKAlarmPanelDevice.prototype.ALARM_STATE_ARMED_WITH_TIMER = 3;
ELKAlarmPanelDevice.prototype.ALARM_STATE_ARMED_FULLY = 4;
ELKAlarmPanelDevice.prototype.ALARM_STATE_FORCE_ARMED_VIOLATION = 5;
ELKAlarmPanelDevice.prototype.ALARM_STATE_ARMED_WITH_BYPASS = 6;
// Logical Status for sensors
export var AlarmSensorPhysicalState;
(function (AlarmSensorPhysicalState) {
AlarmSensorPhysicalState[AlarmSensorPhysicalState["NOT_CONFIGURED"] = 0] = "NOT_CONFIGURED";
AlarmSensorPhysicalState[AlarmSensorPhysicalState["OPEN"] = 1] = "OPEN";
AlarmSensorPhysicalState[AlarmSensorPhysicalState["EOL"] = 2] = "EOL";
AlarmSensorPhysicalState[AlarmSensorPhysicalState["SHORT"] = 3] = "SHORT";
})(AlarmSensorPhysicalState || (AlarmSensorPhysicalState = {}));
ElkAlarmSensorDevice.prototype.SENSOR_STATE_PHYSICAL_NOT_CONFIGURED = 0;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_PHYSICAL_OPEN = 1;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_PHYSICAL_EOL = 2;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_PHYSICAL_SHORT = 3;
export var AlarmSensorLogicalState;
(function (AlarmSensorLogicalState) {
AlarmSensorLogicalState[AlarmSensorLogicalState["NORMAL"] = 0] = "NORMAL";
AlarmSensorLogicalState[AlarmSensorLogicalState["TROUBLE"] = 1] = "TROUBLE";
AlarmSensorLogicalState[AlarmSensorLogicalState["VIOLATED"] = 2] = "VIOLATED";
AlarmSensorLogicalState[AlarmSensorLogicalState["BYPASSED"] = 3] = "BYPASSED";
})(AlarmSensorLogicalState || (AlarmSensorLogicalState = {}));
// Physical status for sensors
ElkAlarmSensorDevice.prototype.SENSOR_STATE_LOGICAL_NORMAL = 0;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_LOGICAL_TROUBLE = 1;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_LOGICAL_VIOLATED = 2;
ElkAlarmSensorDevice.prototype.SENSOR_STATE_LOGICAL_BYPASSED = 3;
//# sourceMappingURL=ElkAlarmPanelDevice.js.map