|
1 | 1 | """Tuya temp and humidity sensors."""
|
2 | 2 |
|
| 3 | +from zigpy.quirks.v2 import EntityPlatform, EntityType |
| 4 | +from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature, UnitOfTime |
3 | 5 | from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
|
4 | 6 | import zigpy.types as t
|
5 | 7 |
|
6 | 8 | from zhaquirks.tuya.builder import TuyaPowerConfigurationCluster2AAA, TuyaQuirkBuilder
|
7 | 9 |
|
| 10 | + |
| 11 | +class TuyaTempUnitConvert(t.enum8): |
| 12 | + """Tuya temperature unit convert enum.""" |
| 13 | + |
| 14 | + Celsius = 0x00 |
| 15 | + Fahrenheit = 0x01 |
| 16 | + |
| 17 | + |
| 18 | +class TuyaNousTempHumiAlarm(t.enum8): |
| 19 | + """Tuya temperature and humidity alarm enum.""" |
| 20 | + |
| 21 | + LowerAlarm = 0x00 |
| 22 | + UpperAlarm = 0x01 |
| 23 | + Canceled = 0x02 |
| 24 | + |
| 25 | + |
8 | 26 | (
|
9 | 27 | TuyaQuirkBuilder("_TZE200_bjawzodf", "TS0601")
|
10 | 28 | .applies_to("_TZE200_zl1kmjqx", "TS0601")
|
|
32 | 50 | .add_to_registry()
|
33 | 51 | )
|
34 | 52 |
|
| 53 | +# TH01Z - Temperature and humidity sensor with clock |
| 54 | +( |
| 55 | + TuyaQuirkBuilder("_TZE200_lve3dvpy", "TS0601") |
| 56 | + .applies_to("_TZE200_c7emyjom", "TS0601") |
| 57 | + .applies_to("_TZE200_locansqn", "TS0601") |
| 58 | + .applies_to("_TZE200_qrztc3ev", "TS0601") |
| 59 | + .applies_to("_TZE200_snloy4rw", "TS0601") |
| 60 | + .applies_to("_TZE200_eanjj2pa", "TS0601") |
| 61 | + .applies_to("_TZE200_ydrdfkim", "TS0601") |
| 62 | + .applies_to("_TZE284_locansqn", "TS0601") |
| 63 | + .tuya_temperature(dp_id=1, scale=10) |
| 64 | + .tuya_humidity(dp_id=2) |
| 65 | + .tuya_battery(dp_id=4) |
| 66 | + .tuya_number( |
| 67 | + dp_id=17, |
| 68 | + attribute_name="temperature_report_interval", |
| 69 | + type=t.uint16_t, |
| 70 | + device_class=SensorDeviceClass.DURATION, |
| 71 | + unit=UnitOfTime.MINUTES, |
| 72 | + min_value=5, |
| 73 | + max_value=120, |
| 74 | + step=5, |
| 75 | + entity_type=EntityType.CONFIG, |
| 76 | + translation_key="temperature_report_interval", |
| 77 | + fallback_name="Temperature report interval", |
| 78 | + ) |
| 79 | + .tuya_number( |
| 80 | + dp_id=18, |
| 81 | + attribute_name="humidity_report_interval", |
| 82 | + type=t.uint16_t, |
| 83 | + device_class=SensorDeviceClass.DURATION, |
| 84 | + unit=UnitOfTime.MINUTES, |
| 85 | + min_value=5, |
| 86 | + max_value=120, |
| 87 | + step=5, |
| 88 | + entity_type=EntityType.CONFIG, |
| 89 | + translation_key="humidity_report_interval", |
| 90 | + fallback_name="Humidity report interval", |
| 91 | + ) |
| 92 | + .tuya_enum( |
| 93 | + dp_id=9, |
| 94 | + attribute_name="temp_unit_conv", |
| 95 | + enum_class=TuyaTempUnitConvert, |
| 96 | + entity_type=EntityType.CONFIG, |
| 97 | + translation_key="self_test", |
| 98 | + fallback_name="Display unit", |
| 99 | + ) |
| 100 | + .tuya_enum( |
| 101 | + dp_id=14, |
| 102 | + attribute_name="temperature_alarm", |
| 103 | + enum_class=TuyaNousTempHumiAlarm, |
| 104 | + entity_platform=EntityPlatform.SENSOR, |
| 105 | + entity_type=EntityType.STANDARD, |
| 106 | + translation_key="temperature_alarm", |
| 107 | + fallback_name="Temperature alarm", |
| 108 | + ) |
| 109 | + .tuya_number( |
| 110 | + dp_id=10, |
| 111 | + attribute_name="max_temperature", |
| 112 | + type=t.uint16_t, |
| 113 | + unit=UnitOfTemperature.CELSIUS, |
| 114 | + min_value=-20, |
| 115 | + max_value=60, |
| 116 | + step=1, |
| 117 | + multiplier=0.1, |
| 118 | + entity_type=EntityType.CONFIG, |
| 119 | + translation_key="max_temperature", |
| 120 | + fallback_name="Alarm temperature max", |
| 121 | + ) |
| 122 | + .tuya_number( |
| 123 | + dp_id=11, |
| 124 | + attribute_name="min_temperature", |
| 125 | + type=t.uint16_t, |
| 126 | + unit=UnitOfTemperature.CELSIUS, |
| 127 | + min_value=-20, |
| 128 | + max_value=60, |
| 129 | + step=1, |
| 130 | + multiplier=0.1, |
| 131 | + entity_type=EntityType.CONFIG, |
| 132 | + translation_key="min_temperature", |
| 133 | + fallback_name="Alarm temperature min", |
| 134 | + ) |
| 135 | + .tuya_number( |
| 136 | + dp_id=19, |
| 137 | + attribute_name="temperature_sensitivity", |
| 138 | + type=t.uint16_t, |
| 139 | + unit=UnitOfTemperature.CELSIUS, |
| 140 | + min_value=0.1, |
| 141 | + max_value=50, |
| 142 | + step=0.1, |
| 143 | + multiplier=0.1, |
| 144 | + entity_type=EntityType.CONFIG, |
| 145 | + translation_key="temperature_sensitivity", |
| 146 | + fallback_name="Temperature sensitivity", |
| 147 | + ) |
| 148 | + .tuya_enum( |
| 149 | + dp_id=15, |
| 150 | + attribute_name="humidity_alarm", |
| 151 | + enum_class=TuyaNousTempHumiAlarm, |
| 152 | + entity_platform=EntityPlatform.SENSOR, |
| 153 | + entity_type=EntityType.STANDARD, |
| 154 | + translation_key="humidity_alarm", |
| 155 | + fallback_name="Humidity alarm", |
| 156 | + ) |
| 157 | + .tuya_number( |
| 158 | + dp_id=12, |
| 159 | + attribute_name="max_humidity", |
| 160 | + type=t.uint16_t, |
| 161 | + unit=PERCENTAGE, |
| 162 | + min_value=0, |
| 163 | + max_value=100, |
| 164 | + step=1, |
| 165 | + entity_type=EntityType.CONFIG, |
| 166 | + translation_key="max_humidity", |
| 167 | + fallback_name="Alarm humidity max", |
| 168 | + ) |
| 169 | + .tuya_number( |
| 170 | + dp_id=13, |
| 171 | + attribute_name="min_humidity", |
| 172 | + type=t.uint16_t, |
| 173 | + unit=PERCENTAGE, |
| 174 | + min_value=0, |
| 175 | + max_value=100, |
| 176 | + step=1, |
| 177 | + entity_type=EntityType.CONFIG, |
| 178 | + translation_key="min_humidity", |
| 179 | + fallback_name="Alarm humidity min", |
| 180 | + ) |
| 181 | + .tuya_number( |
| 182 | + dp_id=20, |
| 183 | + attribute_name="humidity_sensitivity", |
| 184 | + type=t.uint16_t, |
| 185 | + unit=PERCENTAGE, |
| 186 | + min_value=1, |
| 187 | + max_value=100, |
| 188 | + step=1, |
| 189 | + entity_type=EntityType.CONFIG, |
| 190 | + translation_key="humidity_report_interval", |
| 191 | + fallback_name="Humidity report interval", |
| 192 | + ) |
| 193 | + .skip_configuration() |
| 194 | + .add_to_registry() |
| 195 | +) |
| 196 | + |
35 | 197 |
|
36 | 198 | (
|
37 | 199 | TuyaQuirkBuilder("_TZE200_yjjdcqsq", "TS0601")
|
|
0 commit comments