@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,447 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const events_1 = __importDefault(require("events"));
30
+ const TuyaOpenMQ_1 = __importDefault(require("../core/TuyaOpenMQ"));
31
+ const Logger_1 = require("../util/Logger");
32
+ const TuyaDevice_1 = __importStar(require("./TuyaDevice"));
33
+ var Events;
34
+ (function (Events) {
35
+ Events["DEVICE_ADD"] = "DEVICE_ADD";
36
+ Events["DEVICE_INFO_UPDATE"] = "DEVICE_INFO_UPDATE";
37
+ Events["DEVICE_STATUS_UPDATE"] = "DEVICE_STATUS_UPDATE";
38
+ Events["DEVICE_DELETE"] = "DEVICE_DELETE";
39
+ })(Events || (Events = {}));
40
+ var TuyaMQTTProtocol;
41
+ (function (TuyaMQTTProtocol) {
42
+ TuyaMQTTProtocol[TuyaMQTTProtocol["DEVICE_STATUS_UPDATE"] = 4] = "DEVICE_STATUS_UPDATE";
43
+ TuyaMQTTProtocol[TuyaMQTTProtocol["DEVICE_INFO_UPDATE"] = 20] = "DEVICE_INFO_UPDATE";
44
+ })(TuyaMQTTProtocol || (TuyaMQTTProtocol = {}));
45
+ class TuyaDeviceManager extends events_1.default {
46
+ constructor(api, debug = false) {
47
+ super();
48
+ this.api = api;
49
+ this.debug = debug;
50
+ this.ownerIDs = [];
51
+ this.devices = [];
52
+ const log = this.api.log.log;
53
+ this.log = new Logger_1.PrefixLogger(log, TuyaDeviceManager.name, debug);
54
+ this.mq = new TuyaOpenMQ_1.default(api, log);
55
+ this.mq.addMessageListener(this.onMQTTMessage.bind(this));
56
+ }
57
+ createVirtualDevice(baseDevice, uuid) {
58
+ const cloneDevice = new TuyaDevice_1.default(baseDevice);
59
+ const uniqueId = uuid || Date.now().toString(36) + Math.random().toString(36).substring(2);
60
+ cloneDevice.id = `${uniqueId}`;
61
+ cloneDevice.uuid = `${uniqueId}`;
62
+ cloneDevice.name = 'Virtual Device';
63
+ cloneDevice.product_id = `${uniqueId}`;
64
+ cloneDevice.product_name = 'virtual product';
65
+ cloneDevice.sub = true;
66
+ cloneDevice.ip = '';
67
+ cloneDevice.parent_id = baseDevice.id;
68
+ cloneDevice.remote_keys = undefined;
69
+ return cloneDevice;
70
+ }
71
+ getDevice(deviceID) {
72
+ return Array.from(this.devices).find(device => device.id === deviceID);
73
+ }
74
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
75
+ async updateDevices(ownerIDs) {
76
+ return [];
77
+ }
78
+ async updateDevice(deviceID) {
79
+ const res = await this.getDeviceInfo(deviceID);
80
+ if (!res.success) {
81
+ return null;
82
+ }
83
+ const device = new TuyaDevice_1.default(res.result);
84
+ device.schema = await this.getDeviceSchema(deviceID);
85
+ const oldDevice = this.getDevice(deviceID);
86
+ if (oldDevice) {
87
+ this.devices.splice(this.devices.indexOf(oldDevice), 1);
88
+ }
89
+ this.devices.push(device);
90
+ return device;
91
+ }
92
+ async getDeviceInfo(deviceID) {
93
+ const res = await this.api.get(`/v1.0/devices/${deviceID}`);
94
+ return res;
95
+ }
96
+ async getDeviceListInfo(deviceIDs = []) {
97
+ const res = await this.api.get('/v1.0/devices', { 'device_ids': deviceIDs.join(',') });
98
+ return res;
99
+ }
100
+ async getDeviceSchema(deviceID) {
101
+ // const res = await this.api.get(`/v1.2/iot-03/devices/${deviceID}/specification`);
102
+ const res = await this.api.get(`/v1.0/devices/${deviceID}/specifications`);
103
+ if (res.success === false) {
104
+ this.log.warn('Get device specification failed. devId = %s, code = %s, msg = %s', deviceID, res.code, res.msg);
105
+ return [];
106
+ }
107
+ // Combine functions and status together, as it used to be.
108
+ const schemas = new Map();
109
+ for (const { code, type, values } of [...res.result.status, ...res.result.functions]) {
110
+ if (schemas[code]) {
111
+ continue;
112
+ }
113
+ const read = (res.result.status).find(schema => schema.code === code) !== undefined;
114
+ const write = (res.result.functions).find(schema => schema.code === code) !== undefined;
115
+ let mode = TuyaDevice_1.TuyaDeviceSchemaMode.UNKNOWN;
116
+ if (read && write) {
117
+ mode = TuyaDevice_1.TuyaDeviceSchemaMode.READ_WRITE;
118
+ }
119
+ else if (read && !write) {
120
+ mode = TuyaDevice_1.TuyaDeviceSchemaMode.READ_ONLY;
121
+ }
122
+ else if (!read && write) {
123
+ mode = TuyaDevice_1.TuyaDeviceSchemaMode.WRITE_ONLY;
124
+ }
125
+ let property;
126
+ try {
127
+ property = JSON.parse(values);
128
+ schemas[code] = { code, mode, type, property };
129
+ }
130
+ catch (error) {
131
+ // ignore infrared remote's invalid schema because it's not used.
132
+ }
133
+ }
134
+ return Object.values(schemas).sort((a, b) => a.code > b.code ? 1 : -1);
135
+ }
136
+ async getInfraredRemotes(infraredID) {
137
+ const res = await this.api.get(`/v2.0/infrareds/${infraredID}/remotes`);
138
+ return res;
139
+ }
140
+ async getInfraredKeys(infraredID, remoteID) {
141
+ const res = await this.api.get(`/v2.0/infrareds/${infraredID}/remotes/${remoteID}/keys`);
142
+ return res;
143
+ }
144
+ async getInfraredACStatus(infraredID, remoteID) {
145
+ const res = await this.api.get(`/v2.0/infrareds/${infraredID}/remotes/${remoteID}/ac/status`);
146
+ return res;
147
+ }
148
+ async getInfraredDIYKeys(infraredID, remoteID) {
149
+ const res = await this.api.get(`/v2.0/infrareds/${infraredID}/remotes/${remoteID}/learning-codes`);
150
+ return res;
151
+ }
152
+ resolveInfraredRemotes(parentDevice, allDevices) {
153
+ const isInfraredRemoteDevice = (parent, target) => {
154
+ if (!target.sub || !target.category.startsWith('infrared_')) {
155
+ return false;
156
+ }
157
+ if (parent.lat === target.lat && parent.lon === target.lon) {
158
+ return true;
159
+ }
160
+ if (parent.update_time === target.update_time) {
161
+ return true;
162
+ }
163
+ return false;
164
+ };
165
+ const infraredRemotes = allDevices.filter(device => {
166
+ return isInfraredRemoteDevice(parentDevice, device);
167
+ }).map(device => {
168
+ return {
169
+ 'category_id': 999,
170
+ 'remote_id': device.id,
171
+ 'resolved': true,
172
+ };
173
+ });
174
+ return infraredRemotes;
175
+ }
176
+ fixInfraredDevice(subDevice) {
177
+ subDevice.remote_keys.org_category_id = subDevice.remote_keys.category_id;
178
+ subDevice.remote_keys.category_id = this.resolveHAPCategoryID(subDevice);
179
+ }
180
+ resolveHAPCategoryID(subDevice) {
181
+ var _a, _b;
182
+ this.log.debug(`resolve HAP category ID. subDevice category:${subDevice.category}, categoryID:${(_a = subDevice.remote_keys) === null || _a === void 0 ? void 0 : _a.category_id}`);
183
+ let category_id;
184
+ switch (subDevice.product_id) {
185
+ case 'prsgoryjfdtb42r4':
186
+ category_id = 8; // Fan
187
+ break;
188
+ case 'k6ozylayfgnskuq6':
189
+ category_id = 999; // DIY
190
+ break;
191
+ default:
192
+ category_id = ((_b = subDevice.remote_keys) === null || _b === void 0 ? void 0 : _b.category_id) || 999; // DIY;
193
+ }
194
+ this.log.debug(`resolved HAP category ID:${category_id}`);
195
+ return category_id;
196
+ }
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ dump(obj) {
199
+ for (const key in obj) {
200
+ try {
201
+ if ((typeof obj[key]) === 'function') {
202
+ this.log.warn(`\t function ${key}:${obj[key].name}`);
203
+ }
204
+ else {
205
+ this.log.warn(`\t ${key}:${obj[key]}`);
206
+ }
207
+ }
208
+ catch (e) {
209
+ this.dump(e);
210
+ }
211
+ if ((typeof obj[key]) !== 'string') {
212
+ for (const key2 in obj[key]) {
213
+ try {
214
+ if ((typeof obj[key][key2]) === 'function') {
215
+ this.log.warn(`\t function ${key2}:${obj[key][key2].name}`);
216
+ }
217
+ else {
218
+ this.log.warn(`\t ${key2}:${obj[key][key2]}`);
219
+ }
220
+ }
221
+ catch (e) {
222
+ this.dump(e);
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ async updateInfraredRemotes(allDevices) {
229
+ var _a, _b, _c, _d, _e;
230
+ const irDevices = allDevices.filter(device => device.isIRControlHub());
231
+ for (const irDevice of irDevices) {
232
+ const res = await this.getInfraredRemotes(irDevice.id);
233
+ if (!res.success) {
234
+ this.log.warn('Get infrared remotes failed. deviceId = %s, code = %s, msg = %s', irDevice.id, res.code, res.msg);
235
+ continue;
236
+ }
237
+ let resResult = res.result;
238
+ for (const resolvedRemoteDevice of this.resolveInfraredRemotes(irDevice, allDevices)) {
239
+ resResult.forEach(remoteDevice => {
240
+ if (remoteDevice.remote_id === resolvedRemoteDevice.remote_id) {
241
+ remoteDevice.org_category_id = remoteDevice.category_id;
242
+ remoteDevice.category_id = resolvedRemoteDevice.category_id;
243
+ remoteDevice.resolved = true;
244
+ }
245
+ });
246
+ }
247
+ if (resResult.length === 0) {
248
+ // for legacy devices
249
+ this.log.warn('no result for Get infrared remotes.');
250
+ this.log.info('resolving infrared remotes from device list...');
251
+ resResult = this.resolveInfraredRemotes(irDevice, allDevices);
252
+ this.log.success(`${resResult.length} infrared remote device found.`);
253
+ }
254
+ for (const { category_id, remote_id, resolved } of resResult) {
255
+ const subDevice = allDevices.find(device => device.id === remote_id);
256
+ if (!subDevice) {
257
+ continue;
258
+ }
259
+ subDevice.parent_id = irDevice.id;
260
+ subDevice.schema = [];
261
+ const res = await this.getInfraredKeys(irDevice.id, subDevice.id);
262
+ if (!res.success) {
263
+ this.log.warn('Get infrared remote keys failed. deviceId = %s, code = %s, msg = %s', subDevice.id, res.code, res.msg);
264
+ continue;
265
+ }
266
+ subDevice.remote_keys = res.result || {};
267
+ this.log.debug(`infrared keys lengh:${(_b = (_a = subDevice.remote_keys) === null || _a === void 0 ? void 0 : _a.key_list) === null || _b === void 0 ? void 0 : _b.length}`);
268
+ if (resolved) {
269
+ this.fixInfraredDevice(subDevice);
270
+ }
271
+ if (subDevice.category === 'infrared_ac') { // AC Device
272
+ const res = await this.getInfraredACStatus(irDevice.id, subDevice.id);
273
+ if (!res.success) {
274
+ this.log.warn('Get infrared ac status failed. deviceId = %s, code = %s, msg = %s', subDevice.id, res.code, res.msg);
275
+ continue;
276
+ }
277
+ subDevice.status = Object.entries(res.result).map(([key, value]) => ({ code: key, value }));
278
+ }
279
+ else if (category_id === 999) { // DIY Device
280
+ const res = await this.getInfraredDIYKeys(irDevice.id, subDevice.id);
281
+ if (!res.success) {
282
+ this.log.warn('Get infrared diy keys failed. deviceId = %s, code = %s, msg = %s', subDevice.id, res.code, res.msg);
283
+ continue;
284
+ }
285
+ const key_list = ((_c = subDevice.remote_keys) === null || _c === void 0 ? void 0 : _c.key_list) || [];
286
+ this.log.debug(`key list length:${key_list.length}`);
287
+ const ignoreList = [];
288
+ for (const key of key_list) {
289
+ if (key.standard_key) {
290
+ if (resolved) {
291
+ ignoreList.push(key);
292
+ }
293
+ continue;
294
+ }
295
+ const item = res.result.find(item => item['id'] === key.key_id && item['key'] === key.key);
296
+ if (!item) {
297
+ if (resolved) {
298
+ ignoreList.push(key);
299
+ }
300
+ continue;
301
+ }
302
+ this.log.debug('learning_code:', item['code']);
303
+ key.learning_code = item['code'];
304
+ }
305
+ if (subDevice.remote_keys && ignoreList.length !== 0) {
306
+ this.log.debug('remove standard instructions. not need for DIY Device');
307
+ subDevice.remote_keys.key_list = (_d = subDevice.remote_keys) === null || _d === void 0 ? void 0 : _d.key_list.filter(item => !ignoreList.includes(item));
308
+ this.log.debug(`new key list length:${(_e = subDevice.remote_keys) === null || _e === void 0 ? void 0 : _e.key_list.length}`);
309
+ }
310
+ }
311
+ }
312
+ }
313
+ }
314
+ async sendInfraredCommands(infraredID, remoteID, category_id, remote_index, key, key_id) {
315
+ const res = await this.api.post(`/v2.0/infrareds/${infraredID}/remotes/${remoteID}/raw/command`, {
316
+ category_id, remote_index, key, key_id,
317
+ });
318
+ return res;
319
+ }
320
+ async sendInfraredACCommands(infraredID, remoteID, power, mode, temp, wind) {
321
+ const commands = (power === 1) ? { power, mode, temp, wind } : { power };
322
+ const res = await this.api.post(`/v2.0/infrareds/${infraredID}/air-conditioners/${remoteID}/scenes/command`, commands);
323
+ if (!res.success) {
324
+ this.log.info('Send AC command failed. code = %d, msg = %s', res.code, res.msg);
325
+ }
326
+ return res;
327
+ }
328
+ async sendInfraredDIYCommands(infraredID, remoteID, code) {
329
+ const res = await this.api.post(`/v2.0/infrareds/${infraredID}/remotes/${remoteID}/learning-codes`, { code });
330
+ // const res = await this.api.post(`/v1.0/infrareds/${infraredID}/remotes/${remoteID}/learning-codes`, { code });
331
+ return res;
332
+ }
333
+ async getLockTemporaryKey(deviceID) {
334
+ // const res = await this.api.post(`/v1.0/smart-lock/devices/${deviceID}/door-lock/password-ticket`);
335
+ const res = await this.api.post(`/v1.0/smart-lock/devices/${deviceID}/password-ticket`);
336
+ if (res.success === false) {
337
+ this.log.warn('Get Temporary Pass failed. devID = %s, code = %s, msg = %s', deviceID, res.code, res.msg);
338
+ }
339
+ return res;
340
+ }
341
+ async sendLockCommands(deviceID, ticketID, open) {
342
+ const res = await this.api.post(`/v1.0/smart-lock/devices/${deviceID}/password-free/door-operate`, {
343
+ device_id: deviceID,
344
+ ticket_id: ticketID,
345
+ open,
346
+ });
347
+ return res;
348
+ }
349
+ async sendCommands(deviceID, commands) {
350
+ const res = await this.api.post(`/v1.0/devices/${deviceID}/commands`, { commands });
351
+ return res.result;
352
+ }
353
+ async getCurrentWeather(lat, lon) {
354
+ const res = await this.api.get(`/v2.0/iot-03/weather/current?lat=${lat}&lon=${lon}`);
355
+ return res.result;
356
+ }
357
+ async getCurrentWeatherByOpenMeteo(lat, lon) {
358
+ /** <a href="https://open-meteo.com/">Weather data by Open-Meteo.com</a> */
359
+ // eslint-disable-next-line max-len
360
+ const res = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&current=temperature_2m,relative_humidity_2m`, { cache: 'no-cache' });
361
+ return await res.json();
362
+ }
363
+ async onMQTTMessage(topic, protocol, message) {
364
+ switch (protocol) {
365
+ case TuyaMQTTProtocol.DEVICE_STATUS_UPDATE: {
366
+ const { devId, status } = message;
367
+ const device = this.getDevice(devId);
368
+ if (!device) {
369
+ return;
370
+ }
371
+ for (const item of device.status) {
372
+ const _item = status.find(_item => _item.code === item.code);
373
+ if (!_item) {
374
+ continue;
375
+ }
376
+ item.value = _item.value;
377
+ }
378
+ this.emit(Events.DEVICE_STATUS_UPDATE, device, status);
379
+ break;
380
+ }
381
+ case TuyaMQTTProtocol.DEVICE_INFO_UPDATE: {
382
+ const { bizCode, bizData, devId } = message;
383
+ if (bizCode === 'bindUser') {
384
+ const { ownerId } = bizData;
385
+ if (!this.ownerIDs.includes(ownerId)) {
386
+ this.log.warn('Update devId = %s not included in your ownerIDs. Skip.', devId);
387
+ return;
388
+ }
389
+ // TODO failed if request to quickly
390
+ await new Promise(resolve => setTimeout(resolve, 10000));
391
+ const device = await this.updateDevice(devId);
392
+ if (!device) {
393
+ return;
394
+ }
395
+ this.mq.start(); // Force reconnect, unless new device status update won't get received
396
+ this.emit(Events.DEVICE_ADD, device);
397
+ }
398
+ else if (bizCode === 'nameUpdate') {
399
+ const { name } = bizData;
400
+ const device = this.getDevice(devId);
401
+ if (!device) {
402
+ return;
403
+ }
404
+ device.name = name;
405
+ this.emit(Events.DEVICE_INFO_UPDATE, device, bizData);
406
+ }
407
+ else if (bizCode === 'online' || bizCode === 'offline') {
408
+ const device = this.getDevice(devId);
409
+ if (!device) {
410
+ return;
411
+ }
412
+ device.online = (bizCode === 'online') ? true : false;
413
+ this.emit(Events.DEVICE_INFO_UPDATE, device, bizData);
414
+ }
415
+ else if (bizCode === 'delete') {
416
+ const { ownerId } = bizData;
417
+ if (!this.ownerIDs.includes(ownerId)) {
418
+ this.log.warn('Remove devId = %s not included in your ownerIDs. Skip.', devId);
419
+ return;
420
+ }
421
+ const device = this.getDevice(devId);
422
+ if (!device) {
423
+ return;
424
+ }
425
+ this.devices.splice(this.devices.indexOf(device), 1);
426
+ this.emit(Events.DEVICE_DELETE, devId);
427
+ }
428
+ else if (bizCode === 'event_notify') {
429
+ // doorbell event
430
+ }
431
+ else if (bizCode === 'p2pSignal') {
432
+ // p2p signal
433
+ }
434
+ else {
435
+ this.log.warn('Unhandled mqtt message: bizCode = %s, bizData = %o', bizCode, bizData);
436
+ }
437
+ break;
438
+ }
439
+ default:
440
+ this.log.warn('Unhandled mqtt message: protocol = %s, message = %o', protocol, message);
441
+ break;
442
+ }
443
+ }
444
+ }
445
+ exports.default = TuyaDeviceManager;
446
+ TuyaDeviceManager.Events = Events;
447
+ //# sourceMappingURL=TuyaDeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TuyaDeviceManager.js","sourceRoot":"","sources":["../../src/device/TuyaDeviceManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,oEAA4C;AAC5C,2CAAwD;AACxD,2DAMsB;AAEtB,IAAK,MAKJ;AALD,WAAK,MAAM;IACT,mCAAyB,CAAA;IACzB,mDAAyC,CAAA;IACzC,uDAA6C,CAAA;IAC7C,yCAA+B,CAAA;AACjC,CAAC,EALI,MAAM,KAAN,MAAM,QAKV;AAED,IAAK,gBAGJ;AAHD,WAAK,gBAAgB;IACnB,uFAAwB,CAAA;IACxB,oFAAuB,CAAA;AACzB,CAAC,EAHI,gBAAgB,KAAhB,gBAAgB,QAGpB;AAED,MAAqB,iBAAkB,SAAQ,gBAAY;IASzD,YACS,GAAgB,EAChB,QAAQ,KAAK;QAEpB,KAAK,EAAE,CAAC;QAHD,QAAG,GAAH,GAAG,CAAa;QAChB,UAAK,GAAL,KAAK,CAAQ;QANf,aAAQ,GAAa,EAAE,CAAC;QACxB,YAAO,GAAiB,EAAE,CAAC;QAShC,MAAM,GAAG,GAAI,IAAI,CAAC,GAAG,CAAC,GAAoB,CAAC,GAAG,CAAC;QAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,qBAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,mBAAmB,CAAC,UAAsB,EAAE,IAAY;QACtD,MAAM,WAAW,GAAG,IAAI,oBAAU,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3F,WAAW,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACpC,WAAW,CAAC,UAAU,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvC,WAAW,CAAC,YAAY,GAAG,iBAAiB,CAAC;QAC7C,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,aAAa,CAAC,QAAY;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QAEjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,IAAI,oBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;SACzD;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,YAAsB,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,oFAAoF;QACpF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,QAAQ,iBAAiB,CAAC,CAAC;QAC3E,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kEAAkE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/G,OAAO,EAAE,CAAC;SACX;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;QACpD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACpF,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjB,SAAS;aACV;YAED,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC;YACpF,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC;YACxF,IAAI,IAAI,GAAG,iCAAoB,CAAC,OAAO,CAAC;YACxC,IAAI,IAAI,IAAI,KAAK,EAAE;gBACjB,IAAI,GAAG,iCAAoB,CAAC,UAAU,CAAC;aACxC;iBAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBACzB,IAAI,GAAG,iCAAoB,CAAC,SAAS,CAAC;aACvC;iBAAM,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE;gBACzB,IAAI,GAAG,iCAAoB,CAAC,UAAU,CAAC;aACxC;YACD,IAAI,QAAkC,CAAC;YACvC,IAAI;gBACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aAChD;YAAC,OAAO,KAAK,EAAE;gBACd,iEAAiE;aAClE;SACF;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,UAAU,UAAU,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,QAAgB;QACxD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,UAAU,YAAY,QAAQ,OAAO,CAAC,CAAC;QACzF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAkB,EAAE,QAAgB;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,UAAU,YAAY,QAAQ,YAAY,CAAC,CAAC;QAC9F,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAkB,EAAE,QAAgB;QAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,UAAU,YAAY,QAAQ,iBAAiB,CAAC,CAAC;QACnG,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sBAAsB,CAAC,YAAwB,EAAE,UAAwB;QACvE,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAE,MAAiB,EAAE,EAAE;YACtE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC3D,OAAO,KAAK,CAAC;aACd;YACD,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE;gBAC1D,OAAO,IAAI,CAAC;aACb;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE;gBAC7C,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACjD,OAAO,sBAAsB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACd,OAAO;gBACL,aAAa,EAAE,GAAG;gBAClB,WAAW,EAAE,MAAM,CAAC,EAAE;gBACtB,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,iBAAiB,CAAC,SAAqB;QACrC,SAAS,CAAC,WAAY,CAAC,eAAe,GAAG,SAAS,CAAC,WAAY,CAAC,WAAW,CAAC;QAC5E,SAAS,CAAC,WAAY,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,oBAAoB,CAAC,SAAqB;;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,SAAS,CAAC,QAAQ,gBAAgB,MAAA,SAAS,CAAC,WAAW,0CAAE,WAAW,EAAE,CAAC,CAAC;QACtI,IAAI,WAAW,CAAC;QAChB,QAAO,SAAS,CAAC,UAAU,EAAE;YAC3B,KAAK,kBAAkB;gBACrB,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM;gBACvB,MAAM;YACR,KAAK,kBAAkB;gBACrB,WAAW,GAAG,GAAG,CAAC,CAAC,MAAM;gBACzB,MAAM;YACR;gBACE,WAAW,GAAG,CAAA,MAAA,SAAS,CAAC,WAAW,0CAAE,WAAW,KAAI,GAAG,CAAC,CAAC,OAAO;SACnE;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QAC1D,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,GAAO;QACV,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,IAAI;gBACF,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE;oBACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBACtD;qBAAM;oBACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACxC;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;YACD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE;gBAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC3B,IAAI;wBACF,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,EAAE;4BAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;yBAC7D;6BAAM;4BACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;yBAC/C;qBACF;oBAAC,OAAO,CAAC,EAAE;wBACV,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACd;iBACF;aACF;SACF;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,UAAwB;;QAClD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEvD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iEAAiE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjH,SAAS;aACV;YACD,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;YAC3B,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;gBACpF,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,IAAI,YAAY,CAAC,SAAS,KAAK,oBAAoB,CAAC,SAAS,EAAE;wBAC7D,YAAY,CAAC,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC;wBACxD,YAAY,CAAC,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;wBAC5D,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;qBAC9B;gBACH,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,qBAAqB;gBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBAChE,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,gCAAgC,CAAC,CAAC;aACvE;YAED,KAAK,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE;gBAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;gBACrE,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS;iBACV;gBACD,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;gBAClC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qEAAqE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtH,SAAS;iBACV;gBACD,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,MAAA,MAAA,SAAS,CAAC,WAAW,0CAAE,QAAQ,0CAAE,MAAM,EAAE,CAAC,CAAC;gBAEjF,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;iBACnC;gBAED,IAAI,SAAS,CAAC,QAAQ,KAAK,aAAa,EAAE,EAAE,YAAY;oBACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mEAAmE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;wBACpH,SAAS;qBACV;oBACD,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAsB,CAAA,CAAC,CAAC;iBAC/G;qBAAM,IAAI,WAAW,KAAK,GAAG,EAAE,EAAE,aAAa;oBAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;oBACrE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kEAAkE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;wBACnH,SAAS;qBACV;oBACD,MAAM,QAAQ,GAAG,CAAA,MAAA,SAAS,CAAC,WAAW,0CAAE,QAAQ,KAAI,EAAE,CAAC;oBACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrD,MAAM,UAAU,GAA6B,EAAE,CAAC;oBAChD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;wBAC1B,IAAI,GAAG,CAAC,YAAY,EAAE;4BACpB,IAAI,QAAQ,EAAE;gCACZ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BACtB;4BACD,SAAS;yBACV;wBACD,MAAM,IAAI,GAAI,GAAG,CAAC,MAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;wBACnG,IAAI,CAAC,IAAI,EAAE;4BACT,IAAI,QAAQ,EAAE;gCACZ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BACtB;4BACD,SAAS;yBACV;wBACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC/C,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;qBAClC;oBACD,IAAI,SAAS,CAAC,WAAW,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;wBACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;wBACxE,SAAS,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAA,SAAS,CAAC,WAAW,0CAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC5G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,MAAA,SAAS,CAAC,WAAW,0CAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;qBACjF;iBACF;aACF;SACF;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAE,WAAmB,EAAE,YAAoB,EAAE,GAAW,EAAE,MAAc;QACrI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,UAAU,YAAY,QAAQ,cAAc,EAAE;YAC/F,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM;SACvC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,UAAkB,EAAE,QAAgB,EAAE,KAAa,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY;QACxH,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,UAAU,qBAAqB,QAAQ,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACvH,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;SACjF;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,UAAkB,EAAE,QAAgB,EAAE,IAAY;QAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,UAAU,YAAY,QAAQ,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,iHAAiH;QACjH,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,qGAAqG;QACrG,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,QAAQ,kBAAkB,CAAC,CAAC;QACxF,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4DAA4D,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;SAC1G;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,QAAgB,EAAE,IAAa;QACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,QAAQ,6BAA6B,EAAE;YACjG,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;YACnB,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,QAA4B;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,QAAQ,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,GAAW;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,oCAAoC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,GAAW,EAAE,GAAW;QACzD,2EAA2E;QAC3E,mCAAmC;QACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mDAAmD,GAAG,cAAc,GAAG,8CAA8C,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACtK,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAGD,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,QAA0B,EAAE,OAAO;QACpE,QAAO,QAAQ,EAAE;YACf,KAAK,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;gBAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO;iBACR;gBAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;oBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7D,IAAI,CAAC,KAAK,EAAE;wBACV,SAAS;qBACV;oBACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;iBAC1B;gBAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvD,MAAM;aACP;YACD,KAAK,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACxC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;gBAC5C,IAAI,OAAO,KAAK,UAAU,EAAE;oBAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;wBAC/E,OAAO;qBACR;oBAED,oCAAoC;oBACpC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,EAAE;wBACX,OAAO;qBACR;oBACD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,sEAAsE;oBACvF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;iBACtC;qBAAM,IAAI,OAAO,KAAK,YAAY,EAAE;oBACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,EAAE;wBACX,OAAO;qBACR;oBACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBACvD;qBAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,EAAE;wBACX,OAAO;qBACR;oBACD,MAAM,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;oBACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBACvD;qBAAM,IAAI,OAAO,KAAK,QAAQ,EAAE;oBAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;wBAC/E,OAAO;qBACR;oBAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,EAAE;wBACX,OAAO;qBACR;oBACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;iBACxC;qBAAM,IAAI,OAAO,KAAK,cAAc,EAAE;oBACrC,iBAAiB;iBAClB;qBAAM,IAAI,OAAO,KAAK,WAAW,EAAE;oBAClC,aAAa;iBACd;qBAAM;oBACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oDAAoD,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;iBACvF;gBACD,MAAM;aACP;YACD;gBACE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACxF,MAAM;SACT;IACH,CAAC;;AApbH,oCAsbC;AApbiB,wBAAM,GAAG,MAAM,CAAC"}
@@ -0,0 +1,64 @@
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 TuyaDevice_1 = __importDefault(require("./TuyaDevice"));
7
+ const TuyaDeviceManager_1 = __importDefault(require("./TuyaDeviceManager"));
8
+ class TuyaHomeDeviceManager extends TuyaDeviceManager_1.default {
9
+ async getHomeList() {
10
+ const res = await this.api.get(`/v1.0/users/${this.api.tokenInfo.uid}/homes`);
11
+ return res;
12
+ }
13
+ async getHomeDeviceList(homeID) {
14
+ const res = await this.api.get(`/v1.0/homes/${homeID}/devices`);
15
+ return res;
16
+ }
17
+ async updateDevices(homeIDList) {
18
+ let devices = [];
19
+ for (const homeID of homeIDList) {
20
+ const res = await this.getHomeDeviceList(homeID);
21
+ devices = devices.concat(res.result.map(obj => new TuyaDevice_1.default(obj)));
22
+ }
23
+ if (devices.length === 0) {
24
+ return [];
25
+ }
26
+ for (const device of devices) {
27
+ device.schema = await this.getDeviceSchema(device.id);
28
+ }
29
+ // this.log.debug('Devices updated.\n', JSON.stringify(devices, null, 2));
30
+ this.devices = devices;
31
+ return devices;
32
+ }
33
+ async getSceneList(homeID) {
34
+ const res = await this.api.get(`/v1.1/homes/${homeID}/scenes`);
35
+ if (res.success === false) {
36
+ this.log.warn('Get scene list failed. homeId = %d, code = %s, msg = %s', homeID, res.code, res.msg);
37
+ return [];
38
+ }
39
+ const scenes = [];
40
+ for (const { scene_id, name, enabled, status } of res.result) {
41
+ if (enabled !== true || status !== '1') {
42
+ continue;
43
+ }
44
+ scenes.push(new TuyaDevice_1.default({
45
+ id: scene_id,
46
+ uuid: scene_id,
47
+ name,
48
+ owner_id: homeID.toString(),
49
+ product_id: 'scene',
50
+ category: 'scene',
51
+ schema: [],
52
+ status: [],
53
+ online: true,
54
+ }));
55
+ }
56
+ return scenes;
57
+ }
58
+ async executeScene(homeID, sceneID) {
59
+ const res = await this.api.post(`/v1.0/homes/${homeID}/scenes/${sceneID}/trigger`);
60
+ return res;
61
+ }
62
+ }
63
+ exports.default = TuyaHomeDeviceManager;
64
+ //# sourceMappingURL=TuyaHomeDeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TuyaHomeDeviceManager.js","sourceRoot":"","sources":["../../src/device/TuyaHomeDeviceManager.ts"],"names":[],"mappings":";;;;;AAAA,8DAAsC;AACtC,4EAAoD;AAEpD,MAAqB,qBAAsB,SAAQ,2BAAiB;IAElE,KAAK,CAAC,WAAW;QACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC9E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,MAAM,UAAU,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAoB;QAEtC,IAAI,OAAO,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAE,GAAG,CAAC,MAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC9E;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,EAAE,CAAC;SACX;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvD;QAED,0EAA0E;QAC1E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,MAAM,SAAS,CAAC,CAAC;QAC/D,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACpG,OAAO,EAAE,CAAC;SACX;QAED,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE;YAC5D,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE;gBACtC,SAAS;aACV;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAU,CAAC;gBACzB,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAC3B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;aACb,CAAC,CAAC,CAAC;SACL;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAuB,EAAE,OAAe;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,WAAW,OAAO,UAAU,CAAC,CAAC;QACnF,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAhED,wCAgEC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ const settings_1 = require("./settings");
3
+ const platform_1 = require("./platform");
4
+ module.exports = (api) => {
5
+ api.registerPlatform(settings_1.PLATFORM_NAME, platform_1.TuyaPlatform);
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,yCAA2C;AAC3C,yCAA0C;AAK1C,iBAAS,CAAC,GAAQ,EAAE,EAAE;IACpB,GAAG,CAAC,gBAAgB,CAAC,wBAAa,EAAE,uBAAY,CAAC,CAAC;AACpD,CAAC,CAAC"}