@homenet/plugin-zway
Version:
Homenet plugin for Z-Way connected Z-Wave devices
158 lines • 4.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = require("events");
const CLASS_LOCK = 98;
class ZwayLock extends events_1.EventEmitter {
constructor(id, controller, deviceId) {
super();
this.controller = controller;
controller.onLockEvent(deviceId, this.onLockEvent.bind(this));
controller.onAlarmEvent(deviceId, this.onAlarmEvent.bind(this));
this.controller = controller;
this.device = controller.getLockDevice(deviceId);
}
set(value) {
if (value) {
this.device.DoorLock.lock();
}
else {
this.device.DoorLock.unlock();
}
}
get() {
return this.device.DoorLock.isLocked();
}
onLockEvent(e) {
if (e.event === 'mode') {
this.emit('update', e.data === 0 ? false : true);
}
}
onAlarmEvent(event) {
this.emit('alert', { message: alarmEventAsString(event.data) });
this.device.DoorLock.refresh();
}
}
exports.ZwayLock = ZwayLock;
function alarmEventAsString(eventData) {
let major;
let minor;
switch (eventData.alarmType) {
case 9:
major = 'Deadbolt';
minor = 'jammed';
break;
case 18:
major = 'Locked with code';
minor = 'by user ' + (eventData.level + 1);
break;
case 19:
major = 'Unlocked with code';
minor = 'by user ' + (eventData.level + 1);
break;
case 21:
major = 'Manually locked';
switch (eventData.level) {
case 1:
minor = 'by thumb turn or key';
break;
case 2:
minor = 'by outside pad';
break;
default:
minor = 'by ' + eventData.level;
break;
}
break;
case 22:
major = 'Manually unlocked';
switch (eventData.level) {
case 1:
minor = 'by thumb turn or key';
break;
default:
minor = 'by ' + eventData.level;
break;
}
break;
case 24:
major = 'Locked via software';
switch (eventData.level) {
case 1:
minor = 'by RF module';
break;
default:
minor = 'by ' + eventData.level;
break;
}
break;
case 25:
major = 'Unlocked via software';
switch (eventData.level) {
case 1:
minor = 'by RF module';
break;
default:
minor = 'by ' + eventData.level;
break;
}
break;
case 25:
major = 'Lock automatically';
switch (eventData.level) {
case 1:
minor = 'locked';
break;
default:
minor = eventData.level;
break;
}
break;
case 33:
major = 'Deleted user';
minor = eventData.level;
break;
case 112:
major = 'Added or updated user';
minor = eventData.level;
break;
case 113:
major = 'Duplicate code for user';
minor = eventData.level;
break;
case 130:
major = 'RF module power';
minor = 'cycled';
break;
case 161:
major = 'Tamper alarm -';
switch (eventData.level) {
case 1:
minor = 'keypad attempts exceed code entry limit';
break;
case 2:
minor = 'front escutcheon removed from main';
break;
default:
minor = eventData.level;
break;
}
break;
case 167:
major = 'Low';
minor = 'battery';
break;
case 168:
major = 'Critical';
minor = 'battery';
break;
case 169:
major = 'Insufficient';
minor = 'battery';
break;
default:
major = eventData.alarmType + ' :';
minor = eventData.level;
}
return `${major} ${minor}`;
}
//# sourceMappingURL=lock.js.map