@homebridge-plugins/homebridge-tuya 3.0.0-beta.0 → 3.0.0-beta.10
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/ADVANCED_OPTIONS.md +17 -0
- package/CHANGELOG.md +19 -0
- package/README.md +168 -145
- package/config.schema.json +1051 -275
- package/dist/{core → cloud/api}/TuyaOpenAPI.js +101 -62
- package/dist/cloud/api/TuyaOpenAPI.js.map +1 -0
- package/dist/{core → cloud/api}/TuyaOpenMQ.js +58 -33
- package/dist/cloud/api/TuyaOpenMQ.js.map +1 -0
- package/dist/{device/TuyaDeviceManager.js → cloud/device/TuyaCloudDeviceManager.js} +109 -82
- package/dist/cloud/device/TuyaCloudDeviceManager.js.map +1 -0
- package/dist/cloud/device/TuyaCustomDeviceManager.js +134 -0
- package/dist/cloud/device/TuyaCustomDeviceManager.js.map +1 -0
- package/dist/{device → cloud/device}/TuyaDevice.js +14 -1
- package/dist/cloud/device/TuyaDevice.js.map +1 -0
- package/dist/cloud/device/TuyaHomeDeviceManager.js +131 -0
- package/dist/cloud/device/TuyaHomeDeviceManager.js.map +1 -0
- package/dist/config.js +27 -5
- package/dist/config.js.map +1 -1
- package/dist/local/DynamicChildDiscovery.js +155 -0
- package/dist/local/DynamicChildDiscovery.js.map +1 -0
- package/dist/local/LocalDevice.js +420 -0
- package/dist/local/LocalDevice.js.map +1 -0
- package/dist/local/LocalDeviceManager.js +974 -0
- package/dist/local/LocalDeviceManager.js.map +1 -0
- package/dist/local/TuyaDiscovery.js +255 -0
- package/dist/local/TuyaDiscovery.js.map +1 -0
- package/dist/local/ZigbeeEventDetection.js +213 -0
- package/dist/local/ZigbeeEventDetection.js.map +1 -0
- package/dist/local/ZigbeeGatewayDetection.js +109 -0
- package/dist/local/ZigbeeGatewayDetection.js.map +1 -0
- package/dist/local/config.js +6 -0
- package/dist/local/config.js.map +1 -0
- package/dist/local/protocol/ChildPayloadUtility.js +94 -0
- package/dist/local/protocol/ChildPayloadUtility.js.map +1 -0
- package/dist/local/protocol/Protocol.js +3 -0
- package/dist/local/protocol/Protocol.js.map +1 -0
- package/dist/local/protocol/ProtocolFactory.js +27 -0
- package/dist/local/protocol/ProtocolFactory.js.map +1 -0
- package/dist/local/protocol/ProtocolUtilities.js +346 -0
- package/dist/local/protocol/ProtocolUtilities.js.map +1 -0
- package/dist/local/protocol/ProtocolV31V32.js +62 -0
- package/dist/local/protocol/ProtocolV31V32.js.map +1 -0
- package/dist/local/protocol/ProtocolV33.js +54 -0
- package/dist/local/protocol/ProtocolV33.js.map +1 -0
- package/dist/local/protocol/ProtocolV34.js +109 -0
- package/dist/local/protocol/ProtocolV34.js.map +1 -0
- package/dist/local/protocol/ProtocolV35.js +81 -0
- package/dist/local/protocol/ProtocolV35.js.map +1 -0
- package/dist/platform.js +271 -304
- 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 +97 -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/accessory/AirConditionerAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/AirPurifierAccessory.js +1 -1
- package/dist/shared/accessory/AirPurifierAccessory.js.map +1 -0
- package/dist/shared/accessory/AirQualitySensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/BaseAccessory.js +57 -32
- package/dist/shared/accessory/BaseAccessory.js.map +1 -0
- package/dist/shared/accessory/BlindsAccessory.js +199 -0
- package/dist/shared/accessory/BlindsAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/CameraAccessory.js +7 -3
- package/dist/shared/accessory/CameraAccessory.js.map +1 -0
- package/dist/shared/accessory/CarbonDioxideSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/CarbonMonoxideSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/ContactSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/DehumidifierAccessory.js.map +1 -0
- package/dist/shared/accessory/DiffuserAccessory.js.map +1 -0
- package/dist/shared/accessory/DimmerAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/DoorbellAccessory.js +3 -1
- package/dist/shared/accessory/DoorbellAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/ExtractionHoodAccessory.js +4 -2
- package/dist/shared/accessory/ExtractionHoodAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/FanAccessory.js +10 -4
- package/dist/shared/accessory/FanAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/GarageDoorAccessory.js +19 -2
- package/dist/shared/accessory/GarageDoorAccessory.js.map +1 -0
- package/dist/shared/accessory/HeaterAccessory.js.map +1 -0
- package/dist/shared/accessory/HeaterAccessory_old.js.map +1 -0
- package/dist/shared/accessory/HumanPresenceSensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/HumidifierAccessory.js +3 -1
- package/dist/shared/accessory/HumidifierAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/IRAirConditionerAccessory.js +2 -2
- 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/accessory/LeakSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/LightAccessory.js.map +1 -0
- package/dist/shared/accessory/LightSensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/LocationWeatherAccessory.js +1 -1
- package/dist/shared/accessory/LocationWeatherAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/LockAccessory.js +3 -3
- package/dist/shared/accessory/LockAccessory.js.map +1 -0
- package/dist/shared/accessory/MotionSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/OutletAccessory.js.map +1 -0
- package/dist/shared/accessory/PetFeederAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/SceneAccessory.js +1 -1
- package/dist/shared/accessory/SceneAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/SceneSwitchAccessory.js +1 -1
- package/dist/shared/accessory/SceneSwitchAccessory.js.map +1 -0
- package/dist/shared/accessory/SecuritySystemAccessory.js.map +1 -0
- package/dist/shared/accessory/SmokeSensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/SwitchAccessory.js +22 -3
- package/dist/shared/accessory/SwitchAccessory.js.map +1 -0
- package/dist/shared/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
- package/dist/shared/accessory/ThermostatAccessory.js.map +1 -0
- package/dist/shared/accessory/TowerRackAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/ValveAccessory.js +1 -1
- package/dist/shared/accessory/ValveAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessory}/VibrationSensorAccessory.js +7 -3
- package/dist/shared/accessory/VibrationSensorAccessory.js.map +1 -0
- package/dist/shared/accessory/WeatherStationAccessory.js.map +1 -0
- package/dist/shared/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
- package/dist/{accessory → shared/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/accessory/WindowCoveringAccessory.js.map +1 -0
- package/dist/shared/accessory/WirelessSwitchAccessory.js.map +1 -0
- package/dist/shared/accessory/characteristic/Active.js.map +1 -0
- package/dist/{accessory → shared/accessory}/characteristic/AirQuality.js +1 -1
- 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/{accessory → shared/accessory}/characteristic/EnergyUsage.js +0 -5
- package/dist/shared/accessory/characteristic/EnergyUsage.js.map +1 -0
- package/dist/{accessory → shared/accessory}/characteristic/Light.js +28 -5
- 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/{accessory → shared/accessory}/characteristic/MotionDetected.js +1 -1
- 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/{accessory → shared/accessory}/characteristic/On.js +2 -1
- package/dist/shared/accessory/characteristic/On.js.map +1 -0
- package/dist/shared/accessory/characteristic/OutletInUse.js.map +1 -0
- package/dist/{accessory → shared/accessory}/characteristic/ProgrammableSwitchEvent.js +2 -2
- 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 +79 -0
- package/dist/shared/util/ConfigHash.js.map +1 -0
- package/dist/shared/util/ConfigMigrator.js +173 -0
- package/dist/shared/util/ConfigMigrator.js.map +1 -0
- package/dist/shared/util/FfmpegStreamingProcess.js.map +1 -0
- package/dist/{util → shared/util}/InfraredTool.js +0 -2
- package/dist/shared/util/InfraredTool.js.map +1 -0
- package/dist/shared/util/Logger.js +101 -0
- package/dist/shared/util/Logger.js.map +1 -0
- package/dist/shared/util/TuyaRecordingDelegate.js.map +1 -0
- package/dist/{util → shared/util}/TuyaStreamDelegate.js +2 -8
- package/dist/shared/util/TuyaStreamDelegate.js.map +1 -0
- package/dist/shared/util/color.js.map +1 -0
- package/dist/shared/util/util.js +144 -0
- package/dist/shared/util/util.js.map +1 -0
- package/eslint.config.mjs +51 -0
- package/jest.config.ts +14 -0
- package/package.json +29 -31
- package/test/ConfigMigrator.test.ts +799 -0
- package/test/Logger.test.ts +482 -0
- package/test/__mocks__/@homebridge-camera-utils.js +10 -0
- package/test/__mocks__/color-convert.js +24 -0
- package/test/__mocks__/kelvin-to-rgb.js +21 -0
- package/test/accessoryFactory.data.test.ts +172 -0
- package/test/accessoryFactory.test.ts +551 -0
- package/test/config.test.ts +434 -0
- package/test/custom.test.ts +6 -6
- package/test/errorHandling.test.ts +570 -0
- package/test/errorHandlingCoverage.test.ts +410 -0
- package/test/home.test.ts +5 -5
- package/test/hybridDeviceManager.test.ts +808 -0
- package/test/light.test.ts +250 -0
- package/test/localDevice.test.ts +587 -0
- package/test/localDeviceManager.behavior.test.ts +171 -0
- package/test/localDeviceManager.test.ts +311 -0
- package/test/mqttMessages.test.ts +514 -0
- package/test/platform.test.ts +840 -0
- package/test/platform.validation.local.test.ts +189 -0
- package/test/protocol.test.ts +446 -0
- package/test/protocolUtilities.test.ts +351 -0
- package/test/sanitizeName.test.ts +2 -1
- package/test/tuyaCustomDeviceManager.test.ts +559 -0
- package/test/tuyaDevice.test.ts +425 -0
- package/test/tuyaDeviceManager.test.ts +810 -0
- package/test/tuyaDiscovery.test.ts +427 -0
- package/test/tuyaHomeDeviceManager.test.ts +631 -0
- package/test/tuyaOpenAPI.test.ts +385 -0
- package/test/tuyaOpenMQ.test.ts +436 -0
- package/test/util.test.ts +398 -0
- package/test/util.ts +4 -3
- package/test/zigbee/ChildPayloadUtility.test.ts +199 -0
- package/test/zigbee/DynamicChildDiscovery.test.ts +333 -0
- package/test/zigbee/LocalDevice.zigbee.test.ts +270 -0
- package/test/zigbee/LocalDeviceManager.cloud-discovery.test.ts +162 -0
- package/test/zigbee/LocalDeviceManager.zigbee.reconnect.test.ts +198 -0
- package/test/zigbee/LocalDeviceManager.zigbee.test.ts +341 -0
- package/test/zigbee/ZigbeeEventDetection.test.ts +418 -0
- package/test/zigbee/ZigbeeGatewayDetection.test.ts +222 -0
- package/wiki/Get-Local-Keys-for-Your-Devices.md +85 -0
- package/dist/accessory/AccessoryFactory.js +0 -305
- package/dist/accessory/AccessoryFactory.js.map +0 -1
- package/dist/accessory/AirConditionerAccessory.js.map +0 -1
- package/dist/accessory/AirPurifierAccessory.js.map +0 -1
- package/dist/accessory/AirQualitySensorAccessory.js.map +0 -1
- package/dist/accessory/BaseAccessory.js.map +0 -1
- package/dist/accessory/CameraAccessory.js.map +0 -1
- package/dist/accessory/CarbonDioxideSensorAccessory.js.map +0 -1
- package/dist/accessory/CarbonMonoxideSensorAccessory.js.map +0 -1
- package/dist/accessory/ContactSensorAccessory.js.map +0 -1
- package/dist/accessory/DehumidifierAccessory.js.map +0 -1
- package/dist/accessory/DiffuserAccessory.js.map +0 -1
- package/dist/accessory/DimmerAccessory.js.map +0 -1
- package/dist/accessory/DoorbellAccessory.js.map +0 -1
- package/dist/accessory/ExtractionHoodAccessory.js.map +0 -1
- package/dist/accessory/FanAccessory.js.map +0 -1
- package/dist/accessory/GarageDoorAccessory.js.map +0 -1
- package/dist/accessory/HeaterAccessory.js.map +0 -1
- package/dist/accessory/HeaterAccessory_old.js.map +0 -1
- package/dist/accessory/HumanPresenceSensorAccessory.js.map +0 -1
- package/dist/accessory/HumidifierAccessory.js.map +0 -1
- package/dist/accessory/IRAirConditionerAccessory.js.map +0 -1
- package/dist/accessory/IRControlHubAccessory.js.map +0 -1
- package/dist/accessory/IRControlHubSubAccessory.js.map +0 -1
- package/dist/accessory/IRGenericAccessory.js.map +0 -1
- package/dist/accessory/LeakSensorAccessory.js.map +0 -1
- package/dist/accessory/LightAccessory.js.map +0 -1
- package/dist/accessory/LightSensorAccessory.js.map +0 -1
- package/dist/accessory/LocationWeatherAccessory.js.map +0 -1
- package/dist/accessory/LockAccessory.js.map +0 -1
- package/dist/accessory/MotionSensorAccessory.js.map +0 -1
- package/dist/accessory/OutletAccessory.js.map +0 -1
- package/dist/accessory/PetFeederAccessory.js.map +0 -1
- package/dist/accessory/SceneAccessory.js.map +0 -1
- package/dist/accessory/SceneSwitchAccessory.js.map +0 -1
- package/dist/accessory/SecuritySystemAccessory.js.map +0 -1
- package/dist/accessory/SmokeSensorAccessory.js.map +0 -1
- package/dist/accessory/SwitchAccessory.js.map +0 -1
- package/dist/accessory/TemperatureHumiditySensorAccessory.js.map +0 -1
- package/dist/accessory/ThermostatAccessory.js.map +0 -1
- package/dist/accessory/TowerRackAccessory.js.map +0 -1
- package/dist/accessory/ValveAccessory.js.map +0 -1
- package/dist/accessory/VibrationSensorAccessory.js.map +0 -1
- package/dist/accessory/WeatherStationAccessory.js.map +0 -1
- package/dist/accessory/WetBulbGlobeTemperatureAccessory.js.map +0 -1
- package/dist/accessory/WhiteNoiseLightAccessory.js.map +0 -1
- package/dist/accessory/WindowAccessory.js.map +0 -1
- package/dist/accessory/WindowCoveringAccessory.js.map +0 -1
- package/dist/accessory/WirelessSwitchAccessory.js.map +0 -1
- package/dist/accessory/characteristic/Active.js.map +0 -1
- package/dist/accessory/characteristic/AirQuality.js.map +0 -1
- package/dist/accessory/characteristic/CurrentRelativeHumidity.js.map +0 -1
- package/dist/accessory/characteristic/CurrentTemperature.js.map +0 -1
- package/dist/accessory/characteristic/CurrentWeather.js.map +0 -1
- package/dist/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +0 -1
- package/dist/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +0 -1
- package/dist/accessory/characteristic/EnergyUsage.js.map +0 -1
- package/dist/accessory/characteristic/Light.js.map +0 -1
- package/dist/accessory/characteristic/LightSensor.js.map +0 -1
- package/dist/accessory/characteristic/LockPhysicalControls.js.map +0 -1
- package/dist/accessory/characteristic/MotionDetected.js.map +0 -1
- package/dist/accessory/characteristic/Name.js.map +0 -1
- package/dist/accessory/characteristic/OccupancyDetected.js.map +0 -1
- package/dist/accessory/characteristic/On.js.map +0 -1
- package/dist/accessory/characteristic/OutletInUse.js.map +0 -1
- package/dist/accessory/characteristic/ProgrammableSwitchEvent.js.map +0 -1
- package/dist/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +0 -1
- package/dist/accessory/characteristic/RotationSpeed.js.map +0 -1
- package/dist/accessory/characteristic/SecuritySystemState.js.map +0 -1
- package/dist/accessory/characteristic/SwingMode.js.map +0 -1
- package/dist/accessory/characteristic/TargetTemperature.js.map +0 -1
- package/dist/accessory/characteristic/TemperatureDisplayUnits.js.map +0 -1
- package/dist/core/TuyaOpenAPI.js.map +0 -1
- package/dist/core/TuyaOpenMQ.js.map +0 -1
- package/dist/device/TuyaCustomDeviceManager.js +0 -65
- package/dist/device/TuyaCustomDeviceManager.js.map +0 -1
- package/dist/device/TuyaDevice.js.map +0 -1
- package/dist/device/TuyaDeviceManager.js.map +0 -1
- package/dist/device/TuyaHomeDeviceManager.js +0 -64
- package/dist/device/TuyaHomeDeviceManager.js.map +0 -1
- package/dist/util/FfmpegStreamingProcess.js.map +0 -1
- package/dist/util/InfraredTool.js.map +0 -1
- package/dist/util/Logger.js +0 -42
- package/dist/util/Logger.js.map +0 -1
- package/dist/util/TuyaRecordingDelegate.js.map +0 -1
- package/dist/util/TuyaStreamDelegate.js.map +0 -1
- package/dist/util/color.js.map +0 -1
- package/dist/util/util.js +0 -63
- package/dist/util/util.js.map +0 -1
- package/jest.config.js +0 -5
- /package/dist/{accessory → shared/accessory}/AirConditionerAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/AirQualitySensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/CarbonDioxideSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/CarbonMonoxideSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/ContactSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/DehumidifierAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/DiffuserAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/DimmerAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/HeaterAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/HeaterAccessory_old.js +0 -0
- /package/dist/{accessory → shared/accessory}/HumanPresenceSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/IRControlHubAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/IRControlHubSubAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/IRGenericAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/LeakSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/LightAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/LightSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/MotionSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/OutletAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/PetFeederAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/SecuritySystemAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/SmokeSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/TemperatureHumiditySensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/ThermostatAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/TowerRackAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/WeatherStationAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/WetBulbGlobeTemperatureAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/WindowAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/WindowCoveringAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/WirelessSwitchAccessory.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/Active.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/CurrentRelativeHumidity.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/CurrentTemperature.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/CurrentWeather.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/CurrentWeatherByOpenMeteo.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/CurrentWetBulbGlobeTemperature.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/LightSensor.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/LockPhysicalControls.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/Name.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/OccupancyDetected.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/OutletInUse.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/RelativeHumidityDehumidifierThreshold.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/RotationSpeed.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/SecuritySystemState.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/SwingMode.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/TargetTemperature.js +0 -0
- /package/dist/{accessory → shared/accessory}/characteristic/TemperatureDisplayUnits.js +0 -0
- /package/dist/{util → shared/util}/FfmpegStreamingProcess.js +0 -0
- /package/dist/{util → shared/util}/TuyaRecordingDelegate.js +0 -0
- /package/dist/{util → shared/util}/color.js +0 -0
package/ADVANCED_OPTIONS.md
CHANGED
|
@@ -20,6 +20,7 @@ Before configuring, you may need to:
|
|
|
20
20
|
- `category` - **optional**: Device category code. See [SUPPORTED_DEVICES.md](./SUPPORTED_DEVICES.md). Also you can use `hidden` to hide the device, product, or scene. **⚠️Overriding this property may lead to unexpected behaviors and exceptions, so please remove the accessory cache after making changes.**
|
|
21
21
|
- `unbridged` - **optional**: Unbridge accessories. Defaults to `false`.
|
|
22
22
|
- `adaptiveLighting` - **optional**: Adaptive Lighting. Defaults to `false`. Not all light device support this feature, please use it on demand.
|
|
23
|
+
- `garageDoorUseContactSensorForState` - **optional**: For garage door controllers. When `true`, `CurrentDoorState` and `TargetDoorState` reads use `doorcontact_state` only, while set commands still use `switch_1`. Defaults to `false`.
|
|
23
24
|
- `schema` - **optional**: An array of schema overriding config objects, used for describing datapoint (DP). When your device has non-standard DP, you need to transform them manually with configuration. Each element in the schema array is described as follows:
|
|
24
25
|
- `code` - **required**: DP code.
|
|
25
26
|
- `newCode` - **optional**: New DP code.
|
|
@@ -94,6 +95,22 @@ An example of hide camera's floodlight (`floodlight_switch`):
|
|
|
94
95
|
}
|
|
95
96
|
```
|
|
96
97
|
|
|
98
|
+
### Use garage door contact sensor for state
|
|
99
|
+
|
|
100
|
+
Some `ckmkzq` garage door controllers keep `switch_1` as `true`, which can make HomeKit show the door as stuck Opening or Closing. Enable this per-device option to read the door state from `doorcontact_state`, while commands are still sent to `switch_1`.
|
|
101
|
+
|
|
102
|
+
```js
|
|
103
|
+
{
|
|
104
|
+
"options": {
|
|
105
|
+
// ...
|
|
106
|
+
"deviceOverrides": [{
|
|
107
|
+
"id": "{device_id}",
|
|
108
|
+
"garageDoorUseContactSensorForState": true
|
|
109
|
+
}]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
97
114
|
|
|
98
115
|
### Offline as off
|
|
99
116
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.0.0] - (2026.6.1)
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
- **Complete codebase restructure** — source files are now organised under `src/cloud/`, `src/local/`, and `src/shared/` instead of the previous flat layout. No config changes needed for existing cloud users.
|
|
7
|
+
- Requires Node.js `^20 || ^22 || ^24 || ^25`.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Local LAN mode** — communicate directly with Tuya devices over TCP on your local network with no cloud connection required. Set `"mode": "local"` in your config.
|
|
11
|
+
- **Both mode** — run cloud and local connections simultaneously (`"mode": "both"`).
|
|
12
|
+
- **UDP auto-discovery** — automatically finds Tuya devices on the local network (ports 6666/6667/7000). Supports protocol versions 3.1–3.5 including AES-GCM (v3.5).
|
|
13
|
+
- **Full local protocol support** — LAN TCP client with AES-128-ECB (v3.1–v3.4) and AES-128-GCM (v3.5), 3-way key exchange for v3.4/v3.5, and automatic reconnection with exponential backoff.
|
|
14
|
+
- New `local` config block in Homebridge UI with device list and discovery options.
|
|
15
|
+
- New `mode` selector in the Homebridge UI config screen.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Updated `config.schema.json` with the new `mode` enum and `local` block; all cloud options now only appear when mode is `cloud` or `both`.
|
|
19
|
+
- Version bump to 3.0.0 to reflect the breaking restructure.
|
|
20
|
+
- Updated README with full cloud and local setup instructions.
|
|
21
|
+
|
|
3
22
|
## [2.2.0] - (2026.2.23)
|
|
4
23
|
|
|
5
24
|
### Fixed
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)
|
|
4
4
|
|
|
5
5
|

|
|
6
|
-

|
|
7
7
|
|
|
8
8
|
[](https://github.com/sponsors/tassy-h)
|
|
9
9
|
[](https://npmjs.com/package/@homebridge-plugins/homebridge-tuya)
|
|
@@ -12,24 +12,20 @@
|
|
|
12
12
|
[](https://github.com/homebridge-plugins/homebridge-tuya/blob/main/LICENSE)
|
|
13
13
|
[](https://github.com/homebridge-plugins/homebridge-tuya/actions/workflows/build.yml)
|
|
14
14
|
|
|
15
|
+
Unified Homebridge plugin for Tuya smart devices — supports **Tuya Cloud** (REST/MQTT) and **Tuya Local** (direct LAN/TCP) communication, or both simultaneously.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Forked from 0x5e/homebridge-tuya-platform, with a focus on fixing bugs and adding new device support.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
---
|
|
22
18
|
|
|
23
19
|
## Features
|
|
24
20
|
|
|
21
|
+
- **Three connection modes**: Cloud, Local (LAN), or Both simultaneously.
|
|
25
22
|
- Optimized and improved code for better readability and maintainability.
|
|
26
|
-
- Enhanced stability.
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Supports over 60+ device categories, including most light, switch, sensor, camera, lock, IR remote control, etc.
|
|
23
|
+
- Enhanced stability and reduced API errors.
|
|
24
|
+
- Local LAN communication using the Tuya local protocol (v3.1–v3.5), no cloud connection required.
|
|
25
|
+
- Automatic UDP device discovery on the local network.
|
|
26
|
+
- Supports Tuya Scenes (Tap-to-Run) in Cloud mode.
|
|
27
|
+
- Device configuration overrides for non-standard DPs.
|
|
28
|
+
- Supports 60+ device categories including lights, switches, sensors, cameras, locks, IR remotes, and more.
|
|
33
29
|
|
|
34
30
|
|
|
35
31
|
## Supported Tuya Devices
|
|
@@ -41,15 +37,11 @@ See [CHANGELOG.md](./CHANGELOG.md)
|
|
|
41
37
|
|
|
42
38
|
|
|
43
39
|
## Installation
|
|
44
|
-
Before using this plugin, please make sure to uninstall `homebridge-tuya-platform` first as these two plugins cannot run simultaneously. However, the configuration files are compatible, so there's no need to delete them.
|
|
45
40
|
|
|
46
|
-
####
|
|
47
|
-
|
|
41
|
+
#### Homebridge Web UI
|
|
42
|
+
Search for `@homebridge-plugins/homebridge-tuya` on the Plugins page and install it.
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
#### For Homebridge Command Line Users
|
|
51
|
-
|
|
52
|
-
Run the following command in the terminal:
|
|
44
|
+
#### Command Line
|
|
53
45
|
```
|
|
54
46
|
npm install @homebridge-plugins/homebridge-tuya
|
|
55
47
|
```
|
|
@@ -57,159 +49,190 @@ npm install @homebridge-plugins/homebridge-tuya
|
|
|
57
49
|
|
|
58
50
|
## Configuration
|
|
59
51
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
####
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
52
|
+
### Connection Mode
|
|
53
|
+
|
|
54
|
+
Set `mode` in your config to one of:
|
|
55
|
+
|
|
56
|
+
| Mode | Description |
|
|
57
|
+
|------|-------------|
|
|
58
|
+
| `cloud` | Connect via Tuya Cloud API (default, backward-compatible) |
|
|
59
|
+
| `local` | Connect directly over LAN — no cloud needed |
|
|
60
|
+
| `both` | Cloud + Local simultaneously |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### Cloud Mode (`mode: "cloud"`)
|
|
65
|
+
|
|
66
|
+
Requires a [Tuya IoT Platform](https://iot.tuya.com) account and cloud project:
|
|
67
|
+
|
|
68
|
+
1. Create a cloud project and select your data center. See [Mappings Between OEM App Accounts and Data Centers](https://developer.tuya.com/en/docs/iot/oem-app-data-center-distributed?id=Kafi0ku9l07qb).
|
|
69
|
+
2. On the Project Page > Devices Panel > Link Tuya App Account, link your Tuya app account.
|
|
70
|
+
3. On the Project Page > Service API > Go to Authorize, subscribe to:
|
|
71
|
+
- Authorization Token Management
|
|
72
|
+
- Device Status Notification
|
|
73
|
+
- IoT Core
|
|
74
|
+
- IoT Video Live Stream *(for cameras)*
|
|
75
|
+
- Industry Project Client Service *(Custom project only)*
|
|
76
|
+
- IR Control Hub Open Service *(for IR devices)*
|
|
77
|
+
- Smart Home Scene Linkage *(for scenes)*
|
|
78
|
+
- Smart Lock Open Service *(for locks)*
|
|
79
|
+
4. **⚠️ Extend the API trial every 6 months** at [IoT Core Cloud Services](https://iot.tuya.com/cloud/products/detail?abilityId=1442730014117204014&id=p1668587814138nv4h3n&abilityAuth=0&tab=1).
|
|
80
|
+
|
|
81
|
+
There are two project types:
|
|
82
|
+
|
|
83
|
+
#### Custom Project (`options.projectType: "1"`)
|
|
84
|
+
|
|
85
|
+
| Field | Required | Description |
|
|
86
|
+
|-------|----------|-------------|
|
|
87
|
+
| `options.projectType` | ✅ | `"1"` |
|
|
88
|
+
| `options.endpoint` | ✅ | Endpoint URL from [API Reference > Endpoints](https://developer.tuya.com/en/docs/iot/api-request?id=Ka4a8uuo1j4t4#title-1-Endpoints) |
|
|
89
|
+
| `options.accessId` | ✅ | Access ID from [Tuya IoT Platform](https://iot.tuya.com/cloud) |
|
|
90
|
+
| `options.accessKey` | ✅ | Access Secret from [Tuya IoT Platform](https://iot.tuya.com/cloud) |
|
|
91
|
+
| `options.debug` | ➖ | Enable debug logging (default: `false`) |
|
|
92
|
+
| `options.debugLevel` | ➖ | Comma-separated log filter: `api`, `mqtt`, or a device ID |
|
|
93
|
+
|
|
94
|
+
#### Smart Home Project (`options.projectType: "2"`)
|
|
95
|
+
|
|
96
|
+
| Field | Required | Description |
|
|
97
|
+
|-------|----------|-------------|
|
|
98
|
+
| `options.projectType` | ✅ | `"2"` |
|
|
99
|
+
| `options.accessId` | ✅ | Access ID |
|
|
100
|
+
| `options.accessKey` | ✅ | Access Secret |
|
|
101
|
+
| `options.countryCode` | ✅ | Country code of your app account's region |
|
|
102
|
+
| `options.username` | ✅ | Tuya/Smart Life app username |
|
|
103
|
+
| `options.password` | ✅ | App password (MD5 salted hash also accepted) |
|
|
104
|
+
| `options.appSchema` | ✅ | `"tuyaSmart"` or `"smartlife"` |
|
|
105
|
+
| `options.endpoint` | ➖ | Override endpoint (auto-detected from countryCode) |
|
|
106
|
+
| `options.homeWhitelist` | ➖ | Array of Home IDs to include; blank = all homes |
|
|
107
|
+
| `options.debug` | ➖ | Enable debug logging (default: `false`) |
|
|
108
|
+
| `options.debugLevel` | ➖ | Comma-separated log filter |
|
|
109
|
+
|
|
110
|
+
**Example cloud config:**
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"platform": "TuyaPlatform",
|
|
114
|
+
"name": "Tuya",
|
|
115
|
+
"mode": "cloud",
|
|
116
|
+
"options": {
|
|
117
|
+
"projectType": "2",
|
|
118
|
+
"accessId": "YOUR_ACCESS_ID",
|
|
119
|
+
"accessKey": "YOUR_ACCESS_KEY",
|
|
120
|
+
"countryCode": 1,
|
|
121
|
+
"username": "your@email.com",
|
|
122
|
+
"password": "yourpassword",
|
|
123
|
+
"appSchema": "tuyaSmart"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
115
127
|
|
|
116
|
-
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### Local Mode (`mode: "local"`)
|
|
131
|
+
|
|
132
|
+
Communicates directly with your Tuya devices over LAN — no internet or Tuya Cloud account required after initial key retrieval.
|
|
133
|
+
|
|
134
|
+
**Requirements:**
|
|
135
|
+
- Your Homebridge host and Tuya devices must be on the same network.
|
|
136
|
+
- Each device's **local key** (16-character AES key). You can retrieve your local keys from the [Tuya IoT Platform](https://iot.tuya.com) — see [Get Local Keys](https://github.com/homebridge-plugins/homebridge-tuya/wiki/Get-Local-Keys-for-Your-Devices) for a guide.
|
|
137
|
+
|
|
138
|
+
| Field | Required | Description |
|
|
139
|
+
|-------|----------|-------------|
|
|
140
|
+
| `local.autoDiscoverDevices` | ➖ | Auto-discover devices via UDP broadcast (default: `true`) |
|
|
141
|
+
| `local.discoverTimeout` | ➖ | Discovery listen time in seconds (default: `5`) |
|
|
142
|
+
| `local.devices` | ➖ | Optional list of known devices with their keys |
|
|
143
|
+
| `local.devices[].tuyaDeviceId` | ✅ | Tuya device ID |
|
|
144
|
+
| `local.devices[].tuyaKey` | ➖ | Local AES key (16 chars) |
|
|
145
|
+
| `local.devices[].ip` | ➖ | Fixed IP address (optional; otherwise auto-discovered) |
|
|
146
|
+
| `local.devices[].name` | ➖ | Friendly name |
|
|
147
|
+
| `local.devices[].category` | ➖ | Category code (e.g. `light`, `switch`) to pick the right accessory handler |
|
|
148
|
+
| `local.devices[].protocolVersion` | ➖ | Protocol version (e.g. `3.3`, `3.4`); auto-detected when blank |
|
|
149
|
+
|
|
150
|
+
**Example local config:**
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"platform": "TuyaPlatform",
|
|
154
|
+
"name": "Tuya",
|
|
155
|
+
"mode": "local",
|
|
156
|
+
"local": {
|
|
157
|
+
"autoDiscoverDevices": true,
|
|
158
|
+
"discoverTimeout": 5,
|
|
159
|
+
"devices": [
|
|
160
|
+
{
|
|
161
|
+
"tuyaDeviceId": "abcdef1234567890",
|
|
162
|
+
"tuyaKey": "0123456789abcdef",
|
|
163
|
+
"ip": "192.168.1.100",
|
|
164
|
+
"name": "Living Room Light",
|
|
165
|
+
"category": "light"
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
117
171
|
|
|
118
|
-
|
|
172
|
+
---
|
|
119
173
|
|
|
120
|
-
|
|
174
|
+
### Both Mode (`mode: "both"`)
|
|
121
175
|
|
|
122
|
-
|
|
176
|
+
Uses cloud + local simultaneously. Provide both `options` (cloud) and `local` blocks.
|
|
177
|
+
- Local LAN commands are attempted first when the device is available locally.
|
|
178
|
+
- The cloud connection remains active as a fallback.
|
|
179
|
+
- This fallback is only used when a local command does not receive confirmation within 10 seconds; normal local commands remain local.
|
|
180
|
+
- If a local command does not receive confirmation within 10 seconds, the plugin automatically retries it via cloud.
|
|
181
|
+
- Cloud status updates can also satisfy pending local commands so the device does not get double-sent commands.
|
|
182
|
+
---
|
|
123
183
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
3. Paste the log anywhere and find the line beginning with "Region code:".
|
|
127
|
-
4. Look for the following codes: "AY" for China, "AZ" for the West US, "EU" for Central Europe, and "IN" for India.
|
|
184
|
+
### Advanced Options
|
|
185
|
+
See [ADVANCED_OPTIONS.md](./ADVANCED_OPTIONS.md)
|
|
128
186
|
|
|
129
|
-
|
|
187
|
+
Garage door controllers that keep `switch_1=true` can opt in to contact-sensor-only state reads with `garageDoorUseContactSensorForState` in `options.deviceOverrides`. This keeps commands on `switch_1`, but reads HomeKit state from `doorcontact_state`.
|
|
130
188
|
|
|
131
189
|
|
|
132
|
-
|
|
190
|
+
## Limitations
|
|
191
|
+
- Using the same app account for multiple Homebridge/HomeAssistant instances is not recommended. Use separate app accounts per instance.
|
|
192
|
+
- **⚠️ Cloud API trial expires every 6 months** — set a calendar reminder to renew.
|
|
193
|
+
- Local mode requires devices and Homebridge to be on the same subnet.
|
|
133
194
|
|
|
134
|
-
<!-- If your device is working properly, you don't need to know this. -->
|
|
135
195
|
|
|
136
|
-
|
|
196
|
+
## FAQ
|
|
137
197
|
|
|
138
|
-
|
|
198
|
+
#### About Login Issues
|
|
139
199
|
|
|
140
|
-
|
|
200
|
+
For most users, the data center is auto-detected. If you get error codes `1106` or `2406`:
|
|
141
201
|
|
|
202
|
+
1. Open the Tuya app → Me → Settings → Network Diagnosis.
|
|
203
|
+
2. Start diagnosis, select Upload Log → Copy the Log to Clipboard.
|
|
204
|
+
3. Find the line beginning with `Region code:`:
|
|
205
|
+
- `AY` = China, `AZ` = West US, `EU` = Central Europe, `IN` = India.
|
|
206
|
+
4. Manually set `options.endpoint` in your config.
|
|
142
207
|
|
|
143
|
-
####
|
|
208
|
+
#### What is "Standard DP" and "Non-standard DP"?
|
|
144
209
|
|
|
145
|
-
|
|
146
|
-
1. Change the device's control mode on the Tuya Platform:
|
|
147
|
-
- Go to "[Tuya Platform Cloud Development](https://iot.tuya.com/cloud/) > Your Project > Devices > All Devices > View Devices by Product".
|
|
148
|
-
- Find the product related to your device, click the "pencil" icon (Change Control Instruction Mode).
|
|
149
|
-
- <img width="500" alt="image" src="https://user-images.githubusercontent.com/5144674/202967707-8b934e05-36d6-4b42-bb7b-87e5b24474c4.png">
|
|
150
|
-
- In the "Table of Instructions", you can see the cloud mapping and determine which DP codes are missing and need to be manually mapped later.
|
|
151
|
-
- <img width="500" alt="image" src="https://user-images.githubusercontent.com/5144674/202967528-4838f9a1-0547-4102-afbb-180dc9b198b1.png">
|
|
152
|
-
- Select "DP Instruction" and save.
|
|
153
|
-
2. Override the device schema, see [ADVANCED_OPTIONS.md](./ADVANCED_OPTIONS.md).
|
|
210
|
+
"Standard DP" refers to device properties defined in [Tuya Standard Instruction Set](https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq) (e.g. `switch_led`, `bright_value`). If your device works in the Tuya app but not this plugin, it likely has non-standard DPs.
|
|
154
211
|
|
|
212
|
+
#### Can "Non-standard DP" be supported?
|
|
155
213
|
|
|
156
|
-
|
|
157
|
-
See [#90](https://github.com/homebridge-plugins/homebridge-tuya/issues/90).
|
|
214
|
+
Yes — override the device schema. See [ADVANCED_OPTIONS.md](./ADVANCED_OPTIONS.md).
|
|
158
215
|
|
|
159
|
-
|
|
216
|
+
Steps:
|
|
217
|
+
1. On the Tuya Platform → Your Project → Devices → All Devices → View by Product.
|
|
218
|
+
2. Click the pencil icon next to your product → select **DP Instruction** → save.
|
|
219
|
+
3. Add a `deviceOverrides` entry with schema mappings in the plugin config.
|
|
160
220
|
|
|
161
221
|
|
|
162
222
|
## Troubleshooting
|
|
163
223
|
|
|
164
|
-
If your device is not supported, please follow these steps to collect information.
|
|
165
|
-
|
|
166
224
|
#### 1. Get Device Information
|
|
167
225
|
|
|
168
|
-
After
|
|
226
|
+
After a successful start, the cloud device list is saved at the path shown in the Homebridge log:
|
|
169
227
|
```
|
|
170
|
-
[
|
|
228
|
+
[TuyaPlatform] Device list saved at /path/to/TuyaDeviceList.{uid}.json
|
|
171
229
|
```
|
|
172
|
-
|
|
173
|
-
**⚠️Please make sure to remove sensitive information such as `ip`, `lon`, `lat`, `local_key`, and `uid` before submitting the file.**
|
|
174
|
-
|
|
230
|
+
**⚠️ Remove sensitive fields (`ip`, `lon`, `lat`, `local_key`, `uid`) before sharing.**
|
|
175
231
|
|
|
176
232
|
#### 2. Enable Debug Mode
|
|
177
233
|
|
|
178
|
-
Add debug
|
|
234
|
+
Add `"debug": true` to your `options` block and restart Homebridge.
|
|
179
235
|
|
|
180
236
|
#### 3. Collect Logs
|
|
181
237
|
|
|
182
|
-
With debug
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
[2022/12/8 12:51:59] [TuyaPlatform] [TuyaOpenMQ] onMessage:
|
|
186
|
-
topic = cloud/token/in/xxx
|
|
187
|
-
protocol = 4
|
|
188
|
-
message = {
|
|
189
|
-
"dataId": "xxx",
|
|
190
|
-
"devId": "xxx",
|
|
191
|
-
"productKey": "xxx",
|
|
192
|
-
"status": [
|
|
193
|
-
{
|
|
194
|
-
"1": "double_click",
|
|
195
|
-
"code": "switch1_value",
|
|
196
|
-
"t": "1670475119766",
|
|
197
|
-
"value": "double_click"
|
|
198
|
-
}
|
|
199
|
-
]
|
|
200
|
-
}
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
If you are unable to receive any MQTT logs while controlling the device, it likely means that your device has "Non-standard DP".
|
|
204
|
-
|
|
205
|
-
By submitting the device information JSON and MQTT logs, you can help us support new device categories.
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
## Contributing
|
|
209
|
-
|
|
210
|
-
Please see https://github.com/homebridge/homebridge-plugin-template#setup-development-environment for setup development environment.
|
|
211
|
-
|
|
212
|
-
PRs and issues are welcome.
|
|
213
|
-
|
|
214
|
-
#
|
|
215
|
-
Thank you for spend time using the project. If it helps you, don't hesitate to give it a star 🌟:-)
|
|
238
|
+
With debug enabled, operate your device physically or via the Tuya App and collect the MQTT/local protocol logs from the Homebridge log.
|