137 lines
3.8 KiB
Python
137 lines
3.8 KiB
Python
"""Quirk for TS0207 rain sensors."""
|
|
|
|
import zigpy.types as t
|
|
from typing import Any, Type
|
|
from zigpy.profiles import zha
|
|
from zigpy.quirks import CustomDevice, CustomCluster
|
|
from zigpy.zcl.clusters.general import (
|
|
Basic,
|
|
Groups,
|
|
Identify,
|
|
OnOff,
|
|
Ota,
|
|
PowerConfiguration,
|
|
Scenes,
|
|
Time,
|
|
)
|
|
from zigpy.zcl.clusters.lightlink import LightLink
|
|
from zigpy.zcl.clusters.security import IasZone
|
|
from zhaquirks.const import (
|
|
DEVICE_TYPE,
|
|
ENDPOINTS,
|
|
INPUT_CLUSTERS,
|
|
MODELS_INFO,
|
|
OUTPUT_CLUSTERS,
|
|
PROFILE_ID,
|
|
)
|
|
from zhaquirks.tuya.mcu import TuyaMCUCluster
|
|
from zhaquirks.tuya import (
|
|
TuyaManufCluster,
|
|
DPToAttributeMapping,
|
|
EnchantedDevice,
|
|
TuyaNoBindPowerConfigurationCluster,
|
|
)
|
|
|
|
ZONE_TYPE = 0x0001
|
|
|
|
class TuyaSolarRainSensorCluster(TuyaMCUCluster):
|
|
"""Tuya manufacturer cluster."""
|
|
|
|
attributes = TuyaMCUCluster.attributes.copy()
|
|
attributes.update(
|
|
{
|
|
0xEF65: ("light_intensity", t.uint32_t, True),
|
|
0xEF66: ("average_light_intensity_20mins", t.uint32_t, True),
|
|
0xEF67: ("todays_max_light_intensity", t.uint32_t, True),
|
|
0xEF68: ("cleaning_reminder", t.Bool, True),
|
|
0xEF69: ("rain_sensor_voltage", t.uint32_t, True),
|
|
}
|
|
)
|
|
|
|
dp_to_attribute: dict[int, DPToAttributeMapping] = {
|
|
101: DPToAttributeMapping(
|
|
TuyaMCUCluster.ep_attribute,
|
|
"light_intensity",
|
|
),
|
|
102: DPToAttributeMapping(
|
|
TuyaMCUCluster.ep_attribute,
|
|
"average_light_intensity_20mins",
|
|
),
|
|
103: DPToAttributeMapping(
|
|
TuyaMCUCluster.ep_attribute,
|
|
"todays_max_light_intensity",
|
|
),
|
|
104: DPToAttributeMapping(
|
|
TuyaMCUCluster.ep_attribute,
|
|
"cleaning_reminder",
|
|
),
|
|
105: DPToAttributeMapping(
|
|
TuyaMCUCluster.ep_attribute,
|
|
"rain_sensor_voltage",
|
|
),
|
|
}
|
|
|
|
data_point_handlers = {
|
|
101: "_dp_2_attr_update",
|
|
102: "_dp_2_attr_update",
|
|
103: "_dp_2_attr_update",
|
|
104: "_dp_2_attr_update",
|
|
105: "_dp_2_attr_update",
|
|
}
|
|
|
|
|
|
class TuyaIasZone(CustomCluster, IasZone):
|
|
"""IAS Zone for rain sensors."""
|
|
|
|
_CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Water_Sensor}
|
|
|
|
|
|
class TuyaSolarRainSensor(EnchantedDevice):
|
|
"""TS0207 Rain sensor quirk."""
|
|
|
|
signature = {
|
|
MODELS_INFO: [("_TZ3210_tgvtvdoc", "TS0207")],
|
|
ENDPOINTS: {
|
|
1: {
|
|
PROFILE_ID: zha.PROFILE_ID,
|
|
DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
|
|
INPUT_CLUSTERS: [
|
|
Basic.cluster_id,
|
|
PowerConfiguration.cluster_id,
|
|
Groups.cluster_id,
|
|
Scenes.cluster_id,
|
|
IasZone.cluster_id,
|
|
TuyaMCUCluster.cluster_id,
|
|
],
|
|
OUTPUT_CLUSTERS: [
|
|
Identify.cluster_id,
|
|
Groups.cluster_id,
|
|
OnOff.cluster_id,
|
|
Time.cluster_id,
|
|
Ota.cluster_id,
|
|
LightLink.cluster_id,
|
|
],
|
|
},
|
|
},
|
|
}
|
|
|
|
replacement = {
|
|
ENDPOINTS: {
|
|
1: {
|
|
PROFILE_ID: zha.PROFILE_ID,
|
|
DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
|
|
INPUT_CLUSTERS: [
|
|
Basic.cluster_id,
|
|
Groups.cluster_id,
|
|
Scenes.cluster_id,
|
|
TuyaNoBindPowerConfigurationCluster,
|
|
TuyaIasZone,
|
|
TuyaSolarRainSensorCluster,
|
|
],
|
|
OUTPUT_CLUSTERS: [
|
|
Time.cluster_id,
|
|
Ota.cluster_id,
|
|
],
|
|
},
|
|
},
|
|
} |