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,365 @@
|
|
1
|
+
/* eslint-disable brace-style */
|
2
|
+
/* eslint-disable max-len */
|
3
|
+
import { Accessory } from './virtualAccessory.js';
|
4
|
+
import { InvalidSensorValueType, SensorValueUpdateNotAllowed } from '../errors.js';
|
5
|
+
/**
|
6
|
+
* HumidifierDehumidifier - Accessory implementation
|
7
|
+
*/
|
8
|
+
export class HumidifierDehumidifier extends Accessory {
|
9
|
+
static ACCESSORY_TYPE_NAME = 'HumidifierDehumidifier';
|
10
|
+
static CURRENTLY_INACTIVE = 0; // Characteristic.CurrentHumidifierDehumidifierState.INACTIVE
|
11
|
+
static CURRENTLY_IDLE = 1; // Characteristic.CurrentHumidifierDehumidifierState.IDLE
|
12
|
+
static CURRENTLY_HUMIDIFYING = 2; // Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING
|
13
|
+
static CURRENTLY_DEHUMIDIFYING = 3; // Characteristic.CurrentHumidifierDehumidifierState.DEHUMIDIFYING
|
14
|
+
static AUTOMATIC = 0; // Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER
|
15
|
+
static HUMIDIFY = 1; // Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER
|
16
|
+
static DEHUMIDIFY = 2; // Characteristic.TargetHumidifierDehumidifierState.DEHUMIDIFIER
|
17
|
+
static INACTIVE = 0; // Characteristic.Active.INACTIVE
|
18
|
+
static ACTIVE = 1; // Characteristic.Active.ACTIVE
|
19
|
+
stateStorageKey = 'HumidifierDehumidifierActive';
|
20
|
+
targetStateStorageKey = 'HumidifierDehumidifierTargetState';
|
21
|
+
humidifierThresholdStorageKey = 'HumidifierThreshold';
|
22
|
+
dehumidifierThresholdStorageKey = 'DehumidifierThreshold';
|
23
|
+
deviceType;
|
24
|
+
states = {
|
25
|
+
HumidifierDehumidifierActive: HumidifierDehumidifier.INACTIVE,
|
26
|
+
HumidifierDehumidifierCurrentState: HumidifierDehumidifier.CURRENTLY_INACTIVE,
|
27
|
+
HumidifierDehumidifierTargetState: HumidifierDehumidifier.AUTOMATIC,
|
28
|
+
HumidifierThreshold: 30,
|
29
|
+
DehumidifierThreshold: 60,
|
30
|
+
CurrentRelativeHumidity: 50, // This value comes from sensor, set to 50% for now
|
31
|
+
};
|
32
|
+
constructor(platform, accessory) {
|
33
|
+
super(platform, accessory);
|
34
|
+
// First configure the device based on the accessory details
|
35
|
+
this.states.HumidifierDehumidifierActive = HumidifierDehumidifier.INACTIVE;
|
36
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_INACTIVE;
|
37
|
+
this.states.HumidifierThreshold = this.accessoryConfiguration.humidifierDehumidifier.humidifierThreshold;
|
38
|
+
this.states.DehumidifierThreshold = this.accessoryConfiguration.humidifierDehumidifier.dehumidifierThreshold;
|
39
|
+
this.deviceType = this.accessoryConfiguration.humidifierDehumidifier.type;
|
40
|
+
this.states.HumidifierDehumidifierTargetState = HumidifierDehumidifier.AUTOMATIC;
|
41
|
+
// If the accessory is stateful retrieve stored state
|
42
|
+
if (this.accessoryConfiguration.accessoryIsStateful) {
|
43
|
+
const accessoryState = this.loadAccessoryState(this.storagePath);
|
44
|
+
const cachedState = accessoryState[this.stateStorageKey];
|
45
|
+
const cachedTargetState = accessoryState[this.targetStateStorageKey];
|
46
|
+
if (cachedState !== undefined) {
|
47
|
+
this.states.HumidifierDehumidifierActive = cachedState;
|
48
|
+
}
|
49
|
+
if (cachedTargetState !== undefined) {
|
50
|
+
this.states.HumidifierDehumidifierTargetState = cachedTargetState;
|
51
|
+
}
|
52
|
+
if (this.dehumidifies()) {
|
53
|
+
const cachedDehumidifierThreshold = accessoryState[this.dehumidifierThresholdStorageKey];
|
54
|
+
if (cachedDehumidifierThreshold !== undefined) {
|
55
|
+
this.states.DehumidifierThreshold = cachedDehumidifierThreshold;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
if (this.humidifies()) {
|
59
|
+
const cachedHumidifierThreshold = accessoryState[this.humidifierThresholdStorageKey];
|
60
|
+
if (cachedHumidifierThreshold !== undefined) {
|
61
|
+
this.states.HumidifierThreshold = cachedHumidifierThreshold;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
this.setDeviceOperationalCondition();
|
66
|
+
// get the HumidifierDehumidifier service if it exists, otherwise create a new LightBulb service
|
67
|
+
this.service = this.accessory.getService(this.platform.Service.HumidifierDehumidifier) || this.accessory.addService(this.platform.Service.HumidifierDehumidifier);
|
68
|
+
// These characteristics will be added back as needed
|
69
|
+
this.service.removeCharacteristic(this.service.getCharacteristic(this.platform.Characteristic.RelativeHumidityDehumidifierThreshold));
|
70
|
+
this.service.removeCharacteristic(this.service.getCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold));
|
71
|
+
this.setHumidifierDehumidifierServiceProperties(this.service);
|
72
|
+
// set the service name, this is what is displayed as the default name on the Home app
|
73
|
+
this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessoryConfiguration.accessoryName);
|
74
|
+
// Update the initial state of the accessory
|
75
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Humidifier/Dehumidifier Current State: ${HumidifierDehumidifier.getCurrentStateName(this.states.HumidifierDehumidifierCurrentState)}`);
|
76
|
+
this.service.updateCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, (this.states.HumidifierDehumidifierCurrentState));
|
77
|
+
this.service.updateCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState, (this.states.HumidifierDehumidifierTargetState));
|
78
|
+
// register handlers
|
79
|
+
this.service.getCharacteristic(this.platform.Characteristic.Active)
|
80
|
+
.onSet(this.setActive.bind(this))
|
81
|
+
.onGet(this.getActive.bind(this));
|
82
|
+
this.service.getCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState)
|
83
|
+
.onGet(this.getCurrentHumidifierDehumidifierState.bind(this));
|
84
|
+
this.service.getCharacteristic(this.platform.Characteristic.TargetHumidifierDehumidifierState)
|
85
|
+
.onSet(this.setTargetHumidifierDehumidifierState.bind(this))
|
86
|
+
.onGet(this.getTargetHumidifierDehumidifierState.bind(this));
|
87
|
+
this.service.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
|
88
|
+
.onGet(this.getCurrentRelativeHumidity.bind(this));
|
89
|
+
if (this.dehumidifies()) {
|
90
|
+
// Characteristic was removed when adding the Service
|
91
|
+
this.service.addCharacteristic(this.platform.Characteristic.RelativeHumidityDehumidifierThreshold)
|
92
|
+
.onSet(this.setRelativeHumidityDehumidifierThreshold.bind(this))
|
93
|
+
.onGet(this.getRelativeHumidityDehumidifierThreshold.bind(this));
|
94
|
+
}
|
95
|
+
if (this.humidifies()) {
|
96
|
+
// Characteristic was removed when adding the Service
|
97
|
+
this.service.addCharacteristic(this.platform.Characteristic.RelativeHumidityHumidifierThreshold)
|
98
|
+
.onSet(this.setRelativeHumidityHumidifierThreshold.bind(this))
|
99
|
+
.onGet(this.getRelativeHumidityHumidifierThreshold.bind(this));
|
100
|
+
}
|
101
|
+
const characteristics = this.service.characteristics.map(characteristic => characteristic.displayName);
|
102
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Characteristics: ${characteristics.join(', ')}`);
|
103
|
+
}
|
104
|
+
// Handlers
|
105
|
+
async setActive(value) {
|
106
|
+
this.states.HumidifierDehumidifierActive = value;
|
107
|
+
this.setDeviceOperationalCondition();
|
108
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Active: ${HumidifierDehumidifier.getActiveName(this.states.HumidifierDehumidifierActive)}`);
|
109
|
+
}
|
110
|
+
async getActive() {
|
111
|
+
const humidifierDehumidifierActive = this.states.HumidifierDehumidifierActive;
|
112
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Active: ${HumidifierDehumidifier.getActiveName(humidifierDehumidifierActive)}`);
|
113
|
+
return humidifierDehumidifierActive;
|
114
|
+
}
|
115
|
+
async getCurrentHumidifierDehumidifierState() {
|
116
|
+
const humidifierDehumidifierCurrentState = this.states.HumidifierDehumidifierCurrentState;
|
117
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current Humidifier Dehumidifier State: ${HumidifierDehumidifier.getCurrentStateName(humidifierDehumidifierCurrentState)}`);
|
118
|
+
return humidifierDehumidifierCurrentState;
|
119
|
+
}
|
120
|
+
async setTargetHumidifierDehumidifierState(value) {
|
121
|
+
this.states.HumidifierDehumidifierTargetState = value;
|
122
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Target Humidifier Dehumidifier State: ${HumidifierDehumidifier.getTargetStateName(this.states.HumidifierDehumidifierTargetState)}`);
|
123
|
+
this.setDeviceOperationalCondition();
|
124
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Current Humidifier Dehumidifier State: ${HumidifierDehumidifier.getCurrentStateName(this.states.HumidifierDehumidifierCurrentState)}`);
|
125
|
+
}
|
126
|
+
async getTargetHumidifierDehumidifierState() {
|
127
|
+
const humidifierDehumidifierTargetState = this.states.HumidifierDehumidifierTargetState;
|
128
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Target Humidifier Dehumidifier State: ${HumidifierDehumidifier.getTargetStateName(humidifierDehumidifierTargetState)}`);
|
129
|
+
return humidifierDehumidifierTargetState;
|
130
|
+
}
|
131
|
+
async getCurrentRelativeHumidity() {
|
132
|
+
const currentRelativeHumidity = this.states.CurrentRelativeHumidity;
|
133
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current Relative Humidity: ${currentRelativeHumidity}%`);
|
134
|
+
return currentRelativeHumidity;
|
135
|
+
}
|
136
|
+
async setRelativeHumidityDehumidifierThreshold(value) {
|
137
|
+
this.states.DehumidifierThreshold = value;
|
138
|
+
this.setDeviceOperationalCondition();
|
139
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Relative Humidity Dehumidifier Threshold: ${this.states.DehumidifierThreshold}%`);
|
140
|
+
}
|
141
|
+
async getRelativeHumidityDehumidifierThreshold() {
|
142
|
+
const dehumidifierThreshold = this.states.DehumidifierThreshold;
|
143
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Relative Humidity Dehumidifier Threshold: ${dehumidifierThreshold}%`);
|
144
|
+
return dehumidifierThreshold;
|
145
|
+
}
|
146
|
+
async setRelativeHumidityHumidifierThreshold(value) {
|
147
|
+
this.states.HumidifierThreshold = value;
|
148
|
+
this.setDeviceOperationalCondition();
|
149
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Relative Humidity Humidifier Threshold: ${this.states.HumidifierThreshold}%`);
|
150
|
+
}
|
151
|
+
async getRelativeHumidityHumidifierThreshold() {
|
152
|
+
const humidifierThreshold = this.states.HumidifierThreshold;
|
153
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Relative Humidity Humidifier Threshold: ${humidifierThreshold}%`);
|
154
|
+
return humidifierThreshold;
|
155
|
+
}
|
156
|
+
getJsonState() {
|
157
|
+
const json = JSON.stringify({
|
158
|
+
[this.stateStorageKey]: this.states.HumidifierDehumidifierActive,
|
159
|
+
[this.targetStateStorageKey]: this.states.HumidifierDehumidifierTargetState,
|
160
|
+
[this.dehumidifierThresholdStorageKey]: this.states.DehumidifierThreshold,
|
161
|
+
[this.humidifierThresholdStorageKey]: this.states.HumidifierThreshold,
|
162
|
+
});
|
163
|
+
return json;
|
164
|
+
}
|
165
|
+
getAccessoryTypeName() {
|
166
|
+
return HumidifierDehumidifier.ACCESSORY_TYPE_NAME;
|
167
|
+
}
|
168
|
+
isHumidifier() {
|
169
|
+
return this.deviceType === 'humidifier';
|
170
|
+
}
|
171
|
+
isDehumidifier() {
|
172
|
+
return this.deviceType === 'dehumidifier';
|
173
|
+
}
|
174
|
+
humidifies() {
|
175
|
+
return this.deviceType === 'auto' || this.deviceType === 'humidifier';
|
176
|
+
}
|
177
|
+
dehumidifies() {
|
178
|
+
return this.deviceType === 'auto' || this.deviceType === 'dehumidifier';
|
179
|
+
}
|
180
|
+
setDeviceOperationalCondition() {
|
181
|
+
if (this.states.HumidifierDehumidifierActive === HumidifierDehumidifier.INACTIVE) {
|
182
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_INACTIVE;
|
183
|
+
}
|
184
|
+
else { // (this.states.HumidifierDehumidifierActive === HumidifierDehumidifier.ACTIVE)
|
185
|
+
if (this.states.HumidifierDehumidifierTargetState === HumidifierDehumidifier.HUMIDIFY) {
|
186
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_HUMIDIFYING;
|
187
|
+
}
|
188
|
+
else if (this.states.HumidifierDehumidifierTargetState === HumidifierDehumidifier.DEHUMIDIFY) {
|
189
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_DEHUMIDIFYING;
|
190
|
+
}
|
191
|
+
else { // (this.states.HumidifierDehumidifierTargetState === HumidifierDehumidifier.AUTOMATIC)
|
192
|
+
if (this.states.CurrentRelativeHumidity < this.states.HumidifierThreshold) {
|
193
|
+
if (this.humidifies()) {
|
194
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_HUMIDIFYING;
|
195
|
+
}
|
196
|
+
}
|
197
|
+
else if (this.states.CurrentRelativeHumidity > this.states.DehumidifierThreshold) {
|
198
|
+
if (this.dehumidifies()) {
|
199
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_DEHUMIDIFYING;
|
200
|
+
}
|
201
|
+
}
|
202
|
+
else {
|
203
|
+
this.states.HumidifierDehumidifierCurrentState = HumidifierDehumidifier.CURRENTLY_IDLE;
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
this.service?.setCharacteristic(this.platform.Characteristic.CurrentHumidifierDehumidifierState, (this.states.HumidifierDehumidifierCurrentState));
|
208
|
+
this.storeState();
|
209
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Humidifier/Dehumidifier current state: ${HumidifierDehumidifier.getCurrentStateName(this.states.HumidifierDehumidifierCurrentState)}`);
|
210
|
+
}
|
211
|
+
static getActiveName(status) {
|
212
|
+
let activeName;
|
213
|
+
switch (status) {
|
214
|
+
case undefined: {
|
215
|
+
activeName = 'undefined';
|
216
|
+
break;
|
217
|
+
}
|
218
|
+
case HumidifierDehumidifier.INACTIVE: {
|
219
|
+
activeName = 'INACTIVE';
|
220
|
+
break;
|
221
|
+
}
|
222
|
+
case HumidifierDehumidifier.ACTIVE: {
|
223
|
+
activeName = 'ACTIVE';
|
224
|
+
break;
|
225
|
+
}
|
226
|
+
default: {
|
227
|
+
activeName = status.toString();
|
228
|
+
}
|
229
|
+
}
|
230
|
+
return activeName;
|
231
|
+
}
|
232
|
+
static getCurrentStateName(state) {
|
233
|
+
let stateName;
|
234
|
+
switch (state) {
|
235
|
+
case undefined: {
|
236
|
+
stateName = 'undefined';
|
237
|
+
break;
|
238
|
+
}
|
239
|
+
case HumidifierDehumidifier.CURRENTLY_INACTIVE: {
|
240
|
+
stateName = 'INACTIVE';
|
241
|
+
break;
|
242
|
+
}
|
243
|
+
case HumidifierDehumidifier.CURRENTLY_IDLE: {
|
244
|
+
stateName = 'IDLE';
|
245
|
+
break;
|
246
|
+
}
|
247
|
+
case HumidifierDehumidifier.CURRENTLY_HUMIDIFYING: {
|
248
|
+
stateName = 'HUMIDIFYING';
|
249
|
+
break;
|
250
|
+
}
|
251
|
+
case HumidifierDehumidifier.CURRENTLY_DEHUMIDIFYING: {
|
252
|
+
stateName = 'DEHUMIDIFYING';
|
253
|
+
break;
|
254
|
+
}
|
255
|
+
default: {
|
256
|
+
stateName = state.toString();
|
257
|
+
}
|
258
|
+
}
|
259
|
+
return stateName;
|
260
|
+
}
|
261
|
+
static getTargetStateName(state) {
|
262
|
+
let stateName;
|
263
|
+
switch (state) {
|
264
|
+
case undefined: {
|
265
|
+
stateName = 'undefined';
|
266
|
+
break;
|
267
|
+
}
|
268
|
+
case HumidifierDehumidifier.AUTOMATIC: {
|
269
|
+
stateName = 'AUTO';
|
270
|
+
break;
|
271
|
+
}
|
272
|
+
case HumidifierDehumidifier.HUMIDIFY: {
|
273
|
+
stateName = 'HUMIDIFY';
|
274
|
+
break;
|
275
|
+
}
|
276
|
+
case HumidifierDehumidifier.DEHUMIDIFY: {
|
277
|
+
stateName = 'DEHUMIDIFY';
|
278
|
+
break;
|
279
|
+
}
|
280
|
+
default: {
|
281
|
+
stateName = state.toString();
|
282
|
+
}
|
283
|
+
}
|
284
|
+
return stateName;
|
285
|
+
}
|
286
|
+
/**
|
287
|
+
* Ensure all the property values are set, then remove as required
|
288
|
+
*/
|
289
|
+
setHumidifierDehumidifierServiceProperties(service) {
|
290
|
+
const CurrentHumidifierDehumidifierState = this.platform.Characteristic.CurrentHumidifierDehumidifierState;
|
291
|
+
const TargetHumidifierDehumidifierState = this.platform.Characteristic.TargetHumidifierDehumidifierState;
|
292
|
+
const currentStateValues = new Set([
|
293
|
+
CurrentHumidifierDehumidifierState.INACTIVE,
|
294
|
+
CurrentHumidifierDehumidifierState.IDLE,
|
295
|
+
CurrentHumidifierDehumidifierState.HUMIDIFYING,
|
296
|
+
CurrentHumidifierDehumidifierState.DEHUMIDIFYING,
|
297
|
+
]);
|
298
|
+
const targetStateValues = new Set([
|
299
|
+
TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER,
|
300
|
+
TargetHumidifierDehumidifierState.HUMIDIFIER,
|
301
|
+
TargetHumidifierDehumidifierState.DEHUMIDIFIER,
|
302
|
+
]);
|
303
|
+
if (this.isHumidifier()) {
|
304
|
+
currentStateValues.delete(CurrentHumidifierDehumidifierState.DEHUMIDIFYING);
|
305
|
+
targetStateValues.delete(TargetHumidifierDehumidifierState.DEHUMIDIFIER);
|
306
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Humidifier`);
|
307
|
+
}
|
308
|
+
else if (this.isDehumidifier()) {
|
309
|
+
currentStateValues.delete(CurrentHumidifierDehumidifierState.HUMIDIFYING);
|
310
|
+
targetStateValues.delete(TargetHumidifierDehumidifierState.HUMIDIFIER);
|
311
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Dehumidifier`);
|
312
|
+
}
|
313
|
+
else {
|
314
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Humidifier/Dehumidifier`);
|
315
|
+
}
|
316
|
+
if (currentStateValues.size > 0) {
|
317
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Current State values: ${this.getCurrentStateLabels(currentStateValues)}`);
|
318
|
+
service.getCharacteristic(CurrentHumidifierDehumidifierState)
|
319
|
+
.setProps({
|
320
|
+
validValues: Array.from(currentStateValues),
|
321
|
+
});
|
322
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Current State Props: ${JSON.stringify(service.getCharacteristic(CurrentHumidifierDehumidifierState).props)}`);
|
323
|
+
}
|
324
|
+
if (targetStateValues.size > 0) {
|
325
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Target State values: ${this.getTargetStateLabels(targetStateValues)}`);
|
326
|
+
service.getCharacteristic(TargetHumidifierDehumidifierState)
|
327
|
+
.setProps({
|
328
|
+
validValues: Array.from(targetStateValues),
|
329
|
+
});
|
330
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Target State Props: ${JSON.stringify(service.getCharacteristic(TargetHumidifierDehumidifierState).props)}`);
|
331
|
+
}
|
332
|
+
}
|
333
|
+
getCurrentStateLabels(values) {
|
334
|
+
const labels = [];
|
335
|
+
values.forEach(value => {
|
336
|
+
labels.push(HumidifierDehumidifier.getCurrentStateName(value));
|
337
|
+
});
|
338
|
+
return labels;
|
339
|
+
}
|
340
|
+
getTargetStateLabels(values) {
|
341
|
+
const labels = [];
|
342
|
+
values.forEach(value => {
|
343
|
+
labels.push(HumidifierDehumidifier.getTargetStateName(value));
|
344
|
+
});
|
345
|
+
return labels;
|
346
|
+
}
|
347
|
+
// Updatable Sensor interface
|
348
|
+
updateSensor(value, accessoryId) {
|
349
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Request update humidity sensor to ${value}%`);
|
350
|
+
if (accessoryId !== this.accessoryConfiguration.accessoryID) {
|
351
|
+
this.log.error(`[${this.accessoryConfiguration.accessoryName}] Accessory Id ${accessoryId} is not valid for this accessory`);
|
352
|
+
throw new SensorValueUpdateNotAllowed(`Invalid accessory id: ${accessoryId}`);
|
353
|
+
}
|
354
|
+
else if (typeof value !== 'number') {
|
355
|
+
this.log.error(`[${this.accessoryConfiguration.accessoryName}] Value ${value} is not valid for a Humidifier/Dehumidifier sensor`);
|
356
|
+
throw new InvalidSensorValueType(`Invalid sensor value: ${value}`);
|
357
|
+
}
|
358
|
+
else {
|
359
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Updating humidity sensor to ${value}%`);
|
360
|
+
this.states.CurrentRelativeHumidity = value;
|
361
|
+
this.setDeviceOperationalCondition();
|
362
|
+
}
|
363
|
+
}
|
364
|
+
}
|
365
|
+
//# sourceMappingURL=virtualAccessoryHumidifierDehumidifier.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtualAccessoryHumidifierDehumidifier.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryHumidifierDehumidifier.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
2
|
+
import { VirtualAccessoriesPlatform } from '../platform.js';
|
3
|
+
import { Accessory } from './virtualAccessory.js';
|
4
|
+
/**
|
5
|
+
* InputSource - Accessory implementation
|
6
|
+
*/
|
7
|
+
export declare class InputSource extends Accessory {
|
8
|
+
static readonly ACCESSORY_TYPE_NAME: string;
|
9
|
+
static readonly OTHER = 0;
|
10
|
+
static readonly HOME_SCREEN = 1;
|
11
|
+
static readonly TUNER = 2;
|
12
|
+
static readonly HDMI = 3;
|
13
|
+
static readonly COMPOSITE_VIDEO = 4;
|
14
|
+
static readonly S_VIDEO = 5;
|
15
|
+
static readonly COMPONENT_VIDEO = 6;
|
16
|
+
static readonly DVI = 7;
|
17
|
+
static readonly AIRPLAY = 8;
|
18
|
+
static readonly USB = 9;
|
19
|
+
static readonly APPLICATION = 10;
|
20
|
+
static readonly NOT_CONFIGURED = 0;
|
21
|
+
static readonly CONFIGURED = 1;
|
22
|
+
static readonly SHOWN = 0;
|
23
|
+
static readonly HIDDEN = 1;
|
24
|
+
private states;
|
25
|
+
constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
|
26
|
+
setConfiguredName(value: CharacteristicValue): Promise<void>;
|
27
|
+
getConfiguredName(): Promise<CharacteristicValue>;
|
28
|
+
getInputSourceType(): Promise<CharacteristicValue>;
|
29
|
+
setIsConfigured(value: CharacteristicValue): Promise<void>;
|
30
|
+
getIsConfigured(): Promise<CharacteristicValue>;
|
31
|
+
getCurrentVisibilityState(): Promise<CharacteristicValue>;
|
32
|
+
getIdentifier(): Promise<CharacteristicValue>;
|
33
|
+
protected getJsonState(): string;
|
34
|
+
protected getAccessoryTypeName(): string;
|
35
|
+
static getTypeName(event: number): string;
|
36
|
+
static getConfiguredName(event: number): string;
|
37
|
+
static getVisibilityName(event: number): string;
|
38
|
+
}
|
@@ -0,0 +1,196 @@
|
|
1
|
+
import { Accessory } from './virtualAccessory.js';
|
2
|
+
/**
|
3
|
+
* InputSource - Accessory implementation
|
4
|
+
*/
|
5
|
+
export class InputSource extends Accessory {
|
6
|
+
static ACCESSORY_TYPE_NAME = 'InputSource';
|
7
|
+
static OTHER = 0; // Characteristic.InputSourceType.OTHER
|
8
|
+
static HOME_SCREEN = 1; // Characteristic.InputSourceType.HOME_SCREEN
|
9
|
+
static TUNER = 2; // Characteristic.InputSourceType.TUNER
|
10
|
+
static HDMI = 3; // Characteristic.InputSourceType.HDMI
|
11
|
+
static COMPOSITE_VIDEO = 4; // Characteristic.InputSourceType.COMPOSITE_VIDEO
|
12
|
+
static S_VIDEO = 5; // Characteristic.InputSourceType.S_VIDEO
|
13
|
+
static COMPONENT_VIDEO = 6; // Characteristic.InputSourceType.COMPONENT_VIDEO
|
14
|
+
static DVI = 7; // Characteristic.InputSourceType.DVI
|
15
|
+
static AIRPLAY = 8; // Characteristic.InputSourceType.AIRPLAY
|
16
|
+
static USB = 9; // Characteristic.InputSourceType.USB
|
17
|
+
static APPLICATION = 10; // Characteristic.InputSourceType.APPLICATION
|
18
|
+
static NOT_CONFIGURED = 0; // Characteristic.IsConfigured.NOT_CONFIGURED
|
19
|
+
static CONFIGURED = 1; // Characteristic.IsConfigured.CONFIGURED
|
20
|
+
static SHOWN = 0; // Characteristic.CurrentVisibilityState.SHOWN
|
21
|
+
static HIDDEN = 1; // Characteristic.CurrentVisibilityState.HIDDEN
|
22
|
+
states = {
|
23
|
+
InputSourceConfiguredName: '',
|
24
|
+
InputSourceType: InputSource.HDMI,
|
25
|
+
InputSourceIsConfigured: true,
|
26
|
+
InputSourceCurrentVisibilityState: InputSource.SHOWN,
|
27
|
+
InputSourceIdentifier: 0,
|
28
|
+
};
|
29
|
+
constructor(platform, accessory) {
|
30
|
+
super(platform, accessory);
|
31
|
+
const inputName = this.accessoryConfiguration.inputSource.name;
|
32
|
+
// First configure the device based on the accessory details
|
33
|
+
this.states.InputSourceConfiguredName = inputName;
|
34
|
+
this.states.InputSourceType = this.accessoryConfiguration.inputSource.inputSourceType;
|
35
|
+
this.states.InputSourceIdentifier = this.accessoryConfiguration.inputSource.identifier;
|
36
|
+
// set accessory information
|
37
|
+
this.service = this.accessory.getService(inputName) ||
|
38
|
+
this.accessory.addService(this.platform.Service.InputSource, inputName, accessory.UUID + inputName);
|
39
|
+
this.service.setCharacteristic(this.platform.Characteristic.Name, inputName);
|
40
|
+
// register handlers
|
41
|
+
this.service.getCharacteristic(this.platform.Characteristic.ConfiguredName)
|
42
|
+
.onSet(this.setConfiguredName.bind(this))
|
43
|
+
.onGet(this.getConfiguredName.bind(this));
|
44
|
+
this.service.getCharacteristic(this.platform.Characteristic.InputSourceType)
|
45
|
+
.onGet(this.getInputSourceType.bind(this));
|
46
|
+
this.service.getCharacteristic(this.platform.Characteristic.IsConfigured)
|
47
|
+
.onSet(this.setIsConfigured.bind(this))
|
48
|
+
.onGet(this.getIsConfigured.bind(this));
|
49
|
+
this.service.getCharacteristic(this.platform.Characteristic.CurrentVisibilityState)
|
50
|
+
.onGet(this.getCurrentVisibilityState.bind(this));
|
51
|
+
this.service.getCharacteristic(this.platform.Characteristic.Identifier)
|
52
|
+
.onGet(this.getIdentifier.bind(this));
|
53
|
+
}
|
54
|
+
// Handlers
|
55
|
+
async setConfiguredName(value) {
|
56
|
+
// this.states.InputSourceConfiguredName = value as string;
|
57
|
+
const configuredName = value;
|
58
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Configured Name: ${configuredName}`);
|
59
|
+
}
|
60
|
+
async getConfiguredName() {
|
61
|
+
const configuredName = this.states.InputSourceConfiguredName;
|
62
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Configured Name: ${configuredName}`);
|
63
|
+
return configuredName;
|
64
|
+
}
|
65
|
+
async getInputSourceType() {
|
66
|
+
const inputSourceType = this.states.InputSourceType;
|
67
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Input Source Type: ${InputSource.getTypeName(inputSourceType)}`);
|
68
|
+
return inputSourceType;
|
69
|
+
}
|
70
|
+
async setIsConfigured(value) {
|
71
|
+
// this.states.InputSourceIsConfigured = value as boolean;
|
72
|
+
const isConfigured = value;
|
73
|
+
this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Is Configured: ${isConfigured}`);
|
74
|
+
}
|
75
|
+
async getIsConfigured() {
|
76
|
+
const isConfigured = this.states.InputSourceIsConfigured;
|
77
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Is Configured: ${isConfigured}`);
|
78
|
+
return isConfigured;
|
79
|
+
}
|
80
|
+
async getCurrentVisibilityState() {
|
81
|
+
const currentVisibilityState = this.states.InputSourceCurrentVisibilityState;
|
82
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current Visibility State: ${InputSource.getVisibilityName(currentVisibilityState)}`);
|
83
|
+
return currentVisibilityState;
|
84
|
+
}
|
85
|
+
async getIdentifier() {
|
86
|
+
const identifier = this.states.InputSourceIdentifier;
|
87
|
+
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Identifier: ${identifier}`);
|
88
|
+
return identifier;
|
89
|
+
}
|
90
|
+
getJsonState() {
|
91
|
+
return JSON.stringify({});
|
92
|
+
}
|
93
|
+
getAccessoryTypeName() {
|
94
|
+
return InputSource.ACCESSORY_TYPE_NAME;
|
95
|
+
}
|
96
|
+
static getTypeName(event) {
|
97
|
+
let eventName;
|
98
|
+
switch (event) {
|
99
|
+
case undefined: {
|
100
|
+
eventName = 'undefined';
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
case InputSource.OTHER: {
|
104
|
+
eventName = 'OTHER';
|
105
|
+
break;
|
106
|
+
}
|
107
|
+
case InputSource.HOME_SCREEN: {
|
108
|
+
eventName = 'HOME SCREEN';
|
109
|
+
break;
|
110
|
+
}
|
111
|
+
case InputSource.TUNER: {
|
112
|
+
eventName = 'TUNER';
|
113
|
+
break;
|
114
|
+
}
|
115
|
+
case InputSource.HDMI: {
|
116
|
+
eventName = 'HDMI';
|
117
|
+
break;
|
118
|
+
}
|
119
|
+
case InputSource.COMPOSITE_VIDEO: {
|
120
|
+
eventName = 'COMPOSITE VIDEO';
|
121
|
+
break;
|
122
|
+
}
|
123
|
+
case InputSource.S_VIDEO: {
|
124
|
+
eventName = 'S VIDEO';
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
case InputSource.COMPONENT_VIDEO: {
|
128
|
+
eventName = 'COMPONENT VIDEO';
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
case InputSource.DVI: {
|
132
|
+
eventName = 'DVI';
|
133
|
+
break;
|
134
|
+
}
|
135
|
+
case InputSource.AIRPLAY: {
|
136
|
+
eventName = 'AIRPLAY';
|
137
|
+
break;
|
138
|
+
}
|
139
|
+
case InputSource.USB: {
|
140
|
+
eventName = 'USB';
|
141
|
+
break;
|
142
|
+
}
|
143
|
+
case InputSource.APPLICATION: {
|
144
|
+
eventName = 'APPLICATION';
|
145
|
+
break;
|
146
|
+
}
|
147
|
+
default: {
|
148
|
+
eventName = event.toString();
|
149
|
+
}
|
150
|
+
}
|
151
|
+
return eventName;
|
152
|
+
}
|
153
|
+
static getConfiguredName(event) {
|
154
|
+
let eventName;
|
155
|
+
switch (event) {
|
156
|
+
case undefined: {
|
157
|
+
eventName = 'undefined';
|
158
|
+
break;
|
159
|
+
}
|
160
|
+
case InputSource.NOT_CONFIGURED: {
|
161
|
+
eventName = 'NOT CONFIGURED';
|
162
|
+
break;
|
163
|
+
}
|
164
|
+
case InputSource.CONFIGURED: {
|
165
|
+
eventName = 'CONFIGURED';
|
166
|
+
break;
|
167
|
+
}
|
168
|
+
default: {
|
169
|
+
eventName = event.toString();
|
170
|
+
}
|
171
|
+
}
|
172
|
+
return eventName;
|
173
|
+
}
|
174
|
+
static getVisibilityName(event) {
|
175
|
+
let eventName;
|
176
|
+
switch (event) {
|
177
|
+
case undefined: {
|
178
|
+
eventName = 'undefined';
|
179
|
+
break;
|
180
|
+
}
|
181
|
+
case InputSource.SHOWN: {
|
182
|
+
eventName = 'SHOWN';
|
183
|
+
break;
|
184
|
+
}
|
185
|
+
case InputSource.HIDDEN: {
|
186
|
+
eventName = 'HIDDEN';
|
187
|
+
break;
|
188
|
+
}
|
189
|
+
default: {
|
190
|
+
eventName = event.toString();
|
191
|
+
}
|
192
|
+
}
|
193
|
+
return eventName;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
//# sourceMappingURL=virtualAccessoryInputSource.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtualAccessoryInputSource.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryInputSource.ts"],"names":[],"mappings":"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"}
|