"""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, ], }, }, }