@homebridge-plugins/homebridge-tuya 2.2.1 → 3.0.0-beta.1
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/CHANGELOG.md +19 -0
- package/README.md +161 -144
- package/config.schema.json +976 -11
- package/dist/{core → cloud/api}/TuyaOpenAPI.js +6 -7
- package/dist/cloud/api/TuyaOpenAPI.js.map +1 -0
- package/dist/{core → cloud/api}/TuyaOpenMQ.js +13 -11
- package/dist/cloud/api/TuyaOpenMQ.js.map +1 -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/{device → cloud/device}/TuyaDeviceManager.js +8 -3
- package/dist/cloud/device/TuyaDeviceManager.js.map +1 -0
- package/dist/cloud/device/TuyaHomeDeviceManager.js.map +1 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/local/CloudLocalReconciliation.js +180 -0
- package/dist/local/CloudLocalReconciliation.js.map +1 -0
- package/dist/local/DynamicChildDiscovery.js +154 -0
- package/dist/local/DynamicChildDiscovery.js.map +1 -0
- package/dist/local/LocalDevice.js +419 -0
- package/dist/local/LocalDevice.js.map +1 -0
- package/dist/local/LocalDeviceManager.js +833 -0
- package/dist/local/LocalDeviceManager.js.map +1 -0
- package/dist/local/TuyaDiscovery.js +248 -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 +329 -0
- package/dist/local/protocol/ProtocolUtilities.js.map +1 -0
- package/dist/local/protocol/ProtocolV31V32.js +60 -0
- package/dist/local/protocol/ProtocolV31V32.js.map +1 -0
- package/dist/local/protocol/ProtocolV33.js +52 -0
- package/dist/local/protocol/ProtocolV33.js.map +1 -0
- package/dist/local/protocol/ProtocolV34.js +104 -0
- package/dist/local/protocol/ProtocolV34.js.map +1 -0
- package/dist/local/protocol/ProtocolV35.js +77 -0
- package/dist/local/protocol/ProtocolV35.js.map +1 -0
- package/dist/platform.js +149 -69
- package/dist/platform.js.map +1 -1
- package/dist/shared/AccessoryFactory.js +276 -0
- package/dist/shared/AccessoryFactory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/AccessoryFactory.js +2 -2
- package/dist/shared/accessories/AccessoryFactory.js.map +1 -0
- package/dist/shared/accessories/AirConditionerAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/AirPurifierAccessory.js +1 -1
- package/dist/shared/accessories/AirPurifierAccessory.js.map +1 -0
- package/dist/shared/accessories/AirQualitySensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/BaseAccessory.js +99 -30
- package/dist/shared/accessories/BaseAccessory.js.map +1 -0
- package/dist/shared/accessories/BlindsAccessory.js +199 -0
- package/dist/shared/accessories/BlindsAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/CameraAccessory.js +7 -3
- package/dist/shared/accessories/CameraAccessory.js.map +1 -0
- package/dist/shared/accessories/CarbonDioxideSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/CarbonMonoxideSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/ContactSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/DehumidifierAccessory.js.map +1 -0
- package/dist/shared/accessories/DiffuserAccessory.js.map +1 -0
- package/dist/shared/accessories/DimmerAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/DoorbellAccessory.js +3 -1
- package/dist/shared/accessories/DoorbellAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/ExtractionHoodAccessory.js +4 -2
- package/dist/shared/accessories/ExtractionHoodAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/FanAccessory.js +10 -4
- package/dist/shared/accessories/FanAccessory.js.map +1 -0
- package/dist/shared/accessories/GarageDoorAccessory.js.map +1 -0
- package/dist/shared/accessories/HeaterAccessory.js.map +1 -0
- package/dist/shared/accessories/HeaterAccessory_old.js.map +1 -0
- package/dist/shared/accessories/HumanPresenceSensorAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/HumidifierAccessory.js +3 -1
- package/dist/shared/accessories/HumidifierAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/IRAirConditionerAccessory.js +2 -2
- package/dist/shared/accessories/IRAirConditionerAccessory.js.map +1 -0
- package/dist/shared/accessories/IRControlHubAccessory.js.map +1 -0
- package/dist/shared/accessories/IRControlHubSubAccessory.js.map +1 -0
- package/dist/shared/accessories/IRGenericAccessory.js.map +1 -0
- package/dist/shared/accessories/LeakSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/LightAccessory.js.map +1 -0
- package/dist/shared/accessories/LightSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/LocationWeatherAccessory.js.map +1 -0
- package/dist/shared/accessories/LockAccessory.js.map +1 -0
- package/dist/shared/accessories/MotionSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/OutletAccessory.js.map +1 -0
- package/dist/shared/accessories/PetFeederAccessory.js.map +1 -0
- package/dist/shared/accessories/SceneAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/SceneSwitchAccessory.js +1 -1
- package/dist/shared/accessories/SceneSwitchAccessory.js.map +1 -0
- package/dist/shared/accessories/SecuritySystemAccessory.js.map +1 -0
- package/dist/shared/accessories/SmokeSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/SwitchAccessory.js +148 -0
- package/dist/shared/accessories/SwitchAccessory.js.map +1 -0
- package/dist/shared/accessories/TemperatureHumiditySensorAccessory.js.map +1 -0
- package/dist/shared/accessories/ThermostatAccessory.js.map +1 -0
- package/dist/shared/accessories/TowerRackAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/ValveAccessory.js +1 -1
- package/dist/shared/accessories/ValveAccessory.js.map +1 -0
- package/dist/{accessory → shared/accessories}/VibrationSensorAccessory.js +7 -3
- package/dist/shared/accessories/VibrationSensorAccessory.js.map +1 -0
- package/dist/shared/accessories/WeatherStationAccessory.js.map +1 -0
- package/dist/shared/accessories/WetBulbGlobeTemperatureAccessory.js.map +1 -0
- package/dist/shared/accessories/WhiteNoiseLightAccessory.js.map +1 -0
- package/dist/shared/accessories/WindowAccessory.js.map +1 -0
- package/dist/shared/accessories/WindowCoveringAccessory.js.map +1 -0
- package/dist/shared/accessories/WirelessSwitchAccessory.js.map +1 -0
- package/dist/shared/accessories/characteristic/Active.js.map +1 -0
- package/dist/{accessory → shared/accessories}/characteristic/AirQuality.js +1 -1
- package/dist/shared/accessories/characteristic/AirQuality.js.map +1 -0
- package/dist/shared/accessories/characteristic/CurrentRelativeHumidity.js.map +1 -0
- package/dist/shared/accessories/characteristic/CurrentTemperature.js.map +1 -0
- package/dist/shared/accessories/characteristic/CurrentWeather.js.map +1 -0
- package/dist/shared/accessories/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
- package/dist/shared/accessories/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
- package/dist/shared/accessories/characteristic/EnergyUsage.js.map +1 -0
- package/dist/shared/accessories/characteristic/Light.js.map +1 -0
- package/dist/shared/accessories/characteristic/LightSensor.js.map +1 -0
- package/dist/shared/accessories/characteristic/LockPhysicalControls.js.map +1 -0
- package/dist/{accessory → shared/accessories}/characteristic/MotionDetected.js +1 -1
- package/dist/shared/accessories/characteristic/MotionDetected.js.map +1 -0
- package/dist/shared/accessories/characteristic/Name.js.map +1 -0
- package/dist/shared/accessories/characteristic/OccupancyDetected.js.map +1 -0
- package/dist/{accessory → shared/accessories}/characteristic/On.js +1 -1
- package/dist/shared/accessories/characteristic/On.js.map +1 -0
- package/dist/shared/accessories/characteristic/OutletInUse.js.map +1 -0
- package/dist/{accessory → shared/accessories}/characteristic/ProgrammableSwitchEvent.js +2 -2
- package/dist/shared/accessories/characteristic/ProgrammableSwitchEvent.js.map +1 -0
- package/dist/shared/accessories/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
- package/dist/shared/accessories/characteristic/RotationSpeed.js.map +1 -0
- package/dist/shared/accessories/characteristic/SecuritySystemState.js.map +1 -0
- package/dist/shared/accessories/characteristic/SwingMode.js.map +1 -0
- package/dist/shared/accessories/characteristic/TargetTemperature.js.map +1 -0
- package/dist/shared/accessories/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/FfmpegStreamingProcess.js.map +1 -0
- package/dist/shared/util/InfraredTool.js.map +1 -0
- package/dist/shared/util/Logger.js.map +1 -0
- package/dist/shared/util/TuyaRecordingDelegate.js.map +1 -0
- package/dist/shared/util/TuyaStreamDelegate.js.map +1 -0
- package/dist/shared/util/color.js.map +1 -0
- package/dist/shared/util/util.js +135 -0
- package/dist/shared/util/util.js.map +1 -0
- package/eslint.config.mjs +52 -0
- package/jest.config.js +6 -0
- package/package.json +22 -27
- 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.test.ts +522 -0
- package/test/config.test.ts +430 -0
- package/test/custom.test.ts +4 -4
- package/test/errorHandling.test.ts +570 -0
- package/test/errorHandlingCoverage.test.ts +410 -0
- package/test/home.test.ts +4 -4
- package/test/localDevice.test.ts +616 -0
- package/test/localDeviceManager.behavior.test.ts +185 -0
- package/test/localDeviceManager.test.ts +268 -0
- package/test/mqttMessages.test.ts +495 -0
- package/test/platform.test.ts +515 -0
- package/test/platform.validation.local.test.ts +250 -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 +469 -0
- package/test/tuyaDevice.test.ts +425 -0
- package/test/tuyaDeviceManager.test.ts +813 -0
- package/test/tuyaDiscovery.test.ts +439 -0
- package/test/tuyaHomeDeviceManager.test.ts +540 -0
- package/test/tuyaOpenAPI.test.ts +404 -0
- package/test/tuyaOpenMQ.test.ts +444 -0
- package/test/util.test.ts +318 -0
- package/test/util.ts +4 -3
- package/test/zigbee/ChildPayloadUtility.test.ts +199 -0
- package/test/zigbee/CloudLocalReconciliation.test.ts +284 -0
- package/test/zigbee/DynamicChildDiscovery.test.ts +333 -0
- package/test/zigbee/LocalDevice.zigbee.test.ts +274 -0
- package/test/zigbee/LocalDeviceManager.cloud-discovery.test.ts +163 -0
- package/test/zigbee/LocalDeviceManager.zigbee.reconnect.test.ts +200 -0
- package/test/zigbee/LocalDeviceManager.zigbee.test.ts +344 -0
- package/test/zigbee/ZigbeeEventDetection.test.ts +418 -0
- package/test/zigbee/ZigbeeGatewayDetection.test.ts +222 -0
- package/tuya-local-configs/dev-1.hash +1 -0
- package/tuya-local-configs/device1.hash +1 -0
- package/wiki/Get-Local-Keys-for-Your-Devices.md +85 -0
- 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 +0 -85
- 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.map +0 -1
- package/dist/device/TuyaDevice.js.map +0 -1
- package/dist/device/TuyaDeviceManager.js.map +0 -1
- 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.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/dist/{device → cloud/device}/TuyaCustomDeviceManager.js +0 -0
- /package/dist/{device → cloud/device}/TuyaHomeDeviceManager.js +0 -0
- /package/dist/{accessory → shared/accessories}/AirConditionerAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/AirQualitySensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/CarbonDioxideSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/CarbonMonoxideSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/ContactSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/DehumidifierAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/DiffuserAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/DimmerAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/GarageDoorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/HeaterAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/HeaterAccessory_old.js +0 -0
- /package/dist/{accessory → shared/accessories}/HumanPresenceSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/IRControlHubAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/IRControlHubSubAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/IRGenericAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/LeakSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/LightAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/LightSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/LocationWeatherAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/LockAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/MotionSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/OutletAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/PetFeederAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/SceneAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/SecuritySystemAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/SmokeSensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/TemperatureHumiditySensorAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/ThermostatAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/TowerRackAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WeatherStationAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WetBulbGlobeTemperatureAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WhiteNoiseLightAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WindowAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WindowCoveringAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/WirelessSwitchAccessory.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/Active.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/CurrentRelativeHumidity.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/CurrentTemperature.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/CurrentWeather.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/CurrentWeatherByOpenMeteo.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/CurrentWetBulbGlobeTemperature.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/EnergyUsage.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/Light.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/LightSensor.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/LockPhysicalControls.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/Name.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/OccupancyDetected.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/OutletInUse.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/RelativeHumidityDehumidifierThreshold.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/RotationSpeed.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/SecuritySystemState.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/SwingMode.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/TargetTemperature.js +0 -0
- /package/dist/{accessory → shared/accessories}/characteristic/TemperatureDisplayUnits.js +0 -0
- /package/dist/{util → shared/util}/FfmpegStreamingProcess.js +0 -0
- /package/dist/{util → shared/util}/InfraredTool.js +0 -0
- /package/dist/{util → shared/util}/Logger.js +0 -0
- /package/dist/{util → shared/util}/TuyaRecordingDelegate.js +0 -0
- /package/dist/{util → shared/util}/TuyaStreamDelegate.js +0 -0
- /package/dist/{util → shared/util}/color.js +0 -0
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const debounce_1 = require("debounce");
|
|
7
|
-
const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
|
|
8
|
-
const TuyaDevice_1 = require("../device/TuyaDevice");
|
|
9
3
|
const util_1 = require("../util/util");
|
|
10
4
|
const Logger_1 = require("../util/Logger");
|
|
5
|
+
const util_2 = require("../util/util");
|
|
11
6
|
const MANUFACTURER = 'Tuya Inc.';
|
|
12
7
|
const SCHEMA_CODE = {
|
|
13
8
|
BATTERY_STATE: ['battery_state'],
|
|
@@ -21,23 +16,60 @@ const SCHEMA_CODE = {
|
|
|
21
16
|
* https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
|
22
17
|
*/
|
|
23
18
|
class BaseAccessory {
|
|
19
|
+
get deviceManager() {
|
|
20
|
+
// Return whichever manager owns this device (local takes priority in hybrid mode)
|
|
21
|
+
const deviceID = this.accessory.context.deviceID;
|
|
22
|
+
if (deviceID && this.platform.localDeviceManager?.getDevice(deviceID)) {
|
|
23
|
+
return this.platform.localDeviceManager;
|
|
24
|
+
}
|
|
25
|
+
return this.platform.deviceManager;
|
|
26
|
+
}
|
|
27
|
+
get deviceSource() {
|
|
28
|
+
// Determine which source this device comes from for override lookup
|
|
29
|
+
const deviceID = this.accessory.context.deviceID;
|
|
30
|
+
if (deviceID && this.platform.localDeviceManager?.getDevice(deviceID)) {
|
|
31
|
+
return 'local';
|
|
32
|
+
}
|
|
33
|
+
if (deviceID && this.platform.deviceManager?.getDevice(deviceID)) {
|
|
34
|
+
return 'cloud';
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
get device() {
|
|
39
|
+
// Try local device manager first (for local-only or hybrid modes)
|
|
40
|
+
const localDevice = this.platform.localDeviceManager?.getDevice(this.accessory.context.deviceID);
|
|
41
|
+
if (localDevice) {
|
|
42
|
+
return localDevice;
|
|
43
|
+
}
|
|
44
|
+
// Fall back to cloud device manager
|
|
45
|
+
return this.platform.deviceManager?.getDevice(this.accessory.context.deviceID);
|
|
46
|
+
}
|
|
47
|
+
get log() {
|
|
48
|
+
if (!this.cachedLog) {
|
|
49
|
+
const deviceName = this.device?.name ?? this.device?.id ?? this.accessory.context.deviceID ?? 'Unknown Device';
|
|
50
|
+
this.cachedLog = new Logger_1.PrefixLogger(this.platform.log, deviceName, this.platform.options.debug && ((this.platform.options.debugLevel ?? '').length > 0
|
|
51
|
+
? this.platform.options.debugLevel?.includes(this.device?.id ?? '')
|
|
52
|
+
: true));
|
|
53
|
+
}
|
|
54
|
+
return this.cachedLog;
|
|
55
|
+
}
|
|
24
56
|
constructor(platform, accessory) {
|
|
25
57
|
this.platform = platform;
|
|
26
58
|
this.accessory = accessory;
|
|
27
59
|
this.Service = this.platform.api.hap.Service;
|
|
28
60
|
this.Characteristic = this.platform.api.hap.Characteristic;
|
|
29
|
-
this.
|
|
30
|
-
this.device = this.deviceManager.getDevice(this.accessory.context.deviceID);
|
|
31
|
-
this.log = new Logger_1.PrefixLogger(this.platform.log, this.device.name.length > 0 ? this.device.name : this.device.id, this.platform.options.debug && ((this.platform.options.debugLevel ?? '').length > 0
|
|
32
|
-
? this.platform.options.debugLevel?.includes(this.device.id)
|
|
33
|
-
: true));
|
|
34
|
-
this.intialized = false;
|
|
61
|
+
this.initialized = false;
|
|
35
62
|
this.sendQueue = new Map();
|
|
36
|
-
this.debounceSendCommands = (0,
|
|
63
|
+
this.debounceSendCommands = (0, util_2.debounce)(async () => {
|
|
37
64
|
const commands = [...this.sendQueue.values()];
|
|
38
65
|
if (commands.length === 0) {
|
|
39
66
|
return;
|
|
40
67
|
}
|
|
68
|
+
if (!this.device || !this.deviceManager) {
|
|
69
|
+
this.log.warn('Device manager or device not available, cannot send commands.');
|
|
70
|
+
this.sendQueue.clear();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
41
73
|
await this.deviceManager.sendCommands(this.device.id, commands);
|
|
42
74
|
this.sendQueue.clear();
|
|
43
75
|
}, 100);
|
|
@@ -47,6 +79,15 @@ class BaseAccessory {
|
|
|
47
79
|
addAccessoryInfoService() {
|
|
48
80
|
const service = this.accessory.getService(this.Service.AccessoryInformation)
|
|
49
81
|
|| this.accessory.addService(this.Service.AccessoryInformation);
|
|
82
|
+
if (!this.device) {
|
|
83
|
+
// Use fallback values if device is not available yet
|
|
84
|
+
const safeName = (0, util_1.sanitizeName)(this.accessory.displayName) ?? 'Tuya Device';
|
|
85
|
+
service
|
|
86
|
+
.setCharacteristic(this.Characteristic.Manufacturer, MANUFACTURER)
|
|
87
|
+
.setCharacteristic(this.Characteristic.Name, safeName)
|
|
88
|
+
.setCharacteristic(this.Characteristic.ConfiguredName, safeName);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
50
91
|
const safeName = (0, util_1.sanitizeName)(this.device.name) ?? (this.device.id || 'Tuya Device');
|
|
51
92
|
service
|
|
52
93
|
.setCharacteristic(this.Characteristic.Manufacturer, MANUFACTURER)
|
|
@@ -69,10 +110,16 @@ class BaseAccessory {
|
|
|
69
110
|
.onGet(() => {
|
|
70
111
|
if (stateSchema) {
|
|
71
112
|
const status = this.getStatus(stateSchema.code);
|
|
113
|
+
if (!status) {
|
|
114
|
+
return BATTERY_LEVEL_NORMAL;
|
|
115
|
+
}
|
|
72
116
|
return (status.value === 'low') ? BATTERY_LEVEL_LOW : BATTERY_LEVEL_NORMAL;
|
|
73
117
|
}
|
|
74
118
|
// fallback
|
|
75
119
|
const status = this.getStatus(percentSchema.code);
|
|
120
|
+
if (!status) {
|
|
121
|
+
return BATTERY_LEVEL_NORMAL;
|
|
122
|
+
}
|
|
76
123
|
return (status.value <= 20) ? BATTERY_LEVEL_LOW : BATTERY_LEVEL_NORMAL;
|
|
77
124
|
});
|
|
78
125
|
}
|
|
@@ -81,6 +128,9 @@ class BaseAccessory {
|
|
|
81
128
|
service.getCharacteristic(this.Characteristic.BatteryLevel)
|
|
82
129
|
.onGet(() => {
|
|
83
130
|
const status = this.getStatus(percentSchema.code);
|
|
131
|
+
if (!status) {
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
84
134
|
return (0, util_1.limit)(status.value / multiple, 0, 100);
|
|
85
135
|
});
|
|
86
136
|
const chargingSchema = this.getSchema(...SCHEMA_CODE.BATTERY_CHARGING);
|
|
@@ -89,6 +139,9 @@ class BaseAccessory {
|
|
|
89
139
|
service.getCharacteristic(this.Characteristic.ChargingState)
|
|
90
140
|
.onGet(() => {
|
|
91
141
|
const status = this.getStatus(chargingSchema.code);
|
|
142
|
+
if (!status) {
|
|
143
|
+
return NOT_CHARGING;
|
|
144
|
+
}
|
|
92
145
|
return status.value ? CHARGING : NOT_CHARGING;
|
|
93
146
|
});
|
|
94
147
|
}
|
|
@@ -99,7 +152,7 @@ class BaseAccessory {
|
|
|
99
152
|
service.addOptionalCharacteristic(this.Characteristic.StatusActive);
|
|
100
153
|
}
|
|
101
154
|
service.getCharacteristic(this.Characteristic.StatusActive)
|
|
102
|
-
.onGet(() => this.device
|
|
155
|
+
.onGet(() => this.device?.online ?? true);
|
|
103
156
|
}
|
|
104
157
|
}
|
|
105
158
|
async updateAllValues() {
|
|
@@ -128,37 +181,40 @@ class BaseAccessory {
|
|
|
128
181
|
}
|
|
129
182
|
}
|
|
130
183
|
checkOnlineStatus() {
|
|
131
|
-
if (
|
|
184
|
+
if (this.device?.online === false) {
|
|
132
185
|
const { HapStatusError, HAPStatus } = this.platform.api.hap;
|
|
133
186
|
throw new HapStatusError(-70402 /* HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
134
187
|
}
|
|
135
188
|
}
|
|
136
189
|
getSchema(...codes) {
|
|
190
|
+
if (!this.device) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
137
193
|
for (const code of codes) {
|
|
138
194
|
const schema = this.device.schema.find(schema => {
|
|
139
195
|
// ignore case
|
|
140
196
|
return schema.code.toLowerCase() === code.toLowerCase();
|
|
141
197
|
});
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
// Readable schema must have a status
|
|
146
|
-
if ([TuyaDevice_1.TuyaDeviceSchemaMode.READ_WRITE, TuyaDevice_1.TuyaDeviceSchemaMode.READ_ONLY].includes(schema.mode)
|
|
147
|
-
&& !this.getStatus(schema.code)) {
|
|
148
|
-
this.log.warn('no status');
|
|
149
|
-
continue;
|
|
198
|
+
if (schema) {
|
|
199
|
+
return schema;
|
|
150
200
|
}
|
|
151
|
-
return schema;
|
|
152
201
|
}
|
|
153
202
|
return undefined;
|
|
154
203
|
}
|
|
155
204
|
getStatus(code) {
|
|
205
|
+
if (!this.device) {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
156
208
|
return this.device.status.find(status => status.code === code);
|
|
157
209
|
}
|
|
158
210
|
async sendCommands(commands, debounce = false) {
|
|
159
211
|
if (commands.length === 0) {
|
|
160
212
|
return;
|
|
161
213
|
}
|
|
214
|
+
if (!this.device || !this.deviceManager) {
|
|
215
|
+
this.log.warn('Device manager or device not available, cannot send commands.');
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
162
218
|
commands = commands.filter((status) => status.code && status.value !== undefined);
|
|
163
219
|
if (this.device.online === false) {
|
|
164
220
|
this.log.warn('Device is offline, skip send command.');
|
|
@@ -184,6 +240,9 @@ class BaseAccessory {
|
|
|
184
240
|
this.debounceSendCommands();
|
|
185
241
|
}
|
|
186
242
|
checkRequirements() {
|
|
243
|
+
if (!this.device) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
187
246
|
let result = true;
|
|
188
247
|
for (const codes of this.requiredSchema()) {
|
|
189
248
|
const schema = this.getSchema(...codes);
|
|
@@ -221,7 +280,10 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
221
280
|
this.eval = (script, device, value) => eval(script);
|
|
222
281
|
}
|
|
223
282
|
getOverridedSchema(code) {
|
|
224
|
-
|
|
283
|
+
if (!this.device) {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
const schemaConfig = this.platform.getDeviceSchemaConfig(this.device, code, this.deviceSource);
|
|
225
287
|
if (!schemaConfig) {
|
|
226
288
|
return undefined;
|
|
227
289
|
}
|
|
@@ -239,7 +301,7 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
239
301
|
property: schemaConfig.property || oldSchema.property,
|
|
240
302
|
_hidden: schemaConfig.hidden,
|
|
241
303
|
};
|
|
242
|
-
if (!(0,
|
|
304
|
+
if (!(0, util_2.deepEqual)(oldSchema, schema)) {
|
|
243
305
|
this.log.debug('Override schema %o => %o', oldSchema, schema);
|
|
244
306
|
}
|
|
245
307
|
return schema;
|
|
@@ -258,7 +320,10 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
258
320
|
return undefined;
|
|
259
321
|
}
|
|
260
322
|
getOverridedStatus(code) {
|
|
261
|
-
|
|
323
|
+
if (!this.device) {
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
const schemaConfig = this.platform.getDeviceSchemaConfig(this.device, code, this.deviceSource);
|
|
262
327
|
if (!schemaConfig) {
|
|
263
328
|
return undefined;
|
|
264
329
|
}
|
|
@@ -270,7 +335,7 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
270
335
|
if (schemaConfig.onGet) {
|
|
271
336
|
status.value = this.eval(schemaConfig.onGet, this.device, oldStatus.value);
|
|
272
337
|
}
|
|
273
|
-
if (!(0,
|
|
338
|
+
if (!(0, util_2.deepEqual)(oldStatus, status)) {
|
|
274
339
|
this.log.debug('Override status %o => %o', oldStatus, status);
|
|
275
340
|
}
|
|
276
341
|
return status;
|
|
@@ -279,9 +344,13 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
279
344
|
return this.getOverridedStatus(code) || super.getStatus(code);
|
|
280
345
|
}
|
|
281
346
|
async sendCommands(commands, debounce) {
|
|
347
|
+
if (!this.device) {
|
|
348
|
+
await super.sendCommands(commands, debounce);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
282
351
|
// convert to original commands
|
|
283
352
|
for (const command of commands) {
|
|
284
|
-
const schemaConfig = this.platform.getDeviceSchemaConfig(this.device, command.code);
|
|
353
|
+
const schemaConfig = this.platform.getDeviceSchemaConfig(this.device, command.code, this.deviceSource);
|
|
285
354
|
if (!schemaConfig) {
|
|
286
355
|
continue;
|
|
287
356
|
}
|
|
@@ -289,7 +358,7 @@ class OverridedBaseAccessory extends BaseAccessory {
|
|
|
289
358
|
if (schemaConfig.onSet) {
|
|
290
359
|
oldCommand.value = this.eval(schemaConfig.onSet, this.device, command.value);
|
|
291
360
|
}
|
|
292
|
-
if (!(0,
|
|
361
|
+
if (!(0, util_2.deepEqual)(oldCommand, command)) {
|
|
293
362
|
this.log.debug('Override command %o => %o', command, oldCommand);
|
|
294
363
|
command.code = oldCommand.code;
|
|
295
364
|
command.value = oldCommand.value;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/BaseAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const util_1 = require("../util/util");
|
|
7
|
+
const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
|
|
8
|
+
const SCHEMA_CODE = {
|
|
9
|
+
CONTROL: ['control', 'mach_operate'],
|
|
10
|
+
CURRENT_POSITION: ['percent_state'],
|
|
11
|
+
TARGET_POSITION: ['percent_control', 'position'],
|
|
12
|
+
POSITION: ['position'],
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* BlindsAccessory – handles roller motor shades and blinds.
|
|
16
|
+
* Supports position control with tracking and state management.
|
|
17
|
+
*
|
|
18
|
+
* Categories: 'mg' (blinds), 'mgmt' (motorized blinds)
|
|
19
|
+
*/
|
|
20
|
+
class BlindsAccessory extends BaseAccessory_1.default {
|
|
21
|
+
requiredSchema() {
|
|
22
|
+
return [SCHEMA_CODE.CONTROL];
|
|
23
|
+
}
|
|
24
|
+
configureServices() {
|
|
25
|
+
this.configureCurrentPosition();
|
|
26
|
+
this.configurePositionState();
|
|
27
|
+
this.configureTargetPosition();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Configure CurrentPosition characteristic.
|
|
31
|
+
* Read-only value showing actual blind position (0-100%).
|
|
32
|
+
*/
|
|
33
|
+
configureCurrentPosition() {
|
|
34
|
+
const currentSchema = this.getSchema(...SCHEMA_CODE.CURRENT_POSITION);
|
|
35
|
+
const targetSchema = this.getSchema(...SCHEMA_CODE.TARGET_POSITION) ||
|
|
36
|
+
this.getSchema(...SCHEMA_CODE.POSITION);
|
|
37
|
+
const service = this.accessory.getService(this.Service.WindowCovering) ||
|
|
38
|
+
this.accessory.addService(this.Service.WindowCovering);
|
|
39
|
+
service.getCharacteristic(this.Characteristic.CurrentPosition)
|
|
40
|
+
.onGet(() => {
|
|
41
|
+
// Prefer current position schema if available
|
|
42
|
+
if (currentSchema) {
|
|
43
|
+
const status = this.getStatus(currentSchema.code);
|
|
44
|
+
return (0, util_1.limit)(status.value, 0, 100);
|
|
45
|
+
}
|
|
46
|
+
// Fall back to target position schema
|
|
47
|
+
if (targetSchema) {
|
|
48
|
+
const status = this.getStatus(targetSchema.code);
|
|
49
|
+
return (0, util_1.limit)(status.value, 0, 100);
|
|
50
|
+
}
|
|
51
|
+
// Fall back to control command status (open/close/stop)
|
|
52
|
+
const controlSchema = this.getSchema(...SCHEMA_CODE.CONTROL);
|
|
53
|
+
if (controlSchema) {
|
|
54
|
+
const status = this.getStatus(controlSchema.code);
|
|
55
|
+
return this.controlValueToPosition(status.value);
|
|
56
|
+
}
|
|
57
|
+
return 50; // Default to middle position
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Configure PositionState characteristic.
|
|
62
|
+
* Indicates if blinds are going up (INCREASING), down (DECREASING), or stopped.
|
|
63
|
+
*/
|
|
64
|
+
configurePositionState() {
|
|
65
|
+
const currentSchema = this.getSchema(...SCHEMA_CODE.CURRENT_POSITION);
|
|
66
|
+
const targetSchema = this.getSchema(...SCHEMA_CODE.TARGET_POSITION) ||
|
|
67
|
+
this.getSchema(...SCHEMA_CODE.POSITION);
|
|
68
|
+
const { DECREASING, INCREASING, STOPPED } = this.Characteristic.PositionState;
|
|
69
|
+
const service = this.accessory.getService(this.Service.WindowCovering) ||
|
|
70
|
+
this.accessory.addService(this.Service.WindowCovering);
|
|
71
|
+
service.getCharacteristic(this.Characteristic.PositionState)
|
|
72
|
+
.onGet(() => {
|
|
73
|
+
// If we don't have both current and target, assume stopped
|
|
74
|
+
if (!currentSchema || !targetSchema) {
|
|
75
|
+
return STOPPED;
|
|
76
|
+
}
|
|
77
|
+
const currentStatus = this.getStatus(currentSchema.code);
|
|
78
|
+
const targetStatus = this.getStatus(targetSchema.code);
|
|
79
|
+
const currentPos = currentStatus.value;
|
|
80
|
+
const targetPos = targetStatus.value;
|
|
81
|
+
if (targetPos > currentPos) {
|
|
82
|
+
return INCREASING; // Moving up/open
|
|
83
|
+
}
|
|
84
|
+
else if (targetPos < currentPos) {
|
|
85
|
+
return DECREASING; // Moving down/close
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return STOPPED; // At target position
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Configure TargetPosition characteristic.
|
|
94
|
+
* Allows user to set desired blind position (0-100%).
|
|
95
|
+
*/
|
|
96
|
+
configureTargetPosition() {
|
|
97
|
+
const controlSchema = this.getSchema(...SCHEMA_CODE.CONTROL);
|
|
98
|
+
const targetSchema = this.getSchema(...SCHEMA_CODE.TARGET_POSITION) ||
|
|
99
|
+
this.getSchema(...SCHEMA_CODE.POSITION);
|
|
100
|
+
if (!controlSchema && !targetSchema) {
|
|
101
|
+
this.log.warn('No target position schema available for blinds control');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const service = this.accessory.getService(this.Service.WindowCovering) ||
|
|
105
|
+
this.accessory.addService(this.Service.WindowCovering);
|
|
106
|
+
service.getCharacteristic(this.Characteristic.TargetPosition)
|
|
107
|
+
.onGet(() => {
|
|
108
|
+
// If target position schema exists, use it
|
|
109
|
+
if (targetSchema) {
|
|
110
|
+
const status = this.getStatus(targetSchema.code);
|
|
111
|
+
return (0, util_1.limit)(status.value, 0, 100);
|
|
112
|
+
}
|
|
113
|
+
// Otherwise, use control schema (open/close/stop)
|
|
114
|
+
if (controlSchema) {
|
|
115
|
+
const status = this.getStatus(controlSchema.code);
|
|
116
|
+
return this.controlValueToPosition(status.value);
|
|
117
|
+
}
|
|
118
|
+
return this.targetPosition ?? 50;
|
|
119
|
+
})
|
|
120
|
+
.onSet(async (value) => {
|
|
121
|
+
const targetPos = value;
|
|
122
|
+
this.targetPosition = targetPos;
|
|
123
|
+
// Clear any pending reset timer
|
|
124
|
+
if (this.positionResetTimer) {
|
|
125
|
+
clearTimeout(this.positionResetTimer);
|
|
126
|
+
this.positionResetTimer = undefined;
|
|
127
|
+
}
|
|
128
|
+
// If we have a percent_control schema, use it directly
|
|
129
|
+
if (targetSchema && targetSchema.code !== 'control' && targetSchema.code !== 'mach_operate') {
|
|
130
|
+
await this.sendCommands([{ code: targetSchema.code, value: targetPos }], true);
|
|
131
|
+
}
|
|
132
|
+
else if (controlSchema) {
|
|
133
|
+
// Otherwise, use the control schema (open/close/stop)
|
|
134
|
+
const controlValue = this.positionToControlValue(targetPos);
|
|
135
|
+
await this.sendCommands([{ code: controlSchema.code, value: controlValue }], true);
|
|
136
|
+
// Schedule idle reset after 30 seconds if device doesn't report position
|
|
137
|
+
// This prevents the blinds from continuously moving
|
|
138
|
+
this.positionResetTimer = setTimeout(() => {
|
|
139
|
+
this._resetToIdle();
|
|
140
|
+
}, 30 * 1000);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Convert HomeKit position value (0-100) to Tuya control value (open/close/stop).
|
|
146
|
+
*/
|
|
147
|
+
positionToControlValue(position) {
|
|
148
|
+
if (position >= 95) {
|
|
149
|
+
return 'open'; // or 'ZZ' for some devices
|
|
150
|
+
}
|
|
151
|
+
else if (position <= 5) {
|
|
152
|
+
return 'close'; // or 'FZ' for some devices
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return 'stop'; // or 'STOP' for some devices
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convert Tuya control value (open/close/stop) to HomeKit position (0-100).
|
|
160
|
+
*/
|
|
161
|
+
controlValueToPosition(value) {
|
|
162
|
+
const lowerValue = value.toLowerCase();
|
|
163
|
+
if (lowerValue === 'open' || lowerValue === 'zz') {
|
|
164
|
+
return 100;
|
|
165
|
+
}
|
|
166
|
+
else if (lowerValue === 'close' || lowerValue === 'fz') {
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
else if (lowerValue === 'stop' || lowerValue === 'stopped') {
|
|
170
|
+
return 50;
|
|
171
|
+
}
|
|
172
|
+
return 50; // Default to middle
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Reset control to idle state after position movement completes.
|
|
176
|
+
*/
|
|
177
|
+
_resetToIdle() {
|
|
178
|
+
const controlSchema = this.getSchema(...SCHEMA_CODE.CONTROL);
|
|
179
|
+
if (controlSchema) {
|
|
180
|
+
this.sendCommands([{ code: controlSchema.code, value: 'stop' }]);
|
|
181
|
+
}
|
|
182
|
+
this.positionResetTimer = undefined;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Handle device status updates from cloud/local.
|
|
186
|
+
*/
|
|
187
|
+
async onDeviceStatusUpdate(status) {
|
|
188
|
+
super.onDeviceStatusUpdate(status);
|
|
189
|
+
// If we receive a position update, clear the reset timer
|
|
190
|
+
const positionUpdate = status.find(s => SCHEMA_CODE.CURRENT_POSITION.includes(s.code) ||
|
|
191
|
+
(SCHEMA_CODE.TARGET_POSITION.includes(s.code) && s.code !== 'control'));
|
|
192
|
+
if (positionUpdate && this.positionResetTimer) {
|
|
193
|
+
clearTimeout(this.positionResetTimer);
|
|
194
|
+
this.positionResetTimer = undefined;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.default = BlindsAccessory;
|
|
199
|
+
//# sourceMappingURL=BlindsAccessory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlindsAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/BlindsAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,11 +95,13 @@ class CameraAccessory extends BaseAccessory_1.default {
|
|
|
95
95
|
const motionSchema = this.getSchema(...SCHEMA_CODE.MOTION_DETECT);
|
|
96
96
|
if (motionSchema) {
|
|
97
97
|
const motionStatus = status.find(_status => _status.code === motionSchema.code);
|
|
98
|
-
|
|
98
|
+
if (motionStatus) {
|
|
99
|
+
this.onMotionDetected(motionStatus);
|
|
100
|
+
}
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
103
|
onMotionDetected(status) {
|
|
102
|
-
if (!this.
|
|
104
|
+
if (!this.initialized) {
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
105
107
|
const data = Buffer.from(status.value, 'base64').toString('binary');
|
|
@@ -109,7 +111,9 @@ class CameraAccessory extends BaseAccessory_1.default {
|
|
|
109
111
|
this.log.info('Motion event:', data);
|
|
110
112
|
const characteristic = this.getMotionService().getCharacteristic(this.Characteristic.MotionDetected);
|
|
111
113
|
characteristic.updateValue(true);
|
|
112
|
-
|
|
114
|
+
if (this.timer) {
|
|
115
|
+
clearTimeout(this.timer);
|
|
116
|
+
}
|
|
113
117
|
this.timer = setTimeout(() => characteristic.updateValue(false), 30 * 1000);
|
|
114
118
|
}
|
|
115
119
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/CameraAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CarbonDioxideSensorAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/CarbonDioxideSensorAccessory.ts"],"names":[],"mappings":";;;;;AACA,uCAAqC;AACrC,oEAA4C;AAE5C,MAAM,WAAW,GAAG;IAClB,UAAU,EAAE,CAAC,WAAW,CAAC;IACzB,SAAS,EAAE,CAAC,WAAW,CAAC;CACzB,CAAC;AAGF,MAAqB,4BAA6B,SAAQ,uBAAa;IAErE,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAGD,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;eAC7D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnE,CAAC;IAED,8BAA8B;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC;QAC7F,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC;aAC5E,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC9E,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2BAA2B;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA2C,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;aACzE,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAA,YAAK,EAAC,MAAM,CAAC,KAAe,GAAG,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC;CAEF;AA/CD,+CA+CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CarbonMonoxideSensorAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/CarbonMonoxideSensorAccessory.ts"],"names":[],"mappings":";;;;;AACA,uCAAqC;AACrC,oEAA4C;AAE5C,MAAM,WAAW,GAAG;IAClB,SAAS,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;IACpC,QAAQ,EAAE,CAAC,UAAU,CAAC;CACvB,CAAC;AAEF,MAAqB,6BAA8B,SAAQ,uBAAa;IAEtE,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAGD,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;eAC9D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpE,CAAC;IAED,+BAA+B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC;QAC5F,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC;aAC7E,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACpG,CAAC,CAAC,CAAC;IACP,CAAC;IAED,4BAA4B;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA2C,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC;aAC1E,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAA,YAAK,EAAC,MAAM,CAAC,KAAe,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AA9CD,gDA8CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactSensorAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/ContactSensorAccessory.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAE5C,MAAM,WAAW,GAAG;IAClB,aAAa,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC;CAC/C,CAAC;AAEF,MAAqB,aAAc,SAAQ,uBAAa;IAEtD,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,iBAAiB;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;eAClE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEzD,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAC1F,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAC9D,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC;CAEF;AAtBD,gCAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DehumidifierAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/DehumidifierAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffuserAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/DiffuserAccessory.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAC5C,oDAA0D;AAC1D,kDAAwD;AACxD,4CAAkD;AAClD,kEAA6E;AAE7E,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,CAAC,QAAQ,CAAC;IACd,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,YAAY,CAAC;IACxB,UAAU,EAAE,CAAC,WAAW,CAAC;IACzB,YAAY,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACjD,WAAW,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,CAAC,cAAc,CAAC;CAC3B,CAAC;AAEF,MAAqB,iBAAkB,SAAQ,uBAAa;IAE1D,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,iBAAiB;QACf,cAAc;QACd,IAAA,gBAAW,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAA,sBAAc,EACZ,IAAI,EACJ,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,EAC3C,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAC1C,CAAC;QAEF,IAAA,gBAAW,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe;IACxF,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;eACrD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,iBAAiB;QACf,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAE,CAAC;QAE/D,2BAA2B;QAC3B,IAAA,wBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,CAAC;QAEzD,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC;aAC9E,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC;YACnD,OAAQ,MAAM,CAAC,KAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEL,iEAAiE;QACjE,mFAAmF;QACnF,0CAA0C;QAG1C,2BAA2B;QAC3B,IAAA,2CAA2B,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACpG,CAAC;CAEF;AApDD,oCAoDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DimmerAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/DimmerAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,7 +81,9 @@ class DoorbellAccessory extends BaseAccessory_1.default {
|
|
|
81
81
|
const doorbellCallSchema = this.getSchema(...SCHEMA_CODE.DOORBELL_CALL);
|
|
82
82
|
if (doorbellCallSchema) {
|
|
83
83
|
const doorbellCallStatus = status.find(_status => _status.code === doorbellCallSchema.code);
|
|
84
|
-
|
|
84
|
+
if (doorbellCallStatus) {
|
|
85
|
+
(0, ProgrammableSwitchEvent_1.onProgrammableSwitchEvent)(this, this.getDoorbellService(), doorbellCallStatus);
|
|
86
|
+
}
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DoorbellAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessories/DoorbellAccessory.ts"],"names":[],"mappings":";;;;;AACA,oEAA4C;AAC5C,sFAAuH;AAEvH,MAAM,WAAW,GAAG;IAClB,oCAAoC;IACpC,yCAAyC;IACzC,qCAAqC;IACrC,aAAa,EAAE,CAAC,eAAe,CAAC;CACjC,CAAC;AAEF,MAAqB,iBAAkB,SAAQ,uBAAa;IAE1D,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAChF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;QAC9F,IAAA,0DAAgC,EAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAChH,wBAAwB;QACxB,0BAA0B;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiDE;IAEF,kBAAkB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC;eACrE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAA0B;QACnD,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QACxE,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC5F,IAAI,kBAAkB,EAAE,CAAC;gBACvB,IAAA,mDAAyB,EAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;CAEF;AAlFD,oCAkFC"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const TuyaDevice_1 = require("
|
|
6
|
+
const TuyaDevice_1 = require("../../cloud/device/TuyaDevice");
|
|
7
7
|
const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
|
|
8
8
|
const Active_1 = require("./characteristic/Active");
|
|
9
9
|
const LockPhysicalControls_1 = require("./characteristic/LockPhysicalControls");
|
|
@@ -48,7 +48,9 @@ class ExtractionHoodAccessory extends BaseAccessory_1.default {
|
|
|
48
48
|
else if (this.lightServiceType() === this.Service.Switch) {
|
|
49
49
|
(0, On_1.configureOn)(this, undefined, this.getSchema(...SCHEMA_CODE.LIGHT_ON));
|
|
50
50
|
const unusedService = this.accessory.getService(this.Service.Lightbulb);
|
|
51
|
-
|
|
51
|
+
if (unusedService) {
|
|
52
|
+
this.accessory.removeService(unusedService);
|
|
53
|
+
}
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
}
|