@homebridge-plugins/homebridge-tuya 3.0.0-beta.2 → 3.0.0-beta.21

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 (298) hide show
  1. package/README.md +354 -142
  2. package/config.schema.json +1221 -893
  3. package/dist/cloud/api/TuyaOpenAPI.js +108 -60
  4. package/dist/cloud/api/TuyaOpenAPI.js.map +1 -1
  5. package/dist/cloud/api/TuyaOpenMQ.js +45 -22
  6. package/dist/cloud/api/TuyaOpenMQ.js.map +1 -1
  7. package/dist/cloud/device/{TuyaDeviceManager.js → TuyaCloudDeviceManager.js} +146 -96
  8. package/dist/cloud/device/TuyaCloudDeviceManager.js.map +1 -0
  9. package/dist/cloud/device/TuyaCustomDeviceManager.js +75 -5
  10. package/dist/cloud/device/TuyaCustomDeviceManager.js.map +1 -1
  11. package/dist/cloud/device/TuyaDevice.js.map +1 -1
  12. package/dist/cloud/device/TuyaHomeDeviceManager.js +81 -13
  13. package/dist/cloud/device/TuyaHomeDeviceManager.js.map +1 -1
  14. package/dist/config.js +26 -5
  15. package/dist/config.js.map +1 -1
  16. package/dist/local/DynamicChildDiscovery.js +2 -1
  17. package/dist/local/DynamicChildDiscovery.js.map +1 -1
  18. package/dist/local/LocalDevice.js +16 -3
  19. package/dist/local/LocalDevice.js.map +1 -1
  20. package/dist/local/LocalDeviceManager.js +361 -164
  21. package/dist/local/LocalDeviceManager.js.map +1 -1
  22. package/dist/local/TuyaDiscovery.js +16 -7
  23. package/dist/local/TuyaDiscovery.js.map +1 -1
  24. package/dist/local/ZigbeeGatewayDetection.js +7 -4
  25. package/dist/local/ZigbeeGatewayDetection.js.map +1 -1
  26. package/dist/local/protocol/ProtocolUtilities.js +34 -17
  27. package/dist/local/protocol/ProtocolUtilities.js.map +1 -1
  28. package/dist/local/protocol/ProtocolV31V32.js +4 -2
  29. package/dist/local/protocol/ProtocolV31V32.js.map +1 -1
  30. package/dist/local/protocol/ProtocolV33.js +4 -2
  31. package/dist/local/protocol/ProtocolV33.js.map +1 -1
  32. package/dist/local/protocol/ProtocolV34.js +10 -5
  33. package/dist/local/protocol/ProtocolV34.js.map +1 -1
  34. package/dist/local/protocol/ProtocolV35.js +8 -4
  35. package/dist/local/protocol/ProtocolV35.js.map +1 -1
  36. package/dist/platform.js +253 -493
  37. package/dist/platform.js.map +1 -1
  38. package/dist/settings.js +0 -2
  39. package/dist/settings.js.map +1 -1
  40. package/dist/shared/TuyaDeviceManager.js +147 -0
  41. package/dist/shared/TuyaDeviceManager.js.map +1 -0
  42. package/dist/shared/TuyaHybridDeviceManager.js +215 -0
  43. package/dist/shared/TuyaHybridDeviceManager.js.map +1 -0
  44. package/dist/shared/accessory/AccessoryFactory.js +350 -0
  45. package/dist/shared/accessory/AccessoryFactory.js.map +1 -0
  46. package/dist/shared/{accessories → accessory}/AirConditionerAccessory.js +21 -15
  47. package/dist/shared/accessory/AirConditionerAccessory.js.map +1 -0
  48. package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js.map +1 -1
  49. package/dist/shared/accessory/AirQualitySensorAccessory.js.map +1 -0
  50. package/dist/shared/{accessories → accessory}/BaseAccessory.js +16 -95
  51. package/dist/shared/accessory/BaseAccessory.js.map +1 -0
  52. package/dist/shared/{accessories → accessory}/BlindsAccessory.js.map +1 -1
  53. package/dist/shared/{accessories → accessory}/CameraAccessory.js +2 -2
  54. package/dist/shared/accessory/CameraAccessory.js.map +1 -0
  55. package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js.map +1 -1
  56. package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js.map +1 -1
  57. package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js.map +1 -1
  58. package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js.map +1 -1
  59. package/dist/shared/{accessories → accessory}/DiffuserAccessory.js.map +1 -1
  60. package/dist/shared/{accessories → accessory}/DimmerAccessory.js.map +1 -1
  61. package/dist/shared/{accessories → accessory}/DoorbellAccessory.js.map +1 -1
  62. package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js.map +1 -1
  63. package/dist/shared/{accessories → accessory}/FanAccessory.js.map +1 -1
  64. package/dist/shared/{accessories → accessory}/GarageDoorAccessory.js +19 -2
  65. package/dist/shared/accessory/GarageDoorAccessory.js.map +1 -0
  66. package/dist/shared/{accessories → accessory}/HeaterAccessory.js.map +1 -1
  67. package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js.map +1 -1
  68. package/dist/shared/accessory/HumanPresenceSensorAccessory.js.map +1 -0
  69. package/dist/shared/{accessories → accessory}/HumidifierAccessory.js.map +1 -1
  70. package/dist/shared/accessory/IRAdapter.js +167 -0
  71. package/dist/shared/accessory/IRAdapter.js.map +1 -0
  72. package/dist/shared/accessory/IRAirConditionerAccessory.js.map +1 -0
  73. package/dist/shared/accessory/IRControlHubAccessory.js.map +1 -0
  74. package/dist/shared/accessory/IRControlHubSubAccessory.js.map +1 -0
  75. package/dist/shared/accessory/IRFanAccessory.js +90 -0
  76. package/dist/shared/accessory/IRFanAccessory.js.map +1 -0
  77. package/dist/shared/accessory/IRGenericAccessory.js.map +1 -0
  78. package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js.map +1 -1
  79. package/dist/shared/{accessories → accessory}/LightAccessory.js.map +1 -1
  80. package/dist/shared/{accessories → accessory}/LightSensorAccessory.js.map +1 -1
  81. package/dist/shared/{accessories → accessory}/LocationWeatherAccessory.js +1 -1
  82. package/dist/shared/accessory/LocationWeatherAccessory.js.map +1 -0
  83. package/dist/shared/{accessories → accessory}/LockAccessory.js +3 -3
  84. package/dist/shared/{accessories → accessory}/LockAccessory.js.map +1 -1
  85. package/dist/shared/accessory/MotionSensorAccessory.js.map +1 -0
  86. package/dist/shared/accessory/OutletAccessory.js.map +1 -0
  87. package/dist/shared/{accessories → accessory}/PetFeederAccessory.js.map +1 -1
  88. package/dist/shared/{accessories → accessory}/SceneAccessory.js +1 -1
  89. package/dist/shared/accessory/SceneAccessory.js.map +1 -0
  90. package/dist/shared/accessory/SceneSwitchAccessory.js.map +1 -0
  91. package/dist/shared/accessory/SecuritySystemAccessory.js.map +1 -0
  92. package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js.map +1 -1
  93. package/dist/shared/{accessories → accessory}/SwitchAccessory.js +1 -45
  94. package/dist/shared/accessory/SwitchAccessory.js.map +1 -0
  95. package/dist/shared/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
  96. package/dist/shared/{accessories → accessory}/ThermostatAccessory.js.map +1 -1
  97. package/dist/shared/{accessories → accessory}/TowerRackAccessory.js.map +1 -1
  98. package/dist/shared/{accessories → accessory}/ValveAccessory.js.map +1 -1
  99. package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js.map +1 -1
  100. package/dist/shared/accessory/WeatherStationAccessory.js.map +1 -0
  101. package/dist/shared/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
  102. package/dist/shared/{accessories → accessory}/WhiteNoiseLightAccessory.js +1 -0
  103. package/dist/shared/accessory/WhiteNoiseLightAccessory.js.map +1 -0
  104. package/dist/shared/accessory/WindowAccessory.js.map +1 -0
  105. package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js.map +1 -1
  106. package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js.map +1 -1
  107. package/dist/shared/accessory/characteristic/Active.js.map +1 -0
  108. package/dist/shared/accessory/characteristic/AirQuality.js.map +1 -0
  109. package/dist/shared/{accessories → accessory}/characteristic/CurrentRelativeHumidity.js +3 -0
  110. package/dist/shared/accessory/characteristic/CurrentRelativeHumidity.js.map +1 -0
  111. package/dist/shared/accessory/characteristic/CurrentTemperature.js.map +1 -0
  112. package/dist/shared/accessory/characteristic/CurrentWeather.js.map +1 -0
  113. package/dist/shared/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
  114. package/dist/shared/{accessories → accessory}/characteristic/CurrentWetBulbGlobeTemperature.js +3 -2
  115. package/dist/shared/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
  116. package/dist/shared/{accessories → accessory}/characteristic/EnergyUsage.js +0 -5
  117. package/dist/shared/accessory/characteristic/EnergyUsage.js.map +1 -0
  118. package/dist/shared/{accessories → accessory}/characteristic/Light.js +28 -5
  119. package/dist/shared/accessory/characteristic/Light.js.map +1 -0
  120. package/dist/shared/accessory/characteristic/LightSensor.js.map +1 -0
  121. package/dist/shared/{accessories → accessory}/characteristic/LockPhysicalControls.js +3 -0
  122. package/dist/shared/accessory/characteristic/LockPhysicalControls.js.map +1 -0
  123. package/dist/shared/accessory/characteristic/MotionDetected.js.map +1 -0
  124. package/dist/shared/accessory/characteristic/Name.js.map +1 -0
  125. package/dist/shared/accessory/characteristic/OccupancyDetected.js.map +1 -0
  126. package/dist/shared/{accessories → accessory}/characteristic/On.js +1 -0
  127. package/dist/shared/accessory/characteristic/On.js.map +1 -0
  128. package/dist/shared/accessory/characteristic/OutletInUse.js.map +1 -0
  129. package/dist/shared/accessory/characteristic/ProgrammableSwitchEvent.js.map +1 -0
  130. package/dist/shared/{accessories → accessory}/characteristic/RelativeHumidityDehumidifierThreshold.js +3 -0
  131. package/dist/shared/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
  132. package/dist/shared/accessory/characteristic/RotationSpeed.js.map +1 -0
  133. package/dist/shared/accessory/characteristic/SecuritySystemState.js.map +1 -0
  134. package/dist/shared/{accessories → accessory}/characteristic/SwingMode.js +3 -0
  135. package/dist/shared/accessory/characteristic/SwingMode.js.map +1 -0
  136. package/dist/shared/accessory/characteristic/TargetTemperature.js.map +1 -0
  137. package/dist/shared/accessory/characteristic/TemperatureDisplayUnits.js.map +1 -0
  138. package/dist/shared/util/ConfigHash.js +2 -2
  139. package/dist/shared/util/ConfigHash.js.map +1 -1
  140. package/dist/shared/util/ConfigMigrator.js +222 -0
  141. package/dist/shared/util/ConfigMigrator.js.map +1 -0
  142. package/dist/shared/util/FfmpegStreamingProcess.js +62 -0
  143. package/dist/shared/util/FfmpegStreamingProcess.js.map +1 -1
  144. package/dist/shared/util/InfraredTool.js +0 -2
  145. package/dist/shared/util/InfraredTool.js.map +1 -1
  146. package/dist/shared/util/Logger.js +85 -10
  147. package/dist/shared/util/Logger.js.map +1 -1
  148. package/dist/shared/util/TuyaStreamDelegate.js +194 -97
  149. package/dist/shared/util/TuyaStreamDelegate.js.map +1 -1
  150. package/dist/shared/util/util.js +59 -4
  151. package/dist/shared/util/util.js.map +1 -1
  152. package/docs/ADVANCED_OPTIONS.md +603 -0
  153. package/docs/CONFIG_GUIDE.md +616 -0
  154. package/docs/Get-Local-Keys-for-Your-Devices.md +246 -0
  155. package/{SUPPORTED_DEVICES.md → docs/SUPPORTED_DEVICES.md} +24 -3
  156. package/eslint.config.mjs +0 -1
  157. package/{jest.config.js → jest.config.ts} +5 -2
  158. package/package.json +12 -9
  159. package/test/ConfigMigrator.test.ts +1060 -0
  160. package/test/Logger.test.ts +482 -0
  161. package/test/accessoryFactory.data.test.ts +172 -0
  162. package/test/accessoryFactory.test.ts +64 -35
  163. package/test/airConditioner.test.ts +742 -0
  164. package/test/config.test.ts +17 -13
  165. package/test/custom.test.ts +2 -2
  166. package/test/errorHandling.test.ts +12 -12
  167. package/test/home.test.ts +1 -1
  168. package/test/hybridDeviceManager.test.ts +808 -0
  169. package/test/light.test.ts +250 -0
  170. package/test/localDevice.test.ts +21 -50
  171. package/test/localDeviceManager.behavior.test.ts +196 -31
  172. package/test/localDeviceManager.test.ts +124 -41
  173. package/test/mqttMessages.test.ts +33 -14
  174. package/test/platform.test.ts +337 -814
  175. package/test/platform.validation.local.test.ts +58 -119
  176. package/test/tuyaCustomDeviceManager.test.ts +106 -16
  177. package/test/tuyaDeviceManager.test.ts +636 -639
  178. package/test/tuyaDiscovery.test.ts +21 -33
  179. package/test/tuyaHomeDeviceManager.test.ts +109 -18
  180. package/test/tuyaOpenAPI.test.ts +25 -44
  181. package/test/tuyaOpenMQ.test.ts +15 -23
  182. package/test/util.test.ts +107 -7
  183. package/test/zigbee/LocalDevice.zigbee.test.ts +14 -18
  184. package/test/zigbee/LocalDeviceManager.cloud-discovery.test.ts +19 -20
  185. package/test/zigbee/LocalDeviceManager.zigbee.reconnect.test.ts +19 -20
  186. package/test/zigbee/LocalDeviceManager.zigbee.test.ts +73 -35
  187. package/test/zigbee/ZigbeeGatewayDetection.test.ts +2 -2
  188. package/ADVANCED_OPTIONS.md +0 -267
  189. package/dist/cloud/device/TuyaDeviceManager.js.map +0 -1
  190. package/dist/local/CloudLocalReconciliation.js +0 -180
  191. package/dist/local/CloudLocalReconciliation.js.map +0 -1
  192. package/dist/shared/AccessoryFactory.js +0 -276
  193. package/dist/shared/AccessoryFactory.js.map +0 -1
  194. package/dist/shared/accessories/AccessoryFactory.js +0 -305
  195. package/dist/shared/accessories/AccessoryFactory.js.map +0 -1
  196. package/dist/shared/accessories/AirConditionerAccessory.js.map +0 -1
  197. package/dist/shared/accessories/AirQualitySensorAccessory.js.map +0 -1
  198. package/dist/shared/accessories/BaseAccessory.js.map +0 -1
  199. package/dist/shared/accessories/CameraAccessory.js.map +0 -1
  200. package/dist/shared/accessories/GarageDoorAccessory.js.map +0 -1
  201. package/dist/shared/accessories/HumanPresenceSensorAccessory.js.map +0 -1
  202. package/dist/shared/accessories/IRAirConditionerAccessory.js.map +0 -1
  203. package/dist/shared/accessories/IRControlHubAccessory.js.map +0 -1
  204. package/dist/shared/accessories/IRControlHubSubAccessory.js.map +0 -1
  205. package/dist/shared/accessories/IRGenericAccessory.js.map +0 -1
  206. package/dist/shared/accessories/LocationWeatherAccessory.js.map +0 -1
  207. package/dist/shared/accessories/MotionSensorAccessory.js.map +0 -1
  208. package/dist/shared/accessories/OutletAccessory.js.map +0 -1
  209. package/dist/shared/accessories/SceneAccessory.js.map +0 -1
  210. package/dist/shared/accessories/SceneSwitchAccessory.js.map +0 -1
  211. package/dist/shared/accessories/SecuritySystemAccessory.js.map +0 -1
  212. package/dist/shared/accessories/SwitchAccessory.js.map +0 -1
  213. package/dist/shared/accessories/TemperatureHumiditySensorAccessory.js.map +0 -1
  214. package/dist/shared/accessories/WeatherStationAccessory.js.map +0 -1
  215. package/dist/shared/accessories/WetBulbGlobeTemperatureAccessory.js.map +0 -1
  216. package/dist/shared/accessories/WhiteNoiseLightAccessory.js.map +0 -1
  217. package/dist/shared/accessories/WindowAccessory.js.map +0 -1
  218. package/dist/shared/accessories/characteristic/Active.js.map +0 -1
  219. package/dist/shared/accessories/characteristic/AirQuality.js.map +0 -1
  220. package/dist/shared/accessories/characteristic/CurrentRelativeHumidity.js.map +0 -1
  221. package/dist/shared/accessories/characteristic/CurrentTemperature.js.map +0 -1
  222. package/dist/shared/accessories/characteristic/CurrentWeather.js.map +0 -1
  223. package/dist/shared/accessories/characteristic/CurrentWeatherByOpenMeteo.js.map +0 -1
  224. package/dist/shared/accessories/characteristic/CurrentWetBulbGlobeTemperature.js.map +0 -1
  225. package/dist/shared/accessories/characteristic/EnergyUsage.js.map +0 -1
  226. package/dist/shared/accessories/characteristic/Light.js.map +0 -1
  227. package/dist/shared/accessories/characteristic/LightSensor.js.map +0 -1
  228. package/dist/shared/accessories/characteristic/LockPhysicalControls.js.map +0 -1
  229. package/dist/shared/accessories/characteristic/MotionDetected.js.map +0 -1
  230. package/dist/shared/accessories/characteristic/Name.js.map +0 -1
  231. package/dist/shared/accessories/characteristic/OccupancyDetected.js.map +0 -1
  232. package/dist/shared/accessories/characteristic/On.js.map +0 -1
  233. package/dist/shared/accessories/characteristic/OutletInUse.js.map +0 -1
  234. package/dist/shared/accessories/characteristic/ProgrammableSwitchEvent.js.map +0 -1
  235. package/dist/shared/accessories/characteristic/RelativeHumidityDehumidifierThreshold.js.map +0 -1
  236. package/dist/shared/accessories/characteristic/RotationSpeed.js.map +0 -1
  237. package/dist/shared/accessories/characteristic/SecuritySystemState.js.map +0 -1
  238. package/dist/shared/accessories/characteristic/SwingMode.js.map +0 -1
  239. package/dist/shared/accessories/characteristic/TargetTemperature.js.map +0 -1
  240. package/dist/shared/accessories/characteristic/TemperatureDisplayUnits.js.map +0 -1
  241. package/test/zigbee/CloudLocalReconciliation.test.ts +0 -284
  242. package/tuya-local-configs/dev-1.hash +0 -1
  243. package/tuya-local-configs/device1.hash +0 -1
  244. package/wiki/Get-Local-Keys-for-Your-Devices.md +0 -85
  245. /package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js +0 -0
  246. /package/dist/shared/{accessories → accessory}/AirQualitySensorAccessory.js +0 -0
  247. /package/dist/shared/{accessories → accessory}/BlindsAccessory.js +0 -0
  248. /package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js +0 -0
  249. /package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js +0 -0
  250. /package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js +0 -0
  251. /package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js +0 -0
  252. /package/dist/shared/{accessories → accessory}/DiffuserAccessory.js +0 -0
  253. /package/dist/shared/{accessories → accessory}/DimmerAccessory.js +0 -0
  254. /package/dist/shared/{accessories → accessory}/DoorbellAccessory.js +0 -0
  255. /package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js +0 -0
  256. /package/dist/shared/{accessories → accessory}/FanAccessory.js +0 -0
  257. /package/dist/shared/{accessories → accessory}/HeaterAccessory.js +0 -0
  258. /package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js +0 -0
  259. /package/dist/shared/{accessories → accessory}/HumanPresenceSensorAccessory.js +0 -0
  260. /package/dist/shared/{accessories → accessory}/HumidifierAccessory.js +0 -0
  261. /package/dist/shared/{accessories → accessory}/IRAirConditionerAccessory.js +0 -0
  262. /package/dist/shared/{accessories → accessory}/IRControlHubAccessory.js +0 -0
  263. /package/dist/shared/{accessories → accessory}/IRControlHubSubAccessory.js +0 -0
  264. /package/dist/shared/{accessories → accessory}/IRGenericAccessory.js +0 -0
  265. /package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js +0 -0
  266. /package/dist/shared/{accessories → accessory}/LightAccessory.js +0 -0
  267. /package/dist/shared/{accessories → accessory}/LightSensorAccessory.js +0 -0
  268. /package/dist/shared/{accessories → accessory}/MotionSensorAccessory.js +0 -0
  269. /package/dist/shared/{accessories → accessory}/OutletAccessory.js +0 -0
  270. /package/dist/shared/{accessories → accessory}/PetFeederAccessory.js +0 -0
  271. /package/dist/shared/{accessories → accessory}/SceneSwitchAccessory.js +0 -0
  272. /package/dist/shared/{accessories → accessory}/SecuritySystemAccessory.js +0 -0
  273. /package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js +0 -0
  274. /package/dist/shared/{accessories → accessory}/TemperatureHumiditySensorAccessory.js +0 -0
  275. /package/dist/shared/{accessories → accessory}/ThermostatAccessory.js +0 -0
  276. /package/dist/shared/{accessories → accessory}/TowerRackAccessory.js +0 -0
  277. /package/dist/shared/{accessories → accessory}/ValveAccessory.js +0 -0
  278. /package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js +0 -0
  279. /package/dist/shared/{accessories → accessory}/WeatherStationAccessory.js +0 -0
  280. /package/dist/shared/{accessories → accessory}/WetBulbGlobeTemperatureAccessory.js +0 -0
  281. /package/dist/shared/{accessories → accessory}/WindowAccessory.js +0 -0
  282. /package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js +0 -0
  283. /package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js +0 -0
  284. /package/dist/shared/{accessories → accessory}/characteristic/Active.js +0 -0
  285. /package/dist/shared/{accessories → accessory}/characteristic/AirQuality.js +0 -0
  286. /package/dist/shared/{accessories → accessory}/characteristic/CurrentTemperature.js +0 -0
  287. /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeather.js +0 -0
  288. /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeatherByOpenMeteo.js +0 -0
  289. /package/dist/shared/{accessories → accessory}/characteristic/LightSensor.js +0 -0
  290. /package/dist/shared/{accessories → accessory}/characteristic/MotionDetected.js +0 -0
  291. /package/dist/shared/{accessories → accessory}/characteristic/Name.js +0 -0
  292. /package/dist/shared/{accessories → accessory}/characteristic/OccupancyDetected.js +0 -0
  293. /package/dist/shared/{accessories → accessory}/characteristic/OutletInUse.js +0 -0
  294. /package/dist/shared/{accessories → accessory}/characteristic/ProgrammableSwitchEvent.js +0 -0
  295. /package/dist/shared/{accessories → accessory}/characteristic/RotationSpeed.js +0 -0
  296. /package/dist/shared/{accessories → accessory}/characteristic/SecuritySystemState.js +0 -0
  297. /package/dist/shared/{accessories → accessory}/characteristic/TargetTemperature.js +0 -0
  298. /package/dist/shared/{accessories → accessory}/characteristic/TemperatureDisplayUnits.js +0 -0
@@ -1,15 +1,28 @@
1
1
  /* eslint-disable no-console */
2
- import { describe, expect, test, beforeEach } from '@jest/globals';
2
+ import { describe, expect, test, beforeEach, jest } from '@jest/globals';
3
3
  import { PlatformAccessory } from 'homebridge';
4
- import AccessoryFactory from '../src/shared/AccessoryFactory';
4
+ import AccessoryFactory from '../src/shared/accessory/AccessoryFactory';
5
5
  import TuyaDevice, { TuyaDeviceSchemaMode, TuyaDeviceSchemaType } from '../src/cloud/device/TuyaDevice';
6
- import { TuyaPlatform } from '../src/platform';
6
+ import { TuyaPlatform, TuyaPluginAccessoryContext } from '../src/platform';
7
+ import { ExLogger, initLogger } from '../src/shared/util/Logger';
8
+ import { createDelegate } from '../src/shared/util/util';
7
9
 
8
10
  describe('AccessoryFactory', () => {
9
11
  let mockPlatform: Partial<TuyaPlatform>;
10
12
  let mockAccessory: Partial<PlatformAccessory>;
11
13
 
12
14
  beforeEach(() => {
15
+ // Mock Logger
16
+ const mockLog: ExLogger = {
17
+ debug: jest.fn(),
18
+ info: jest.fn(),
19
+ warn: jest.fn(),
20
+ error: jest.fn(),
21
+ log: jest.fn(),
22
+ success: jest.fn(),
23
+ } as unknown as ExLogger;
24
+ initLogger(mockLog);
25
+
13
26
  // Create proper HAP mock structure
14
27
  class MockService {
15
28
  static AccessoryInformation = class {};
@@ -56,13 +69,7 @@ describe('AccessoryFactory', () => {
56
69
  }
57
70
 
58
71
  mockPlatform = {
59
- log: {
60
- info: jest.fn(),
61
- warn: jest.fn(),
62
- error: jest.fn(),
63
- debug: jest.fn(),
64
- log: jest.fn(),
65
- },
72
+ log: mockLog,
66
73
  config: {} as any,
67
74
  api: {
68
75
  hap: {
@@ -74,9 +81,11 @@ describe('AccessoryFactory', () => {
74
81
  accessories: [],
75
82
  Service: MockService as any,
76
83
  Characteristic: MockCharacteristic as any,
77
- options: {
78
- debug: false,
79
- debugLevel: '',
84
+ platformConfig: {
85
+ options: {
86
+ debug: false,
87
+ debugLevel: '',
88
+ }
80
89
  },
81
90
  deviceManager: {
82
91
  getDevice: jest.fn().mockReturnValue({
@@ -92,8 +101,8 @@ describe('AccessoryFactory', () => {
92
101
  isVirtualDevice: jest.fn().mockReturnValue(false),
93
102
  isIRControlHub: jest.fn().mockReturnValue(false),
94
103
  }),
104
+ getDeviceSchemaConfig: jest.fn().mockReturnValue({})
95
105
  },
96
- getDeviceSchemaConfig: jest.fn().mockReturnValue(null),
97
106
  getDeviceStatusProperty: jest.fn().mockReturnValue(undefined),
98
107
  } as any;
99
108
 
@@ -108,8 +117,8 @@ describe('AccessoryFactory', () => {
108
117
  addService: jest.fn().mockReturnValue({
109
118
  setCharacteristic: jest.fn().mockReturnThis(),
110
119
  getCharacteristic: jest.fn().mockReturnValue({
111
- onGet: jest.fn(function() { return this; }),
112
- onSet: jest.fn(function() { return this; }),
120
+ onGet: jest.fn().mockReturnThis(),
121
+ onSet: jest.fn().mockReturnThis(),
113
122
  setProps: jest.fn().mockReturnThis(),
114
123
  }),
115
124
  }),
@@ -131,7 +140,7 @@ describe('AccessoryFactory', () => {
131
140
 
132
141
  const accessory = AccessoryFactory.createAccessory(
133
142
  mockPlatform as TuyaPlatform,
134
- mockAccessory as PlatformAccessory,
143
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
135
144
  device,
136
145
  );
137
146
 
@@ -149,7 +158,7 @@ describe('AccessoryFactory', () => {
149
158
 
150
159
  const accessory = AccessoryFactory.createAccessory(
151
160
  mockPlatform as TuyaPlatform,
152
- mockAccessory as PlatformAccessory,
161
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
153
162
  device,
154
163
  );
155
164
 
@@ -170,7 +179,7 @@ describe('AccessoryFactory', () => {
170
179
  expect(() => {
171
180
  AccessoryFactory.createAccessory(
172
181
  mockPlatform as TuyaPlatform,
173
- mockAccessory as PlatformAccessory,
182
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
174
183
  device,
175
184
  );
176
185
  }).not.toThrow();
@@ -190,7 +199,7 @@ describe('AccessoryFactory', () => {
190
199
 
191
200
  const accessory = AccessoryFactory.createAccessory(
192
201
  mockPlatform as TuyaPlatform,
193
- mockAccessory as PlatformAccessory,
202
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
194
203
  device,
195
204
  );
196
205
 
@@ -209,7 +218,7 @@ describe('AccessoryFactory', () => {
209
218
 
210
219
  const accessory = AccessoryFactory.createAccessory(
211
220
  mockPlatform as TuyaPlatform,
212
- mockAccessory as PlatformAccessory,
221
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
213
222
  device,
214
223
  );
215
224
 
@@ -228,7 +237,7 @@ describe('AccessoryFactory', () => {
228
237
 
229
238
  const accessory = AccessoryFactory.createAccessory(
230
239
  mockPlatform as TuyaPlatform,
231
- mockAccessory as PlatformAccessory,
240
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
232
241
  device,
233
242
  );
234
243
 
@@ -247,7 +256,7 @@ describe('AccessoryFactory', () => {
247
256
 
248
257
  const accessory = AccessoryFactory.createAccessory(
249
258
  mockPlatform as TuyaPlatform,
250
- mockAccessory as PlatformAccessory,
259
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
251
260
  device,
252
261
  );
253
262
 
@@ -266,7 +275,7 @@ describe('AccessoryFactory', () => {
266
275
 
267
276
  const accessory = AccessoryFactory.createAccessory(
268
277
  mockPlatform as TuyaPlatform,
269
- mockAccessory as PlatformAccessory,
278
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
270
279
  device,
271
280
  );
272
281
 
@@ -285,7 +294,7 @@ describe('AccessoryFactory', () => {
285
294
 
286
295
  const accessory = AccessoryFactory.createAccessory(
287
296
  mockPlatform as TuyaPlatform,
288
- mockAccessory as PlatformAccessory,
297
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
289
298
  device,
290
299
  );
291
300
 
@@ -304,7 +313,7 @@ describe('AccessoryFactory', () => {
304
313
 
305
314
  const accessory = AccessoryFactory.createAccessory(
306
315
  mockPlatform as TuyaPlatform,
307
- mockAccessory as PlatformAccessory,
316
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
308
317
  device,
309
318
  );
310
319
 
@@ -323,7 +332,7 @@ describe('AccessoryFactory', () => {
323
332
 
324
333
  const accessory = AccessoryFactory.createAccessory(
325
334
  mockPlatform as TuyaPlatform,
326
- mockAccessory as PlatformAccessory,
335
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
327
336
  device,
328
337
  );
329
338
 
@@ -355,7 +364,7 @@ describe('AccessoryFactory', () => {
355
364
 
356
365
  const accessory = AccessoryFactory.createAccessory(
357
366
  mockPlatform as TuyaPlatform,
358
- mockAccessory as PlatformAccessory,
367
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
359
368
  device,
360
369
  );
361
370
 
@@ -374,7 +383,7 @@ describe('AccessoryFactory', () => {
374
383
 
375
384
  const accessory = AccessoryFactory.createAccessory(
376
385
  mockPlatform as TuyaPlatform,
377
- mockAccessory as PlatformAccessory,
386
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
378
387
  device,
379
388
  );
380
389
 
@@ -393,7 +402,7 @@ describe('AccessoryFactory', () => {
393
402
 
394
403
  const accessory = AccessoryFactory.createAccessory(
395
404
  mockPlatform as TuyaPlatform,
396
- mockAccessory as PlatformAccessory,
405
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
397
406
  device,
398
407
  );
399
408
 
@@ -424,7 +433,7 @@ describe('AccessoryFactory', () => {
424
433
 
425
434
  const accessory = AccessoryFactory.createAccessory(
426
435
  mockPlatform as TuyaPlatform,
427
- mockAccessory as PlatformAccessory,
436
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
428
437
  device,
429
438
  );
430
439
 
@@ -453,7 +462,7 @@ describe('AccessoryFactory', () => {
453
462
 
454
463
  const accessory = AccessoryFactory.createAccessory(
455
464
  mockPlatform as TuyaPlatform,
456
- mockAccessory as PlatformAccessory,
465
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
457
466
  device,
458
467
  );
459
468
 
@@ -474,7 +483,7 @@ describe('AccessoryFactory', () => {
474
483
 
475
484
  const accessory = AccessoryFactory.createAccessory(
476
485
  mockPlatform as TuyaPlatform,
477
- mockAccessory as PlatformAccessory,
486
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
478
487
  device,
479
488
  );
480
489
 
@@ -493,7 +502,7 @@ describe('AccessoryFactory', () => {
493
502
 
494
503
  const accessory = AccessoryFactory.createAccessory(
495
504
  mockPlatform as TuyaPlatform,
496
- mockAccessory as PlatformAccessory,
505
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
497
506
  device,
498
507
  );
499
508
 
@@ -512,11 +521,31 @@ describe('AccessoryFactory', () => {
512
521
 
513
522
  const accessory = AccessoryFactory.createAccessory(
514
523
  mockPlatform as TuyaPlatform,
515
- mockAccessory as PlatformAccessory,
524
+ mockAccessory as PlatformAccessory<TuyaPluginAccessoryContext>,
516
525
  device,
517
526
  );
518
527
 
519
528
  expect(accessory).toBeDefined();
520
529
  });
521
530
  });
531
+
532
+ describe('delegated accessory', () => {
533
+ test('sanitize displayName', () => {
534
+ const originalAccessory = {
535
+ addService: jest.fn(),
536
+ };
537
+ class AccessoryFactoryForTest extends AccessoryFactory {
538
+ static getPlatformAccessoryOverrides() {
539
+ return super.platformAccessoryOverrides;
540
+ }
541
+ }
542
+
543
+ const overridedAccessory = createDelegate(originalAccessory as any, AccessoryFactoryForTest.getPlatformAccessoryOverrides());
544
+
545
+ const spyAddService = jest.spyOn(originalAccessory, 'addService');
546
+ overridedAccessory.addService('a@a', 'b@b', 'c@c');
547
+
548
+ expect(spyAddService).toHaveBeenCalledWith('a@a', 'b b', 'c@c');
549
+ });
550
+ });
522
551
  });