@viguza/homebridge-ezviz
Version:
A short description about what your plugin does.
72 lines • 3.16 kB
JavaScript
import { DefenceMode } from '../utils/enums.js';
import { DEFAULT_GROUP_ID } from '../api/ezviz-constants.js';
/**
* Alarm Mode Switch accessory for EZVIZ
* Handles on/off functionality for alarm/defence mode
* ON = AWAY_MODE (fully armed), OFF = UNSET_MODE (disarmed)
*/
export class AlarmModeSwitch {
platform;
accessory;
api;
constructor(api, platform, accessory) {
this.platform = platform;
this.accessory = accessory;
this.api = api;
// Set accessory information
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'EZVIZ')
.setCharacteristic(this.platform.Characteristic.Model, 'Alarm Mode Switch')
.setCharacteristic(this.platform.Characteristic.SerialNumber, 'EZVIZ-AlarmMode');
// Set up the switch service
const alarmService = this.accessory.getService(this.platform.Service.Switch) ||
this.accessory.addService(this.platform.Service.Switch, 'Alarm Mode');
alarmService.setCharacteristic(this.platform.Characteristic.Name, 'Alarm Mode');
// Set up event handlers
alarmService.getCharacteristic(this.platform.Characteristic.On)
.onSet(this.setAlarmMode.bind(this))
.onGet(this.getAlarmMode.bind(this));
}
/**
* Sets the alarm mode (defence mode) on/off
* @param value - The value to set (true = AWAY_MODE/armed, false = HOME_MODE/disarmed)
*/
async setAlarmMode(value) {
try {
// ON = AWAY_MODE (2) = fully armed, OFF = HOME_MODE (1) = disarmed
const mode = value ? DefenceMode.AWAY_MODE : DefenceMode.HOME_MODE;
await this.api.setDefenceMode(DEFAULT_GROUP_ID, mode);
this.platform.log.debug(`Successfully set alarm mode to ${value ? 'AWAY_MODE (armed)' : 'HOME_MODE (disarmed)'}`);
}
catch (error) {
this.platform.log.error('Unable to set alarm mode:', error);
throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
}
}
/**
* Gets the current alarm mode (defence mode) state
* @returns Promise resolving to the current state (true = armed, false = disarmed)
*/
async getAlarmMode() {
try {
const mode = await this.api.getDefenceMode(DEFAULT_GROUP_ID);
// Return true if mode is AWAY_MODE (fully armed), false otherwise
const isArmed = mode === DefenceMode.AWAY_MODE;
this.platform.log.debug(`Current alarm mode: ${DefenceMode[mode]} (${mode}), switch is ${isArmed ? 'ON' : 'OFF'}`);
return isArmed;
}
catch (error) {
this.platform.log.error('Unable to get alarm mode:', error);
// Return false (disarmed) as default on error
return false;
}
}
/**
* Gets the accessory instance
* @returns The platform accessory
*/
getAccessory() {
return this.accessory;
}
}
//# sourceMappingURL=alarm-mode-switch.js.map