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.
Files changed (270) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +1091 -0
  3. package/VirtualAccessories.jpg +0 -0
  4. package/VirtualAccessories.png +0 -0
  5. package/assets/changeorder.png +0 -0
  6. package/assets/creative-ideas/HowToAddAFakeThermostat.png +0 -0
  7. package/assets/keepaccessories.png +0 -0
  8. package/assets/mentions/youtube-EdgarsHomeTech.png +0 -0
  9. package/assets/mentions/youtube-MakeSmartMatter.png +0 -0
  10. package/assets/wiki/automation-shortcut-1.png +0 -0
  11. package/assets/wiki/automation-shortcut-2.png +0 -0
  12. package/assets/wiki/cron-schedule-config.png +0 -0
  13. package/assets/wiki/enable-sensor-webhooks.png +0 -0
  14. package/assets/wiki/humidifier-dehumidifier-config.png +0 -0
  15. package/assets/wiki/new-automation.png +0 -0
  16. package/assets/wiki/timer-duration-new.png +0 -0
  17. package/assets/wiki/timer-duration-old.png +0 -0
  18. package/assets/wiki/valve-timer-duration-new.png +0 -0
  19. package/assets/wiki/valve-timer-duration-old.png +0 -0
  20. package/config.schema.json +1570 -0
  21. package/dist/accessories/audioAccessory.d.ts +29 -0
  22. package/dist/accessories/audioAccessory.js +119 -0
  23. package/dist/accessories/audioAccessory.js.map +1 -0
  24. package/dist/accessories/externalAccessory.d.ts +10 -0
  25. package/dist/accessories/externalAccessory.js +13 -0
  26. package/dist/accessories/externalAccessory.js.map +1 -0
  27. package/dist/accessories/openingAccessory.d.ts +35 -0
  28. package/dist/accessories/openingAccessory.js +166 -0
  29. package/dist/accessories/openingAccessory.js.map +1 -0
  30. package/dist/accessories/triggerableEventAccessory.d.ts +7 -0
  31. package/dist/accessories/triggerableEventAccessory.js +2 -0
  32. package/dist/accessories/triggerableEventAccessory.js.map +1 -0
  33. package/dist/accessories/virtualAccessory.d.ts +29 -0
  34. package/dist/accessories/virtualAccessory.js +86 -0
  35. package/dist/accessories/virtualAccessory.js.map +1 -0
  36. package/dist/accessories/virtualAccessoryDoor.d.ts +14 -0
  37. package/dist/accessories/virtualAccessoryDoor.js +20 -0
  38. package/dist/accessories/virtualAccessoryDoor.js.map +1 -0
  39. package/dist/accessories/virtualAccessoryDoorbell.d.ts +29 -0
  40. package/dist/accessories/virtualAccessoryDoorbell.js +111 -0
  41. package/dist/accessories/virtualAccessoryDoorbell.js.map +1 -0
  42. package/dist/accessories/virtualAccessoryFan.d.ts +27 -0
  43. package/dist/accessories/virtualAccessoryFan.js +122 -0
  44. package/dist/accessories/virtualAccessoryFan.js.map +1 -0
  45. package/dist/accessories/virtualAccessoryFilterMaintenance.d.ts +26 -0
  46. package/dist/accessories/virtualAccessoryFilterMaintenance.js +122 -0
  47. package/dist/accessories/virtualAccessoryFilterMaintenance.js.map +1 -0
  48. package/dist/accessories/virtualAccessoryGarageDoor.d.ts +28 -0
  49. package/dist/accessories/virtualAccessoryGarageDoor.js +162 -0
  50. package/dist/accessories/virtualAccessoryGarageDoor.js.map +1 -0
  51. package/dist/accessories/virtualAccessoryHeaterCooler.d.ts +62 -0
  52. package/dist/accessories/virtualAccessoryHeaterCooler.js +441 -0
  53. package/dist/accessories/virtualAccessoryHeaterCooler.js.map +1 -0
  54. package/dist/accessories/virtualAccessoryHumidifierDehumidifier.d.ts +53 -0
  55. package/dist/accessories/virtualAccessoryHumidifierDehumidifier.js +365 -0
  56. package/dist/accessories/virtualAccessoryHumidifierDehumidifier.js.map +1 -0
  57. package/dist/accessories/virtualAccessoryInputSource.d.ts +38 -0
  58. package/dist/accessories/virtualAccessoryInputSource.js +196 -0
  59. package/dist/accessories/virtualAccessoryInputSource.js.map +1 -0
  60. package/dist/accessories/virtualAccessoryLightbulb.d.ts +37 -0
  61. package/dist/accessories/virtualAccessoryLightbulb.js +222 -0
  62. package/dist/accessories/virtualAccessoryLightbulb.js.map +1 -0
  63. package/dist/accessories/virtualAccessoryLock.d.ts +34 -0
  64. package/dist/accessories/virtualAccessoryLock.js +198 -0
  65. package/dist/accessories/virtualAccessoryLock.js.map +1 -0
  66. package/dist/accessories/virtualAccessorySecuritySystem.d.ts +30 -0
  67. package/dist/accessories/virtualAccessorySecuritySystem.js +214 -0
  68. package/dist/accessories/virtualAccessorySecuritySystem.js.map +1 -0
  69. package/dist/accessories/virtualAccessorySpeaker.d.ts +14 -0
  70. package/dist/accessories/virtualAccessorySpeaker.js +20 -0
  71. package/dist/accessories/virtualAccessorySpeaker.js.map +1 -0
  72. package/dist/accessories/virtualAccessorySwitch.d.ts +34 -0
  73. package/dist/accessories/virtualAccessorySwitch.js +191 -0
  74. package/dist/accessories/virtualAccessorySwitch.js.map +1 -0
  75. package/dist/accessories/virtualAccessoryTelevision.d.ts +44 -0
  76. package/dist/accessories/virtualAccessoryTelevision.js +230 -0
  77. package/dist/accessories/virtualAccessoryTelevision.js.map +1 -0
  78. package/dist/accessories/virtualAccessoryValve.d.ts +34 -0
  79. package/dist/accessories/virtualAccessoryValve.js +215 -0
  80. package/dist/accessories/virtualAccessoryValve.js.map +1 -0
  81. package/dist/accessories/virtualAccessoryWindow.d.ts +14 -0
  82. package/dist/accessories/virtualAccessoryWindow.js +20 -0
  83. package/dist/accessories/virtualAccessoryWindow.js.map +1 -0
  84. package/dist/accessories/virtualAccessoryWindowCovering.d.ts +14 -0
  85. package/dist/accessories/virtualAccessoryWindowCovering.js +20 -0
  86. package/dist/accessories/virtualAccessoryWindowCovering.js.map +1 -0
  87. package/dist/accessoryFactory.d.ts +15 -0
  88. package/dist/accessoryFactory.js +147 -0
  89. package/dist/accessoryFactory.js.map +1 -0
  90. package/dist/colors.d.ts +22 -0
  91. package/dist/colors.js +146 -0
  92. package/dist/colors.js.map +1 -0
  93. package/dist/companions/companionLightbulb.d.ts +10 -0
  94. package/dist/companions/companionLightbulb.js +12 -0
  95. package/dist/companions/companionLightbulb.js.map +1 -0
  96. package/dist/companions/companionSensors.d.ts +9 -0
  97. package/dist/companions/companionSensors.js +117 -0
  98. package/dist/companions/companionSensors.js.map +1 -0
  99. package/dist/companions/companionSwitch.d.ts +15 -0
  100. package/dist/companions/companionSwitch.js +46 -0
  101. package/dist/companions/companionSwitch.js.map +1 -0
  102. package/dist/configuration/accessories/configurationDoor.d.ts +9 -0
  103. package/dist/configuration/accessories/configurationDoor.js +31 -0
  104. package/dist/configuration/accessories/configurationDoor.js.map +1 -0
  105. package/dist/configuration/accessories/configurationDoorbell.d.ts +10 -0
  106. package/dist/configuration/accessories/configurationDoorbell.js +23 -0
  107. package/dist/configuration/accessories/configurationDoorbell.js.map +1 -0
  108. package/dist/configuration/accessories/configurationFan.d.ts +12 -0
  109. package/dist/configuration/accessories/configurationFan.js +36 -0
  110. package/dist/configuration/accessories/configurationFan.js.map +1 -0
  111. package/dist/configuration/accessories/configurationFilterMaintenance.d.ts +12 -0
  112. package/dist/configuration/accessories/configurationFilterMaintenance.js +48 -0
  113. package/dist/configuration/accessories/configurationFilterMaintenance.js.map +1 -0
  114. package/dist/configuration/accessories/configurationGarageDoor.d.ts +9 -0
  115. package/dist/configuration/accessories/configurationGarageDoor.js +31 -0
  116. package/dist/configuration/accessories/configurationGarageDoor.js.map +1 -0
  117. package/dist/configuration/accessories/configurationHeaterCooler.d.ts +20 -0
  118. package/dist/configuration/accessories/configurationHeaterCooler.js +116 -0
  119. package/dist/configuration/accessories/configurationHeaterCooler.js.map +1 -0
  120. package/dist/configuration/accessories/configurationHumidifierDehumidifier.d.ts +12 -0
  121. package/dist/configuration/accessories/configurationHumidifierDehumidifier.js +44 -0
  122. package/dist/configuration/accessories/configurationHumidifierDehumidifier.js.map +1 -0
  123. package/dist/configuration/accessories/configurationInputSource.d.ts +12 -0
  124. package/dist/configuration/accessories/configurationInputSource.js +33 -0
  125. package/dist/configuration/accessories/configurationInputSource.js.map +1 -0
  126. package/dist/configuration/accessories/configurationLightbulb.d.ts +14 -0
  127. package/dist/configuration/accessories/configurationLightbulb.js +55 -0
  128. package/dist/configuration/accessories/configurationLightbulb.js.map +1 -0
  129. package/dist/configuration/accessories/configurationLock.d.ts +11 -0
  130. package/dist/configuration/accessories/configurationLock.js +30 -0
  131. package/dist/configuration/accessories/configurationLock.js.map +1 -0
  132. package/dist/configuration/accessories/configurationSecuritySystem.d.ts +18 -0
  133. package/dist/configuration/accessories/configurationSecuritySystem.js +48 -0
  134. package/dist/configuration/accessories/configurationSecuritySystem.js.map +1 -0
  135. package/dist/configuration/accessories/configurationSpeaker.d.ts +9 -0
  136. package/dist/configuration/accessories/configurationSpeaker.js +24 -0
  137. package/dist/configuration/accessories/configurationSpeaker.js.map +1 -0
  138. package/dist/configuration/accessories/configurationSwitch.d.ts +13 -0
  139. package/dist/configuration/accessories/configurationSwitch.js +27 -0
  140. package/dist/configuration/accessories/configurationSwitch.js.map +1 -0
  141. package/dist/configuration/accessories/configurationTelevision.d.ts +12 -0
  142. package/dist/configuration/accessories/configurationTelevision.js +47 -0
  143. package/dist/configuration/accessories/configurationTelevision.js.map +1 -0
  144. package/dist/configuration/accessories/configurationValve.d.ts +25 -0
  145. package/dist/configuration/accessories/configurationValve.js +88 -0
  146. package/dist/configuration/accessories/configurationValve.js.map +1 -0
  147. package/dist/configuration/accessories/configurationWindow.d.ts +9 -0
  148. package/dist/configuration/accessories/configurationWindow.js +31 -0
  149. package/dist/configuration/accessories/configurationWindow.js.map +1 -0
  150. package/dist/configuration/accessories/configurationWindowCovering.d.ts +9 -0
  151. package/dist/configuration/accessories/configurationWindowCovering.js +31 -0
  152. package/dist/configuration/accessories/configurationWindowCovering.js.map +1 -0
  153. package/dist/configuration/configuration.d.ts +13 -0
  154. package/dist/configuration/configuration.js +41 -0
  155. package/dist/configuration/configuration.js.map +1 -0
  156. package/dist/configuration/configurationAccessory.d.ts +6 -0
  157. package/dist/configuration/configurationAccessory.js +6 -0
  158. package/dist/configuration/configurationAccessory.js.map +1 -0
  159. package/dist/configuration/configurationAudioAccessoryConfiguration.d.ts +9 -0
  160. package/dist/configuration/configurationAudioAccessoryConfiguration.js +9 -0
  161. package/dist/configuration/configurationAudioAccessoryConfiguration.js.map +1 -0
  162. package/dist/configuration/configurationCompanionSensor.d.ts +11 -0
  163. package/dist/configuration/configurationCompanionSensor.js +26 -0
  164. package/dist/configuration/configurationCompanionSensor.js.map +1 -0
  165. package/dist/configuration/configurationDuration.d.ts +19 -0
  166. package/dist/configuration/configurationDuration.js +55 -0
  167. package/dist/configuration/configurationDuration.js.map +1 -0
  168. package/dist/configuration/configurationOpenableAccesory.d.ts +9 -0
  169. package/dist/configuration/configurationOpenableAccesory.js +9 -0
  170. package/dist/configuration/configurationOpenableAccesory.js.map +1 -0
  171. package/dist/configuration/configurationPlatform.d.ts +76 -0
  172. package/dist/configuration/configurationPlatform.js +381 -0
  173. package/dist/configuration/configurationPlatform.js.map +1 -0
  174. package/dist/configuration/configurationSchema.d.ts +178 -0
  175. package/dist/configuration/configurationSchema.js +198 -0
  176. package/dist/configuration/configurationSchema.js.map +1 -0
  177. package/dist/configuration/configurationSensor.d.ts +11 -0
  178. package/dist/configuration/configurationSensor.js +30 -0
  179. package/dist/configuration/configurationSensor.js.map +1 -0
  180. package/dist/configuration/configurationSensorServer.d.ts +11 -0
  181. package/dist/configuration/configurationSensorServer.js +26 -0
  182. package/dist/configuration/configurationSensorServer.js.map +1 -0
  183. package/dist/configuration/configurationTimer.d.ts +15 -0
  184. package/dist/configuration/configurationTimer.js +101 -0
  185. package/dist/configuration/configurationTimer.js.map +1 -0
  186. package/dist/configuration/triggers/configurationCronTrigger.d.ts +18 -0
  187. package/dist/configuration/triggers/configurationCronTrigger.js +65 -0
  188. package/dist/configuration/triggers/configurationCronTrigger.js.map +1 -0
  189. package/dist/configuration/triggers/configurationPingTrigger.d.ts +11 -0
  190. package/dist/configuration/triggers/configurationPingTrigger.js +26 -0
  191. package/dist/configuration/triggers/configurationPingTrigger.js.map +1 -0
  192. package/dist/configuration/triggers/configurationSunEventsTrigger.d.ts +18 -0
  193. package/dist/configuration/triggers/configurationSunEventsTrigger.js +52 -0
  194. package/dist/configuration/triggers/configurationSunEventsTrigger.js.map +1 -0
  195. package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.d.ts +9 -0
  196. package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.js +17 -0
  197. package/dist/configuration/triggers/configurationWebhookTriggerConfiguration.js.map +1 -0
  198. package/dist/errors.d.ts +27 -0
  199. package/dist/errors.js +52 -0
  200. package/dist/errors.js.map +1 -0
  201. package/dist/index.d.ts +6 -0
  202. package/dist/index.js +9 -0
  203. package/dist/index.js.map +1 -0
  204. package/dist/platform.d.ts +28 -0
  205. package/dist/platform.js +221 -0
  206. package/dist/platform.js.map +1 -0
  207. package/dist/sensorServer.d.ts +27 -0
  208. package/dist/sensorServer.js +227 -0
  209. package/dist/sensorServer.js.map +1 -0
  210. package/dist/sensors/virtualSensor.d.ts +37 -0
  211. package/dist/sensors/virtualSensor.js +87 -0
  212. package/dist/sensors/virtualSensor.js.map +1 -0
  213. package/dist/sensors/virtualSensorCarbonDioxide.d.ts +20 -0
  214. package/dist/sensors/virtualSensorCarbonDioxide.js +45 -0
  215. package/dist/sensors/virtualSensorCarbonDioxide.js.map +1 -0
  216. package/dist/sensors/virtualSensorCarbonMonoxide.d.ts +20 -0
  217. package/dist/sensors/virtualSensorCarbonMonoxide.js +45 -0
  218. package/dist/sensors/virtualSensorCarbonMonoxide.js.map +1 -0
  219. package/dist/sensors/virtualSensorContact.d.ts +20 -0
  220. package/dist/sensors/virtualSensorContact.js +45 -0
  221. package/dist/sensors/virtualSensorContact.js.map +1 -0
  222. package/dist/sensors/virtualSensorLeak.d.ts +20 -0
  223. package/dist/sensors/virtualSensorLeak.js +45 -0
  224. package/dist/sensors/virtualSensorLeak.js.map +1 -0
  225. package/dist/sensors/virtualSensorMotion.d.ts +20 -0
  226. package/dist/sensors/virtualSensorMotion.js +45 -0
  227. package/dist/sensors/virtualSensorMotion.js.map +1 -0
  228. package/dist/sensors/virtualSensorOccupancy.d.ts +20 -0
  229. package/dist/sensors/virtualSensorOccupancy.js +45 -0
  230. package/dist/sensors/virtualSensorOccupancy.js.map +1 -0
  231. package/dist/sensors/virtualSensorSmoke.d.ts +20 -0
  232. package/dist/sensors/virtualSensorSmoke.js +45 -0
  233. package/dist/sensors/virtualSensorSmoke.js.map +1 -0
  234. package/dist/settings.d.ts +8 -0
  235. package/dist/settings.js +9 -0
  236. package/dist/settings.js.map +1 -0
  237. package/dist/timer.d.ts +58 -0
  238. package/dist/timer.js +110 -0
  239. package/dist/timer.js.map +1 -0
  240. package/dist/triggerableSensor.d.ts +6 -0
  241. package/dist/triggerableSensor.js +2 -0
  242. package/dist/triggerableSensor.js.map +1 -0
  243. package/dist/triggers/trigger.d.ts +13 -0
  244. package/dist/triggers/trigger.js +16 -0
  245. package/dist/triggers/trigger.js.map +1 -0
  246. package/dist/triggers/triggerCron.d.ts +19 -0
  247. package/dist/triggers/triggerCron.js +102 -0
  248. package/dist/triggers/triggerCron.js.map +1 -0
  249. package/dist/triggers/triggerPing.d.ts +19 -0
  250. package/dist/triggers/triggerPing.js +110 -0
  251. package/dist/triggers/triggerPing.js.map +1 -0
  252. package/dist/triggers/triggerSunEvents.d.ts +20 -0
  253. package/dist/triggers/triggerSunEvents.js +200 -0
  254. package/dist/triggers/triggerSunEvents.js.map +1 -0
  255. package/dist/triggers/triggerWebhook.d.ts +10 -0
  256. package/dist/triggers/triggerWebhook.js +26 -0
  257. package/dist/triggers/triggerWebhook.js.map +1 -0
  258. package/dist/updatableObstruction.d.ts +6 -0
  259. package/dist/updatableObstruction.js +2 -0
  260. package/dist/updatableObstruction.js.map +1 -0
  261. package/dist/updatableSensor.d.ts +6 -0
  262. package/dist/updatableSensor.js +2 -0
  263. package/dist/updatableSensor.js.map +1 -0
  264. package/dist/utils.d.ts +28 -0
  265. package/dist/utils.js +120 -0
  266. package/dist/utils.js.map +1 -0
  267. package/dist/virtualLogger.d.ts +15 -0
  268. package/dist/virtualLogger.js +38 -0
  269. package/dist/virtualLogger.js.map +1 -0
  270. package/package.json +120 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualAccessoryGarageDoor.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryGarageDoor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { VirtualAccessoriesPlatform } from '../platform.js';
3
+ import { Accessory } from './virtualAccessory.js';
4
+ import { UpdatableSensor } from '../updatableSensor.js';
5
+ /**
6
+ * HeaterCooler - Accessory implementation
7
+ */
8
+ export declare class HeaterCooler extends Accessory implements UpdatableSensor {
9
+ static readonly ACCESSORY_TYPE_NAME: string;
10
+ static readonly CURRENTLY_INACTIVE: number;
11
+ static readonly CURRENTLY_IDLE: number;
12
+ static readonly CURRENTLY_HEATING: number;
13
+ static readonly CURRENTLY_COOLING: number;
14
+ static readonly AUTO: number;
15
+ static readonly HEAT: number;
16
+ static readonly COOL: number;
17
+ static readonly INACTIVE: number;
18
+ static readonly ACTIVE: number;
19
+ static readonly CELSIUS: number;
20
+ static readonly FAHRENHEIT: number;
21
+ private readonly stateStorageKey;
22
+ private readonly targetStateStorageKey;
23
+ private readonly heatingThresholdStorageKey;
24
+ private readonly coolingThresholdStorageKey;
25
+ private readonly temperatureDisplayUnitsStorageKey;
26
+ private deviceType;
27
+ private states;
28
+ constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
29
+ setActive(value: CharacteristicValue): Promise<void>;
30
+ getActive(): Promise<CharacteristicValue>;
31
+ getCurrentHeaterCoolerState(): Promise<CharacteristicValue>;
32
+ setTargetHeaterCoolerState(value: CharacteristicValue): Promise<void>;
33
+ getTargetHeaterCoolerState(): Promise<CharacteristicValue>;
34
+ getCurrentTemperature(): Promise<CharacteristicValue>;
35
+ setCoolingThresholdTemperature(value: CharacteristicValue): Promise<void>;
36
+ getCoolingThresholdTemperature(): Promise<CharacteristicValue>;
37
+ setHeatingThresholdTemperature(value: CharacteristicValue): Promise<void>;
38
+ getHeatingThresholdTemperature(): Promise<CharacteristicValue>;
39
+ setTemperatureDisplayUnits(value: CharacteristicValue): Promise<void>;
40
+ getTemperatureDisplayUnits(): Promise<CharacteristicValue>;
41
+ protected getJsonState(): string;
42
+ protected getAccessoryTypeName(): string;
43
+ private isHeater;
44
+ private isCooler;
45
+ private heats;
46
+ private cools;
47
+ private setDeviceOperationalCondition;
48
+ static getActiveName(status: number): string;
49
+ static getCurrentStateName(state: number): string;
50
+ static getTargetStateName(state: number): string;
51
+ static getTemperatureDisplayUnitsName(state: number): string;
52
+ /**
53
+ * Ensure all the property values are set, then remove as required
54
+ */
55
+ private setHeaterCoolerServiceProperties;
56
+ private getCurrentStateLabels;
57
+ private getTargetStateLabels;
58
+ private toCelsius;
59
+ private displayTemperature;
60
+ private getDegreeUnits;
61
+ updateSensor(value: number, accessoryId: string): void;
62
+ }
@@ -0,0 +1,441 @@
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
+ * HeaterCooler - Accessory implementation
7
+ */
8
+ export class HeaterCooler extends Accessory {
9
+ static ACCESSORY_TYPE_NAME = 'HeaterCooler';
10
+ static CURRENTLY_INACTIVE = 0; // Characteristic.CurrentHeaterCoolerState.INACTIVE
11
+ static CURRENTLY_IDLE = 1; // Characteristic.CurrentHeaterCoolerState.IDLE
12
+ static CURRENTLY_HEATING = 2; // Characteristic.CurrentHeaterCoolerState.HEATING
13
+ static CURRENTLY_COOLING = 3; // Characteristic.CurrentHeaterCoolerState.COOLING
14
+ static AUTO = 0; // Characteristic.TargetHeaterCoolerState.AUTO
15
+ static HEAT = 1; // Characteristic.TargetHeaterCoolerState.HEAT
16
+ static COOL = 2; // Characteristic.TargetHeaterCoolerState.COOL
17
+ static INACTIVE = 0; // Characteristic.Active.INACTIVE
18
+ static ACTIVE = 1; // Characteristic.Active.ACTIVE
19
+ static CELSIUS = 0; // Characteristic.TemperatureDisplayUnits.CELSIUS
20
+ static FAHRENHEIT = 1; // Characteristic.TemperatureDisplayUnits.FAHRENHEIT
21
+ stateStorageKey = 'HeaterCoolerActive';
22
+ targetStateStorageKey = 'HeaterCoolerTargetState';
23
+ heatingThresholdStorageKey = 'HeatingThreshold';
24
+ coolingThresholdStorageKey = 'CoolingThreshold';
25
+ temperatureDisplayUnitsStorageKey = 'TemperatureDisplayUnits';
26
+ deviceType;
27
+ states = {
28
+ HeaterCoolerActive: HeaterCooler.INACTIVE,
29
+ HeaterCoolerCurrentState: HeaterCooler.CURRENTLY_INACTIVE,
30
+ HeaterCoolerTargetState: HeaterCooler.AUTO,
31
+ // HomeKit units are in celsius
32
+ HeatingThreshold: 18, // 18ºC considered a minimum for health and safety
33
+ CoolingThreshold: 27, // 27ºC
34
+ CurrentTemperature: 22, // This value comes from sensor, set to 22ºC for now - room temperature
35
+ TemperatureDisplayUnits: HeaterCooler.CELSIUS,
36
+ };
37
+ constructor(platform, accessory) {
38
+ super(platform, accessory);
39
+ // First configure the device based on the accessory details
40
+ this.states.HeaterCoolerActive = HeaterCooler.INACTIVE;
41
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_INACTIVE;
42
+ this.states.TemperatureDisplayUnits = this.accessoryConfiguration.heaterCooler.temperatureDisplayUnits === 'celsius' ? HeaterCooler.CELSIUS : HeaterCooler.FAHRENHEIT;
43
+ this.states.HeatingThreshold = this.toCelsius(this.accessoryConfiguration.heaterCooler.getHeatingThreshold());
44
+ this.states.CoolingThreshold = this.toCelsius(this.accessoryConfiguration.heaterCooler.getCoolingThreshold());
45
+ // set to 22ºC or 71ºF
46
+ this.states.CurrentTemperature = (this.states.TemperatureDisplayUnits === HeaterCooler.CELSIUS) ? 22 : this.toCelsius(71);
47
+ this.deviceType = this.accessoryConfiguration.heaterCooler.type;
48
+ this.states.HeaterCoolerTargetState = HeaterCooler.AUTO;
49
+ // If the accessory is stateful retrieve stored state
50
+ if (this.accessoryConfiguration.accessoryIsStateful) {
51
+ const accessoryState = this.loadAccessoryState(this.storagePath);
52
+ const cachedState = accessoryState[this.stateStorageKey];
53
+ const cachedTargetState = accessoryState[this.targetStateStorageKey];
54
+ const cachedTemperatureDisplayUnits = accessoryState[this.temperatureDisplayUnitsStorageKey];
55
+ if (cachedState !== undefined) {
56
+ this.states.HeaterCoolerActive = cachedState;
57
+ }
58
+ if (cachedTargetState !== undefined) {
59
+ this.states.HeaterCoolerTargetState = cachedTargetState;
60
+ }
61
+ if (cachedTemperatureDisplayUnits !== undefined) {
62
+ this.states.TemperatureDisplayUnits = cachedTemperatureDisplayUnits;
63
+ }
64
+ if (this.cools()) {
65
+ const cachedCoolingThreshold = accessoryState[this.coolingThresholdStorageKey];
66
+ if (cachedCoolingThreshold !== undefined) {
67
+ this.states.CoolingThreshold = cachedCoolingThreshold;
68
+ }
69
+ }
70
+ if (this.heats()) {
71
+ const cachedHeatingThreshold = accessoryState[this.heatingThresholdStorageKey];
72
+ if (cachedHeatingThreshold !== undefined) {
73
+ this.states.HeatingThreshold = cachedHeatingThreshold;
74
+ }
75
+ }
76
+ }
77
+ this.setDeviceOperationalCondition();
78
+ // get the HeaterCooler service if it exists, otherwise create a new LightBulb service
79
+ this.service = this.accessory.getService(this.platform.Service.HeaterCooler) || this.accessory.addService(this.platform.Service.HeaterCooler);
80
+ // These characteristics will be added back as needed
81
+ this.service.removeCharacteristic(this.service.getCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature));
82
+ this.service.removeCharacteristic(this.service.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature));
83
+ this.setHeaterCoolerServiceProperties(this.service);
84
+ // set the service name, this is what is displayed as the default name on the Home app
85
+ this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessoryConfiguration.accessoryName);
86
+ // Update the initial state of the accessory
87
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Heater/Cooler Current State: ${HeaterCooler.getCurrentStateName(this.states.HeaterCoolerCurrentState)}`);
88
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState, (this.states.HeaterCoolerCurrentState));
89
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState, (this.states.HeaterCoolerTargetState));
90
+ // register handlers
91
+ this.service.getCharacteristic(this.platform.Characteristic.Active)
92
+ .onSet(this.setActive.bind(this))
93
+ .onGet(this.getActive.bind(this));
94
+ this.service.getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
95
+ .onGet(this.getCurrentHeaterCoolerState.bind(this));
96
+ this.service.getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
97
+ .onSet(this.setTargetHeaterCoolerState.bind(this))
98
+ .onGet(this.getTargetHeaterCoolerState.bind(this));
99
+ this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
100
+ .onGet(this.getCurrentTemperature.bind(this));
101
+ if (this.cools()) {
102
+ // Characteristic was removed when adding the Service
103
+ this.service.addCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature)
104
+ .onSet(this.setCoolingThresholdTemperature.bind(this))
105
+ .onGet(this.getCoolingThresholdTemperature.bind(this));
106
+ }
107
+ if (this.heats()) {
108
+ // Characteristic was removed when adding the Service
109
+ this.service.addCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
110
+ .onSet(this.setHeatingThresholdTemperature.bind(this))
111
+ .onGet(this.getHeatingThresholdTemperature.bind(this));
112
+ }
113
+ this.service.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
114
+ .onSet(this.setTemperatureDisplayUnits.bind(this))
115
+ .onGet(this.getTemperatureDisplayUnits.bind(this));
116
+ const characteristics = this.service.characteristics.map(characteristic => characteristic.displayName);
117
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Characteristics: ${characteristics.join(', ')}`);
118
+ }
119
+ // Handlers
120
+ async setActive(value) {
121
+ this.states.HeaterCoolerActive = value;
122
+ this.setDeviceOperationalCondition();
123
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Active: ${HeaterCooler.getActiveName(this.states.HeaterCoolerActive)}`);
124
+ }
125
+ async getActive() {
126
+ const heaterCoolerActive = this.states.HeaterCoolerActive;
127
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Active: ${HeaterCooler.getActiveName(heaterCoolerActive)}`);
128
+ return heaterCoolerActive;
129
+ }
130
+ async getCurrentHeaterCoolerState() {
131
+ const heaterCoolerCurrentState = this.states.HeaterCoolerCurrentState;
132
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current Heater Cooler State: ${HeaterCooler.getCurrentStateName(heaterCoolerCurrentState)}`);
133
+ return heaterCoolerCurrentState;
134
+ }
135
+ async setTargetHeaterCoolerState(value) {
136
+ this.states.HeaterCoolerTargetState = value;
137
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Target Heater Cooler State: ${HeaterCooler.getTargetStateName(this.states.HeaterCoolerTargetState)}`);
138
+ this.setDeviceOperationalCondition();
139
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Current Heater Cooler State: ${HeaterCooler.getCurrentStateName(this.states.HeaterCoolerCurrentState)}`);
140
+ }
141
+ async getTargetHeaterCoolerState() {
142
+ const heaterCoolerTargetState = this.states.HeaterCoolerTargetState;
143
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Target Heater Cooler State: ${HeaterCooler.getTargetStateName(heaterCoolerTargetState)}`);
144
+ return heaterCoolerTargetState;
145
+ }
146
+ async getCurrentTemperature() {
147
+ const currentTemperature = this.states.CurrentTemperature;
148
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Current Temperature: ${this.displayTemperature(currentTemperature)}${this.getDegreeUnits()}`);
149
+ return currentTemperature;
150
+ }
151
+ async setCoolingThresholdTemperature(value) {
152
+ this.states.CoolingThreshold = value;
153
+ this.setDeviceOperationalCondition();
154
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Cooling Threshold Temperature: ${this.displayTemperature(this.states.CoolingThreshold)}${this.getDegreeUnits()}`);
155
+ }
156
+ async getCoolingThresholdTemperature() {
157
+ const coolingThreshold = this.states.CoolingThreshold;
158
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Cooling Threshold Temperature: ${this.displayTemperature(coolingThreshold)}${this.getDegreeUnits()}`);
159
+ return coolingThreshold;
160
+ }
161
+ async setHeatingThresholdTemperature(value) {
162
+ this.states.HeatingThreshold = value;
163
+ this.setDeviceOperationalCondition();
164
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Heating Threshold Temperature: ${this.displayTemperature(this.states.HeatingThreshold)}${this.getDegreeUnits()}`);
165
+ }
166
+ async getHeatingThresholdTemperature() {
167
+ const heatingThreshold = this.states.HeatingThreshold;
168
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Heating Threshold Temperature: ${this.displayTemperature(heatingThreshold)}${this.getDegreeUnits()}`);
169
+ return heatingThreshold;
170
+ }
171
+ async setTemperatureDisplayUnits(value) {
172
+ this.states.TemperatureDisplayUnits = value;
173
+ this.storeState();
174
+ this.log.info(`[${this.accessoryConfiguration.accessoryName}] Setting Temperature Display Units: ${HeaterCooler.getTemperatureDisplayUnitsName(this.states.TemperatureDisplayUnits)}`);
175
+ }
176
+ async getTemperatureDisplayUnits() {
177
+ const temperatureDisplayUnits = this.states.TemperatureDisplayUnits;
178
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Getting Temperature Display Units: ${HeaterCooler.getTemperatureDisplayUnitsName(temperatureDisplayUnits)}`);
179
+ return temperatureDisplayUnits;
180
+ }
181
+ getJsonState() {
182
+ const json = JSON.stringify({
183
+ [this.stateStorageKey]: this.states.HeaterCoolerActive,
184
+ [this.targetStateStorageKey]: this.states.HeaterCoolerTargetState,
185
+ [this.coolingThresholdStorageKey]: this.states.CoolingThreshold,
186
+ [this.heatingThresholdStorageKey]: this.states.HeatingThreshold,
187
+ [this.temperatureDisplayUnitsStorageKey]: this.states.TemperatureDisplayUnits,
188
+ });
189
+ return json;
190
+ }
191
+ getAccessoryTypeName() {
192
+ return HeaterCooler.ACCESSORY_TYPE_NAME;
193
+ }
194
+ isHeater() {
195
+ return ['heater'].includes(this.deviceType);
196
+ }
197
+ isCooler() {
198
+ return ['cooler'].includes(this.deviceType);
199
+ }
200
+ heats() {
201
+ return ['auto', 'heater'].includes(this.deviceType);
202
+ }
203
+ cools() {
204
+ return ['auto', 'cooler'].includes(this.deviceType);
205
+ }
206
+ setDeviceOperationalCondition() {
207
+ if (this.states.HeaterCoolerActive === HeaterCooler.INACTIVE) {
208
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_INACTIVE;
209
+ }
210
+ else { // (this.states.HeaterCoolerActive === HeaterCooler.ACTIVE)
211
+ if (this.states.HeaterCoolerTargetState === HeaterCooler.HEAT) {
212
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_HEATING;
213
+ }
214
+ else if (this.states.HeaterCoolerTargetState === HeaterCooler.COOL) {
215
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_COOLING;
216
+ }
217
+ else { // (this.states.HeaterCoolerTargetState === HeaterCooler.AUTO)
218
+ if (this.states.CurrentTemperature < this.states.HeatingThreshold) {
219
+ if (this.heats()) {
220
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_HEATING;
221
+ }
222
+ }
223
+ else if (this.states.CurrentTemperature > this.states.CoolingThreshold) {
224
+ if (this.cools()) {
225
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_COOLING;
226
+ }
227
+ }
228
+ else {
229
+ this.states.HeaterCoolerCurrentState = HeaterCooler.CURRENTLY_IDLE;
230
+ }
231
+ }
232
+ }
233
+ this.service?.setCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState, (this.states.HeaterCoolerCurrentState));
234
+ this.storeState();
235
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Heater/Cooler current state: ${HeaterCooler.getCurrentStateName(this.states.HeaterCoolerCurrentState)}`);
236
+ }
237
+ static getActiveName(status) {
238
+ let activeName;
239
+ switch (status) {
240
+ case undefined: {
241
+ activeName = 'undefined';
242
+ break;
243
+ }
244
+ case HeaterCooler.INACTIVE: {
245
+ activeName = 'INACTIVE';
246
+ break;
247
+ }
248
+ case HeaterCooler.ACTIVE: {
249
+ activeName = 'ACTIVE';
250
+ break;
251
+ }
252
+ default: {
253
+ activeName = status.toString();
254
+ }
255
+ }
256
+ return activeName;
257
+ }
258
+ static getCurrentStateName(state) {
259
+ let stateName;
260
+ switch (state) {
261
+ case undefined: {
262
+ stateName = 'undefined';
263
+ break;
264
+ }
265
+ case HeaterCooler.CURRENTLY_INACTIVE: {
266
+ stateName = 'INACTIVE';
267
+ break;
268
+ }
269
+ case HeaterCooler.CURRENTLY_IDLE: {
270
+ stateName = 'IDLE';
271
+ break;
272
+ }
273
+ case HeaterCooler.CURRENTLY_HEATING: {
274
+ stateName = 'HEATING';
275
+ break;
276
+ }
277
+ case HeaterCooler.CURRENTLY_COOLING: {
278
+ stateName = 'COOLING';
279
+ break;
280
+ }
281
+ default: {
282
+ stateName = state.toString();
283
+ }
284
+ }
285
+ return stateName;
286
+ }
287
+ static getTargetStateName(state) {
288
+ let stateName;
289
+ switch (state) {
290
+ case undefined: {
291
+ stateName = 'undefined';
292
+ break;
293
+ }
294
+ case HeaterCooler.AUTO: {
295
+ stateName = 'AUTO';
296
+ break;
297
+ }
298
+ case HeaterCooler.HEAT: {
299
+ stateName = 'HEAT';
300
+ break;
301
+ }
302
+ case HeaterCooler.COOL: {
303
+ stateName = 'COOL';
304
+ break;
305
+ }
306
+ default: {
307
+ stateName = state.toString();
308
+ }
309
+ }
310
+ return stateName;
311
+ }
312
+ static getTemperatureDisplayUnitsName(state) {
313
+ let unitsName;
314
+ switch (state) {
315
+ case undefined: {
316
+ unitsName = 'undefined';
317
+ break;
318
+ }
319
+ case HeaterCooler.CELSIUS: {
320
+ unitsName = 'CELSIUS';
321
+ break;
322
+ }
323
+ case HeaterCooler.FAHRENHEIT: {
324
+ unitsName = 'FAHRENHEIT';
325
+ break;
326
+ }
327
+ default: {
328
+ unitsName = state.toString();
329
+ }
330
+ }
331
+ return unitsName;
332
+ }
333
+ /**
334
+ * Ensure all the property values are set, then remove as required
335
+ */
336
+ setHeaterCoolerServiceProperties(service) {
337
+ const CurrentHeaterCoolerState = this.platform.Characteristic.CurrentHeaterCoolerState;
338
+ const TargetHeaterCoolerState = this.platform.Characteristic.TargetHeaterCoolerState;
339
+ const currentStateValues = new Set([
340
+ CurrentHeaterCoolerState.INACTIVE,
341
+ CurrentHeaterCoolerState.IDLE,
342
+ CurrentHeaterCoolerState.CurrentHeaterCoolerState.HEATING,
343
+ CurrentHeaterCoolerState.CurrentHeaterCoolerState.COOLING,
344
+ ]);
345
+ const targetStateValues = new Set([
346
+ TargetHeaterCoolerState.AUTO,
347
+ TargetHeaterCoolerState.HEAT,
348
+ TargetHeaterCoolerState.COOL,
349
+ ]);
350
+ if (this.isHeater()) {
351
+ currentStateValues.delete(CurrentHeaterCoolerState.COOLING);
352
+ targetStateValues.delete(TargetHeaterCoolerState.COOL);
353
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Heater`);
354
+ }
355
+ else if (this.isCooler()) {
356
+ currentStateValues.delete(CurrentHeaterCoolerState.HEATING);
357
+ targetStateValues.delete(TargetHeaterCoolerState.HEAT);
358
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Cooler`);
359
+ }
360
+ else {
361
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Is a Heater/Cooler`);
362
+ }
363
+ if (currentStateValues.size > 0) {
364
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Current State values: ${this.getCurrentStateLabels(currentStateValues)}`);
365
+ service.getCharacteristic(CurrentHeaterCoolerState)
366
+ .setProps({
367
+ validValues: Array.from(currentStateValues),
368
+ });
369
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Current State Props: ${JSON.stringify(service.getCharacteristic(CurrentHeaterCoolerState).props)}`);
370
+ }
371
+ if (targetStateValues.size > 0) {
372
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Setting Target State values: ${this.getTargetStateLabels(targetStateValues)}`);
373
+ service.getCharacteristic(TargetHeaterCoolerState)
374
+ .setProps({
375
+ validValues: Array.from(targetStateValues),
376
+ });
377
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Target State Props: ${JSON.stringify(service.getCharacteristic(TargetHeaterCoolerState).props)}`);
378
+ }
379
+ }
380
+ getCurrentStateLabels(values) {
381
+ const labels = [];
382
+ values.forEach(value => {
383
+ labels.push(HeaterCooler.getCurrentStateName(value));
384
+ });
385
+ return labels;
386
+ }
387
+ getTargetStateLabels(values) {
388
+ const labels = [];
389
+ values.forEach(value => {
390
+ labels.push(HeaterCooler.getTargetStateName(value));
391
+ });
392
+ return labels;
393
+ }
394
+ toCelsius(temperature) {
395
+ const temperatureCelsius = (this.states.TemperatureDisplayUnits === HeaterCooler.CELSIUS) ? temperature : (temperature - 32) * 5 / 9;
396
+ return Math.round(temperatureCelsius * 10) / 10;
397
+ }
398
+ displayTemperature(temperature) {
399
+ const displayTemperature = (this.states.TemperatureDisplayUnits === HeaterCooler.CELSIUS) ? temperature : (temperature * 9 / 5) + 32;
400
+ return Math.round(displayTemperature * 10) / 10;
401
+ }
402
+ getDegreeUnits() {
403
+ let units;
404
+ switch (this.states.TemperatureDisplayUnits) {
405
+ case undefined: {
406
+ units = 'º';
407
+ break;
408
+ }
409
+ case HeaterCooler.CELSIUS: {
410
+ units = 'ºC';
411
+ break;
412
+ }
413
+ case HeaterCooler.FAHRENHEIT: {
414
+ units = 'ºF';
415
+ break;
416
+ }
417
+ default: {
418
+ units = 'º';
419
+ }
420
+ }
421
+ return units;
422
+ }
423
+ // Updatable Sensor interface
424
+ updateSensor(value, accessoryId) {
425
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Request update temperature sensor to ${value}${this.getDegreeUnits()}`);
426
+ if (accessoryId !== this.accessoryConfiguration.accessoryID) {
427
+ this.log.error(`[${this.accessoryConfiguration.accessoryName}] Accessory Id ${accessoryId} is not valid for this accessory`);
428
+ throw new SensorValueUpdateNotAllowed(`Invalid accessory id: ${accessoryId}`);
429
+ }
430
+ else if (typeof value !== 'number') {
431
+ this.log.error(`[${this.accessoryConfiguration.accessoryName}] Value ${value} is not valid for a Heater/Cooler sensor`);
432
+ throw new InvalidSensorValueType(`Invalid sensor value: ${value}`);
433
+ }
434
+ else {
435
+ this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Updating temperature sensor to ${value}${this.getDegreeUnits()}`);
436
+ this.states.CurrentTemperature = this.toCelsius(value);
437
+ this.setDeviceOperationalCondition();
438
+ }
439
+ }
440
+ }
441
+ //# sourceMappingURL=virtualAccessoryHeaterCooler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualAccessoryHeaterCooler.js","sourceRoot":"","sources":["../../src/accessories/virtualAccessoryHeaterCooler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { VirtualAccessoriesPlatform } from '../platform.js';
3
+ import { Accessory } from './virtualAccessory.js';
4
+ import { UpdatableSensor } from '../updatableSensor.js';
5
+ /**
6
+ * HumidifierDehumidifier - Accessory implementation
7
+ */
8
+ export declare class HumidifierDehumidifier extends Accessory implements UpdatableSensor {
9
+ static readonly ACCESSORY_TYPE_NAME: string;
10
+ static readonly CURRENTLY_INACTIVE: number;
11
+ static readonly CURRENTLY_IDLE: number;
12
+ static readonly CURRENTLY_HUMIDIFYING: number;
13
+ static readonly CURRENTLY_DEHUMIDIFYING: number;
14
+ static readonly AUTOMATIC: number;
15
+ static readonly HUMIDIFY: number;
16
+ static readonly DEHUMIDIFY: number;
17
+ static readonly INACTIVE: number;
18
+ static readonly ACTIVE: number;
19
+ private readonly stateStorageKey;
20
+ private readonly targetStateStorageKey;
21
+ private readonly humidifierThresholdStorageKey;
22
+ private readonly dehumidifierThresholdStorageKey;
23
+ private deviceType;
24
+ private states;
25
+ constructor(platform: VirtualAccessoriesPlatform, accessory: PlatformAccessory);
26
+ setActive(value: CharacteristicValue): Promise<void>;
27
+ getActive(): Promise<CharacteristicValue>;
28
+ getCurrentHumidifierDehumidifierState(): Promise<CharacteristicValue>;
29
+ setTargetHumidifierDehumidifierState(value: CharacteristicValue): Promise<void>;
30
+ getTargetHumidifierDehumidifierState(): Promise<CharacteristicValue>;
31
+ getCurrentRelativeHumidity(): Promise<CharacteristicValue>;
32
+ setRelativeHumidityDehumidifierThreshold(value: CharacteristicValue): Promise<void>;
33
+ getRelativeHumidityDehumidifierThreshold(): Promise<CharacteristicValue>;
34
+ setRelativeHumidityHumidifierThreshold(value: CharacteristicValue): Promise<void>;
35
+ getRelativeHumidityHumidifierThreshold(): Promise<CharacteristicValue>;
36
+ protected getJsonState(): string;
37
+ protected getAccessoryTypeName(): string;
38
+ private isHumidifier;
39
+ private isDehumidifier;
40
+ private humidifies;
41
+ private dehumidifies;
42
+ private setDeviceOperationalCondition;
43
+ static getActiveName(status: number): string;
44
+ static getCurrentStateName(state: number): string;
45
+ static getTargetStateName(state: number): string;
46
+ /**
47
+ * Ensure all the property values are set, then remove as required
48
+ */
49
+ private setHumidifierDehumidifierServiceProperties;
50
+ private getCurrentStateLabels;
51
+ private getTargetStateLabels;
52
+ updateSensor(value: number, accessoryId: string): void;
53
+ }