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,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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"}