-
Notifications
You must be signed in to change notification settings - Fork 824
Add Tuya temp sensor _TZE284_vvmbj46n
variant
#4006
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
New devices has new model code
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## dev #4006 +/- ##
=======================================
Coverage 91.18% 91.18%
=======================================
Files 334 334
Lines 10862 10862
=======================================
Hits 9904 9904
Misses 958 958 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
_TZE284_vvmbj46n
variant
Thanks for the PR, @berejant. I think this device might have a few more config options: Can you try the following quirk? This adds the model variant to a different quirk in the same New custom quirk with more options (click to expand and copy into new `test.py` file in custom quirks folder for testing)
"""Tuya temp and humidity sensors."""
import copy
from zigpy.quirks.v2 import EntityPlatform, EntityType
from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature, UnitOfTime
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass
import zigpy.types as t
from zigpy.zcl import foundation
from zhaquirks.tuya import (
TUYA_SET_TIME,
TuyaPowerConfigurationCluster2AAA,
TuyaTimePayload,
)
from zhaquirks.tuya.builder import TuyaQuirkBuilder, TuyaTemperatureMeasurement
from zhaquirks.tuya.mcu import TuyaMCUCluster
class TuyaTempUnitConvert(t.enum8):
"""Tuya temperature unit convert enum."""
Celsius = 0x00
Fahrenheit = 0x01
class TuyaNousTempHumiAlarm(t.enum8):
"""Tuya temperature and humidity alarm enum."""
LowerAlarm = 0x00
UpperAlarm = 0x01
Canceled = 0x02
class NoManufTimeTuyaMCUCluster(TuyaMCUCluster):
"""Tuya Manufacturer Cluster with set_time mod."""
set_time_offset = 1970
set_time_local_offset = 1970
# Deepcopy required to override 'set_time', without, it will revert
server_commands = copy.deepcopy(TuyaMCUCluster.server_commands)
server_commands.update(
{
TUYA_SET_TIME: foundation.ZCLCommandDef(
"set_time",
{"time": TuyaTimePayload},
False,
is_manufacturer_specific=False,
),
}
)
# TH01Z - Temperature and humidity sensor with clock
(
TuyaQuirkBuilder("_TZE284_vvmbj46n", "TS0601")
.tuya_temperature(dp_id=1, scale=10)
.tuya_humidity(dp_id=2)
.tuya_battery(dp_id=4)
.tuya_number(
dp_id=17,
attribute_name="temperature_report_interval",
type=t.uint16_t,
device_class=SensorDeviceClass.DURATION,
unit=UnitOfTime.MINUTES,
min_value=5,
max_value=120,
step=5,
entity_type=EntityType.CONFIG,
translation_key="temperature_report_interval",
fallback_name="Temperature report interval",
)
.tuya_number(
dp_id=18,
attribute_name="humidity_report_interval",
type=t.uint16_t,
device_class=SensorDeviceClass.DURATION,
unit=UnitOfTime.MINUTES,
min_value=5,
max_value=120,
step=5,
entity_type=EntityType.CONFIG,
translation_key="humidity_report_interval",
fallback_name="Humidity report interval",
)
.tuya_enum(
dp_id=9,
attribute_name="display_unit",
enum_class=TuyaTempUnitConvert,
entity_type=EntityType.CONFIG,
translation_key="display_unit",
fallback_name="Display unit",
)
.tuya_enum(
dp_id=14,
attribute_name="temperature_alarm",
enum_class=TuyaNousTempHumiAlarm,
entity_platform=EntityPlatform.SENSOR,
entity_type=EntityType.STANDARD,
translation_key="temperature_alarm",
fallback_name="Temperature alarm",
)
.tuya_number(
dp_id=10,
attribute_name="alarm_temperature_max",
type=t.uint16_t,
unit=UnitOfTemperature.CELSIUS,
min_value=-20,
max_value=60,
step=1,
multiplier=0.1,
entity_type=EntityType.CONFIG,
translation_key="alarm_temperature_max",
fallback_name="Alarm temperature max",
)
.tuya_number(
dp_id=11,
attribute_name="alarm_temperature_min",
type=t.uint16_t,
unit=UnitOfTemperature.CELSIUS,
min_value=-20,
max_value=60,
step=1,
multiplier=0.1,
entity_type=EntityType.CONFIG,
translation_key="alarm_temperature_min",
fallback_name="Alarm temperature min",
)
.tuya_number(
dp_id=19,
attribute_name="temperature_sensitivity",
type=t.uint16_t,
unit=UnitOfTemperature.CELSIUS,
min_value=0.1,
max_value=50,
step=0.1,
multiplier=0.1,
entity_type=EntityType.CONFIG,
translation_key="temperature_sensitivity",
fallback_name="Temperature sensitivity",
)
.tuya_enum(
dp_id=15,
attribute_name="humidity_alarm",
enum_class=TuyaNousTempHumiAlarm,
entity_platform=EntityPlatform.SENSOR,
entity_type=EntityType.STANDARD,
translation_key="humidity_alarm",
fallback_name="Humidity alarm",
)
.tuya_number(
dp_id=12,
attribute_name="alarm_humidity_max",
type=t.uint16_t,
unit=PERCENTAGE,
min_value=0,
max_value=100,
step=1,
entity_type=EntityType.CONFIG,
translation_key="alarm_humidity_max",
fallback_name="Alarm humidity max",
)
.tuya_number(
dp_id=13,
attribute_name="alarm_humidity_min",
type=t.uint16_t,
unit=PERCENTAGE,
min_value=0,
max_value=100,
step=1,
entity_type=EntityType.CONFIG,
translation_key="alarm_humidity_min",
fallback_name="Alarm humidity min",
)
.tuya_number(
dp_id=20,
attribute_name="humidity_sensitivity",
type=t.uint16_t,
unit=PERCENTAGE,
min_value=1,
max_value=100,
step=1,
entity_type=EntityType.CONFIG,
translation_key="humidity_sensitivity",
fallback_name="Humidity sensitivity",
)
.skip_configuration()
.add_to_registry(replacement_cluster=NoManufTimeTuyaMCUCluster)
) |
New devices has new model code
Proposed change
I have got two new devices of this type (tuya temperature and humidity sensor with clock).

Everything works, but need add new model code to the list.
Checklist
pre-commit
checks pass / the code has been formatted using Black