@homebridge-plugins/homebridge-tuya 3.0.0-beta.7 → 3.0.0-beta.8

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 (278) hide show
  1. package/config.schema.json +385 -350
  2. package/dist/cloud/api/TuyaOpenAPI.js +5 -9
  3. package/dist/cloud/api/TuyaOpenAPI.js.map +1 -1
  4. package/dist/cloud/api/TuyaOpenMQ.js +3 -4
  5. package/dist/cloud/api/TuyaOpenMQ.js.map +1 -1
  6. package/dist/cloud/device/{TuyaDeviceManager.js → TuyaCloudDeviceManager.js} +96 -80
  7. package/dist/cloud/device/TuyaCloudDeviceManager.js.map +1 -0
  8. package/dist/cloud/device/TuyaCustomDeviceManager.js +74 -5
  9. package/dist/cloud/device/TuyaCustomDeviceManager.js.map +1 -1
  10. package/dist/cloud/device/TuyaHomeDeviceManager.js +76 -9
  11. package/dist/cloud/device/TuyaHomeDeviceManager.js.map +1 -1
  12. package/dist/config.js +26 -5
  13. package/dist/config.js.map +1 -1
  14. package/dist/local/DynamicChildDiscovery.js +2 -1
  15. package/dist/local/DynamicChildDiscovery.js.map +1 -1
  16. package/dist/local/LocalDevice.js +3 -2
  17. package/dist/local/LocalDevice.js.map +1 -1
  18. package/dist/local/LocalDeviceManager.js +72 -123
  19. package/dist/local/LocalDeviceManager.js.map +1 -1
  20. package/dist/local/TuyaDiscovery.js +14 -7
  21. package/dist/local/TuyaDiscovery.js.map +1 -1
  22. package/dist/local/ZigbeeGatewayDetection.js +2 -2
  23. package/dist/local/ZigbeeGatewayDetection.js.map +1 -1
  24. package/dist/local/protocol/ProtocolUtilities.js +34 -17
  25. package/dist/local/protocol/ProtocolUtilities.js.map +1 -1
  26. package/dist/local/protocol/ProtocolV31V32.js +4 -2
  27. package/dist/local/protocol/ProtocolV31V32.js.map +1 -1
  28. package/dist/local/protocol/ProtocolV33.js +4 -2
  29. package/dist/local/protocol/ProtocolV33.js.map +1 -1
  30. package/dist/local/protocol/ProtocolV34.js +10 -5
  31. package/dist/local/protocol/ProtocolV34.js.map +1 -1
  32. package/dist/local/protocol/ProtocolV35.js +8 -4
  33. package/dist/local/protocol/ProtocolV35.js.map +1 -1
  34. package/dist/platform.js +229 -493
  35. package/dist/platform.js.map +1 -1
  36. package/dist/settings.js +0 -2
  37. package/dist/settings.js.map +1 -1
  38. package/dist/shared/TuyaDeviceManager.js +86 -0
  39. package/dist/shared/TuyaDeviceManager.js.map +1 -0
  40. package/dist/shared/TuyaHybridDeviceManager.js +145 -0
  41. package/dist/shared/TuyaHybridDeviceManager.js.map +1 -0
  42. package/dist/shared/accessory/AccessoryFactory.js +334 -0
  43. package/dist/shared/accessory/AccessoryFactory.js.map +1 -0
  44. package/dist/shared/{accessories → accessory}/AirConditionerAccessory.js.map +1 -1
  45. package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js.map +1 -1
  46. package/dist/shared/accessory/AirQualitySensorAccessory.js.map +1 -0
  47. package/dist/shared/{accessories → accessory}/BaseAccessory.js +16 -95
  48. package/dist/shared/accessory/BaseAccessory.js.map +1 -0
  49. package/dist/shared/{accessories → accessory}/BlindsAccessory.js.map +1 -1
  50. package/dist/shared/{accessories → accessory}/CameraAccessory.js.map +1 -1
  51. package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js.map +1 -1
  52. package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js.map +1 -1
  53. package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js.map +1 -1
  54. package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js.map +1 -1
  55. package/dist/shared/{accessories → accessory}/DiffuserAccessory.js.map +1 -1
  56. package/dist/shared/{accessories → accessory}/DimmerAccessory.js.map +1 -1
  57. package/dist/shared/{accessories → accessory}/DoorbellAccessory.js.map +1 -1
  58. package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js.map +1 -1
  59. package/dist/shared/{accessories → accessory}/FanAccessory.js.map +1 -1
  60. package/dist/shared/{accessories → accessory}/GarageDoorAccessory.js.map +1 -1
  61. package/dist/shared/{accessories → accessory}/HeaterAccessory.js.map +1 -1
  62. package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js.map +1 -1
  63. package/dist/shared/accessory/HumanPresenceSensorAccessory.js.map +1 -0
  64. package/dist/shared/{accessories → accessory}/HumidifierAccessory.js.map +1 -1
  65. package/dist/shared/accessory/IRAirConditionerAccessory.js.map +1 -0
  66. package/dist/shared/accessory/IRControlHubAccessory.js.map +1 -0
  67. package/dist/shared/accessory/IRControlHubSubAccessory.js.map +1 -0
  68. package/dist/shared/accessory/IRGenericAccessory.js.map +1 -0
  69. package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js.map +1 -1
  70. package/dist/shared/{accessories → accessory}/LightAccessory.js.map +1 -1
  71. package/dist/shared/{accessories → accessory}/LightSensorAccessory.js.map +1 -1
  72. package/dist/shared/{accessories → accessory}/LocationWeatherAccessory.js +1 -1
  73. package/dist/shared/accessory/LocationWeatherAccessory.js.map +1 -0
  74. package/dist/shared/{accessories → accessory}/LockAccessory.js +3 -3
  75. package/dist/shared/{accessories → accessory}/LockAccessory.js.map +1 -1
  76. package/dist/shared/accessory/MotionSensorAccessory.js.map +1 -0
  77. package/dist/shared/accessory/OutletAccessory.js.map +1 -0
  78. package/dist/shared/{accessories → accessory}/PetFeederAccessory.js.map +1 -1
  79. package/dist/shared/{accessories → accessory}/SceneAccessory.js +1 -1
  80. package/dist/shared/accessory/SceneAccessory.js.map +1 -0
  81. package/dist/shared/accessory/SceneSwitchAccessory.js.map +1 -0
  82. package/dist/shared/accessory/SecuritySystemAccessory.js.map +1 -0
  83. package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js.map +1 -1
  84. package/dist/shared/{accessories → accessory}/SwitchAccessory.js +1 -45
  85. package/dist/shared/accessory/SwitchAccessory.js.map +1 -0
  86. package/dist/shared/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
  87. package/dist/shared/{accessories → accessory}/ThermostatAccessory.js.map +1 -1
  88. package/dist/shared/{accessories → accessory}/TowerRackAccessory.js.map +1 -1
  89. package/dist/shared/{accessories → accessory}/ValveAccessory.js.map +1 -1
  90. package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js.map +1 -1
  91. package/dist/shared/accessory/WeatherStationAccessory.js.map +1 -0
  92. package/dist/shared/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
  93. package/dist/shared/{accessories → accessory}/WhiteNoiseLightAccessory.js +1 -0
  94. package/dist/shared/accessory/WhiteNoiseLightAccessory.js.map +1 -0
  95. package/dist/shared/accessory/WindowAccessory.js.map +1 -0
  96. package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js.map +1 -1
  97. package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js.map +1 -1
  98. package/dist/shared/accessory/characteristic/Active.js.map +1 -0
  99. package/dist/shared/accessory/characteristic/AirQuality.js.map +1 -0
  100. package/dist/shared/accessory/characteristic/CurrentRelativeHumidity.js.map +1 -0
  101. package/dist/shared/accessory/characteristic/CurrentTemperature.js.map +1 -0
  102. package/dist/shared/accessory/characteristic/CurrentWeather.js.map +1 -0
  103. package/dist/shared/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
  104. package/dist/shared/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
  105. package/dist/shared/{accessories → accessory}/characteristic/EnergyUsage.js +0 -5
  106. package/dist/shared/accessory/characteristic/EnergyUsage.js.map +1 -0
  107. package/dist/shared/{accessories → accessory}/characteristic/Light.js +5 -3
  108. package/dist/shared/accessory/characteristic/Light.js.map +1 -0
  109. package/dist/shared/accessory/characteristic/LightSensor.js.map +1 -0
  110. package/dist/shared/accessory/characteristic/LockPhysicalControls.js.map +1 -0
  111. package/dist/shared/accessory/characteristic/MotionDetected.js.map +1 -0
  112. package/dist/shared/accessory/characteristic/Name.js.map +1 -0
  113. package/dist/shared/accessory/characteristic/OccupancyDetected.js.map +1 -0
  114. package/dist/shared/{accessories → accessory}/characteristic/On.js +1 -0
  115. package/dist/shared/accessory/characteristic/On.js.map +1 -0
  116. package/dist/shared/accessory/characteristic/OutletInUse.js.map +1 -0
  117. package/dist/shared/accessory/characteristic/ProgrammableSwitchEvent.js.map +1 -0
  118. package/dist/shared/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
  119. package/dist/shared/accessory/characteristic/RotationSpeed.js.map +1 -0
  120. package/dist/shared/accessory/characteristic/SecuritySystemState.js.map +1 -0
  121. package/dist/shared/accessory/characteristic/SwingMode.js.map +1 -0
  122. package/dist/shared/accessory/characteristic/TargetTemperature.js.map +1 -0
  123. package/dist/shared/accessory/characteristic/TemperatureDisplayUnits.js.map +1 -0
  124. package/dist/shared/util/ConfigHash.js +2 -2
  125. package/dist/shared/util/ConfigHash.js.map +1 -1
  126. package/dist/shared/util/ConfigMigrator.js +162 -0
  127. package/dist/shared/util/ConfigMigrator.js.map +1 -0
  128. package/dist/shared/util/FfmpegStreamingProcess.js.map +1 -1
  129. package/dist/shared/util/InfraredTool.js +0 -2
  130. package/dist/shared/util/InfraredTool.js.map +1 -1
  131. package/dist/shared/util/Logger.js +69 -10
  132. package/dist/shared/util/Logger.js.map +1 -1
  133. package/dist/shared/util/TuyaStreamDelegate.js +2 -8
  134. package/dist/shared/util/TuyaStreamDelegate.js.map +1 -1
  135. package/dist/shared/util/util.js +13 -4
  136. package/dist/shared/util/util.js.map +1 -1
  137. package/eslint.config.mjs +0 -1
  138. package/{jest.config.js → jest.config.ts} +5 -2
  139. package/package.json +8 -5
  140. package/test/ConfigMigrator.test.ts +634 -0
  141. package/test/Logger.test.ts +482 -0
  142. package/test/accessoryFactory.data.test.ts +172 -0
  143. package/test/accessoryFactory.test.ts +64 -35
  144. package/test/config.test.ts +17 -13
  145. package/test/custom.test.ts +2 -2
  146. package/test/errorHandling.test.ts +12 -12
  147. package/test/home.test.ts +1 -1
  148. package/test/hybridDeviceManager.test.ts +808 -0
  149. package/test/localDevice.test.ts +21 -50
  150. package/test/localDeviceManager.behavior.test.ts +16 -30
  151. package/test/localDeviceManager.test.ts +23 -39
  152. package/test/mqttMessages.test.ts +33 -14
  153. package/test/platform.test.ts +340 -810
  154. package/test/platform.validation.local.test.ts +58 -119
  155. package/test/tuyaCustomDeviceManager.test.ts +106 -16
  156. package/test/tuyaDeviceManager.test.ts +636 -639
  157. package/test/tuyaDiscovery.test.ts +21 -33
  158. package/test/tuyaHomeDeviceManager.test.ts +109 -18
  159. package/test/tuyaOpenAPI.test.ts +25 -44
  160. package/test/tuyaOpenMQ.test.ts +15 -23
  161. package/test/util.test.ts +87 -7
  162. package/test/zigbee/LocalDevice.zigbee.test.ts +14 -18
  163. package/test/zigbee/LocalDeviceManager.cloud-discovery.test.ts +19 -20
  164. package/test/zigbee/LocalDeviceManager.zigbee.reconnect.test.ts +18 -20
  165. package/test/zigbee/LocalDeviceManager.zigbee.test.ts +31 -34
  166. package/test/zigbee/ZigbeeGatewayDetection.test.ts +2 -2
  167. package/dist/cloud/device/TuyaDeviceManager.js.map +0 -1
  168. package/dist/local/CloudLocalReconciliation.js +0 -180
  169. package/dist/local/CloudLocalReconciliation.js.map +0 -1
  170. package/dist/shared/accessories/AccessoryFactory.js +0 -309
  171. package/dist/shared/accessories/AccessoryFactory.js.map +0 -1
  172. package/dist/shared/accessories/AirQualitySensorAccessory.js.map +0 -1
  173. package/dist/shared/accessories/BaseAccessory.js.map +0 -1
  174. package/dist/shared/accessories/HumanPresenceSensorAccessory.js.map +0 -1
  175. package/dist/shared/accessories/IRAirConditionerAccessory.js.map +0 -1
  176. package/dist/shared/accessories/IRControlHubAccessory.js.map +0 -1
  177. package/dist/shared/accessories/IRControlHubSubAccessory.js.map +0 -1
  178. package/dist/shared/accessories/IRGenericAccessory.js.map +0 -1
  179. package/dist/shared/accessories/LocationWeatherAccessory.js.map +0 -1
  180. package/dist/shared/accessories/MotionSensorAccessory.js.map +0 -1
  181. package/dist/shared/accessories/OutletAccessory.js.map +0 -1
  182. package/dist/shared/accessories/SceneAccessory.js.map +0 -1
  183. package/dist/shared/accessories/SceneSwitchAccessory.js.map +0 -1
  184. package/dist/shared/accessories/SecuritySystemAccessory.js.map +0 -1
  185. package/dist/shared/accessories/SwitchAccessory.js.map +0 -1
  186. package/dist/shared/accessories/TemperatureHumiditySensorAccessory.js.map +0 -1
  187. package/dist/shared/accessories/WeatherStationAccessory.js.map +0 -1
  188. package/dist/shared/accessories/WetBulbGlobeTemperatureAccessory.js.map +0 -1
  189. package/dist/shared/accessories/WhiteNoiseLightAccessory.js.map +0 -1
  190. package/dist/shared/accessories/WindowAccessory.js.map +0 -1
  191. package/dist/shared/accessories/characteristic/Active.js.map +0 -1
  192. package/dist/shared/accessories/characteristic/AirQuality.js.map +0 -1
  193. package/dist/shared/accessories/characteristic/CurrentRelativeHumidity.js.map +0 -1
  194. package/dist/shared/accessories/characteristic/CurrentTemperature.js.map +0 -1
  195. package/dist/shared/accessories/characteristic/CurrentWeather.js.map +0 -1
  196. package/dist/shared/accessories/characteristic/CurrentWeatherByOpenMeteo.js.map +0 -1
  197. package/dist/shared/accessories/characteristic/CurrentWetBulbGlobeTemperature.js.map +0 -1
  198. package/dist/shared/accessories/characteristic/EnergyUsage.js.map +0 -1
  199. package/dist/shared/accessories/characteristic/Light.js.map +0 -1
  200. package/dist/shared/accessories/characteristic/LightSensor.js.map +0 -1
  201. package/dist/shared/accessories/characteristic/LockPhysicalControls.js.map +0 -1
  202. package/dist/shared/accessories/characteristic/MotionDetected.js.map +0 -1
  203. package/dist/shared/accessories/characteristic/Name.js.map +0 -1
  204. package/dist/shared/accessories/characteristic/OccupancyDetected.js.map +0 -1
  205. package/dist/shared/accessories/characteristic/On.js.map +0 -1
  206. package/dist/shared/accessories/characteristic/OutletInUse.js.map +0 -1
  207. package/dist/shared/accessories/characteristic/ProgrammableSwitchEvent.js.map +0 -1
  208. package/dist/shared/accessories/characteristic/RelativeHumidityDehumidifierThreshold.js.map +0 -1
  209. package/dist/shared/accessories/characteristic/RotationSpeed.js.map +0 -1
  210. package/dist/shared/accessories/characteristic/SecuritySystemState.js.map +0 -1
  211. package/dist/shared/accessories/characteristic/SwingMode.js.map +0 -1
  212. package/dist/shared/accessories/characteristic/TargetTemperature.js.map +0 -1
  213. package/dist/shared/accessories/characteristic/TemperatureDisplayUnits.js.map +0 -1
  214. package/test/zigbee/CloudLocalReconciliation.test.ts +0 -284
  215. package/tuya-local-configs/dev-1.hash +0 -1
  216. package/tuya-local-configs/device1.hash +0 -1
  217. /package/dist/shared/{accessories → accessory}/AirConditionerAccessory.js +0 -0
  218. /package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js +0 -0
  219. /package/dist/shared/{accessories → accessory}/AirQualitySensorAccessory.js +0 -0
  220. /package/dist/shared/{accessories → accessory}/BlindsAccessory.js +0 -0
  221. /package/dist/shared/{accessories → accessory}/CameraAccessory.js +0 -0
  222. /package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js +0 -0
  223. /package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js +0 -0
  224. /package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js +0 -0
  225. /package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js +0 -0
  226. /package/dist/shared/{accessories → accessory}/DiffuserAccessory.js +0 -0
  227. /package/dist/shared/{accessories → accessory}/DimmerAccessory.js +0 -0
  228. /package/dist/shared/{accessories → accessory}/DoorbellAccessory.js +0 -0
  229. /package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js +0 -0
  230. /package/dist/shared/{accessories → accessory}/FanAccessory.js +0 -0
  231. /package/dist/shared/{accessories → accessory}/GarageDoorAccessory.js +0 -0
  232. /package/dist/shared/{accessories → accessory}/HeaterAccessory.js +0 -0
  233. /package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js +0 -0
  234. /package/dist/shared/{accessories → accessory}/HumanPresenceSensorAccessory.js +0 -0
  235. /package/dist/shared/{accessories → accessory}/HumidifierAccessory.js +0 -0
  236. /package/dist/shared/{accessories → accessory}/IRAirConditionerAccessory.js +0 -0
  237. /package/dist/shared/{accessories → accessory}/IRControlHubAccessory.js +0 -0
  238. /package/dist/shared/{accessories → accessory}/IRControlHubSubAccessory.js +0 -0
  239. /package/dist/shared/{accessories → accessory}/IRGenericAccessory.js +0 -0
  240. /package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js +0 -0
  241. /package/dist/shared/{accessories → accessory}/LightAccessory.js +0 -0
  242. /package/dist/shared/{accessories → accessory}/LightSensorAccessory.js +0 -0
  243. /package/dist/shared/{accessories → accessory}/MotionSensorAccessory.js +0 -0
  244. /package/dist/shared/{accessories → accessory}/OutletAccessory.js +0 -0
  245. /package/dist/shared/{accessories → accessory}/PetFeederAccessory.js +0 -0
  246. /package/dist/shared/{accessories → accessory}/SceneSwitchAccessory.js +0 -0
  247. /package/dist/shared/{accessories → accessory}/SecuritySystemAccessory.js +0 -0
  248. /package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js +0 -0
  249. /package/dist/shared/{accessories → accessory}/TemperatureHumiditySensorAccessory.js +0 -0
  250. /package/dist/shared/{accessories → accessory}/ThermostatAccessory.js +0 -0
  251. /package/dist/shared/{accessories → accessory}/TowerRackAccessory.js +0 -0
  252. /package/dist/shared/{accessories → accessory}/ValveAccessory.js +0 -0
  253. /package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js +0 -0
  254. /package/dist/shared/{accessories → accessory}/WeatherStationAccessory.js +0 -0
  255. /package/dist/shared/{accessories → accessory}/WetBulbGlobeTemperatureAccessory.js +0 -0
  256. /package/dist/shared/{accessories → accessory}/WindowAccessory.js +0 -0
  257. /package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js +0 -0
  258. /package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js +0 -0
  259. /package/dist/shared/{accessories → accessory}/characteristic/Active.js +0 -0
  260. /package/dist/shared/{accessories → accessory}/characteristic/AirQuality.js +0 -0
  261. /package/dist/shared/{accessories → accessory}/characteristic/CurrentRelativeHumidity.js +0 -0
  262. /package/dist/shared/{accessories → accessory}/characteristic/CurrentTemperature.js +0 -0
  263. /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeather.js +0 -0
  264. /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeatherByOpenMeteo.js +0 -0
  265. /package/dist/shared/{accessories → accessory}/characteristic/CurrentWetBulbGlobeTemperature.js +0 -0
  266. /package/dist/shared/{accessories → accessory}/characteristic/LightSensor.js +0 -0
  267. /package/dist/shared/{accessories → accessory}/characteristic/LockPhysicalControls.js +0 -0
  268. /package/dist/shared/{accessories → accessory}/characteristic/MotionDetected.js +0 -0
  269. /package/dist/shared/{accessories → accessory}/characteristic/Name.js +0 -0
  270. /package/dist/shared/{accessories → accessory}/characteristic/OccupancyDetected.js +0 -0
  271. /package/dist/shared/{accessories → accessory}/characteristic/OutletInUse.js +0 -0
  272. /package/dist/shared/{accessories → accessory}/characteristic/ProgrammableSwitchEvent.js +0 -0
  273. /package/dist/shared/{accessories → accessory}/characteristic/RelativeHumidityDehumidifierThreshold.js +0 -0
  274. /package/dist/shared/{accessories → accessory}/characteristic/RotationSpeed.js +0 -0
  275. /package/dist/shared/{accessories → accessory}/characteristic/SecuritySystemState.js +0 -0
  276. /package/dist/shared/{accessories → accessory}/characteristic/SwingMode.js +0 -0
  277. /package/dist/shared/{accessories → accessory}/characteristic/TargetTemperature.js +0 -0
  278. /package/dist/shared/{accessories → accessory}/characteristic/TemperatureDisplayUnits.js +0 -0
@@ -2,19 +2,17 @@
2
2
  import { describe, expect, it, beforeEach, jest } from '@jest/globals';
3
3
  import EventEmitter from 'events';
4
4
  import LocalDevice, { LocalDeviceContext } from '../../src/local/LocalDevice';
5
+ import { ExLogger, initLogger } from '../../src/shared/util/Logger';
5
6
 
6
7
  // ── Logger mock ───────────────────────────────────────────────────────────────
7
-
8
- jest.mock('../../src/shared/util/Logger', () => ({
9
- __esModule: true,
10
- default: class Logger {
11
- log() {}; info() {}; warn() {}; error() {}; debug() {};
12
- },
13
- PrefixLogger: class PrefixLogger {
14
- constructor(public _log: any, public prefix: string) {}
15
- debug() {}; info() {}; warn() {}; error() {};
16
- },
17
- }));
8
+ const mockLog: ExLogger = {
9
+ debug: jest.fn(),
10
+ info: jest.fn(),
11
+ warn: jest.fn(),
12
+ error: jest.fn(),
13
+ log: jest.fn(),
14
+ success: jest.fn(),
15
+ } as unknown as ExLogger;
18
16
 
19
17
  // ── Protocol mock ──────────────────────────────────────────────────────────────
20
18
 
@@ -46,11 +44,6 @@ jest.mock('net', () => ({
46
44
  }));
47
45
 
48
46
  // ── Helpers ────────────────────────────────────────────────────────────────────
49
-
50
- function makeLogger() {
51
- return { log: jest.fn(), info: jest.fn(), warn: jest.fn(), error: jest.fn(), debug: jest.fn() } as any;
52
- }
53
-
54
47
  function makeParent(overrides: Partial<LocalDeviceContext> = {}): LocalDevice {
55
48
  const ctx: LocalDeviceContext = {
56
49
  id: 'gateway_001',
@@ -60,7 +53,7 @@ function makeParent(overrides: Partial<LocalDeviceContext> = {}): LocalDevice {
60
53
  name: 'Test Gateway',
61
54
  ...overrides,
62
55
  };
63
- return new LocalDevice(ctx, makeLogger());
56
+ return new LocalDevice(ctx);
64
57
  }
65
58
 
66
59
  function makeChild(parent: LocalDevice, cid: string): LocalDevice {
@@ -71,7 +64,7 @@ function makeChild(parent: LocalDevice, cid: string): LocalDevice {
71
64
  version: '3.3',
72
65
  name: 'Test Child',
73
66
  };
74
- const child = new LocalDevice(ctx, makeLogger());
67
+ const child = new LocalDevice(ctx);
75
68
  child.parentDevice = parent;
76
69
  child.childId = cid;
77
70
  parent.children.set(cid, child);
@@ -81,6 +74,9 @@ function makeChild(parent: LocalDevice, cid: string): LocalDevice {
81
74
  // ── Tests ──────────────────────────────────────────────────────────────────────
82
75
 
83
76
  describe('LocalDevice – Zigbee parent/child', () => {
77
+ beforeEach(() => {
78
+ initLogger(mockLog);
79
+ });
84
80
 
85
81
  describe('children Map', () => {
86
82
  it('starts as an empty Map', () => {
@@ -1,20 +1,19 @@
1
1
  import { describe, expect, it, beforeEach, afterEach, jest } from '@jest/globals';
2
2
  import LocalDeviceManager from '../../src/local/LocalDeviceManager';
3
3
  import { LocalConfig } from '../../src/local/config';
4
- import Logger from '../../src/shared/util/Logger';
5
-
6
- function makeMockLog(): Logger {
7
- return {
8
- debug: jest.fn(),
9
- info: jest.fn(),
10
- warn: jest.fn(),
11
- error: jest.fn(),
12
- log: jest.fn(),
13
- } as unknown as Logger;
14
- }
4
+ import { ExLogger, initLogger } from '../../src/shared/util/Logger';
5
+
6
+ // Mock Logger
7
+ const mockLog: ExLogger = {
8
+ debug: jest.fn(),
9
+ info: jest.fn(),
10
+ warn: jest.fn(),
11
+ error: jest.fn(),
12
+ log: jest.fn(),
13
+ success: jest.fn(),
14
+ } as unknown as ExLogger;
15
15
 
16
16
  describe('LocalDeviceManager – Cloud-based child discovery', () => {
17
- let log: Logger;
18
17
  let manager: LocalDeviceManager;
19
18
 
20
19
  const GATEWAY_ID = 'cloud_gw_001';
@@ -22,7 +21,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
22
21
  const DEVICE_IP = '192.168.1.200';
23
22
 
24
23
  beforeEach(() => {
25
- log = makeMockLog();
24
+ initLogger(mockLog);
26
25
  });
27
26
 
28
27
  afterEach(() => {
@@ -46,7 +45,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
46
45
  ],
47
46
  };
48
47
 
49
- manager = new LocalDeviceManager(config, log);
48
+ manager = new LocalDeviceManager(config);
50
49
 
51
50
  const cloudDevices = [
52
51
  { id: GATEWAY_ID },
@@ -65,7 +64,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
65
64
  devices: [],
66
65
  };
67
66
 
68
- manager = new LocalDeviceManager(config, log);
67
+ manager = new LocalDeviceManager(config);
69
68
 
70
69
  const cloudDevices = [
71
70
  { id: 'unknown_gw', gateway_id: undefined },
@@ -74,7 +73,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
74
73
 
75
74
  manager.discoverChildrenFromCloud(cloudDevices);
76
75
 
77
- const debugSpy = log.debug as jest.MockedFunction<typeof log.debug>;
76
+ const debugSpy = jest.spyOn(mockLog, 'debug');
78
77
  expect(debugSpy.mock.calls.length).toBeGreaterThan(0);
79
78
  });
80
79
 
@@ -91,7 +90,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
91
90
  ],
92
91
  };
93
92
 
94
- manager = new LocalDeviceManager(config, log);
93
+ manager = new LocalDeviceManager(config);
95
94
 
96
95
  // Should not throw
97
96
  expect(() => {
@@ -115,7 +114,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
115
114
  ],
116
115
  };
117
116
 
118
- manager = new LocalDeviceManager(config, log);
117
+ manager = new LocalDeviceManager(config);
119
118
 
120
119
  const cloudDevices = [
121
120
  { id: GATEWAY_ID },
@@ -125,7 +124,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
125
124
  manager.discoverChildrenFromCloud(cloudDevices);
126
125
 
127
126
  // Should not log auto-discovery (device is not a gateway)
128
- const infoSpy = log.info as jest.MockedFunction<typeof log.info>;
127
+ const infoSpy = jest.spyOn(mockLog, 'info');
129
128
  const callsWithAutoDiscovery = infoSpy.mock.calls.filter(c =>
130
129
  String(c[0]).includes('auto-discovery'),
131
130
  );
@@ -146,7 +145,7 @@ describe('LocalDeviceManager – Cloud-based child discovery', () => {
146
145
  ],
147
146
  };
148
147
 
149
- manager = new LocalDeviceManager(config, log);
148
+ manager = new LocalDeviceManager(config);
150
149
 
151
150
  const cloudDevices = [
152
151
  { id: GATEWAY_ID },
@@ -1,21 +1,19 @@
1
1
  import { describe, expect, it, beforeEach, afterEach, jest } from '@jest/globals';
2
2
  import LocalDeviceManager from '../../src/local/LocalDeviceManager';
3
- import { LocalConfig, LocalDeviceConfig } from '../../src/local/config';
4
- import TuyaDeviceManager from '../../src/cloud/device/TuyaDeviceManager';
5
- import Logger from '../../src/shared/util/Logger';
6
-
7
- function makeMockLog(): Logger {
8
- return {
9
- debug: jest.fn(),
10
- info: jest.fn(),
11
- warn: jest.fn(),
12
- error: jest.fn(),
13
- log: jest.fn(),
14
- } as unknown as Logger;
15
- }
3
+ import { LocalConfig } from '../../src/local/config';
4
+ import { ExLogger, initLogger } from '../../src/shared/util/Logger';
5
+
6
+ // Mock Logger
7
+ const mockLog: ExLogger = {
8
+ debug: jest.fn(),
9
+ info: jest.fn(),
10
+ warn: jest.fn(),
11
+ error: jest.fn(),
12
+ log: jest.fn(),
13
+ success: jest.fn(),
14
+ } as unknown as ExLogger;
16
15
 
17
16
  describe('LocalDeviceManager – Zigbee gateway reconnection', () => {
18
- let log: Logger;
19
17
  let manager: LocalDeviceManager;
20
18
 
21
19
  const GATEWAY_ID = 'gw_reconnect_001';
@@ -50,8 +48,8 @@ describe('LocalDeviceManager – Zigbee gateway reconnection', () => {
50
48
  }
51
49
 
52
50
  beforeEach(() => {
53
- log = makeMockLog();
54
- manager = new LocalDeviceManager(zigbeeReconnectConfig(), log);
51
+ initLogger(mockLog);
52
+ manager = new LocalDeviceManager(zigbeeReconnectConfig());
55
53
  });
56
54
 
57
55
  afterEach(() => {
@@ -94,7 +92,7 @@ describe('LocalDeviceManager – Zigbee gateway reconnection', () => {
94
92
  ],
95
93
  };
96
94
 
97
- const mgr = new LocalDeviceManager(configWithOverride, log);
95
+ const mgr = new LocalDeviceManager(configWithOverride);
98
96
  // Should initialize without error even with per-child DP overrides
99
97
  await mgr.initLocalDevices();
100
98
 
@@ -131,7 +129,7 @@ describe('LocalDeviceManager – Zigbee gateway reconnection', () => {
131
129
  ],
132
130
  };
133
131
 
134
- const mgr = new LocalDeviceManager(configWithCategoryOverride, log);
132
+ const mgr = new LocalDeviceManager(configWithCategoryOverride);
135
133
  await mgr.initLocalDevices();
136
134
 
137
135
  const gwDevice = mgr.getDevice(GATEWAY_ID);
@@ -173,10 +171,10 @@ describe('LocalDeviceManager – Zigbee gateway reconnection', () => {
173
171
  ],
174
172
  };
175
173
 
176
- const mgr = new LocalDeviceManager(multiChildConfig, log);
174
+ const mgr = new LocalDeviceManager(multiChildConfig);
175
+ const infoSpy = jest.spyOn(mockLog, 'info');
177
176
  await mgr.initLocalDevices();
178
177
 
179
- const infoSpy = log.info as jest.MockedFunction<typeof log.info>;
180
178
  const infoCalls = infoSpy.mock.calls.map(c => String(c[0]));
181
179
  const gatewayLine = infoCalls.find(s => s.includes('Zigbee gateway detected'));
182
180
 
@@ -1,20 +1,18 @@
1
1
  import { describe, expect, it, beforeEach, afterEach, jest } from '@jest/globals';
2
2
  import LocalDeviceManager from '../../src/local/LocalDeviceManager';
3
3
  import { LocalConfig } from '../../src/local/config';
4
- import TuyaDeviceManager from '../../src/cloud/device/TuyaDeviceManager';
5
- import Logger from '../../src/shared/util/Logger';
4
+ import TuyaCloudDeviceManager from '../../src/cloud/device/TuyaCloudDeviceManager';
5
+ import Logger, { ExLogger, initLogger } from '../../src/shared/util/Logger';
6
6
 
7
7
  // ── Logger mock ───────────────────────────────────────────────────────────────
8
-
9
- function makeMockLog(): Logger {
10
- return {
11
- debug: jest.fn(),
12
- info: jest.fn(),
13
- warn: jest.fn(),
14
- error: jest.fn(),
15
- log: jest.fn(),
16
- } as unknown as Logger;
17
- }
8
+ const mockLog: ExLogger = {
9
+ debug: jest.fn(),
10
+ info: jest.fn(),
11
+ warn: jest.fn(),
12
+ error: jest.fn(),
13
+ log: jest.fn(),
14
+ success: jest.fn(),
15
+ } as unknown as ExLogger;
18
16
 
19
17
  // ── Minimal config helpers ──────────────────────────────────────────────────
20
18
 
@@ -82,11 +80,10 @@ function standaloneConfig(): LocalConfig {
82
80
  // ── Tests ──────────────────────────────────────────────────────────────────────
83
81
 
84
82
  describe('LocalDeviceManager – Zigbee integration', () => {
85
- let log: Logger;
86
83
  let manager: LocalDeviceManager;
87
84
 
88
85
  beforeEach(() => {
89
- log = makeMockLog();
86
+ initLogger(mockLog);
90
87
  });
91
88
 
92
89
  afterEach(() => {
@@ -98,7 +95,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
98
95
 
99
96
  describe('initLocalDevices() – child device handling', () => {
100
97
  it('does not register child devices as TuyaDevices during first init pass', async () => {
101
- manager = new LocalDeviceManager(zigbeeConfig(), log);
98
+ manager = new LocalDeviceManager(zigbeeConfig());
102
99
  await manager.initLocalDevices();
103
100
 
104
101
  // Only the gateway should be in the device list initially
@@ -110,17 +107,17 @@ describe('LocalDeviceManager – Zigbee integration', () => {
110
107
  });
111
108
 
112
109
  it('registers standalone devices normally', async () => {
113
- manager = new LocalDeviceManager(standaloneConfig(), log);
110
+ manager = new LocalDeviceManager(standaloneConfig());
114
111
  await manager.initLocalDevices();
115
112
 
116
113
  expect(manager.devices.map(d => d.id)).toContain('standalone_001');
117
114
  });
118
115
 
119
116
  it('logs gateway relationships when detected', async () => {
120
- manager = new LocalDeviceManager(zigbeeConfig(), log);
117
+ manager = new LocalDeviceManager(zigbeeConfig());
118
+ const infoSpy = jest.spyOn(mockLog, 'info');
121
119
  await manager.initLocalDevices();
122
120
 
123
- const infoSpy = log.info as jest.MockedFunction<typeof log.info>;
124
121
  const infoCalls = infoSpy.mock.calls.map(c => String(c[0]));
125
122
  const gatewayLine = infoCalls.find(s => s.includes('Zigbee gateway'));
126
123
  expect(gatewayLine).toBeDefined();
@@ -128,7 +125,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
128
125
  });
129
126
 
130
127
  it('proceeds without fatal errors when no Zigbee devices in config', async () => {
131
- manager = new LocalDeviceManager(standaloneConfig(), log);
128
+ manager = new LocalDeviceManager(standaloneConfig());
132
129
  await expect(manager.initLocalDevices()).resolves.not.toThrow();
133
130
  });
134
131
  });
@@ -160,10 +157,10 @@ describe('LocalDeviceManager – Zigbee integration', () => {
160
157
  ],
161
158
  };
162
159
 
163
- manager = new LocalDeviceManager(badConfig, log);
160
+ manager = new LocalDeviceManager(badConfig);
161
+ const errorSpy = jest.spyOn(mockLog, 'error');
164
162
  await expect(manager.initLocalDevices()).resolves.not.toThrow();
165
163
 
166
- const errorSpy = log.error as jest.MockedFunction<typeof log.error>;
167
164
  const errorCalls = errorSpy.mock.calls.map(c => String(c[0]));
168
165
  const zigbeeErrorLine = errorCalls.find(s => s.includes('Zigbee'));
169
166
  expect(zigbeeErrorLine).toBeDefined();
@@ -174,7 +171,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
174
171
 
175
172
  describe('sendCommands() – Zigbee child routing', () => {
176
173
  it('returns without acting when device has no dpMapping (unknown device)', async () => {
177
- manager = new LocalDeviceManager(zigbeeConfig(), log);
174
+ manager = new LocalDeviceManager(zigbeeConfig());
178
175
  await manager.initLocalDevices();
179
176
 
180
177
  // CHILD_ID_A is not yet registered in the first pass
@@ -183,7 +180,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
183
180
  });
184
181
 
185
182
  it('handles sendCommands for a known device that has a dpMapping', async () => {
186
- manager = new LocalDeviceManager(standaloneConfig(), log);
183
+ manager = new LocalDeviceManager(standaloneConfig());
187
184
  await manager.initLocalDevices();
188
185
 
189
186
  // 'standalone_001' is in the device list but has no IP connection (autoDiscover=false, no connect called)
@@ -198,14 +195,14 @@ describe('LocalDeviceManager – Zigbee integration', () => {
198
195
 
199
196
  describe('stopLocalDevices()', () => {
200
197
  it('does not throw when called with Zigbee gateway config and no active connections', async () => {
201
- manager = new LocalDeviceManager(zigbeeConfig(), log);
198
+ manager = new LocalDeviceManager(zigbeeConfig());
202
199
  await manager.initLocalDevices();
203
200
 
204
201
  expect(() => manager.stopLocalDevices()).not.toThrow();
205
202
  });
206
203
 
207
204
  it('can be called multiple times without error', async () => {
208
- manager = new LocalDeviceManager(zigbeeConfig(), log);
205
+ manager = new LocalDeviceManager(zigbeeConfig());
209
206
  await manager.initLocalDevices();
210
207
 
211
208
  expect(() => {
@@ -220,11 +217,11 @@ describe('LocalDeviceManager – Zigbee integration', () => {
220
217
  describe('_setupZigbeeChildren() – via gateway connect event', () => {
221
218
  it('emits DEVICE_ADD for child when gateway connects', async () => {
222
219
  const EventEmitter = (await import('events')).default;
223
- manager = new LocalDeviceManager(zigbeeConfig(), log);
220
+ manager = new LocalDeviceManager(zigbeeConfig());
224
221
  await manager.initLocalDevices();
225
222
 
226
223
  const deviceAddEvents: string[] = [];
227
- manager.on(TuyaDeviceManager.Events.DEVICE_ADD, (device: any) => {
224
+ manager.on(TuyaCloudDeviceManager.Events.DEVICE_ADD, (device: any) => {
228
225
  deviceAddEvents.push(device.id);
229
226
  });
230
227
 
@@ -249,7 +246,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
249
246
  });
250
247
 
251
248
  it('correctly maps child deviceId <-> cid in the relationship', async () => {
252
- manager = new LocalDeviceManager(zigbeeConfig(), log);
249
+ manager = new LocalDeviceManager(zigbeeConfig());
253
250
  await manager.initLocalDevices();
254
251
 
255
252
  const gatewayRelationships = (manager as any).gatewayRelationships as Map<string, any>;
@@ -271,7 +268,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
271
268
 
272
269
  describe('getDevice()', () => {
273
270
  it('returns the gateway TuyaDevice by ID', async () => {
274
- manager = new LocalDeviceManager(zigbeeConfig(), log);
271
+ manager = new LocalDeviceManager(zigbeeConfig());
275
272
  await manager.initLocalDevices();
276
273
 
277
274
  const gw = manager.getDevice(GATEWAY_ID);
@@ -281,7 +278,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
281
278
  });
282
279
 
283
280
  it('returns undefined for a child device before parent connects', async () => {
284
- manager = new LocalDeviceManager(zigbeeConfig(), log);
281
+ manager = new LocalDeviceManager(zigbeeConfig());
285
282
  await manager.initLocalDevices();
286
283
 
287
284
  // Children not yet registered (lazy registration happens on parent connect)
@@ -290,7 +287,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
290
287
  });
291
288
 
292
289
  it('returns undefined for a completely unknown device', async () => {
293
- manager = new LocalDeviceManager(zigbeeConfig(), log);
290
+ manager = new LocalDeviceManager(zigbeeConfig());
294
291
  await manager.initLocalDevices();
295
292
 
296
293
  expect(manager.getDevice('no_such_device')).toBeUndefined();
@@ -315,7 +312,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
315
312
  ],
316
313
  };
317
314
 
318
- manager = new LocalDeviceManager(mixedConfig, log);
315
+ manager = new LocalDeviceManager(mixedConfig);
319
316
  await manager.initLocalDevices();
320
317
 
321
318
  const ids = manager.devices.map(d => d.id);
@@ -326,7 +323,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
326
323
  });
327
324
 
328
325
  it('detects the correct number of gateway relationships', async () => {
329
- manager = new LocalDeviceManager(zigbeeConfig(), log);
326
+ manager = new LocalDeviceManager(zigbeeConfig());
330
327
  await manager.initLocalDevices();
331
328
 
332
329
  const gatewayRelationships = (manager as any).gatewayRelationships as Map<string, any>;
@@ -334,7 +331,7 @@ describe('LocalDeviceManager – Zigbee integration', () => {
334
331
  });
335
332
 
336
333
  it('has no gateway relationships for purely standalone config', async () => {
337
- manager = new LocalDeviceManager(standaloneConfig(), log);
334
+ manager = new LocalDeviceManager(standaloneConfig());
338
335
  await manager.initLocalDevices();
339
336
 
340
337
  const gatewayRelationships = (manager as any).gatewayRelationships as Map<string, any>;
@@ -112,13 +112,13 @@ describe('ZigbeeGatewayDetection', () => {
112
112
  device('child_1', { parentDeviceId: 'gw_1' }),
113
113
  ];
114
114
  expect(() => ZigbeeGatewayDetection.detectFromDevices(devices))
115
- .toThrow('parentDeviceId but is missing zigbeeChildId');
115
+ .toThrow('Device "child_1" has parentDeviceId:gw_1 but is missing zigbeeChildId. Both fields are required for Zigbee sub-devices.');
116
116
  });
117
117
 
118
118
  it('throws when zigbeeChildId is set without parentDeviceId', () => {
119
119
  const devices = [device('child_1', { zigbeeChildId: '0011223344556601' })];
120
120
  expect(() => ZigbeeGatewayDetection.detectFromDevices(devices))
121
- .toThrow('zigbeeChildId but is missing parentDeviceId');
121
+ .toThrow('Device "child_1" has zigbeeChildId:0011223344556601 but is missing parentDeviceId. Both fields are required for Zigbee sub-devices.');
122
122
  });
123
123
 
124
124
  it('throws for an invalid CID (too short)', () => {
@@ -1 +0,0 @@
1
- {"version":3,"file":"TuyaDeviceManager.js","sourceRoot":"","sources":["../../../src/cloud/device/TuyaDeviceManager.ts"],"names":[],"mappings":"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"}