@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.
- package/config.schema.json +385 -350
- package/dist/cloud/api/TuyaOpenAPI.js +5 -9
- package/dist/cloud/api/TuyaOpenAPI.js.map +1 -1
- package/dist/cloud/api/TuyaOpenMQ.js +3 -4
- package/dist/cloud/api/TuyaOpenMQ.js.map +1 -1
- package/dist/cloud/device/{TuyaDeviceManager.js → TuyaCloudDeviceManager.js} +96 -80
- package/dist/cloud/device/TuyaCloudDeviceManager.js.map +1 -0
- package/dist/cloud/device/TuyaCustomDeviceManager.js +74 -5
- package/dist/cloud/device/TuyaCustomDeviceManager.js.map +1 -1
- package/dist/cloud/device/TuyaHomeDeviceManager.js +76 -9
- package/dist/cloud/device/TuyaHomeDeviceManager.js.map +1 -1
- package/dist/config.js +26 -5
- package/dist/config.js.map +1 -1
- package/dist/local/DynamicChildDiscovery.js +2 -1
- package/dist/local/DynamicChildDiscovery.js.map +1 -1
- package/dist/local/LocalDevice.js +3 -2
- package/dist/local/LocalDevice.js.map +1 -1
- package/dist/local/LocalDeviceManager.js +72 -123
- package/dist/local/LocalDeviceManager.js.map +1 -1
- package/dist/local/TuyaDiscovery.js +14 -7
- package/dist/local/TuyaDiscovery.js.map +1 -1
- package/dist/local/ZigbeeGatewayDetection.js +2 -2
- package/dist/local/ZigbeeGatewayDetection.js.map +1 -1
- package/dist/local/protocol/ProtocolUtilities.js +34 -17
- package/dist/local/protocol/ProtocolUtilities.js.map +1 -1
- package/dist/local/protocol/ProtocolV31V32.js +4 -2
- package/dist/local/protocol/ProtocolV31V32.js.map +1 -1
- package/dist/local/protocol/ProtocolV33.js +4 -2
- package/dist/local/protocol/ProtocolV33.js.map +1 -1
- package/dist/local/protocol/ProtocolV34.js +10 -5
- package/dist/local/protocol/ProtocolV34.js.map +1 -1
- package/dist/local/protocol/ProtocolV35.js +8 -4
- package/dist/local/protocol/ProtocolV35.js.map +1 -1
- package/dist/platform.js +229 -493
- package/dist/platform.js.map +1 -1
- package/dist/settings.js +0 -2
- package/dist/settings.js.map +1 -1
- package/dist/shared/TuyaDeviceManager.js +86 -0
- package/dist/shared/TuyaDeviceManager.js.map +1 -0
- package/dist/shared/TuyaHybridDeviceManager.js +145 -0
- package/dist/shared/TuyaHybridDeviceManager.js.map +1 -0
- package/dist/shared/accessory/AccessoryFactory.js +334 -0
- package/dist/shared/accessory/AccessoryFactory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/AirConditionerAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js.map +1 -1
- package/dist/shared/accessory/AirQualitySensorAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/BaseAccessory.js +16 -95
- package/dist/shared/accessory/BaseAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/BlindsAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/CameraAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/DiffuserAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/DimmerAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/DoorbellAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/FanAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/GarageDoorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/HeaterAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js.map +1 -1
- package/dist/shared/accessory/HumanPresenceSensorAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/HumidifierAccessory.js.map +1 -1
- package/dist/shared/accessory/IRAirConditionerAccessory.js.map +1 -0
- package/dist/shared/accessory/IRControlHubAccessory.js.map +1 -0
- package/dist/shared/accessory/IRControlHubSubAccessory.js.map +1 -0
- package/dist/shared/accessory/IRGenericAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/LightAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/LightSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/LocationWeatherAccessory.js +1 -1
- package/dist/shared/accessory/LocationWeatherAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/LockAccessory.js +3 -3
- package/dist/shared/{accessories → accessory}/LockAccessory.js.map +1 -1
- package/dist/shared/accessory/MotionSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/OutletAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/PetFeederAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/SceneAccessory.js +1 -1
- package/dist/shared/accessory/SceneAccessory.js.map +1 -0
- package/dist/shared/accessory/SceneSwitchAccessory.js.map +1 -0
- package/dist/shared/accessory/SecuritySystemAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/SwitchAccessory.js +1 -45
- package/dist/shared/accessory/SwitchAccessory.js.map +1 -0
- package/dist/shared/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/ThermostatAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/TowerRackAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/ValveAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js.map +1 -1
- package/dist/shared/accessory/WeatherStationAccessory.js.map +1 -0
- package/dist/shared/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/WhiteNoiseLightAccessory.js +1 -0
- package/dist/shared/accessory/WhiteNoiseLightAccessory.js.map +1 -0
- package/dist/shared/accessory/WindowAccessory.js.map +1 -0
- package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js.map +1 -1
- package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js.map +1 -1
- package/dist/shared/accessory/characteristic/Active.js.map +1 -0
- package/dist/shared/accessory/characteristic/AirQuality.js.map +1 -0
- package/dist/shared/accessory/characteristic/CurrentRelativeHumidity.js.map +1 -0
- package/dist/shared/accessory/characteristic/CurrentTemperature.js.map +1 -0
- package/dist/shared/accessory/characteristic/CurrentWeather.js.map +1 -0
- package/dist/shared/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
- package/dist/shared/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
- package/dist/shared/{accessories → accessory}/characteristic/EnergyUsage.js +0 -5
- package/dist/shared/accessory/characteristic/EnergyUsage.js.map +1 -0
- package/dist/shared/{accessories → accessory}/characteristic/Light.js +5 -3
- package/dist/shared/accessory/characteristic/Light.js.map +1 -0
- package/dist/shared/accessory/characteristic/LightSensor.js.map +1 -0
- package/dist/shared/accessory/characteristic/LockPhysicalControls.js.map +1 -0
- package/dist/shared/accessory/characteristic/MotionDetected.js.map +1 -0
- package/dist/shared/accessory/characteristic/Name.js.map +1 -0
- package/dist/shared/accessory/characteristic/OccupancyDetected.js.map +1 -0
- package/dist/shared/{accessories → accessory}/characteristic/On.js +1 -0
- package/dist/shared/accessory/characteristic/On.js.map +1 -0
- package/dist/shared/accessory/characteristic/OutletInUse.js.map +1 -0
- package/dist/shared/accessory/characteristic/ProgrammableSwitchEvent.js.map +1 -0
- package/dist/shared/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
- package/dist/shared/accessory/characteristic/RotationSpeed.js.map +1 -0
- package/dist/shared/accessory/characteristic/SecuritySystemState.js.map +1 -0
- package/dist/shared/accessory/characteristic/SwingMode.js.map +1 -0
- package/dist/shared/accessory/characteristic/TargetTemperature.js.map +1 -0
- package/dist/shared/accessory/characteristic/TemperatureDisplayUnits.js.map +1 -0
- package/dist/shared/util/ConfigHash.js +2 -2
- package/dist/shared/util/ConfigHash.js.map +1 -1
- package/dist/shared/util/ConfigMigrator.js +162 -0
- package/dist/shared/util/ConfigMigrator.js.map +1 -0
- package/dist/shared/util/FfmpegStreamingProcess.js.map +1 -1
- package/dist/shared/util/InfraredTool.js +0 -2
- package/dist/shared/util/InfraredTool.js.map +1 -1
- package/dist/shared/util/Logger.js +69 -10
- package/dist/shared/util/Logger.js.map +1 -1
- package/dist/shared/util/TuyaStreamDelegate.js +2 -8
- package/dist/shared/util/TuyaStreamDelegate.js.map +1 -1
- package/dist/shared/util/util.js +13 -4
- package/dist/shared/util/util.js.map +1 -1
- package/eslint.config.mjs +0 -1
- package/{jest.config.js → jest.config.ts} +5 -2
- package/package.json +8 -5
- package/test/ConfigMigrator.test.ts +634 -0
- package/test/Logger.test.ts +482 -0
- package/test/accessoryFactory.data.test.ts +172 -0
- package/test/accessoryFactory.test.ts +64 -35
- package/test/config.test.ts +17 -13
- package/test/custom.test.ts +2 -2
- package/test/errorHandling.test.ts +12 -12
- package/test/home.test.ts +1 -1
- package/test/hybridDeviceManager.test.ts +808 -0
- package/test/localDevice.test.ts +21 -50
- package/test/localDeviceManager.behavior.test.ts +16 -30
- package/test/localDeviceManager.test.ts +23 -39
- package/test/mqttMessages.test.ts +33 -14
- package/test/platform.test.ts +340 -810
- package/test/platform.validation.local.test.ts +58 -119
- package/test/tuyaCustomDeviceManager.test.ts +106 -16
- package/test/tuyaDeviceManager.test.ts +636 -639
- package/test/tuyaDiscovery.test.ts +21 -33
- package/test/tuyaHomeDeviceManager.test.ts +109 -18
- package/test/tuyaOpenAPI.test.ts +25 -44
- package/test/tuyaOpenMQ.test.ts +15 -23
- package/test/util.test.ts +87 -7
- package/test/zigbee/LocalDevice.zigbee.test.ts +14 -18
- package/test/zigbee/LocalDeviceManager.cloud-discovery.test.ts +19 -20
- package/test/zigbee/LocalDeviceManager.zigbee.reconnect.test.ts +18 -20
- package/test/zigbee/LocalDeviceManager.zigbee.test.ts +31 -34
- package/test/zigbee/ZigbeeGatewayDetection.test.ts +2 -2
- package/dist/cloud/device/TuyaDeviceManager.js.map +0 -1
- package/dist/local/CloudLocalReconciliation.js +0 -180
- package/dist/local/CloudLocalReconciliation.js.map +0 -1
- package/dist/shared/accessories/AccessoryFactory.js +0 -309
- package/dist/shared/accessories/AccessoryFactory.js.map +0 -1
- package/dist/shared/accessories/AirQualitySensorAccessory.js.map +0 -1
- package/dist/shared/accessories/BaseAccessory.js.map +0 -1
- package/dist/shared/accessories/HumanPresenceSensorAccessory.js.map +0 -1
- package/dist/shared/accessories/IRAirConditionerAccessory.js.map +0 -1
- package/dist/shared/accessories/IRControlHubAccessory.js.map +0 -1
- package/dist/shared/accessories/IRControlHubSubAccessory.js.map +0 -1
- package/dist/shared/accessories/IRGenericAccessory.js.map +0 -1
- package/dist/shared/accessories/LocationWeatherAccessory.js.map +0 -1
- package/dist/shared/accessories/MotionSensorAccessory.js.map +0 -1
- package/dist/shared/accessories/OutletAccessory.js.map +0 -1
- package/dist/shared/accessories/SceneAccessory.js.map +0 -1
- package/dist/shared/accessories/SceneSwitchAccessory.js.map +0 -1
- package/dist/shared/accessories/SecuritySystemAccessory.js.map +0 -1
- package/dist/shared/accessories/SwitchAccessory.js.map +0 -1
- package/dist/shared/accessories/TemperatureHumiditySensorAccessory.js.map +0 -1
- package/dist/shared/accessories/WeatherStationAccessory.js.map +0 -1
- package/dist/shared/accessories/WetBulbGlobeTemperatureAccessory.js.map +0 -1
- package/dist/shared/accessories/WhiteNoiseLightAccessory.js.map +0 -1
- package/dist/shared/accessories/WindowAccessory.js.map +0 -1
- package/dist/shared/accessories/characteristic/Active.js.map +0 -1
- package/dist/shared/accessories/characteristic/AirQuality.js.map +0 -1
- package/dist/shared/accessories/characteristic/CurrentRelativeHumidity.js.map +0 -1
- package/dist/shared/accessories/characteristic/CurrentTemperature.js.map +0 -1
- package/dist/shared/accessories/characteristic/CurrentWeather.js.map +0 -1
- package/dist/shared/accessories/characteristic/CurrentWeatherByOpenMeteo.js.map +0 -1
- package/dist/shared/accessories/characteristic/CurrentWetBulbGlobeTemperature.js.map +0 -1
- package/dist/shared/accessories/characteristic/EnergyUsage.js.map +0 -1
- package/dist/shared/accessories/characteristic/Light.js.map +0 -1
- package/dist/shared/accessories/characteristic/LightSensor.js.map +0 -1
- package/dist/shared/accessories/characteristic/LockPhysicalControls.js.map +0 -1
- package/dist/shared/accessories/characteristic/MotionDetected.js.map +0 -1
- package/dist/shared/accessories/characteristic/Name.js.map +0 -1
- package/dist/shared/accessories/characteristic/OccupancyDetected.js.map +0 -1
- package/dist/shared/accessories/characteristic/On.js.map +0 -1
- package/dist/shared/accessories/characteristic/OutletInUse.js.map +0 -1
- package/dist/shared/accessories/characteristic/ProgrammableSwitchEvent.js.map +0 -1
- package/dist/shared/accessories/characteristic/RelativeHumidityDehumidifierThreshold.js.map +0 -1
- package/dist/shared/accessories/characteristic/RotationSpeed.js.map +0 -1
- package/dist/shared/accessories/characteristic/SecuritySystemState.js.map +0 -1
- package/dist/shared/accessories/characteristic/SwingMode.js.map +0 -1
- package/dist/shared/accessories/characteristic/TargetTemperature.js.map +0 -1
- package/dist/shared/accessories/characteristic/TemperatureDisplayUnits.js.map +0 -1
- package/test/zigbee/CloudLocalReconciliation.test.ts +0 -284
- package/tuya-local-configs/dev-1.hash +0 -1
- package/tuya-local-configs/device1.hash +0 -1
- /package/dist/shared/{accessories → accessory}/AirConditionerAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/AirPurifierAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/AirQualitySensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/BlindsAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/CameraAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/CarbonDioxideSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/CarbonMonoxideSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/ContactSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/DehumidifierAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/DiffuserAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/DimmerAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/DoorbellAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/ExtractionHoodAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/FanAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/GarageDoorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/HeaterAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/HeaterAccessory_old.js +0 -0
- /package/dist/shared/{accessories → accessory}/HumanPresenceSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/HumidifierAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/IRAirConditionerAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/IRControlHubAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/IRControlHubSubAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/IRGenericAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/LeakSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/LightAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/LightSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/MotionSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/OutletAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/PetFeederAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/SceneSwitchAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/SecuritySystemAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/SmokeSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/TemperatureHumiditySensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/ThermostatAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/TowerRackAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/ValveAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/VibrationSensorAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/WeatherStationAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/WetBulbGlobeTemperatureAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/WindowAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/WindowCoveringAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/WirelessSwitchAccessory.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/Active.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/AirQuality.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/CurrentRelativeHumidity.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/CurrentTemperature.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeather.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/CurrentWeatherByOpenMeteo.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/CurrentWetBulbGlobeTemperature.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/LightSensor.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/LockPhysicalControls.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/MotionDetected.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/Name.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/OccupancyDetected.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/OutletInUse.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/ProgrammableSwitchEvent.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/RelativeHumidityDehumidifierThreshold.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/RotationSpeed.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/SecuritySystemState.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/SwingMode.js +0 -0
- /package/dist/shared/{accessories → accessory}/characteristic/TargetTemperature.js +0 -0
- /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.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
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
|
|
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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
54
|
-
manager = new LocalDeviceManager(zigbeeReconnectConfig()
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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()
|
|
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()
|
|
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()
|
|
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()
|
|
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
|
|
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()
|
|
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()
|
|
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()
|
|
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()
|
|
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()
|
|
220
|
+
manager = new LocalDeviceManager(zigbeeConfig());
|
|
224
221
|
await manager.initLocalDevices();
|
|
225
222
|
|
|
226
223
|
const deviceAddEvents: string[] = [];
|
|
227
|
-
manager.on(
|
|
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()
|
|
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()
|
|
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()
|
|
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()
|
|
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
|
|
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()
|
|
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()
|
|
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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"}
|