Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion zhaquirks/tuya/tuya_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from zigpy.quirks.v2 import EntityPlatform, EntityType
from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature, UnitOfTime
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
import zigpy.types as t
from zigpy.zcl import foundation

Expand Down Expand Up @@ -32,6 +32,21 @@ class TuyaNousTempHumiAlarm(t.enum8):
Canceled = 0x02


class TuyaBatteryState(t.enum8):
"""Tuya battery state enum."""

Low = 0x00
Medium = 0x01
Full = 0x02


class TuyaTimeFormat(t.enum8):
"""Tuya time format enum."""

Format24h = 0x00
Format12h = 0x01


class NoManufTimeTuyaMCUCluster(TuyaMCUCluster):
"""Tuya Manufacturer Cluster with set_time mod."""

Expand All @@ -47,6 +62,13 @@ class ServerCommandDefs(TuyaMCUCluster.ServerCommandDefs):
is_manufacturer_specific=False,
)

class ClientCommandDefs(TuyaMCUCluster.ClientCommandDefs):
"""Client command definitions."""

set_time_request = foundation.ZCLCommandDef(
id=TUYA_SET_TIME, schema={"data": t.data16}, is_manufacturer_specific=False
)


(
TuyaQuirkBuilder("_TZE200_bjawzodf", "TS0601")
Expand Down Expand Up @@ -333,3 +355,34 @@ class ServerCommandDefs(TuyaMCUCluster.ServerCommandDefs):
.skip_configuration()
.add_to_registry()
)

# Sensor with clock, internal/external temperature and humidity
(
TuyaQuirkBuilder("_TZE284_hodyryli", "TS0601")
# Internal temperature (DP 1, scale=10)
.tuya_temperature(dp_id=1, scale=10)
# Internal humidity (DP 2)
.tuya_humidity(dp_id=2)
# Battery from battery_state (DP 3: 0=10%, 1=50%, 2=100%)
.tuya_dp(
dp_id=3,
ep_attribute=TuyaPowerConfigurationCluster2AAA.ep_attribute,
attribute_name="battery_percentage_remaining",
converter=lambda x: {0: 10, 1: 50, 2: 100}[x],
)
.adds(TuyaPowerConfigurationCluster2AAA)
# External temperature sensor (DP 38, value needs to be divided by 100 to get correct temperature)
.tuya_sensor(
dp_id=38,
attribute_name="temperature_external",
type=t.int32s,
converter=lambda x: x / 10, # Divide by 10 to get correct temperature
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
unit=UnitOfTemperature.CELSIUS,
translation_key="temperature_external",
fallback_name="Temperature Probe",
)
.skip_configuration()
.add_to_registry(replacement_cluster=NoManufTimeTuyaMCUCluster)
)
Loading