homebridge-virtual-accessories 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +1091 -0
- package/VirtualAccessories.jpg +0 -0
- package/VirtualAccessories.png +0 -0
- package/assets/changeorder.png +0 -0
- package/assets/creative-ideas/HowToAddAFakeThermostat.png +0 -0
- package/assets/keepaccessories.png +0 -0
- package/assets/mentions/youtube-EdgarsHomeTech.png +0 -0
- package/assets/mentions/youtube-MakeSmartMatter.png +0 -0
- package/assets/wiki/automation-shortcut-1.png +0 -0
- package/assets/wiki/automation-shortcut-2.png +0 -0
- package/assets/wiki/cron-schedule-config.png +0 -0
- package/assets/wiki/enable-sensor-webhooks.png +0 -0
- package/assets/wiki/humidifier-dehumidifier-config.png +0 -0
- package/assets/wiki/new-automation.png +0 -0
- package/assets/wiki/timer-duration-new.png +0 -0
- package/assets/wiki/timer-duration-old.png +0 -0
- package/assets/wiki/valve-timer-duration-new.png +0 -0
- package/assets/wiki/valve-timer-duration-old.png +0 -0
- package/config.schema.json +1570 -0
- package/dist/accessories/audioAccessory.d.ts +29 -0
- package/dist/accessories/audioAccessory.js +119 -0
- package/dist/accessories/audioAccessory.js.map +1 -0
- package/dist/accessories/externalAccessory.d.ts +10 -0
- package/dist/accessories/externalAccessory.js +13 -0
- package/dist/accessories/externalAccessory.js.map +1 -0
- package/dist/accessories/openingAccessory.d.ts +35 -0
- package/dist/accessories/openingAccessory.js +166 -0
- package/dist/accessories/openingAccessory.js.map +1 -0
- package/dist/accessories/triggerableEventAccessory.d.ts +7 -0
- package/dist/accessories/triggerableEventAccessory.js +2 -0
- package/dist/accessories/triggerableEventAccessory.js.map +1 -0
- package/dist/accessories/virtualAccessory.d.ts +29 -0
- package/dist/accessories/virtualAccessory.js +86 -0
- package/dist/accessories/virtualAccessory.js.map +1 -0
- package/dist/accessories/virtualAccessoryDoor.d.ts +14 -0
- package/dist/accessories/virtualAccessoryDoor.js +20 -0
- package/dist/accessories/virtualAccessoryDoor.js.map +1 -0
- package/dist/accessories/virtualAccessoryDoorbell.d.ts +29 -0
- package/dist/accessories/virtualAccessoryDoorbell.js +111 -0
- package/dist/accessories/virtualAccessoryDoorbell.js.map +1 -0
- package/dist/accessories/virtualAccessoryFan.d.ts +27 -0
- package/dist/accessories/virtualAccessoryFan.js +122 -0
- package/dist/accessories/virtualAccessoryFan.js.map +1 -0
- package/dist/accessories/virtualAccessoryFilterMaintenance.d.ts +26 -0
- package/dist/accessories/virtualAccessoryFilterMaintenance.js +122 -0
- package/dist/accessories/virtualAccessoryFilterMaintenance.js.map +1 -0
- package/dist/accessories/virtualAccessoryGarageDoor.d.ts +28 -0
- package/dist/accessories/virtualAccessoryGarageDoor.js +162 -0
- package/dist/accessories/virtualAccessoryGarageDoor.js.map +1 -0
- package/dist/accessories/virtualAccessoryHeaterCooler.d.ts +62 -0
- package/dist/accessories/virtualAccessoryHeaterCooler.js +441 -0
- package/dist/accessories/virtualAccessoryHeaterCooler.js.map +1 -0
- package/dist/accessories/virtualAccessoryHumidifierDehumidifier.d.ts +53 -0
- package/dist/accessories/virtualAccessoryHumidifierDehumidifier.js +365 -0
- package/dist/accessories/virtualAccessoryHumidifierDehumidifier.js.map +1 -0
- package/dist/accessories/virtualAccessoryInputSource.d.ts +38 -0
- package/dist/accessories/virtualAccessoryInputSource.js +196 -0
- package/dist/accessories/virtualAccessoryInputSource.js.map +1 -0
- package/dist/accessories/virtualAccessoryLightbulb.d.ts +37 -0
- package/dist/accessories/virtualAccessoryLightbulb.js +222 -0
- package/dist/accessories/virtualAccessoryLightbulb.js.map +1 -0
- package/dist/accessories/virtualAccessoryLock.d.ts +34 -0
- package/dist/accessories/virtualAccessoryLock.js +198 -0
- package/dist/accessories/virtualAccessoryLock.js.map +1 -0
- package/dist/accessories/virtualAccessorySecuritySystem.d.ts +30 -0
- package/dist/accessories/virtualAccessorySecuritySystem.js +214 -0
- package/dist/accessories/virtualAccessorySecuritySystem.js.map +1 -0
- package/dist/accessories/virtualAccessorySpeaker.d.ts +14 -0
- package/dist/accessories/virtualAccessorySpeaker.js +20 -0
- package/dist/accessories/virtualAccessorySpeaker.js.map +1 -0
- package/dist/accessories/virtualAccessorySwitch.d.ts +34 -0
- package/dist/accessories/virtualAccessorySwitch.js +191 -0
- package/dist/accessories/virtualAccessorySwitch.js.map +1 -0
- package/dist/accessories/virtualAccessoryTelevision.d.ts +44 -0
- package/dist/accessories/virtualAccessoryTelevision.js +230 -0
- package/dist/accessories/virtualAccessoryTelevision.js.map +1 -0
- package/dist/accessories/virtualAccessoryValve.d.ts +34 -0
- package/dist/accessories/virtualAccessoryValve.js +215 -0
- package/dist/accessories/virtualAccessoryValve.js.map +1 -0
- package/dist/accessories/virtualAccessoryWindow.d.ts +14 -0
- package/dist/accessories/virtualAccessoryWindow.js +20 -0
- package/dist/accessories/virtualAccessoryWindow.js.map +1 -0
- package/dist/accessories/virtualAccessoryWindowCovering.d.ts +14 -0
- package/dist/accessories/virtualAccessoryWindowCovering.js +20 -0
- package/dist/accessories/virtualAccessoryWindowCovering.js.map +1 -0
- package/dist/accessoryFactory.d.ts +15 -0
- package/dist/accessoryFactory.js +147 -0
- package/dist/accessoryFactory.js.map +1 -0
- package/dist/colors.d.ts +22 -0
- package/dist/colors.js +146 -0
- package/dist/colors.js.map +1 -0
- package/dist/companions/companionLightbulb.d.ts +10 -0
- package/dist/companions/companionLightbulb.js +12 -0
- package/dist/companions/companionLightbulb.js.map +1 -0
- package/dist/companions/companionSensors.d.ts +9 -0
- package/dist/companions/companionSensors.js +117 -0
- package/dist/companions/companionSensors.js.map +1 -0
- package/dist/companions/companionSwitch.d.ts +15 -0
- package/dist/companions/companionSwitch.js +46 -0
- package/dist/companions/companionSwitch.js.map +1 -0
- package/dist/configuration/accessories/configurationDoor.d.ts +9 -0
- package/dist/configuration/accessories/configurationDoor.js +31 -0
- package/dist/configuration/accessories/configurationDoor.js.map +1 -0
- package/dist/configuration/accessories/configurationDoorbell.d.ts +10 -0
- package/dist/configuration/accessories/configurationDoorbell.js +23 -0
- package/dist/configuration/accessories/configurationDoorbell.js.map +1 -0
- package/dist/configuration/accessories/configurationFan.d.ts +12 -0
- package/dist/configuration/accessories/configurationFan.js +36 -0
- package/dist/configuration/accessories/configurationFan.js.map +1 -0
- package/dist/configuration/accessories/configurationFilterMaintenance.d.ts +12 -0
- package/dist/configuration/accessories/configurationFilterMaintenance.js +48 -0
- package/dist/configuration/accessories/configurationFilterMaintenance.js.map +1 -0
- package/dist/configuration/accessories/configurationGarageDoor.d.ts +9 -0
- package/dist/configuration/accessories/configurationGarageDoor.js +31 -0
- package/dist/configuration/accessories/configurationGarageDoor.js.map +1 -0
- package/dist/configuration/accessories/configurationHeaterCooler.d.ts +20 -0
- package/dist/configuration/accessories/configurationHeaterCooler.js +116 -0
- package/dist/configuration/accessories/configurationHeaterCooler.js.map +1 -0
- package/dist/configuration/accessories/configurationHumidifierDehumidifier.d.ts +12 -0
- package/dist/configuration/accessories/configurationHumidifierDehumidifier.js +44 -0
- package/dist/configuration/accessories/configurationHumidifierDehumidifier.js.map +1 -0
- package/dist/configuration/accessories/configurationInputSource.d.ts +12 -0
- package/dist/configuration/accessories/configurationInputSource.js +33 -0
- package/dist/configuration/accessories/configurationInputSource.js.map +1 -0
- package/dist/configuration/accessories/configurationLightbulb.d.ts +14 -0
- package/dist/configuration/accessories/configurationLightbulb.js +55 -0
- package/dist/configuration/accessories/configurationLightbulb.js.map +1 -0
- package/dist/configuration/accessories/configurationLock.d.ts +11 -0
- package/dist/configuration/accessories/configurationLock.js +30 -0
- package/dist/configuration/accessories/configurationLock.js.map +1 -0
- package/dist/configuration/accessories/configurationSecuritySystem.d.ts +18 -0
- package/dist/configuration/accessories/configurationSecuritySystem.js +48 -0
- package/dist/configuration/accessories/configurationSecuritySystem.js.map +1 -0
- package/dist/configuration/accessories/configurationSpeaker.d.ts +9 -0
- package/dist/configuration/accessories/configurationSpeaker.js +24 -0
- package/dist/configuration/accessories/configurationSpeaker.js.map +1 -0
- package/dist/configuration/accessories/configurationSwitch.d.ts +13 -0
- package/dist/configuration/accessories/configurationSwitch.js +27 -0
- package/dist/configuration/accessories/configurationSwitch.js.map +1 -0
- package/dist/configuration/accessories/configurationTelevision.d.ts +12 -0
- package/dist/configuration/accessories/configurationTelevision.js +47 -0
- package/dist/configuration/accessories/configurationTelevision.js.map +1 -0
- package/dist/configuration/accessories/configurationValve.d.ts +25 -0
- package/dist/configuration/accessories/configurationValve.js +88 -0
- package/dist/configuration/accessories/configurationValve.js.map +1 -0
- package/dist/configuration/accessories/configurationWindow.d.ts +9 -0
- package/dist/configuration/accessories/configurationWindow.js +31 -0
- package/dist/configuration/accessories/configurationWindow.js.map +1 -0
- package/dist/configuration/accessories/configurationWindowCovering.d.ts +9 -0
- package/dist/configuration/accessories/configurationWindowCovering.js +31 -0
- package/dist/configuration/accessories/configurationWindowCovering.js.map +1 -0
- package/dist/configuration/configuration.d.ts +13 -0
- package/dist/configuration/configuration.js +41 -0
- package/dist/configuration/configuration.js.map +1 -0
- package/dist/configuration/configurationAccessory.d.ts +6 -0
- package/dist/configuration/configurationAccessory.js +6 -0
- package/dist/configuration/configurationAccessory.js.map +1 -0
- package/dist/configuration/configurationAudioAccessoryConfiguration.d.ts +9 -0
- package/dist/configuration/configurationAudioAccessoryConfiguration.js +9 -0
- package/dist/configuration/configurationAudioAccessoryConfiguration.js.map +1 -0
- package/dist/configuration/configurationCompanionSensor.d.ts +11 -0
- package/dist/configuration/configurationCompanionSensor.js +26 -0
- package/dist/configuration/configurationCompanionSensor.js.map +1 -0
- package/dist/configuration/configurationDuration.d.ts +19 -0
- package/dist/configuration/configurationDuration.js +55 -0
- package/dist/configuration/configurationDuration.js.map +1 -0
- package/dist/configuration/configurationOpenableAccesory.d.ts +9 -0
- package/dist/configuration/configurationOpenableAccesory.js +9 -0
- package/dist/configuration/configurationOpenableAccesory.js.map +1 -0
- package/dist/configuration/configurationPlatform.d.ts +76 -0
- package/dist/configuration/configurationPlatform.js +381 -0
- package/dist/configuration/configurationPlatform.js.map +1 -0
- package/dist/configuration/configurationSchema.d.ts +178 -0
- package/dist/configuration/configurationSchema.js +198 -0
- package/dist/configuration/configurationSchema.js.map +1 -0
- package/dist/configuration/configurationSensor.d.ts +11 -0
- package/dist/configuration/configurationSensor.js +30 -0
- package/dist/configuration/configurationSensor.js.map +1 -0
- package/dist/configuration/configurationSensorServer.d.ts +11 -0
- package/dist/configuration/configurationSensorServer.js +26 -0
- package/dist/configuration/configurationSensorServer.js.map +1 -0
- package/dist/configuration/configurationTimer.d.ts +15 -0
- package/dist/configuration/configurationTimer.js +101 -0
- package/dist/configuration/configurationTimer.js.map +1 -0
- package/dist/configuration/triggers/configurationCronTrigger.d.ts +18 -0
- package/dist/configuration/triggers/configurationCronTrigger.js +65 -0
- package/dist/configuration/triggers/configurationCronTrigger.js.map +1 -0
- package/dist/configuration/triggers/configurationPingTrigger.d.ts +11 -0
- package/dist/configuration/triggers/configurationPingTrigger.js +26 -0
- package/dist/configuration/triggers/configurationPingTrigger.js.map +1 -0
- package/dist/configuration/triggers/configurationSunEventsTrigger.d.ts +18 -0
- package/dist/configuration/triggers/configurationSunEventsTrigger.js +52 -0
- package/dist/configuration/triggers/configurationSunEventsTrigger.js.map +1 -0
- package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.d.ts +9 -0
- package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.js +17 -0
- package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.js.map +1 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.js +52 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +28 -0
- package/dist/platform.js +221 -0
- package/dist/platform.js.map +1 -0
- package/dist/sensorServer.d.ts +27 -0
- package/dist/sensorServer.js +227 -0
- package/dist/sensorServer.js.map +1 -0
- package/dist/sensors/virtualSensor.d.ts +37 -0
- package/dist/sensors/virtualSensor.js +87 -0
- package/dist/sensors/virtualSensor.js.map +1 -0
- package/dist/sensors/virtualSensorCarbonDioxide.d.ts +20 -0
- package/dist/sensors/virtualSensorCarbonDioxide.js +45 -0
- package/dist/sensors/virtualSensorCarbonDioxide.js.map +1 -0
- package/dist/sensors/virtualSensorCarbonMonoxide.d.ts +20 -0
- package/dist/sensors/virtualSensorCarbonMonoxide.js +45 -0
- package/dist/sensors/virtualSensorCarbonMonoxide.js.map +1 -0
- package/dist/sensors/virtualSensorContact.d.ts +20 -0
- package/dist/sensors/virtualSensorContact.js +45 -0
- package/dist/sensors/virtualSensorContact.js.map +1 -0
- package/dist/sensors/virtualSensorLeak.d.ts +20 -0
- package/dist/sensors/virtualSensorLeak.js +45 -0
- package/dist/sensors/virtualSensorLeak.js.map +1 -0
- package/dist/sensors/virtualSensorMotion.d.ts +20 -0
- package/dist/sensors/virtualSensorMotion.js +45 -0
- package/dist/sensors/virtualSensorMotion.js.map +1 -0
- package/dist/sensors/virtualSensorOccupancy.d.ts +20 -0
- package/dist/sensors/virtualSensorOccupancy.js +45 -0
- package/dist/sensors/virtualSensorOccupancy.js.map +1 -0
- package/dist/sensors/virtualSensorSmoke.d.ts +20 -0
- package/dist/sensors/virtualSensorSmoke.js +45 -0
- package/dist/sensors/virtualSensorSmoke.js.map +1 -0
- package/dist/settings.d.ts +8 -0
- package/dist/settings.js +9 -0
- package/dist/settings.js.map +1 -0
- package/dist/timer.d.ts +58 -0
- package/dist/timer.js +110 -0
- package/dist/timer.js.map +1 -0
- package/dist/triggerableSensor.d.ts +6 -0
- package/dist/triggerableSensor.js +2 -0
- package/dist/triggerableSensor.js.map +1 -0
- package/dist/triggers/trigger.d.ts +13 -0
- package/dist/triggers/trigger.js +16 -0
- package/dist/triggers/trigger.js.map +1 -0
- package/dist/triggers/triggerCron.d.ts +19 -0
- package/dist/triggers/triggerCron.js +102 -0
- package/dist/triggers/triggerCron.js.map +1 -0
- package/dist/triggers/triggerPing.d.ts +19 -0
- package/dist/triggers/triggerPing.js +110 -0
- package/dist/triggers/triggerPing.js.map +1 -0
- package/dist/triggers/triggerSunEvents.d.ts +20 -0
- package/dist/triggers/triggerSunEvents.js +200 -0
- package/dist/triggers/triggerSunEvents.js.map +1 -0
- package/dist/triggers/triggerWebhook.d.ts +10 -0
- package/dist/triggers/triggerWebhook.js +26 -0
- package/dist/triggers/triggerWebhook.js.map +1 -0
- package/dist/updatableObstruction.d.ts +6 -0
- package/dist/updatableObstruction.js +2 -0
- package/dist/updatableObstruction.js.map +1 -0
- package/dist/updatableSensor.d.ts +6 -0
- package/dist/updatableSensor.js +2 -0
- package/dist/updatableSensor.js.map +1 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.js +120 -0
- package/dist/utils.js.map +1 -0
- package/dist/virtualLogger.d.ts +15 -0
- package/dist/virtualLogger.js +38 -0
- package/dist/virtualLogger.js.map +1 -0
- package/package.json +120 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
2
|
+
import { VirtualAccessoriesPlatform } from '../platform.js';
|
3
|
+
import { Accessory } from './virtualAccessory.js';
|
4
|
+
/**
|
5
|
+
* Lightbulb - Accessory implementation
|
6
|
+
*/
|
7
|
+
export declare class Lightbulb extends Accessory {
|
8
|
+
static readonly ACCESSORY_TYPE_NAME: string;
|
9
|
+
static readonly ON: boolean;
|
10
|
+
static readonly OFF: boolean;
|
11
|
+
static readonly WHITE: string;
|
12
|
+
static readonly AMBIANCE: string;
|
13
|
+
static readonly COLOR: string;
|
14
|
+
private readonly stateStorageKey;
|
15
|
+
private readonly brightnessStorageKey;
|
16
|
+
private readonly colorTemperatureStorageKey;
|
17
|
+
private readonly hueStorageKey;
|
18
|
+
private readonly saturationStorageKey;
|
19
|
+
private type;
|
20
|
+
private states;
|
21
|
+
constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
|
22
|
+
setOn(value: CharacteristicValue): Promise<void>;
|
23
|
+
getOn(): Promise<CharacteristicValue>;
|
24
|
+
setBrightness(value: CharacteristicValue): Promise<void>;
|
25
|
+
getBrightness(): Promise<CharacteristicValue>;
|
26
|
+
setColorTemperature(miredValue: CharacteristicValue): Promise<void>;
|
27
|
+
getColorTemperature(): Promise<CharacteristicValue>;
|
28
|
+
setHue(value: CharacteristicValue): Promise<void>;
|
29
|
+
getHue(): Promise<CharacteristicValue>;
|
30
|
+
setSaturation(value: CharacteristicValue): Promise<void>;
|
31
|
+
getSaturation(): Promise<CharacteristicValue>;
|
32
|
+
protected getJsonState(): string;
|
33
|
+
protected getAccessoryTypeName(): string;
|
34
|
+
static getStateName(state: boolean): string;
|
35
|
+
private kelvinToMired;
|
36
|
+
private miredToKelvin;
|
37
|
+
}
|
@@ -0,0 +1,222 @@
|
|
1
|
+
/* eslint-disable brace-style */
|
2
|
+
import { Accessory } from './virtualAccessory.js';
|
3
|
+
import { Utils } from '../utils.js';
|
4
|
+
import { Colors } from '../colors.js';
|
5
|
+
/**
|
6
|
+
* Lightbulb - Accessory implementation
|
7
|
+
*/
|
8
|
+
export class Lightbulb extends Accessory {
|
9
|
+
static ACCESSORY_TYPE_NAME = 'Lightbulb';
|
10
|
+
static ON = true;
|
11
|
+
static OFF = false;
|
12
|
+
static WHITE = 'white';
|
13
|
+
static AMBIANCE = 'ambiance';
|
14
|
+
static COLOR = 'color';
|
15
|
+
stateStorageKey = 'LightbulbState';
|
16
|
+
brightnessStorageKey = 'LightbulbBrightness';
|
17
|
+
colorTemperatureStorageKey = 'LightbulbColorTemperature';
|
18
|
+
hueStorageKey = 'LightbulbHue';
|
19
|
+
saturationStorageKey = 'LightbulbSaturation';
|
20
|
+
type = Lightbulb.WHITE;
|
21
|
+
states = {
|
22
|
+
LightbulbState: Lightbulb.OFF,
|
23
|
+
LightbulbBrightness: 0,
|
24
|
+
LightbulbColorTemperature: 2700, // Kelvin
|
25
|
+
LightbulbHue: 0,
|
26
|
+
LightbulbSaturation: 0,
|
27
|
+
};
|
28
|
+
constructor(platform, accessory) {
|
29
|
+
super(platform, accessory);
|
30
|
+
this.type = this.accessoryConfiguration.lightbulb.type;
|
31
|
+
// First configure the device based on the accessory details
|
32
|
+
this.defaultState = this.accessoryConfiguration.lightbulb.defaultState === 'on' ? Lightbulb.ON : Lightbulb.OFF;
|
33
|
+
const brightness = this.accessoryConfiguration.lightbulb.brightness;
|
34
|
+
const colorTemperatureKelvin = this.accessoryConfiguration.lightbulb.colorTemperatureKelvin;
|
35
|
+
const colorHex = this.accessoryConfiguration.lightbulb.colorHex;
|
36
|
+
this.states.LightbulbState = this.defaultState;
|
37
|
+
this.states.LightbulbBrightness = brightness;
|
38
|
+
if (this.type === Lightbulb.WHITE) {
|
39
|
+
this.states.LightbulbBrightness = brightness;
|
40
|
+
}
|
41
|
+
else if (this.type === Lightbulb.AMBIANCE) {
|
42
|
+
this.states.LightbulbBrightness = brightness;
|
43
|
+
this.states.LightbulbColorTemperature = colorTemperatureKelvin;
|
44
|
+
}
|
45
|
+
else if (this.type === Lightbulb.COLOR) {
|
46
|
+
const hsl = Colors.HexToHSL(colorHex);
|
47
|
+
this.states.LightbulbHue = hsl.hue;
|
48
|
+
this.states.LightbulbSaturation = hsl.saturation;
|
49
|
+
this.states.LightbulbBrightness = hsl.luminance;
|
50
|
+
}
|
51
|
+
// If the accessory is stateful retrieve stored state
|
52
|
+
if (this.accessoryConfiguration.accessoryIsStateful) {
|
53
|
+
const accessoryState = this.loadAccessoryState(this.storagePath);
|
54
|
+
const cachedState = accessoryState[this.stateStorageKey];
|
55
|
+
const cachedBrightness = accessoryState[this.brightnessStorageKey];
|
56
|
+
const cachedColorTemperature = accessoryState[this.colorTemperatureStorageKey];
|
57
|
+
const cachedHue = accessoryState[this.hueStorageKey];
|
58
|
+
const cachedSaturation = accessoryState[this.saturationStorageKey];
|
59
|
+
if (cachedState !== undefined) {
|
60
|
+
this.states.LightbulbState = cachedState;
|
61
|
+
}
|
62
|
+
if (cachedBrightness !== undefined) {
|
63
|
+
this.states.LightbulbBrightness = cachedBrightness;
|
64
|
+
}
|
65
|
+
if (this.type === Lightbulb.AMBIANCE && cachedColorTemperature !== undefined) {
|
66
|
+
this.states.LightbulbColorTemperature = cachedColorTemperature;
|
67
|
+
}
|
68
|
+
if (this.type === Lightbulb.COLOR) {
|
69
|
+
if (cachedHue !== undefined) {
|
70
|
+
this.states.LightbulbHue = cachedHue;
|
71
|
+
}
|
72
|
+
if (cachedSaturation !== undefined) {
|
73
|
+
this.states.LightbulbSaturation = cachedSaturation;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
}
|
77
|
+
this.service = this.accessory.getService(this.platform.Service.Lightbulb) || this.accessory.addService(this.platform.Service.Lightbulb);
|
78
|
+
this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessoryConfiguration.accessoryName);
|
79
|
+
// Update the initial state of the accessory
|
80
|
+
this.log.debug(`[${this.accessoryName}] Setting Lightbulb Current State: ${Lightbulb.getStateName(this.states.LightbulbState)}`);
|
81
|
+
this.service.updateCharacteristic(this.platform.Characteristic.On, (this.states.LightbulbState));
|
82
|
+
this.service.updateCharacteristic(this.platform.Characteristic.Brightness, (this.states.LightbulbBrightness));
|
83
|
+
// register handlers
|
84
|
+
this.service.getCharacteristic(this.platform.Characteristic.On)
|
85
|
+
.onSet(this.setOn.bind(this))
|
86
|
+
.onGet(this.getOn.bind(this));
|
87
|
+
this.service.getCharacteristic(this.platform.Characteristic.Brightness)
|
88
|
+
.onSet(Utils.debounce(this.setBrightness.bind(this)))
|
89
|
+
.onGet(this.getBrightness.bind(this));
|
90
|
+
switch (this.type) {
|
91
|
+
case Lightbulb.AMBIANCE:
|
92
|
+
// register handlers for the ColorTemperature Characteristic
|
93
|
+
this.service.getCharacteristic(this.platform.Characteristic.ColorTemperature)
|
94
|
+
.onSet(Utils.debounce(this.setColorTemperature.bind(this)))
|
95
|
+
.onGet(this.getColorTemperature.bind(this));
|
96
|
+
break;
|
97
|
+
case Lightbulb.COLOR:
|
98
|
+
this.service.getCharacteristic(this.platform.Characteristic.Hue)
|
99
|
+
.onSet(Utils.debounce(this.setHue.bind(this)))
|
100
|
+
.onGet(this.getHue.bind(this));
|
101
|
+
this.service.getCharacteristic(this.platform.Characteristic.Saturation)
|
102
|
+
.onSet(Utils.debounce(this.setSaturation.bind(this)))
|
103
|
+
.onGet(this.getSaturation.bind(this));
|
104
|
+
break;
|
105
|
+
case Lightbulb.WHITE:
|
106
|
+
// No additional characteristics
|
107
|
+
break;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
// Handlers
|
111
|
+
async setOn(value) {
|
112
|
+
this.states.LightbulbState = value;
|
113
|
+
// If brightness is 0% or 100%, ON = 100%, OFF = 0%
|
114
|
+
if ((this.states.LightbulbState === Lightbulb.ON) && (this.states.LightbulbBrightness === 0)) {
|
115
|
+
this.states.LightbulbBrightness = 100;
|
116
|
+
this.service?.updateCharacteristic(this.platform.Characteristic.Brightness, (this.states.LightbulbBrightness));
|
117
|
+
}
|
118
|
+
else if ((this.states.LightbulbState === Lightbulb.OFF) && (this.states.LightbulbBrightness === 100)) {
|
119
|
+
this.states.LightbulbBrightness = 0;
|
120
|
+
this.service?.updateCharacteristic(this.platform.Characteristic.Brightness, (this.states.LightbulbBrightness));
|
121
|
+
}
|
122
|
+
this.storeState();
|
123
|
+
this.log.info(`[${this.accessoryName}] Setting State: ${Lightbulb.getStateName(this.states.LightbulbState)}`);
|
124
|
+
}
|
125
|
+
async getOn() {
|
126
|
+
const lightbulbState = this.states.LightbulbState;
|
127
|
+
this.log.debug(`[${this.accessoryName}] Getting State: ${Lightbulb.getStateName(lightbulbState)}`);
|
128
|
+
return lightbulbState;
|
129
|
+
}
|
130
|
+
async setBrightness(value) {
|
131
|
+
this.states.LightbulbBrightness = value;
|
132
|
+
// Setting the brightness to 0 turns lightbulb OFF
|
133
|
+
if ((this.states.LightbulbBrightness === 0) && (this.states.LightbulbState === Lightbulb.ON)) {
|
134
|
+
this.states.LightbulbState = Lightbulb.OFF;
|
135
|
+
this.service?.updateCharacteristic(this.platform.Characteristic.On, (this.states.LightbulbState));
|
136
|
+
}
|
137
|
+
this.storeState();
|
138
|
+
this.log.info(`[${this.accessoryName}] Setting Brightness: ${this.states.LightbulbBrightness}%`);
|
139
|
+
}
|
140
|
+
async getBrightness() {
|
141
|
+
const lightbulbBrightness = this.states.LightbulbBrightness;
|
142
|
+
this.log.debug(`[${this.accessoryName}] Getting Brightness: ${lightbulbBrightness}%`);
|
143
|
+
return lightbulbBrightness;
|
144
|
+
}
|
145
|
+
async setColorTemperature(miredValue) {
|
146
|
+
this.states.LightbulbColorTemperature = this.miredToKelvin(miredValue);
|
147
|
+
this.storeState();
|
148
|
+
this.log.debug(`[${this.accessoryName}] Setting Color Temperature: ${this.states.LightbulbColorTemperature}K (${miredValue} Mired)`);
|
149
|
+
}
|
150
|
+
async getColorTemperature() {
|
151
|
+
const miredValue = this.kelvinToMired(this.states.LightbulbColorTemperature);
|
152
|
+
this.log.debug(`[${this.accessoryName}] Getting Color Temperature: ${this.states.LightbulbColorTemperature}K (${miredValue} Mired)`);
|
153
|
+
return miredValue;
|
154
|
+
}
|
155
|
+
async setHue(value) {
|
156
|
+
this.states.LightbulbHue = value;
|
157
|
+
this.storeState();
|
158
|
+
this.log.info(`[${this.accessoryName}] Setting Hue: ${this.states.LightbulbHue}º`);
|
159
|
+
}
|
160
|
+
async getHue() {
|
161
|
+
const lightbulbHue = this.states.LightbulbHue;
|
162
|
+
this.log.debug(`[${this.accessoryName}] Getting Hue: ${lightbulbHue}º`);
|
163
|
+
return lightbulbHue;
|
164
|
+
}
|
165
|
+
async setSaturation(value) {
|
166
|
+
this.states.LightbulbSaturation = value;
|
167
|
+
this.storeState();
|
168
|
+
this.log.info(`[${this.accessoryName}] Setting Saturation: ${this.states.LightbulbSaturation}º`);
|
169
|
+
}
|
170
|
+
async getSaturation() {
|
171
|
+
const lightbulbSaturation = this.states.LightbulbSaturation;
|
172
|
+
this.log.debug(`[${this.accessoryName}] Getting Saturation: ${lightbulbSaturation}º`);
|
173
|
+
return lightbulbSaturation;
|
174
|
+
}
|
175
|
+
getJsonState() {
|
176
|
+
const jsonState = {
|
177
|
+
[this.stateStorageKey]: this.states.LightbulbState,
|
178
|
+
[this.brightnessStorageKey]: this.states.LightbulbBrightness,
|
179
|
+
};
|
180
|
+
if (this.type === Lightbulb.AMBIANCE) {
|
181
|
+
Object.assign(jsonState, { [this.colorTemperatureStorageKey]: this.states.LightbulbColorTemperature });
|
182
|
+
}
|
183
|
+
if (this.type === Lightbulb.COLOR) {
|
184
|
+
Object.assign(jsonState, { [this.hueStorageKey]: this.states.LightbulbHue });
|
185
|
+
Object.assign(jsonState, { [this.saturationStorageKey]: this.states.LightbulbSaturation });
|
186
|
+
}
|
187
|
+
const json = JSON.stringify(jsonState);
|
188
|
+
return json;
|
189
|
+
}
|
190
|
+
getAccessoryTypeName() {
|
191
|
+
return Lightbulb.ACCESSORY_TYPE_NAME;
|
192
|
+
}
|
193
|
+
static getStateName(state) {
|
194
|
+
let stateName;
|
195
|
+
switch (state) {
|
196
|
+
case undefined: {
|
197
|
+
stateName = 'undefined';
|
198
|
+
break;
|
199
|
+
}
|
200
|
+
case Lightbulb.ON: {
|
201
|
+
stateName = 'ON';
|
202
|
+
break;
|
203
|
+
}
|
204
|
+
case Lightbulb.OFF: {
|
205
|
+
stateName = 'OFF';
|
206
|
+
break;
|
207
|
+
}
|
208
|
+
default: {
|
209
|
+
stateName = state.toString();
|
210
|
+
}
|
211
|
+
}
|
212
|
+
return stateName;
|
213
|
+
}
|
214
|
+
// micro-reciprocal degrees (mired): 1,000,000 divided by the color temperature in kelvins
|
215
|
+
kelvinToMired(kelvin) {
|
216
|
+
return Math.round(1000000 / kelvin);
|
217
|
+
}
|
218
|
+
miredToKelvin(mired) {
|
219
|
+
return Math.round(1000000 / mired);
|
220
|
+
}
|
221
|
+
}
|
222
|
+
//# sourceMappingURL=virtualAccessoryLightbulb.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtualAccessoryLightbulb.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryLightbulb.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
2
|
+
import { VirtualAccessoriesPlatform } from '../platform.js';
|
3
|
+
import { Accessory } from './virtualAccessory.js';
|
4
|
+
/**
|
5
|
+
* Lock - Accessory implementation
|
6
|
+
*/
|
7
|
+
export declare class Lock extends Accessory {
|
8
|
+
static readonly ACCESSORY_TYPE_NAME: string;
|
9
|
+
static readonly UNSECURED: number;
|
10
|
+
static readonly SECURED: number;
|
11
|
+
static readonly JAMMED: number;
|
12
|
+
static readonly UNKNOWN: number;
|
13
|
+
static readonly SECURED_REMOTELY: number;
|
14
|
+
static readonly UNSECURED_REMOTELY: number;
|
15
|
+
static readonly SECURED_BY_AUTO_SECURE_TIMEOUT: number;
|
16
|
+
private readonly stateStorageKey;
|
17
|
+
private readonly securityTimeoutStorageKey;
|
18
|
+
private readonly lastKnownAction;
|
19
|
+
private securityTimerId;
|
20
|
+
private states;
|
21
|
+
constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
|
22
|
+
getLockCurrentState(): Promise<CharacteristicValue>;
|
23
|
+
setLockTargetState(value: CharacteristicValue): Promise<void>;
|
24
|
+
getLockTargetState(): Promise<CharacteristicValue>;
|
25
|
+
setLockControlPoint(value: CharacteristicValue): Promise<void>;
|
26
|
+
getVersion(): Promise<CharacteristicValue>;
|
27
|
+
setLockManagementAutoSecurityTimeout(value: CharacteristicValue): Promise<void>;
|
28
|
+
getLockManagementAutoSecurityTimeout(): Promise<CharacteristicValue>;
|
29
|
+
getLockLastKnownAction(): Promise<CharacteristicValue>;
|
30
|
+
protected getJsonState(): string;
|
31
|
+
protected getAccessoryTypeName(): string;
|
32
|
+
static getStateName(state: number): string;
|
33
|
+
private startAutoSecurityTimeout;
|
34
|
+
}
|
@@ -0,0 +1,198 @@
|
|
1
|
+
import { Accessory } from './virtualAccessory.js';
|
2
|
+
import { Utils } from '../utils.js';
|
3
|
+
/**
|
4
|
+
* Lock - Accessory implementation
|
5
|
+
*/
|
6
|
+
export class Lock extends Accessory {
|
7
|
+
static ACCESSORY_TYPE_NAME = 'Lock';
|
8
|
+
static UNSECURED = 0; // Characteristic.LockCurrentState.UNSECURED;
|
9
|
+
static SECURED = 1; // Characteristic.LockCurrentState.SECURED;
|
10
|
+
static JAMMED = 2; // Characteristic.LockCurrentState.JAMMED;
|
11
|
+
static UNKNOWN = 3; // Characteristic.LockCurrentState.UNKNOWN;
|
12
|
+
static SECURED_REMOTELY = 6; // Characteristic.LockLastKnownAction.SECURED_REMOTELY;
|
13
|
+
static UNSECURED_REMOTELY = 7; // Characteristic.LockLastKnownAction.UNSECURED_REMOTELY
|
14
|
+
static SECURED_BY_AUTO_SECURE_TIMEOUT = 8; // Characteristic.LockLastKnownAction.SECURED_BY_AUTO_SECURE_TIMEOUT
|
15
|
+
stateStorageKey = 'LockState';
|
16
|
+
securityTimeoutStorageKey = 'LockAutoSecurityTimeout';
|
17
|
+
lastKnownAction = 'LockLastKnownAction';
|
18
|
+
securityTimerId;
|
19
|
+
states = {
|
20
|
+
LockCurrentState: Lock.SECURED,
|
21
|
+
LockTargetState: Lock.SECURED,
|
22
|
+
LockManagementAutoSecurityTimeout: 0,
|
23
|
+
LockLastKnownAction: Lock.UNSECURED_REMOTELY,
|
24
|
+
};
|
25
|
+
constructor(platform, accessory) {
|
26
|
+
super(platform, accessory);
|
27
|
+
// First configure the device based on the accessory details
|
28
|
+
this.defaultState = this.accessoryConfiguration.lock.defaultState === 'unlocked' ? Lock.UNSECURED : Lock.SECURED;
|
29
|
+
const autoSecurityTimeout = this.accessoryConfiguration.lock.autoSecurityTimeout;
|
30
|
+
this.states.LockCurrentState = this.defaultState;
|
31
|
+
this.states.LockManagementAutoSecurityTimeout = autoSecurityTimeout;
|
32
|
+
this.states.LockLastKnownAction = Lock.UNSECURED_REMOTELY; // There is no "unknown" value
|
33
|
+
// If the accessory is stateful retrieve stored state
|
34
|
+
if (this.accessoryConfiguration.accessoryIsStateful) {
|
35
|
+
const accessoryState = this.loadAccessoryState(this.storagePath);
|
36
|
+
const cachedState = accessoryState[this.stateStorageKey];
|
37
|
+
const cachedSecurityTimeout = accessoryState[this.securityTimeoutStorageKey];
|
38
|
+
const cachedLastKnownAction = accessoryState[this.lastKnownAction];
|
39
|
+
if (cachedState !== undefined) {
|
40
|
+
this.states.LockCurrentState = cachedState;
|
41
|
+
}
|
42
|
+
if (cachedSecurityTimeout !== undefined) {
|
43
|
+
this.states.LockManagementAutoSecurityTimeout = cachedSecurityTimeout;
|
44
|
+
}
|
45
|
+
if (cachedLastKnownAction !== undefined) {
|
46
|
+
this.states.LockLastKnownAction = cachedLastKnownAction;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
this.states.LockTargetState = this.states.LockCurrentState;
|
50
|
+
this.service = this.accessory.getService(this.platform.Service.LockMechanism) || this.accessory.addService(this.platform.Service.LockMechanism);
|
51
|
+
this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessoryConfiguration.accessoryName);
|
52
|
+
// Update the initial state of the accessory
|
53
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Lock Current State: ${Lock.getStateName(this.states.LockCurrentState)}`);
|
54
|
+
this.service.updateCharacteristic(this.platform.Characteristic.LockCurrentState, (this.states.LockCurrentState));
|
55
|
+
this.service.updateCharacteristic(this.platform.Characteristic.LockTargetState, (this.states.LockTargetState));
|
56
|
+
// register handlers
|
57
|
+
this.service.getCharacteristic(this.platform.Characteristic.LockCurrentState)
|
58
|
+
.onGet(this.getLockCurrentState.bind(this)); // GET - bind to the 'handleLockCurrentStateGet` method below
|
59
|
+
this.service.getCharacteristic(this.platform.Characteristic.LockTargetState)
|
60
|
+
.onSet(this.setLockTargetState.bind(this)) // SET - bind to the `handleLockTargetStateSet` method below
|
61
|
+
.onGet(this.getLockTargetState.bind(this)); // GET - bind to the `handleLockTargetStateGet` method below
|
62
|
+
/**
|
63
|
+
* Creating multiple services of the same type.
|
64
|
+
*
|
65
|
+
* To avoid "Cannot add a Service with the same UUID another Service without also defining a unique 'subtype' property." error,
|
66
|
+
* when creating multiple services of the same type, you need to use the following syntax to specify a name and subtype id:
|
67
|
+
* this.accessory.getService('NAME') || this.accessory.addService(this.platform.Service.Lightbulb, 'NAME', 'USER_DEFINED_SUBTYPE_ID');
|
68
|
+
*
|
69
|
+
* The USER_DEFINED_SUBTYPE must be unique to the platform accessory (if you platform exposes multiple accessories, each accessory
|
70
|
+
* can use the same subtype id.)
|
71
|
+
*/
|
72
|
+
// Creating Lock Management service
|
73
|
+
const lockManagementServiceName = `${this.accessoryConfiguration.accessoryName} Management`;
|
74
|
+
const lockManagementService = this.accessory.getService(lockManagementServiceName)
|
75
|
+
|| this.accessory.addService(this.platform.Service.LockManagement, lockManagementServiceName, this.accessory.UUID + '-LMS');
|
76
|
+
lockManagementService.getCharacteristic(this.platform.Characteristic.LockControlPoint)
|
77
|
+
.onSet(this.setLockControlPoint.bind(this));
|
78
|
+
lockManagementService.getCharacteristic(this.platform.Characteristic.Version)
|
79
|
+
.onGet(this.getVersion.bind(this));
|
80
|
+
lockManagementService.getCharacteristic(this.platform.Characteristic.LockManagementAutoSecurityTimeout)
|
81
|
+
.onSet(this.setLockManagementAutoSecurityTimeout.bind(this))
|
82
|
+
.onGet(this.getLockManagementAutoSecurityTimeout.bind(this))
|
83
|
+
.setProps({
|
84
|
+
minValue: 0,
|
85
|
+
maxValue: 3600,
|
86
|
+
minStep: 1,
|
87
|
+
unit: "seconds" /* Units.SECONDS */,
|
88
|
+
});
|
89
|
+
lockManagementService.getCharacteristic(this.platform.Characteristic.LockLastKnownAction)
|
90
|
+
.onGet(this.getLockLastKnownAction.bind(this));
|
91
|
+
}
|
92
|
+
// Handlers
|
93
|
+
async getLockCurrentState() {
|
94
|
+
const lockState = this.states.LockCurrentState;
|
95
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current State: ${Lock.getStateName(lockState)}`);
|
96
|
+
return lockState;
|
97
|
+
}
|
98
|
+
async setLockTargetState(value) {
|
99
|
+
this.states.LockTargetState = value;
|
100
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Target State: ${Lock.getStateName(this.states.LockTargetState)}`);
|
101
|
+
this.states.LockCurrentState = this.states.LockTargetState;
|
102
|
+
this.service.setCharacteristic(this.platform.Characteristic.LockCurrentState, (this.states.LockCurrentState));
|
103
|
+
this.states.LockLastKnownAction = (this.states.LockCurrentState === Lock.SECURED) ?
|
104
|
+
Lock.SECURED_REMOTELY :
|
105
|
+
Lock.UNSECURED_REMOTELY;
|
106
|
+
this.storeState();
|
107
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Current State: ${Lock.getStateName(this.states.LockCurrentState)}`);
|
108
|
+
// Run auto lock timeout
|
109
|
+
this.startAutoSecurityTimeout();
|
110
|
+
}
|
111
|
+
async getLockTargetState() {
|
112
|
+
const lockState = this.states.LockTargetState;
|
113
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Target State: ${Lock.getStateName(lockState)}`);
|
114
|
+
return lockState;
|
115
|
+
}
|
116
|
+
// Lock Management Service handlers
|
117
|
+
async setLockControlPoint(value) {
|
118
|
+
const lockControlPoint = value;
|
119
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Lock Control Point: ${lockControlPoint}`);
|
120
|
+
}
|
121
|
+
async getVersion() {
|
122
|
+
const version = '1.0.0';
|
123
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Lock Management Version: ${version}`);
|
124
|
+
return version;
|
125
|
+
}
|
126
|
+
async setLockManagementAutoSecurityTimeout(value) {
|
127
|
+
this.states.LockManagementAutoSecurityTimeout = value;
|
128
|
+
// eslint-disable-next-line max-len
|
129
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Lock Management Auto Security Timeout: ${this.states.LockManagementAutoSecurityTimeout}`);
|
130
|
+
}
|
131
|
+
async getLockManagementAutoSecurityTimeout() {
|
132
|
+
const lockManagementAutoSecurityTimeout = this.states.LockManagementAutoSecurityTimeout;
|
133
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Lock Management Auto Security Timeout: ${lockManagementAutoSecurityTimeout}`);
|
134
|
+
return lockManagementAutoSecurityTimeout;
|
135
|
+
}
|
136
|
+
async getLockLastKnownAction() {
|
137
|
+
const lockLastKnownAction = this.states.LockLastKnownAction;
|
138
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Lock Last Known Action: ${lockLastKnownAction}`);
|
139
|
+
return lockLastKnownAction;
|
140
|
+
}
|
141
|
+
getJsonState() {
|
142
|
+
const json = JSON.stringify({
|
143
|
+
[this.stateStorageKey]: this.states.LockCurrentState,
|
144
|
+
[this.securityTimeoutStorageKey]: this.states.LockManagementAutoSecurityTimeout,
|
145
|
+
[this.lastKnownAction]: this.states.LockLastKnownAction,
|
146
|
+
});
|
147
|
+
return json;
|
148
|
+
}
|
149
|
+
getAccessoryTypeName() {
|
150
|
+
return Lock.ACCESSORY_TYPE_NAME;
|
151
|
+
}
|
152
|
+
static getStateName(state) {
|
153
|
+
let stateName;
|
154
|
+
switch (state) {
|
155
|
+
case undefined: {
|
156
|
+
stateName = 'undefined';
|
157
|
+
break;
|
158
|
+
}
|
159
|
+
case Lock.UNSECURED: {
|
160
|
+
stateName = 'UNSECURED';
|
161
|
+
break;
|
162
|
+
}
|
163
|
+
case Lock.SECURED: {
|
164
|
+
stateName = 'SECURED';
|
165
|
+
break;
|
166
|
+
}
|
167
|
+
case Lock.JAMMED: {
|
168
|
+
stateName = 'JAMMED';
|
169
|
+
break;
|
170
|
+
}
|
171
|
+
case Lock.UNKNOWN: {
|
172
|
+
stateName = 'UNKNOWN';
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
default: {
|
176
|
+
stateName = state.toString();
|
177
|
+
}
|
178
|
+
}
|
179
|
+
return stateName;
|
180
|
+
}
|
181
|
+
startAutoSecurityTimeout() {
|
182
|
+
if (this.states.LockTargetState !== this.defaultState && this.states.LockManagementAutoSecurityTimeout > 0) {
|
183
|
+
const securityTimeoutMillis = this.states.LockManagementAutoSecurityTimeout * 1000;
|
184
|
+
this.securityTimerId = setTimeout(() => {
|
185
|
+
// Reset timer
|
186
|
+
clearTimeout(this.securityTimerId);
|
187
|
+
this.service.setCharacteristic(this.platform.Characteristic.LockTargetState, (this.defaultState));
|
188
|
+
this.states.LockLastKnownAction = Lock.SECURED_BY_AUTO_SECURE_TIMEOUT;
|
189
|
+
}, securityTimeoutMillis);
|
190
|
+
const timeout = Utils.secondsToHHmmss(this.states.LockManagementAutoSecurityTimeout);
|
191
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Security Timeout in ${timeout}`);
|
192
|
+
}
|
193
|
+
else {
|
194
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] No Security Timeout defined`);
|
195
|
+
}
|
196
|
+
}
|
197
|
+
}
|
198
|
+
//# sourceMappingURL=virtualAccessoryLock.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtualAccessoryLock.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryLock.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
2
|
+
import { VirtualAccessoriesPlatform } from '../platform.js';
|
3
|
+
import { Accessory } from './virtualAccessory.js';
|
4
|
+
import { TriggerableSensor } from '../triggerableSensor.js';
|
5
|
+
/**
|
6
|
+
* SecuritySystem - Accessory implementation
|
7
|
+
*/
|
8
|
+
export declare class SecuritySystem extends Accessory implements TriggerableSensor {
|
9
|
+
static readonly ACCESSORY_TYPE_NAME: string;
|
10
|
+
static readonly STAY_ARM: number;
|
11
|
+
static readonly AWAY_ARM: number;
|
12
|
+
static readonly NIGHT_ARM: number;
|
13
|
+
static readonly DISARMED: number;
|
14
|
+
static readonly ALARM_TRIGGERED: number;
|
15
|
+
private readonly stateStorageKey;
|
16
|
+
private states;
|
17
|
+
constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
|
18
|
+
getSecuritySystemCurrentState(): Promise<CharacteristicValue>;
|
19
|
+
setSecuritySystemTargetState(value: CharacteristicValue): Promise<void>;
|
20
|
+
getSecuritySystemTargetState(): Promise<CharacteristicValue>;
|
21
|
+
protected getJsonState(): string;
|
22
|
+
protected getAccessoryTypeName(): string;
|
23
|
+
static getStateName(state: number): string;
|
24
|
+
/**
|
25
|
+
* Ensure all the property values are set, then remove as required
|
26
|
+
*/
|
27
|
+
private setSecurityServiceProperties;
|
28
|
+
private generatePropertyValueList;
|
29
|
+
triggerSensor(value: boolean, accessoryId: string): void;
|
30
|
+
}
|