@homebridge-plugins/homebridge-tuya 2.0.2-beta.3

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 (191) hide show
  1. package/.idea/copilot.data.migration.agent.xml +6 -0
  2. package/.idea/copilot.data.migration.ask.xml +6 -0
  3. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  4. package/.idea/copilot.data.migration.edit.xml +6 -0
  5. package/.idea/dictionaries/benpotter.xml +3 -0
  6. package/.idea/homebridge-tuya.iml +8 -0
  7. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  8. package/.idea/modules.xml +8 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.idea/workspace.xml +64 -0
  11. package/ADVANCED_OPTIONS.md +267 -0
  12. package/CHANGELOG.md +127 -0
  13. package/LICENSE +20 -0
  14. package/README.md +206 -0
  15. package/SUPPORTED_DEVICES.md +206 -0
  16. package/config.schema.json +550 -0
  17. package/dist/accessory/AccessoryFactory.js +274 -0
  18. package/dist/accessory/AccessoryFactory.js.map +1 -0
  19. package/dist/accessory/AirConditionerAccessory.js +307 -0
  20. package/dist/accessory/AirConditionerAccessory.js.map +1 -0
  21. package/dist/accessory/AirPurifierAccessory.js +90 -0
  22. package/dist/accessory/AirPurifierAccessory.js.map +1 -0
  23. package/dist/accessory/AirQualitySensorAccessory.js +30 -0
  24. package/dist/accessory/AirQualitySensorAccessory.js.map +1 -0
  25. package/dist/accessory/BaseAccessory.js +295 -0
  26. package/dist/accessory/BaseAccessory.js.map +1 -0
  27. package/dist/accessory/CameraAccessory.js +117 -0
  28. package/dist/accessory/CameraAccessory.js.map +1 -0
  29. package/dist/accessory/CarbonDioxideSensorAccessory.js +52 -0
  30. package/dist/accessory/CarbonDioxideSensorAccessory.js.map +1 -0
  31. package/dist/accessory/CarbonMonoxideSensorAccessory.js +52 -0
  32. package/dist/accessory/CarbonMonoxideSensorAccessory.js.map +1 -0
  33. package/dist/accessory/ContactSensorAccessory.js +30 -0
  34. package/dist/accessory/ContactSensorAccessory.js.map +1 -0
  35. package/dist/accessory/DehumidifierAccessory.js +68 -0
  36. package/dist/accessory/DehumidifierAccessory.js.map +1 -0
  37. package/dist/accessory/DiffuserAccessory.js +55 -0
  38. package/dist/accessory/DiffuserAccessory.js.map +1 -0
  39. package/dist/accessory/DimmerAccessory.js +94 -0
  40. package/dist/accessory/DimmerAccessory.js.map +1 -0
  41. package/dist/accessory/DoorbellAccessory.js +89 -0
  42. package/dist/accessory/DoorbellAccessory.js.map +1 -0
  43. package/dist/accessory/ExtractionHoodAccessory.js +118 -0
  44. package/dist/accessory/ExtractionHoodAccessory.js.map +1 -0
  45. package/dist/accessory/FanAccessory.js +123 -0
  46. package/dist/accessory/FanAccessory.js.map +1 -0
  47. package/dist/accessory/GarageDoorAccessory.js +69 -0
  48. package/dist/accessory/GarageDoorAccessory.js.map +1 -0
  49. package/dist/accessory/HeaterAccessory.js +96 -0
  50. package/dist/accessory/HeaterAccessory.js.map +1 -0
  51. package/dist/accessory/HumanPresenceSensorAccessory.js +20 -0
  52. package/dist/accessory/HumanPresenceSensorAccessory.js.map +1 -0
  53. package/dist/accessory/HumidifierAccessory.js +135 -0
  54. package/dist/accessory/HumidifierAccessory.js.map +1 -0
  55. package/dist/accessory/IRAirConditionerAccessory.js +285 -0
  56. package/dist/accessory/IRAirConditionerAccessory.js.map +1 -0
  57. package/dist/accessory/IRControlHubAccessory.js +49 -0
  58. package/dist/accessory/IRControlHubAccessory.js.map +1 -0
  59. package/dist/accessory/IRControlHubSubAccessory.js +53 -0
  60. package/dist/accessory/IRControlHubSubAccessory.js.map +1 -0
  61. package/dist/accessory/IRGenericAccessory.js +50 -0
  62. package/dist/accessory/IRGenericAccessory.js.map +1 -0
  63. package/dist/accessory/LeakSensorAccessory.js +36 -0
  64. package/dist/accessory/LeakSensorAccessory.js.map +1 -0
  65. package/dist/accessory/LightAccessory.js +36 -0
  66. package/dist/accessory/LightAccessory.js.map +1 -0
  67. package/dist/accessory/LightSensorAccessory.js +32 -0
  68. package/dist/accessory/LightSensorAccessory.js.map +1 -0
  69. package/dist/accessory/LocationWeatherAccessory.js +72 -0
  70. package/dist/accessory/LocationWeatherAccessory.js.map +1 -0
  71. package/dist/accessory/LockAccessory.js +56 -0
  72. package/dist/accessory/LockAccessory.js.map +1 -0
  73. package/dist/accessory/MotionSensorAccessory.js +20 -0
  74. package/dist/accessory/MotionSensorAccessory.js.map +1 -0
  75. package/dist/accessory/OutletAccessory.js +23 -0
  76. package/dist/accessory/OutletAccessory.js.map +1 -0
  77. package/dist/accessory/PetFeederAccessory.js +139 -0
  78. package/dist/accessory/PetFeederAccessory.js.map +1 -0
  79. package/dist/accessory/SceneAccessory.js +32 -0
  80. package/dist/accessory/SceneAccessory.js.map +1 -0
  81. package/dist/accessory/SceneSwitchAccessory.js +44 -0
  82. package/dist/accessory/SceneSwitchAccessory.js.map +1 -0
  83. package/dist/accessory/SecuritySystemAccessory.js +30 -0
  84. package/dist/accessory/SecuritySystemAccessory.js.map +1 -0
  85. package/dist/accessory/SmokeSensorAccessory.js +35 -0
  86. package/dist/accessory/SmokeSensorAccessory.js.map +1 -0
  87. package/dist/accessory/SwitchAccessory.js +86 -0
  88. package/dist/accessory/SwitchAccessory.js.map +1 -0
  89. package/dist/accessory/TemperatureHumiditySensorAccessory.js +24 -0
  90. package/dist/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
  91. package/dist/accessory/ThermostatAccessory.js +190 -0
  92. package/dist/accessory/ThermostatAccessory.js.map +1 -0
  93. package/dist/accessory/ValveAccessory.js +45 -0
  94. package/dist/accessory/ValveAccessory.js.map +1 -0
  95. package/dist/accessory/VibrationSensorAccessory.js +42 -0
  96. package/dist/accessory/VibrationSensorAccessory.js.map +1 -0
  97. package/dist/accessory/WeatherStationAccessory.js +59 -0
  98. package/dist/accessory/WeatherStationAccessory.js.map +1 -0
  99. package/dist/accessory/WetBulbGlobeTemperatureAccessory.js +23 -0
  100. package/dist/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
  101. package/dist/accessory/WhiteNoiseLightAccessory.js +59 -0
  102. package/dist/accessory/WhiteNoiseLightAccessory.js.map +1 -0
  103. package/dist/accessory/WindowAccessory.js +14 -0
  104. package/dist/accessory/WindowAccessory.js.map +1 -0
  105. package/dist/accessory/WindowCoveringAccessory.js +156 -0
  106. package/dist/accessory/WindowCoveringAccessory.js.map +1 -0
  107. package/dist/accessory/WirelessSwitchAccessory.js +42 -0
  108. package/dist/accessory/WirelessSwitchAccessory.js.map +1 -0
  109. package/dist/accessory/characteristic/Active.js +23 -0
  110. package/dist/accessory/characteristic/Active.js.map +1 -0
  111. package/dist/accessory/characteristic/AirQuality.js +75 -0
  112. package/dist/accessory/characteristic/AirQuality.js.map +1 -0
  113. package/dist/accessory/characteristic/CurrentRelativeHumidity.js +24 -0
  114. package/dist/accessory/characteristic/CurrentRelativeHumidity.js.map +1 -0
  115. package/dist/accessory/characteristic/CurrentTemperature.js +24 -0
  116. package/dist/accessory/characteristic/CurrentTemperature.js.map +1 -0
  117. package/dist/accessory/characteristic/CurrentWeather.js +51 -0
  118. package/dist/accessory/characteristic/CurrentWeather.js.map +1 -0
  119. package/dist/accessory/characteristic/CurrentWeatherByOpenMeteo.js +81 -0
  120. package/dist/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
  121. package/dist/accessory/characteristic/CurrentWetBulbGlobeTemperature.js +50 -0
  122. package/dist/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
  123. package/dist/accessory/characteristic/EnergyUsage.js +103 -0
  124. package/dist/accessory/characteristic/EnergyUsage.js.map +1 -0
  125. package/dist/accessory/characteristic/Light.js +269 -0
  126. package/dist/accessory/characteristic/Light.js.map +1 -0
  127. package/dist/accessory/characteristic/LightSensor.js +24 -0
  128. package/dist/accessory/characteristic/LightSensor.js.map +1 -0
  129. package/dist/accessory/characteristic/LockPhysicalControls.js +22 -0
  130. package/dist/accessory/characteristic/LockPhysicalControls.js.map +1 -0
  131. package/dist/accessory/characteristic/MotionDetected.js +23 -0
  132. package/dist/accessory/characteristic/MotionDetected.js.map +1 -0
  133. package/dist/accessory/characteristic/Name.js +12 -0
  134. package/dist/accessory/characteristic/Name.js.map +1 -0
  135. package/dist/accessory/characteristic/OccupancyDetected.js +20 -0
  136. package/dist/accessory/characteristic/OccupancyDetected.js.map +1 -0
  137. package/dist/accessory/characteristic/On.js +26 -0
  138. package/dist/accessory/characteristic/On.js.map +1 -0
  139. package/dist/accessory/characteristic/OutletInUse.js +15 -0
  140. package/dist/accessory/characteristic/OutletInUse.js.map +1 -0
  141. package/dist/accessory/characteristic/ProgrammableSwitchEvent.js +90 -0
  142. package/dist/accessory/characteristic/ProgrammableSwitchEvent.js.map +1 -0
  143. package/dist/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js +29 -0
  144. package/dist/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
  145. package/dist/accessory/characteristic/RotationSpeed.js +79 -0
  146. package/dist/accessory/characteristic/RotationSpeed.js.map +1 -0
  147. package/dist/accessory/characteristic/SecuritySystemState.js +76 -0
  148. package/dist/accessory/characteristic/SecuritySystemState.js.map +1 -0
  149. package/dist/accessory/characteristic/SwingMode.js +22 -0
  150. package/dist/accessory/characteristic/SwingMode.js.map +1 -0
  151. package/dist/accessory/characteristic/TemperatureDisplayUnits.js +26 -0
  152. package/dist/accessory/characteristic/TemperatureDisplayUnits.js.map +1 -0
  153. package/dist/config.js +29 -0
  154. package/dist/config.js.map +1 -0
  155. package/dist/core/TuyaOpenAPI.js +314 -0
  156. package/dist/core/TuyaOpenAPI.js.map +1 -0
  157. package/dist/core/TuyaOpenMQ.js +182 -0
  158. package/dist/core/TuyaOpenMQ.js.map +1 -0
  159. package/dist/device/TuyaCustomDeviceManager.js +65 -0
  160. package/dist/device/TuyaCustomDeviceManager.js.map +1 -0
  161. package/dist/device/TuyaDevice.js +37 -0
  162. package/dist/device/TuyaDevice.js.map +1 -0
  163. package/dist/device/TuyaDeviceManager.js +447 -0
  164. package/dist/device/TuyaDeviceManager.js.map +1 -0
  165. package/dist/device/TuyaHomeDeviceManager.js +64 -0
  166. package/dist/device/TuyaHomeDeviceManager.js.map +1 -0
  167. package/dist/index.js +7 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/platform.js +466 -0
  170. package/dist/platform.js.map +1 -0
  171. package/dist/settings.js +18 -0
  172. package/dist/settings.js.map +1 -0
  173. package/dist/util/FfmpegStreamingProcess.js +126 -0
  174. package/dist/util/FfmpegStreamingProcess.js.map +1 -0
  175. package/dist/util/InfraredTool.js +396 -0
  176. package/dist/util/InfraredTool.js.map +1 -0
  177. package/dist/util/Logger.js +42 -0
  178. package/dist/util/Logger.js.map +1 -0
  179. package/dist/util/TuyaRecordingDelegate.js +22 -0
  180. package/dist/util/TuyaRecordingDelegate.js.map +1 -0
  181. package/dist/util/TuyaStreamDelegate.js +330 -0
  182. package/dist/util/TuyaStreamDelegate.js.map +1 -0
  183. package/dist/util/color.js +24 -0
  184. package/dist/util/color.js.map +1 -0
  185. package/dist/util/util.js +48 -0
  186. package/dist/util/util.js.map +1 -0
  187. package/jest.config.js +5 -0
  188. package/package.json +74 -0
  189. package/test/custom.test.ts +101 -0
  190. package/test/home.test.ts +81 -0
  191. package/test/util.ts +39 -0
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
7
+ const LightAccessory_1 = __importDefault(require("./LightAccessory"));
8
+ const DimmerAccessory_1 = __importDefault(require("./DimmerAccessory"));
9
+ const OutletAccessory_1 = __importDefault(require("./OutletAccessory"));
10
+ const SwitchAccessory_1 = __importDefault(require("./SwitchAccessory"));
11
+ const WirelessSwitchAccessory_1 = __importDefault(require("./WirelessSwitchAccessory"));
12
+ const SceneSwitchAccessory_1 = __importDefault(require("./SceneSwitchAccessory"));
13
+ const FanAccessory_1 = __importDefault(require("./FanAccessory"));
14
+ const GarageDoorAccessory_1 = __importDefault(require("./GarageDoorAccessory"));
15
+ const WindowAccessory_1 = __importDefault(require("./WindowAccessory"));
16
+ const WindowCoveringAccessory_1 = __importDefault(require("./WindowCoveringAccessory"));
17
+ const LockAccessory_1 = __importDefault(require("./LockAccessory"));
18
+ const ThermostatAccessory_1 = __importDefault(require("./ThermostatAccessory"));
19
+ const HeaterAccessory_1 = __importDefault(require("./HeaterAccessory"));
20
+ const ValveAccessory_1 = __importDefault(require("./ValveAccessory"));
21
+ const ContactSensorAccessory_1 = __importDefault(require("./ContactSensorAccessory"));
22
+ const LeakSensorAccessory_1 = __importDefault(require("./LeakSensorAccessory"));
23
+ const CarbonMonoxideSensorAccessory_1 = __importDefault(require("./CarbonMonoxideSensorAccessory"));
24
+ const CarbonDioxideSensorAccessory_1 = __importDefault(require("./CarbonDioxideSensorAccessory"));
25
+ const SmokeSensorAccessory_1 = __importDefault(require("./SmokeSensorAccessory"));
26
+ const TemperatureHumiditySensorAccessory_1 = __importDefault(require("./TemperatureHumiditySensorAccessory"));
27
+ const LightSensorAccessory_1 = __importDefault(require("./LightSensorAccessory"));
28
+ const MotionSensorAccessory_1 = __importDefault(require("./MotionSensorAccessory"));
29
+ const AirQualitySensorAccessory_1 = __importDefault(require("./AirQualitySensorAccessory"));
30
+ const HumanPresenceSensorAccessory_1 = __importDefault(require("./HumanPresenceSensorAccessory"));
31
+ const HumidifierAccessory_1 = __importDefault(require("./HumidifierAccessory"));
32
+ const DehumidifierAccessory_1 = __importDefault(require("./DehumidifierAccessory"));
33
+ const DiffuserAccessory_1 = __importDefault(require("./DiffuserAccessory"));
34
+ const AirPurifierAccessory_1 = __importDefault(require("./AirPurifierAccessory"));
35
+ const ExtractionHoodAccessory_1 = __importDefault(require("./ExtractionHoodAccessory"));
36
+ const CameraAccessory_1 = __importDefault(require("./CameraAccessory"));
37
+ const SceneAccessory_1 = __importDefault(require("./SceneAccessory"));
38
+ const AirConditionerAccessory_1 = __importDefault(require("./AirConditionerAccessory"));
39
+ const IRControlHubAccessory_1 = __importDefault(require("./IRControlHubAccessory"));
40
+ const IRGenericAccessory_1 = __importDefault(require("./IRGenericAccessory"));
41
+ const IRAirConditionerAccessory_1 = __importDefault(require("./IRAirConditionerAccessory"));
42
+ const SecuritySystemAccessory_1 = __importDefault(require("./SecuritySystemAccessory"));
43
+ const VibrationSensorAccessory_1 = __importDefault(require("./VibrationSensorAccessory"));
44
+ const WeatherStationAccessory_1 = __importDefault(require("./WeatherStationAccessory"));
45
+ const DoorbellAccessory_1 = __importDefault(require("./DoorbellAccessory"));
46
+ const PetFeederAccessory_1 = __importDefault(require("./PetFeederAccessory"));
47
+ const WhiteNoiseLightAccessory_1 = __importDefault(require("./WhiteNoiseLightAccessory"));
48
+ const WetBulbGlobeTemperatureAccessory_1 = __importDefault(require("./WetBulbGlobeTemperatureAccessory"));
49
+ const IRControlHubSubAccessory_1 = __importDefault(require("./IRControlHubSubAccessory"));
50
+ const LocationWeatherAccessory_1 = __importDefault(require("./LocationWeatherAccessory"));
51
+ class AccessoryFactory {
52
+ static createAccessory(platform, accessory, device) {
53
+ var _a;
54
+ let handler;
55
+ handler = resolveAccessoryByProductID(platform, accessory, device.product_id)
56
+ || resolveAccessoryByCategory(platform, accessory, device.category);
57
+ // basically use should set the handler at the switch-case
58
+ if (!handler) {
59
+ // IR Remote Control
60
+ if (device.isIRRemoteControl()) {
61
+ switch ((_a = device.remote_keys) === null || _a === void 0 ? void 0 : _a.category_id) {
62
+ case 5: // AC
63
+ platform.log.warn('case IRAirConditionerAccessory');
64
+ handler = new IRAirConditionerAccessory_1.default(platform, accessory);
65
+ break;
66
+ default:
67
+ platform.log.warn('case IRGenericAccessory');
68
+ handler = new IRGenericAccessory_1.default(platform, accessory);
69
+ break;
70
+ }
71
+ }
72
+ }
73
+ if (handler && !handler.checkRequirements()) {
74
+ handler = undefined;
75
+ }
76
+ if (!handler) {
77
+ platform.log.warn(`Unsupported device: ${device.name}.`);
78
+ handler = new BaseAccessory_1.default(platform, accessory);
79
+ }
80
+ handler.configureServices();
81
+ handler.configureStatusActive();
82
+ handler.updateAllValues();
83
+ handler.intialized = true;
84
+ return handler;
85
+ }
86
+ static configAccessory(platform, accessory) {
87
+ var _a;
88
+ const configs = platform.options.serviceInformationOverrides;
89
+ if (!configs) {
90
+ return;
91
+ }
92
+ const sn = (_a = accessory.getService(platform.Service.AccessoryInformation)) === null || _a === void 0 ? void 0 : _a.getCharacteristic(platform.Characteristic.SerialNumber).value;
93
+ configs.filter(config => config.device_id === sn).forEach(config => {
94
+ try {
95
+ const service = accessory.services[config.index];
96
+ if (config.manifacturer) {
97
+ const before = service.getCharacteristic(platform.Characteristic.Manufacturer).value;
98
+ service.getCharacteristic(platform.Characteristic.Manufacturer).updateValue(config.manifacturer);
99
+ platform.log.info(`manifacturer updated. ${before} -> ${config.manifacturer}`);
100
+ }
101
+ if (config.model) {
102
+ const before = service.getCharacteristic(platform.Characteristic.Model).value;
103
+ service.getCharacteristic(platform.Characteristic.Model).updateValue(config.model);
104
+ platform.log.info(`model updated. ${before} -> ${config.model}`);
105
+ }
106
+ if (config.firmwareRevision) {
107
+ const before = service.getCharacteristic(platform.Characteristic.FirmwareRevision).value;
108
+ service.getCharacteristic(platform.Characteristic.FirmwareRevision).updateValue(config.firmwareRevision);
109
+ platform.log.info(`firmwareRevision updated. ${before} -> ${config.firmwareRevision}`);
110
+ }
111
+ if (config.configuredName) {
112
+ const before = service.getCharacteristic(platform.Characteristic.ConfiguredName).value;
113
+ service.getCharacteristic(platform.Characteristic.Name).updateValue(config.configuredName);
114
+ service.getCharacteristic(platform.Characteristic.ConfiguredName).updateValue(config.configuredName);
115
+ platform.log.info(`configuredName updated. ${before} -> ${config.configuredName}`);
116
+ }
117
+ }
118
+ catch (e) {
119
+ platform.log.error(`index out of bound.:${config.index}`);
120
+ }
121
+ });
122
+ }
123
+ }
124
+ exports.default = AccessoryFactory;
125
+ function resolveAccessoryByProductID(platform, accessory, product_id) {
126
+ switch (product_id) {
127
+ case 'scene': // see TuyaHomeDeviceManager#getSceneList
128
+ return new SceneAccessory_1.default(platform, accessory);
129
+ case 'virtual-product-id-wbgt':
130
+ return new WetBulbGlobeTemperatureAccessory_1.default(platform, accessory);
131
+ case 'virtual-product-id-weather':
132
+ return new LocationWeatherAccessory_1.default(platform, accessory);
133
+ default:
134
+ return undefined;
135
+ }
136
+ }
137
+ function resolveAccessoryByCategory(platform, accessory, category) {
138
+ switch (category) {
139
+ // Lighting
140
+ case 'dj':
141
+ case 'dsd':
142
+ case 'xdd':
143
+ case 'fwd':
144
+ case 'dc':
145
+ case 'dd':
146
+ case 'gyd':
147
+ case 'tyndj':
148
+ case 'sxd':
149
+ return new LightAccessory_1.default(platform, accessory);
150
+ case 'tgq':
151
+ case 'tgkg':
152
+ return new DimmerAccessory_1.default(platform, accessory);
153
+ // Electrical Products
154
+ case 'dlq':
155
+ case 'kg':
156
+ case 'tdq':
157
+ case 'qjdcz':
158
+ case 'szjqr':
159
+ return new SwitchAccessory_1.default(platform, accessory);
160
+ case 'cz':
161
+ case 'pc':
162
+ case 'wkcz':
163
+ return new OutletAccessory_1.default(platform, accessory);
164
+ case 'wxkg':
165
+ return new WirelessSwitchAccessory_1.default(platform, accessory);
166
+ case 'cjkg':
167
+ return new SceneSwitchAccessory_1.default(platform, accessory);
168
+ case 'bzyd':
169
+ return new WhiteNoiseLightAccessory_1.default(platform, accessory);
170
+ // Large Home Appliances
171
+ case 'kt':
172
+ case 'ktkzq':
173
+ return new AirConditionerAccessory_1.default(platform, accessory);
174
+ // Small Home Appliances
175
+ case 'qn':
176
+ return new HeaterAccessory_1.default(platform, accessory);
177
+ case 'kj':
178
+ return new AirPurifierAccessory_1.default(platform, accessory);
179
+ case 'xxj':
180
+ return new DiffuserAccessory_1.default(platform, accessory);
181
+ case 'ckmkzq':
182
+ return new GarageDoorAccessory_1.default(platform, accessory);
183
+ case 'cl':
184
+ case 'clkg':
185
+ return new WindowCoveringAccessory_1.default(platform, accessory);
186
+ case 'cwwsq':
187
+ return new PetFeederAccessory_1.default(platform, accessory);
188
+ case 'mc':
189
+ return new WindowAccessory_1.default(platform, accessory);
190
+ case 'wk':
191
+ case 'wkf':
192
+ return new ThermostatAccessory_1.default(platform, accessory);
193
+ case 'ggq':
194
+ case 'sfkzq':
195
+ return new ValveAccessory_1.default(platform, accessory);
196
+ case 'jsq':
197
+ return new HumidifierAccessory_1.default(platform, accessory);
198
+ case 'cs':
199
+ return new DehumidifierAccessory_1.default(platform, accessory);
200
+ case 'fs':
201
+ case 'fsd':
202
+ case 'fskg':
203
+ return new FanAccessory_1.default(platform, accessory);
204
+ case 'yyj':
205
+ return new ExtractionHoodAccessory_1.default(platform, accessory);
206
+ // Security & Video Surveillance
207
+ case 'sp':
208
+ return new CameraAccessory_1.default(platform, accessory);
209
+ case 'ywbj':
210
+ return new SmokeSensorAccessory_1.default(platform, accessory);
211
+ case 'mcs':
212
+ return new ContactSensorAccessory_1.default(platform, accessory);
213
+ case 'zd':
214
+ return new VibrationSensorAccessory_1.default(platform, accessory);
215
+ case 'rqbj':
216
+ case 'jwbj':
217
+ case 'sj':
218
+ return new LeakSensorAccessory_1.default(platform, accessory);
219
+ case 'cobj':
220
+ case 'cocgq':
221
+ return new CarbonMonoxideSensorAccessory_1.default(platform, accessory);
222
+ case 'co2bj':
223
+ case 'co2cgq':
224
+ return new CarbonDioxideSensorAccessory_1.default(platform, accessory);
225
+ case 'wsdcg':
226
+ return new TemperatureHumiditySensorAccessory_1.default(platform, accessory);
227
+ case 'ldcg':
228
+ return new LightSensorAccessory_1.default(platform, accessory);
229
+ case 'pir':
230
+ return new MotionSensorAccessory_1.default(platform, accessory);
231
+ case 'pm25':
232
+ case 'pm2.5':
233
+ case 'pm25cgq':
234
+ case 'hjjcy':
235
+ return new AirQualitySensorAccessory_1.default(platform, accessory);
236
+ case 'hps':
237
+ return new HumanPresenceSensorAccessory_1.default(platform, accessory);
238
+ case 'ms':
239
+ case 'jtmspro':
240
+ return new LockAccessory_1.default(platform, accessory);
241
+ case 'mal':
242
+ return new SecuritySystemAccessory_1.default(platform, accessory);
243
+ case 'wxml':
244
+ return new DoorbellAccessory_1.default(platform, accessory);
245
+ case 'qxj':
246
+ return new WeatherStationAccessory_1.default(platform, accessory);
247
+ // IR Control
248
+ case 'wnykq':
249
+ case 'hwktwkq':
250
+ case 'wsdykq':
251
+ return new IRControlHubAccessory_1.default(platform, accessory);
252
+ case 'qt':
253
+ platform.log.debug('early product. add switch-case at function resolveAccessoryByProductID()');
254
+ // eslint-disable-next-line max-len
255
+ platform.log.warn('use plugin options and config category to another. https://github.com/homebridge-plugins/homebridge-tuya/blob/develop_1.7.0/ADVANCED_OPTIONS.md https://github.com/homebridge-plugins/homebridge-tuya/blob/develop_1.7.0/SUPPORTED_DEVICES.md');
256
+ return undefined;
257
+ case 'infrared_tv':
258
+ case 'infrared_stb':
259
+ case 'infrared_box':
260
+ case 'infrared_ac':
261
+ case 'infrared_fan':
262
+ case 'infrared_light':
263
+ case 'infrared_amplifier':
264
+ case 'infrared_projector':
265
+ case 'infrared_waterheater':
266
+ case 'infrared_airpurifier':
267
+ case 'infrared_humidifier':
268
+ // Since it's a DIY, it might be better to handle it with resolveAccessoryByProductID.
269
+ return new IRControlHubSubAccessory_1.default(platform, accessory);
270
+ default:
271
+ return undefined;
272
+ }
273
+ }
274
+ //# sourceMappingURL=AccessoryFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessoryFactory.js","sourceRoot":"","sources":["../../src/accessory/AccessoryFactory.ts"],"names":[],"mappings":";;;;;AAIA,oEAA4C;AAC5C,sEAA8C;AAC9C,wEAAgD;AAChD,wEAAgD;AAChD,wEAAgD;AAChD,wFAAgE;AAChE,kFAA0D;AAC1D,kEAA0C;AAC1C,gFAAwD;AACxD,wEAAgD;AAChD,wFAAgE;AAChE,oEAA4C;AAC5C,gFAAwD;AACxD,wEAAgD;AAChD,sEAA8C;AAC9C,sFAA8D;AAC9D,gFAAwD;AACxD,oGAA4E;AAC5E,kGAA0E;AAC1E,kFAA0D;AAC1D,8GAAsF;AACtF,kFAA0D;AAC1D,oFAA4D;AAC5D,4FAAoE;AACpE,kGAA0E;AAC1E,gFAAwD;AACxD,oFAA4D;AAC5D,4EAAoD;AACpD,kFAA0D;AAC1D,wFAAgE;AAChE,wEAAgD;AAChD,sEAA8C;AAC9C,wFAAgE;AAChE,oFAA4D;AAC5D,8EAAsD;AACtD,4FAAoE;AACpE,wFAAgE;AAChE,0FAAkE;AAClE,wFAAgE;AAChE,4EAAoD;AACpD,8EAAsD;AACtD,0FAAkE;AAClE,0GAAkF;AAClF,0FAAkE;AAClE,0FAAkE;AAGlE,MAAqB,gBAAgB;IACnC,MAAM,CAAC,eAAe,CACpB,QAAsB,EACtB,SAA4B,EAC5B,MAAkB;;QAGlB,IAAI,OAAkC,CAAC;QAEvC,OAAO,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;eACxE,0BAA0B,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtE,0DAA0D;QAC1D,IAAI,CAAC,OAAO,EAAE;YACZ,oBAAoB;YACpB,IAAI,MAAM,CAAC,iBAAiB,EAAE,EAAE;gBAC9B,QAAQ,MAAA,MAAM,CAAC,WAAW,0CAAE,WAAW,EAAE;oBACvC,KAAK,CAAC,EAAE,KAAK;wBACX,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;wBACpD,OAAO,GAAG,IAAI,mCAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBAC7D,MAAM;oBACR;wBACE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAC7C,OAAO,GAAG,IAAI,4BAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBACtD,MAAM;iBACT;aACF;SACF;QAED,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE;YAC3C,OAAO,GAAG,SAAS,CAAC;SACrB;QAED,IAAI,CAAC,OAAO,EAAE;YACZ,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;YACzD,OAAO,GAAG,IAAI,uBAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAClD;QAED,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAAsB,EAAE,SAA4B;;QACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,2BAA2B,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,MAAM,EAAE,GAAG,MAAA,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,0CAAE,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC;QAEtI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjE,IAAI;gBACF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;oBACrF,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBACjG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,MAAM,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;iBAChF;gBACD,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;oBAC9E,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,MAAM,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;iBAClE;gBACD,IAAI,MAAM,CAAC,gBAAgB,EAAE;oBAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;oBACzF,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBACzG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,MAAM,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBACxF;gBACD,IAAI,MAAM,CAAC,cAAc,EAAE;oBACzB,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;oBACvF,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC3F,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACrG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,MAAM,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;iBACpF;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aAC3D;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAnFD,mCAmFC;AAED,SAAS,2BAA2B,CAAC,QAAsB,EAAE,SAA4B,EAAE,UAAkB;IAC3G,QAAQ,UAAU,EAAE;QAClB,KAAK,OAAO,EAAE,yCAAyC;YACrD,OAAO,IAAI,wBAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,KAAK,yBAAyB;YAC5B,OAAO,IAAI,0CAAgC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnE,KAAK,4BAA4B;YAC/B,OAAO,IAAI,kCAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAsB,EAAE,SAA4B,EAAE,QAAgB;IACxG,QAAQ,QAAQ,EAAE;QAChB,WAAW;QACX,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,OAAO,IAAI,wBAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAElD,sBAAsB;QACtB,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,MAAM;YACT,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,IAAI,8BAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,KAAK,MAAM;YACT,OAAO,IAAI,kCAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3D,wBAAwB;QACxB,KAAK,IAAI,CAAC;QACV,KAAK,OAAO;YACV,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1D,wBAAwB;QACxB,KAAK,IAAI;YACP,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,IAAI;YACP,OAAO,IAAI,8BAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,KAAK,KAAK;YACR,OAAO,IAAI,2BAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD,KAAK,QAAQ;YACX,OAAO,IAAI,6BAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1D,KAAK,OAAO;YACV,OAAO,IAAI,4BAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrD,KAAK,IAAI;YACP,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,OAAO,IAAI,6BAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,KAAK,CAAC;QACX,KAAK,OAAO;YACV,OAAO,IAAI,wBAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,KAAK,KAAK;YACR,OAAO,IAAI,6BAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,IAAI;YACP,OAAO,IAAI,+BAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,IAAI,sBAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/C,KAAK,KAAK;YACR,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1D,gCAAgC;QAChC,KAAK,IAAI;YACP,OAAO,IAAI,yBAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,MAAM;YACT,OAAO,IAAI,8BAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,KAAK,KAAK;YACR,OAAO,IAAI,gCAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,KAAK,IAAI;YACP,OAAO,IAAI,kCAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,IAAI,6BAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,IAAI,uCAA6B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChE,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,sCAA4B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/D,KAAK,OAAO;YACV,OAAO,IAAI,4CAAkC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,KAAK,MAAM;YACT,OAAO,IAAI,8BAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,KAAK,KAAK;YACR,OAAO,IAAI,+BAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,OAAO;YACV,OAAO,IAAI,mCAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5D,KAAK,KAAK;YACR,OAAO,IAAI,sCAA4B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/D,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,OAAO,IAAI,uBAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChD,KAAK,KAAK;YACR,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,IAAI,2BAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD,KAAK,KAAK;YACR,OAAO,IAAI,iCAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1D,aAAa;QACb,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,IAAI,+BAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAExD,KAAK,IAAI;YACP,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC/F,mCAAmC;YACnC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,+OAA+O,CAAC,CAAC;YACnQ,OAAO,SAAS,CAAC;QAEnB,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC;QACtB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB;YACxB,sFAAsF;YACtF,OAAO,IAAI,kCAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3D;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const util_1 = require("../util/util");
7
+ const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
8
+ const CurrentRelativeHumidity_1 = require("./characteristic/CurrentRelativeHumidity");
9
+ const CurrentTemperature_1 = require("./characteristic/CurrentTemperature");
10
+ const LockPhysicalControls_1 = require("./characteristic/LockPhysicalControls");
11
+ const RelativeHumidityDehumidifierThreshold_1 = require("./characteristic/RelativeHumidityDehumidifierThreshold");
12
+ const RotationSpeed_1 = require("./characteristic/RotationSpeed");
13
+ // import { configureSwingMode } from './characteristic/SwingMode';
14
+ const TemperatureDisplayUnits_1 = require("./characteristic/TemperatureDisplayUnits");
15
+ const SCHEMA_CODE = {
16
+ // AirConditioner
17
+ ACTIVE: ['switch'],
18
+ MODE: ['mode'],
19
+ WORK_STATE: ['work_status', 'mode'],
20
+ CURRENT_TEMP: ['temp_current'],
21
+ TARGET_TEMP: ['temp_set'],
22
+ SPEED_LEVEL: ['fan_speed_enum', 'windspeed'],
23
+ LOCK: ['lock', 'child_lock'],
24
+ TEMP_UNIT_CONVERT: ['temp_unit_convert', 'c_f'],
25
+ SWING: ['switch_horizontal', 'switch_vertical'],
26
+ // Dehumidifier
27
+ CURRENT_HUMIDITY: ['humidity_current'],
28
+ TARGET_HUMIDITY: ['humidity_set'],
29
+ };
30
+ const AC_MODES = ['auto', 'cold', 'hot'];
31
+ const DEHUMIDIFIER_MODE = 'wet';
32
+ const FAN_MODE = 'wind';
33
+ class AirConditionerAccessory extends BaseAccessory_1.default {
34
+ requiredSchema() {
35
+ return [SCHEMA_CODE.ACTIVE, SCHEMA_CODE.MODE, SCHEMA_CODE.WORK_STATE, SCHEMA_CODE.CURRENT_TEMP];
36
+ }
37
+ configureServices() {
38
+ this.configureAirConditioner();
39
+ this.configureDehumidifier();
40
+ this.configureFan();
41
+ // Add extra sensors for home automation use.
42
+ (0, CurrentTemperature_1.configureCurrentTemperature)(this, undefined, this.getSchema(...SCHEMA_CODE.CURRENT_TEMP));
43
+ (0, CurrentRelativeHumidity_1.configureCurrentRelativeHumidity)(this, undefined, this.getSchema(...SCHEMA_CODE.CURRENT_HUMIDITY));
44
+ }
45
+ configureAirConditioner() {
46
+ const activeSchema = this.getSchema(...SCHEMA_CODE.ACTIVE);
47
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
48
+ const modeProperty = modeSchema.property;
49
+ const service = this.mainService();
50
+ // Required Characteristics
51
+ const { INACTIVE, ACTIVE } = this.Characteristic.Active;
52
+ service.getCharacteristic(this.Characteristic.Active)
53
+ .onGet(() => {
54
+ const activeStatus = this.getStatus(activeSchema.code);
55
+ const modeStatus = this.getStatus(modeSchema.code);
56
+ return (activeStatus.value === true && AC_MODES.includes(modeStatus.value)) ? ACTIVE : INACTIVE;
57
+ })
58
+ .onSet(async (value) => {
59
+ const commands = [{
60
+ code: activeSchema.code,
61
+ value: (value === ACTIVE) ? true : false,
62
+ }];
63
+ const modeStatus = this.getStatus(modeSchema.code);
64
+ if (!AC_MODES.includes(modeStatus.value)) {
65
+ for (const mode of AC_MODES) {
66
+ if (modeProperty.range.includes(mode)) {
67
+ commands.push({ code: modeStatus.code, value: mode });
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ await this.sendCommands(commands, true);
73
+ });
74
+ this.configureCurrentState();
75
+ this.configureTargetState();
76
+ (0, CurrentTemperature_1.configureCurrentTemperature)(this, service, this.getSchema(...SCHEMA_CODE.CURRENT_TEMP));
77
+ // Optional Characteristics
78
+ (0, LockPhysicalControls_1.configureLockPhysicalControls)(this, service, this.getSchema(...SCHEMA_CODE.LOCK));
79
+ (0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, this.getSchema(...SCHEMA_CODE.SPEED_LEVEL), ['auto']);
80
+ // configureSwingMode(this, service, this.getSchema(...SCHEMA_CODE.SWING));
81
+ this.configureCoolingThreshouldTemp();
82
+ this.configureHeatingThreshouldTemp();
83
+ (0, TemperatureDisplayUnits_1.configureTempDisplayUnits)(this, service, this.getSchema(...SCHEMA_CODE.TEMP_UNIT_CONVERT));
84
+ }
85
+ configureDehumidifier() {
86
+ const activeSchema = this.getSchema(...SCHEMA_CODE.ACTIVE);
87
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
88
+ const property = modeSchema.property;
89
+ if (!property.range.includes(DEHUMIDIFIER_MODE)) {
90
+ return;
91
+ }
92
+ const service = this.dehumidifierService();
93
+ // Required Characteristics
94
+ const { INACTIVE, ACTIVE } = this.Characteristic.Active;
95
+ service.getCharacteristic(this.Characteristic.Active)
96
+ .onGet(() => {
97
+ const activeStatus = this.getStatus(activeSchema.code);
98
+ const modeStatus = this.getStatus(modeSchema.code);
99
+ return (activeStatus.value === true && modeStatus.value === DEHUMIDIFIER_MODE) ? ACTIVE : INACTIVE;
100
+ })
101
+ .onSet(async (value) => {
102
+ await this.sendCommands([{
103
+ code: activeSchema.code,
104
+ value: (value === ACTIVE) ? true : false,
105
+ }, {
106
+ code: modeSchema.code,
107
+ value: DEHUMIDIFIER_MODE,
108
+ }], true);
109
+ });
110
+ const { DEHUMIDIFYING } = this.Characteristic.CurrentHumidifierDehumidifierState;
111
+ service.setCharacteristic(this.Characteristic.CurrentHumidifierDehumidifierState, DEHUMIDIFYING);
112
+ const { DEHUMIDIFIER } = this.Characteristic.TargetHumidifierDehumidifierState;
113
+ service.getCharacteristic(this.Characteristic.TargetHumidifierDehumidifierState)
114
+ .updateValue(DEHUMIDIFIER)
115
+ .setProps({ validValues: [DEHUMIDIFIER] });
116
+ if (this.getSchema(...SCHEMA_CODE.CURRENT_HUMIDITY)) {
117
+ (0, CurrentRelativeHumidity_1.configureCurrentRelativeHumidity)(this, service, this.getSchema(...SCHEMA_CODE.CURRENT_HUMIDITY));
118
+ }
119
+ else {
120
+ service.setCharacteristic(this.Characteristic.CurrentRelativeHumidity, 0);
121
+ }
122
+ // Optional Characteristics
123
+ (0, LockPhysicalControls_1.configureLockPhysicalControls)(this, service, this.getSchema(...SCHEMA_CODE.LOCK));
124
+ (0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, this.getSchema(...SCHEMA_CODE.SPEED_LEVEL), ['auto']);
125
+ (0, RelativeHumidityDehumidifierThreshold_1.configureRelativeHumidityDehumidifierThreshold)(this, service, this.getSchema(...SCHEMA_CODE.TARGET_HUMIDITY));
126
+ // configureSwingMode(this, service, this.getSchema(...SCHEMA_CODE.SWING));
127
+ }
128
+ configureFan() {
129
+ const activeSchema = this.getSchema(...SCHEMA_CODE.ACTIVE);
130
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
131
+ const property = modeSchema.property;
132
+ if (!property.range.includes(FAN_MODE)) {
133
+ return;
134
+ }
135
+ const service = this.fanService();
136
+ // Required Characteristics
137
+ const { INACTIVE, ACTIVE } = this.Characteristic.Active;
138
+ service.getCharacteristic(this.Characteristic.Active)
139
+ .onGet(() => {
140
+ const activeStatus = this.getStatus(activeSchema.code);
141
+ const modeStatus = this.getStatus(modeSchema.code);
142
+ return (activeStatus.value === true && modeStatus.value === FAN_MODE) ? ACTIVE : INACTIVE;
143
+ })
144
+ .onSet(async (value) => {
145
+ await this.sendCommands([{
146
+ code: activeSchema.code,
147
+ value: (value === ACTIVE) ? true : false,
148
+ }, {
149
+ code: modeSchema.code,
150
+ value: FAN_MODE,
151
+ }], true);
152
+ });
153
+ // Optional Characteristics
154
+ (0, LockPhysicalControls_1.configureLockPhysicalControls)(this, service, this.getSchema(...SCHEMA_CODE.LOCK));
155
+ (0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, this.getSchema(...SCHEMA_CODE.SPEED_LEVEL), ['auto']);
156
+ // configureSwingMode(this, service, this.getSchema(...SCHEMA_CODE.SWING));
157
+ }
158
+ mainService() {
159
+ return this.accessory.getService(this.Service.HeaterCooler)
160
+ || this.accessory.addService(this.Service.HeaterCooler);
161
+ }
162
+ dehumidifierService() {
163
+ return this.accessory.getService(this.Service.HumidifierDehumidifier)
164
+ || this.accessory.addService(this.Service.HumidifierDehumidifier, this.accessory.displayName + ' Dehumidifier');
165
+ }
166
+ fanService() {
167
+ return this.accessory.getService(this.Service.Fanv2)
168
+ || this.accessory.addService(this.Service.Fanv2, this.accessory.displayName + ' Fan');
169
+ }
170
+ configureCurrentState() {
171
+ const schema = this.getSchema(...SCHEMA_CODE.WORK_STATE);
172
+ if (!schema) {
173
+ return;
174
+ }
175
+ const { INACTIVE, HEATING, COOLING } = this.Characteristic.CurrentHeaterCoolerState;
176
+ this.mainService().getCharacteristic(this.Characteristic.CurrentHeaterCoolerState)
177
+ .onGet(() => {
178
+ const status = this.getStatus(schema.code);
179
+ if (status.value === 'heating' || status.value === 'hot') {
180
+ return HEATING;
181
+ }
182
+ else if (status.value === 'cooling' || status.value === 'cold') {
183
+ return COOLING;
184
+ }
185
+ else {
186
+ return INACTIVE;
187
+ }
188
+ });
189
+ }
190
+ configureTargetState() {
191
+ const schema = this.getSchema(...SCHEMA_CODE.MODE);
192
+ if (!schema) {
193
+ return;
194
+ }
195
+ const { AUTO, HEAT, COOL } = this.Characteristic.TargetHeaterCoolerState;
196
+ const validValues = [];
197
+ const property = schema.property;
198
+ if (property.range.includes('auto')) {
199
+ validValues.push(AUTO);
200
+ }
201
+ if (property.range.includes('hot')) {
202
+ validValues.push(HEAT);
203
+ }
204
+ if (property.range.includes('cold')) {
205
+ validValues.push(COOL);
206
+ }
207
+ if (validValues.length === 0) {
208
+ this.log.warn('Invalid mode range for TargetHeaterCoolerState:', property.range);
209
+ return;
210
+ }
211
+ this.mainService().getCharacteristic(this.Characteristic.TargetHeaterCoolerState)
212
+ .onGet(() => {
213
+ const status = this.getStatus(schema.code);
214
+ if (status.value === 'hot') {
215
+ return HEAT;
216
+ }
217
+ else if (status.value === 'cold') {
218
+ return COOL;
219
+ }
220
+ return validValues.includes(AUTO) ? AUTO : validValues[0];
221
+ })
222
+ .onSet(async (value) => {
223
+ let mode;
224
+ if (value === HEAT) {
225
+ mode = 'hot';
226
+ }
227
+ else if (value === COOL) {
228
+ mode = 'cold';
229
+ }
230
+ else {
231
+ mode = 'auto';
232
+ }
233
+ await this.sendCommands([{ code: schema.code, value: mode }], true);
234
+ })
235
+ .setProps({ validValues });
236
+ }
237
+ configureCoolingThreshouldTemp() {
238
+ const schema = this.getSchema(...SCHEMA_CODE.TARGET_TEMP);
239
+ if (!schema) {
240
+ return;
241
+ }
242
+ const property = schema.property;
243
+ const multiple = Math.pow(10, property.scale);
244
+ const props = {
245
+ minValue: property.min / multiple,
246
+ maxValue: property.max / multiple,
247
+ minStep: Math.max(0.1, property.step / multiple),
248
+ };
249
+ this.log.debug('Set props for CoolingThresholdTemperature:', props);
250
+ this.mainService().getCharacteristic(this.Characteristic.CoolingThresholdTemperature)
251
+ .onGet(() => {
252
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
253
+ if (modeSchema && this.getStatus(modeSchema.code).value === 'auto') {
254
+ return props.minValue;
255
+ }
256
+ const status = this.getStatus(schema.code);
257
+ const temp = status.value / multiple;
258
+ return (0, util_1.limit)(temp, props.minValue, props.maxValue);
259
+ })
260
+ .onSet(async (value) => {
261
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
262
+ if (modeSchema && this.getStatus(modeSchema.code).value === 'auto') {
263
+ this.mainService().getCharacteristic(this.Characteristic.CoolingThresholdTemperature)
264
+ .updateValue(props.minValue);
265
+ return;
266
+ }
267
+ await this.sendCommands([{ code: schema.code, value: value * multiple }], true);
268
+ })
269
+ .setProps(props);
270
+ }
271
+ configureHeatingThreshouldTemp() {
272
+ const schema = this.getSchema(...SCHEMA_CODE.TARGET_TEMP);
273
+ if (!schema) {
274
+ return;
275
+ }
276
+ const property = schema.property;
277
+ const multiple = Math.pow(10, property.scale);
278
+ const props = {
279
+ minValue: property.min / multiple,
280
+ maxValue: property.max / multiple,
281
+ minStep: Math.max(0.1, property.step / multiple),
282
+ };
283
+ this.log.debug('Set props for HeatingThresholdTemperature:', props);
284
+ this.mainService().getCharacteristic(this.Characteristic.HeatingThresholdTemperature)
285
+ .onGet(() => {
286
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
287
+ if (modeSchema && this.getStatus(modeSchema.code).value === 'auto') {
288
+ return props.maxValue;
289
+ }
290
+ const status = this.getStatus(schema.code);
291
+ const temp = status.value / multiple;
292
+ return (0, util_1.limit)(temp, props.minValue, props.maxValue);
293
+ })
294
+ .onSet(async (value) => {
295
+ const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
296
+ if (modeSchema && this.getStatus(modeSchema.code).value === 'auto') {
297
+ this.mainService().getCharacteristic(this.Characteristic.HeatingThresholdTemperature)
298
+ .updateValue(props.maxValue);
299
+ return;
300
+ }
301
+ await this.sendCommands([{ code: schema.code, value: value * multiple }], true);
302
+ })
303
+ .setProps(props);
304
+ }
305
+ }
306
+ exports.default = AirConditionerAccessory;
307
+ //# sourceMappingURL=AirConditionerAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AirConditionerAccessory.js","sourceRoot":"","sources":["../../src/accessory/AirConditionerAccessory.ts"],"names":[],"mappings":"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"}