"""Tuya TS0601 human presence sensor _TZE284_debczeci."""
from __future__ import annotations
from enum import Enum
from typing import cast
from zigpy import types as t
from zigpy.zcl.clusters.measurement import OccupancySensing
from zhaquirks.tuya import TuyaLocalCluster
from zhaquirks.tuya.builder import TuyaQuirkBuilder
def _true_false_0_to_occupancy(value: int) -> int:
"""Convert Tuya 'trueFalse0' to ZCL OccupancySensing.occupancy."""
return 1 if int(value) == 0 else 0
class PirSensitivity(t.enum8):
"""PIR sensor sensitivity."""
low = 0
middle = 1
high = 2
class PirTime(t.enum8):
"""PIR delay time in seconds."""
s15 = 0
s30 = 1
s60 = 2
class IhsenoPresenceOccupancy(OccupancySensing, TuyaLocalCluster):
"""Occupancy cluster backed by Tuya presence datapoints."""
(
TuyaQuirkBuilder("_TZE284_debczeci", "TS0601")
# On force la reconnaissance de la signature exacte vue dans ton diagnostic
.applies_to("_TZE284_debczeci", "TS0601")
# On ajoute le cluster de présence
.adds(IhsenoPresenceOccupancy)
# DP 1: presence (0=mouvement, 1=pas de mouvement)
.tuya_dp(
dp_id=1,
ep_attribute=IhsenoPresenceOccupancy.ep_attribute,
attribute_name=OccupancySensing.AttributeDefs.occupancy.name,
converter=_true_false_0_to_occupancy,
)
# DP 4: batterie (0-100%)
.tuya_battery(
dp_id=4,
scale=2,
)
# DP 9: Sensibilité PIR
.tuya_enum(
dp_id=9,
attribute_name="pir_sensitivity",
enum_class=cast(type[Enum], PirSensitivity),
translation_key="pir_sensitivity",
fallback_name="PIR sensitivity",
)
# DP 10: Délai PIR
.tuya_enum(
dp_id=10,
attribute_name="pir_time",
enum_class=cast(type[Enum], PirTime),
translation_key="pir_time",
fallback_name="PIR delay",
)
# Cette option force l'ajout même si la signature ne correspond pas à 100% à un profil standard
.add_to_registry(force_add_cluster=True)
)