zha-device-handlers
zha-device-handlers copied to clipboard
[Device Support Request] Tuya Zigbee Human Presence Sensor. TS0601 by _TZE204_sxm7l9xa
Problem description
Only device exist, with anything else.
TS0601 por _TZE204_sxm7l9xa Conectado a través de Zigbee Coordinator Zigbee info IEEE: a4:c1:38:9f:d2:31:dd:b9 Nwk: 0x8b19 Device Type: Router LQI: 111 RSSI: Desconocido Visto por última vez: 2023-06-12T20:04:07 Fuente de alimentación: Mains
Device https://a.aliexpress.com/_Ew1B0SN
I've see an external converter js to run it on z2m.
Solution description
I post it here if anyone can adapt it as a custom quirk or include it on ZHA library
Screenshots/Video
Screenshots/Video
Device signature
Device signature
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": "0x0104",
"device_type": "0x0051",
"input_clusters": [
"0x0000",
"0x0004",
"0x0005",
"0xef00"
],
"output_clusters": [
"0x000a",
"0x0019"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "_TZE204_sxm7l9xa",
"model": "TS0601",
"class": "zigpy.device.Device"
}
Diagnostic information
Diagnostic information
{
"home_assistant": {
"installation_type": "Home Assistant OS",
"version": "2023.5.4",
"dev": false,
"hassio": true,
"virtualenv": false,
"python_version": "3.10.11",
"docker": true,
"arch": "x86_64",
"timezone": "Europe/Madrid",
"os_name": "Linux",
"os_version": "6.1.25",
"supervisor": "2023.06.1",
"host_os": "Home Assistant OS 10.1",
"docker_version": "23.0.3",
"chassis": "vm",
"run_as_root": true
},
"custom_components": {
"dual_smart_thermostat": {
"version": "0.5.5",
"requirements": []
},
"mikrotik_router": {
"version": "0.0.0",
"requirements": [
"librouteros>=3.2.0",
"mac-vendor-lookup>=0.1.12"
]
},
"xiaomi_gateway3": {
"version": "3.2.1",
"requirements": [
"zigpy>=0.44.1"
]
},
"fs1pg": {
"version": "1.1",
"requirements": []
},
"delete": {
"version": "1.9",
"requirements": []
},
"ariston": {
"version": "0.13.1",
"requirements": [
"ariston==0.13.1"
]
},
"mqtt_discoverystream": {
"version": "0.9",
"requirements": []
},
"spotcast": {
"version": "v3.6.30",
"requirements": []
},
"floureon": {
"version": "1.0.0",
"requirements": [
"pythoncrc",
"broadlink>=0.15.0"
]
},
"xiaomi_cloud_map_extractor": {
"version": "v2.2.0",
"requirements": [
"pillow",
"pybase64",
"python-miio",
"requests",
"pycryptodome"
]
},
"deepstack_object": {
"version": "4.6.0",
"requirements": [
"pillow",
"deepstack-python==0.8"
]
},
"tuya_v2": {
"version": "1.5.0",
"requirements": [
"tuya-iot-py-sdk==0.4.1"
]
},
"pvpc_hourly_pricing": {
"version": "1.1.0",
"requirements": [
"aiopvpc==4.2.1"
]
},
"hacs": {
"version": "1.32.1",
"requirements": [
"aiogithubapi>=22.10.1"
]
},
"tapo_control": {
"version": "5.1.0",
"requirements": [
"pytapo==3.1.12"
]
},
"xiaomi_miot": {
"version": "0.7.9",
"requirements": [
"construct==2.10.56",
"python-miio>=0.5.6",
"micloud>=0.3"
]
},
"tuya_custom": {
"version": "0.1.7",
"requirements": []
},
"huawei_solar": {
"version": "1.2.6b5",
"requirements": [
"huawei-solar==2.2.7b5"
]
},
"programmable_thermostat": {
"version": "8.1",
"requirements": []
},
"localtuya": {
"version": "5.2.0",
"requirements": []
},
"edata": {
"version": "2023.02.1",
"requirements": [
"e-data==1.1.0",
"python-dateutil>=2.8.2"
]
},
"frigate": {
"version": "4.0.0",
"requirements": [
"pytz==2022.7"
]
},
"fullykiosk": {
"version": "1.1.0",
"requirements": [
"python-fullykiosk==0.0.11"
]
},
"esios": {
"version": "1.0.0",
"requirements": []
},
"alarmo": {
"version": "v1.9.9",
"requirements": []
}
},
"integration_manifest": {
"domain": "zha",
"name": "Zigbee Home Automation",
"after_dependencies": [
"onboarding",
"usb"
],
"codeowners": [
"@dmulcahey",
"@adminiuga",
"@puddly"
],
"config_flow": true,
"dependencies": [
"file_upload"
],
"documentation": "https://www.home-assistant.io/integrations/zha",
"iot_class": "local_polling",
"loggers": [
"aiosqlite",
"bellows",
"crccheck",
"pure_pcapy3",
"zhaquirks",
"zigpy",
"zigpy_deconz",
"zigpy_xbee",
"zigpy_zigate",
"zigpy_znp"
],
"requirements": [
"bellows==0.35.5",
"pyserial==3.5",
"pyserial-asyncio==0.6",
"zha-quirks==0.0.99",
"zigpy-deconz==0.21.0",
"zigpy==0.55.0",
"zigpy-xbee==0.18.0",
"zigpy-zigate==0.11.0",
"zigpy-znp==0.11.1"
],
"usb": [
{
"vid": "10C4",
"pid": "EA60",
"description": "*2652*",
"known_devices": [
"slae.sh cc2652rb stick"
]
},
{
"vid": "1A86",
"pid": "55D4",
"description": "*sonoff*plus*",
"known_devices": [
"sonoff zigbee dongle plus v2"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*sonoff*plus*",
"known_devices": [
"sonoff zigbee dongle plus"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*tubeszb*",
"known_devices": [
"TubesZB Coordinator"
]
},
{
"vid": "1A86",
"pid": "7523",
"description": "*tubeszb*",
"known_devices": [
"TubesZB Coordinator"
]
},
{
"vid": "1A86",
"pid": "7523",
"description": "*zigstar*",
"known_devices": [
"ZigStar Coordinators"
]
},
{
"vid": "1CF1",
"pid": "0030",
"description": "*conbee*",
"known_devices": [
"Conbee II"
]
},
{
"vid": "10C4",
"pid": "8A2A",
"description": "*zigbee*",
"known_devices": [
"Nortek HUSBZB-1"
]
},
{
"vid": "0403",
"pid": "6015",
"description": "*zigate*",
"known_devices": [
"ZiGate+"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*zigate*",
"known_devices": [
"ZiGate"
]
},
{
"vid": "10C4",
"pid": "8B34",
"description": "*bv 2010/10*",
"known_devices": [
"Bitron Video AV2010/10"
]
}
],
"zeroconf": [
{
"type": "_esphomelib._tcp.local.",
"name": "tube*"
},
{
"type": "_zigate-zigbee-gateway._tcp.local.",
"name": "*zigate*"
},
{
"type": "_zigstar_gw._tcp.local.",
"name": "*zigstar*"
},
{
"type": "_slzb-06._tcp.local.",
"name": "slzb-06*"
}
],
"is_built_in": true
},
"data": {
"ieee": "**REDACTED**",
"nwk": 35609,
"manufacturer": "_TZE204_sxm7l9xa",
"model": "TS0601",
"name": "_TZE204_sxm7l9xa TS0601",
"quirk_applied": false,
"quirk_class": "zigpy.device.Device",
"manufacturer_code": 4417,
"power_source": "Mains",
"lqi": 57,
"rssi": null,
"last_seen": "2023-06-12T18:48:33",
"available": true,
"device_type": "Router",
"signature": {
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": "0x0104",
"device_type": "0x0051",
"input_clusters": [
"0x0000",
"0x0004",
"0x0005",
"0xef00"
],
"output_clusters": [
"0x000a",
"0x0019"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "_TZE204_sxm7l9xa",
"model": "TS0601"
},
"active_coordinator": false,
"entities": [],
"neighbors": [],
"routes": [],
"endpoint_names": [
{
"name": "SMART_PLUG"
},
{
"name": "unknown 97 device_type of 0xa1e0 profile id"
}
],
"user_given_name": "Presencia Comedor",
"device_reg_id": "fc0174ade3fd07b5571bb86a60596440",
"area_id": "comedor",
"cluster_details": {
"1": {
"device_type": {
"name": "SMART_PLUG",
"id": 81
},
"profile_id": 260,
"in_clusters": {
"0x0004": {
"endpoint_attribute": "groups",
"attributes": {},
"unsupported_attributes": {}
},
"0x0005": {
"endpoint_attribute": "scenes",
"attributes": {},
"unsupported_attributes": {}
},
"0xef00": {
"endpoint_attribute": null,
"attributes": {},
"unsupported_attributes": {}
},
"0x0000": {
"endpoint_attribute": "basic",
"attributes": {
"0x0001": {
"attribute_name": "app_version",
"value": 74
},
"0x0004": {
"attribute_name": "manufacturer",
"value": "_TZE204_sxm7l9xa"
},
"0x0005": {
"attribute_name": "model",
"value": "TS0601"
}
},
"unsupported_attributes": {}
}
},
"out_clusters": {
"0x0019": {
"endpoint_attribute": "ota",
"attributes": {},
"unsupported_attributes": {}
},
"0x000a": {
"endpoint_attribute": "time",
"attributes": {},
"unsupported_attributes": {}
}
}
},
"242": {
"device_type": {
"name": "unknown",
"id": 97
},
"profile_id": 41440,
"in_clusters": {},
"out_clusters": {
"0x0021": {
"endpoint_attribute": "green_power",
"attributes": {},
"unsupported_attributes": {}
}
}
}
}
}
}
Logs
Logs
[Paste the logs here]
Custom quirk
Z2M External Converter
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const ota = require('zigbee-herdsman-converters/lib/ota');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const utils = require('zigbee-herdsman-converters/lib/utils');
const globalStore = require('zigbee-herdsman-converters/lib/store');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
{modelID: 'TS0601', manufacturerName: '_TZE200_jva8ink8'},
{modelID: 'TS0601', manufacturerName: '_TZE200_holel4dk'},
{modelID: 'TS0601', manufacturerName: '_TZE200_xpq2rzhq'},
{modelID: 'TS0601', manufacturerName: '_TZE200_wukb7rhc'},
{modelID: 'TS0601', manufacturerName: '_TZE204_ztc6ggyl'},
{modelID: 'TS0601', manufacturerName: '_TZE204_sxm7l9xa'},
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
model: 'TS0601_smart_human_presence_sensor',
vendor: 'TuYa',
description: 'Smart Human presence sensor',
fromZigbee: [tuya.fz.datapoints],
toZigbee: [tuya.tz.datapoints],
exposes: [
e.illuminance_lux(), e.presence(),
exposes.numeric('target_distance', ea.STATE).withDescription('Distance to target').withUnit('m'),
exposes.numeric('radar_sensitivity', ea.STATE_SET).withValueMin(0).withValueMax(9).withValueStep(1)
.withDescription('sensitivity of the radar'),
exposes.numeric('minimum_range', ea.STATE_SET).withValueMin(0).withValueMax(9.5).withValueStep(0.15)
.withDescription('Minimum range').withUnit('m'),
exposes.numeric('maximum_range', ea.STATE_SET).withValueMin(0).withValueMax(9.5).withValueStep(0.15)
.withDescription('Maximum range').withUnit('m'),
exposes.numeric('detection_delay', ea.STATE_SET).withValueMin(0).withValueMax(10).withValueStep(0.1)
.withDescription('Detection delay').withUnit('s'),
exposes.numeric('fading_time', ea.STATE_SET).withValueMin(0).withValueMax(1500).withValueStep(1)
.withDescription('Fading time').withUnit('s'),
// exposes.text('cli', ea.STATE).withDescription('not recognize'),
exposes.enum('self_test', ea.STATE, Object.values(tuya.tuyaHPSCheckingResult))
.withDescription('Self_test, possible resuts: checking, check_success, check_failure, others, comm_fault, radar_fault.'),
],
meta: {
tuyaDatapoints: [
[104, 'illuminance', tuya.valueConverter.raw],
[105, 'presence', tuya.valueConverter.boolean],
[106, 'radar_sensitivity', tuya.valueConverter.raw],
[107, 'maximum_range', tuya.valueConverter.raw],
[108, 'minimum_range', tuya.valueConverter.raw],
[109, 'target_distance', tuya.valueConverter.raw],
[110, 'detection_delay', tuya.valueConverter.raw],
[111, 'fading_time', tuya.valueConverter.raw],
],
},
};
module.exports = definition;
Additional information
No response