[Edge Driver Help] Tuya mmWave 24G Sensor (_TZE204_gkfbdvyx) - Static presence not working

Hi everyone,

I am looking for help from the community or Edge developers to get a specific Tuya 24G mmWave presence sensor working on my Aeotec Hub v3.

This device is a newer hardware revision (Model: TS0601, Manufacturer: _TZE204_gkfbdvyx), and I am having trouble finding a compatible driver that handles static presence correctly.

Here is what I have already tested:

  1. wonjj6768’s Tuya ZG-204ZM Driver: The device pairs but doesn’t even show this driver under the “Change Driver” menu, which means the fingerprint is completely missing from it.

  2. Mariano Colmenarejo’s Drivers: I contacted Mariano, but this specific fingerprint is not supported in his current repository.

  3. w35l3y’s Driver: This is the only driver that gets recognized and allows pairing. However, static presence detection does not work. The sensor gets permanently stuck on “detected” or ignores when a person stays completely still.

It is clear that this _TZE204_gkfbdvyx variant uses a different Data Points (DP) mapping layout for its 24Ghz radar compared to older Tuya sensors.

Device Specs:

  • Model: TS0601

  • Manufacturer: _TZE204_gkfbdvyx

Is there any alternative Edge driver available that supports these new data points? If any developer is willing to add this fingerprint to their project, I am more than happy to run CLI logs, test beta versions, and provide feedback.

Thank you so much for your support!

from HA community:

This is the “quirk” that seems to work:

HA Quirk:

# Tuya mmWave radar 24GHz, _TZE200_gkfbdvyx

Loginovo Smart Human Presence Sensor M100, Model C3007

TZ-HS-24G Zigbee Ceiling 24G

(
TuyaQuirkBuilder(“_TZE200_gkfbdvyx”, “TS0601”)
.tuya_dp(
dp_id=1,
ep_attribute=TuyaOccupancySensing.ep_attribute,
attribute_name=OccupancySensing.AttributeDefs.occupancy.name,

0: state=“none”, presence=false

1: state=“presence” presence=true

2: state=“move” presence=true

converter=lambda x: True if x in (1, 2) else False,
)
.adds(TuyaOccupancySensing)
.tuya_number(
dp_id=2,
attribute_name=“move_sensitivity”,
type=t.uint16_t,
min_value=1,
max_value=10,
step=1,
translation_key=“move_sensitivity”,
fallback_name=“Motion sensitivity”,
)
.tuya_number(
dp_id=3,
attribute_name=“detection_distance_min”,
type=t.uint16_t,
multiplier=0.01,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.METERS,
min_value=0,
max_value=6,
step=0.5,
translation_key=“detection_distance_min”,
fallback_name=“Minimum range”,
)
.tuya_number(
dp_id=4,
attribute_name=“detection_distance_max”,
type=t.uint16_t,
multiplier=0.01,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.METERS,
min_value=0.5,
max_value=9,
step=0.5,
translation_key=“detection_distance_max”,
fallback_name=“Maximum range”,
)
.tuya_sensor(
dp_id=9,
attribute_name=“distance”,
type=t.uint16_t,
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.METERS,
multiplier=0.1,
entity_type=EntityType.STANDARD,
translation_key=“target_distance”,
fallback_name=“Target distance”,
)
.tuya_switch(
dp_id=101,
attribute_name=“find_switch”,
entity_type=EntityType.STANDARD,
translation_key=“distance_switch”,
fallback_name=“Distance tracking”,
)
.tuya_number(
dp_id=102,
attribute_name=“presence_sensitivity”,
type=t.uint16_t,
min_value=1,
max_value=10,
step=1,
translation_key=“presence_sensitivity”,
fallback_name=“Presence Sensitivity”,
)
.tuya_illuminance(dp_id=103)
.tuya_enum(
dp_id=104,
attribute_name=“motion_state”,
enum_class=TuyaPresenceState,
entity_platform=EntityPlatform.SENSOR,
entity_type=EntityType.STANDARD,
translation_key=“motion_state”,
fallback_name=“Motion state”,
)

.tuya_number(
    dp_id=105,
    attribute_name="presence_timeout",
    type=t.uint16_t,
    device_class=SensorDeviceClass.DURATION,
    unit=UnitOfTime.SECONDS,
    min_value=5,
    max_value=15000,
    step=5,
    translation_key="fading_time",
    fallback_name="Fading time",
)
.skip_configuration()
.add_to_registry()

)

From there you have:

DP 1: occupancy state (type: occupancy sensor?)

DP 2: motion sensitivity (number/generic values)

DP 3: minimum detection distance (number/generic values)

DP 4: Maximum detection distance (number/generic values)

DP 9: Target distance (generic values, seems need multiplied by 0.1 to transform to meters)

DP 101: Distance tracking (switch)

DP 102: Presence Sensitivity (number/generic)

DP 103: Illuminance (illuminance sensor)

DP 104: motion state (presence sensor, motion sensor or generic enumeration??)

DP 105: fading time in seconds (number/generic values)

In here, some discussions about the DP 104: