UNPKG

homebridge-gsh

Version:
132 lines 5.58 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SecuritySystem = void 0; const hap_types_1 = require("../hap-types"); const ghToHapTypes_1 = require("./ghToHapTypes"); class SecuritySystem extends ghToHapTypes_1.ghToHap { constructor() { super(...arguments); this.twoFactorRequired = true; this.returnStateOnExecute = true; } sync(service) { return this.createSyncData(service, { type: 'action.devices.types.SECURITYSYSTEM', traits: [ 'action.devices.traits.ArmDisarm', ], attributes: { availableArmLevels: { levels: [ { level_name: 'HOME', level_values: [{ level_synonym: ['Home'], lang: 'en', }, { level_synonym: ['Anwesend'], lang: 'de', }], }, { level_name: 'AWAY', level_values: [{ level_synonym: ['Away'], lang: 'en', }, { level_synonym: ['Abwesend'], lang: 'de', }], }, { level_name: 'NIGHT', level_values: [{ level_synonym: ['Night'], lang: 'en', }, { level_synonym: ['Nacht'], lang: 'de', }], }, ], ordered: true, }, }, }); } query(service) { const availableSystemCurrentStates = ['HOME', 'AWAY', 'NIGHT', 'OFF']; const response = { on: true, online: true, }; const securitySystemCurrentState = Number(service.serviceCharacteristics.find(x => x.uuid === hap_types_1.Characteristic.SecuritySystemCurrentState).value); const currentArmLevel = availableSystemCurrentStates[securitySystemCurrentState]; if (currentArmLevel === 'OFF') { response.isArmed = false; } else { response.isArmed = true; response.currentArmLevel = currentArmLevel; } return response; } execute(service, command) { return __awaiter(this, void 0, void 0, function* () { if (!command.execution.length) { return { ids: [service.uniqueId], status: 'ERROR', debugString: 'missing command' }; } switch (command.execution[0].command) { case ('action.devices.commands.ArmDisarm'): { const mode = { HOME: 0, AWAY: 1, NIGHT: 2, OFF: 3, }; let securitySystemTargetState; if (command.execution[0].params.arm === true) { securitySystemTargetState = mode[command.execution[0].params.armLevel]; } else { securitySystemTargetState = mode.OFF; } yield service.serviceCharacteristics.find(x => x.uuid === hap_types_1.Characteristic.SecuritySystemTargetState).setValue(securitySystemTargetState); const states = { isArmed: command.execution[0].params.arm, currentArmLevel: command.execution[0].params.armLevel, }; return { ids: [service.uniqueId], status: 'SUCCESS', states }; } default: { return { ids: [service.uniqueId], status: 'ERROR', debugString: `unknown command ${command.execution[0].command}` }; } } }); } is2faRequired(command) { if (!command.execution.length) { return false; } switch (command.execution[0].command) { case ('action.devices.commands.ArmDisarm'): { if (command.execution[0].params.arm === true) { return false; } return true; } } return false; } } exports.SecuritySystem = SecuritySystem; //# sourceMappingURL=security-system.js.map