### Link
https://www.aliexpress.com/item/1005003951429372.html
### Databas…e entry
{"id":1,"type":"EndDevice","ieeeAddr":"0x0123456789abcdef","nwkAddr":24426,"manufId":4417,"manufName":"_TZE200_ntcy3xu1","powerSource":"Battery","modelId":"TS0601","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":81,"inClusterList":[4,5,61184,0],"outClusterList":[25,100],"clusters":{"genBasic":{"attributes":{"65503":"\u0000\u0000\u0000\u0000\u0011\u0000\u0000\u0000\u0000\u0011","65506":56,"65508":1,"stackVersion":0,"dateCode":"","appVersion":72}}},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":72,"stackVersion":0,"hwVersion":1,"dateCode":"","zclVersion":3,"interviewCompleted":true,"meta":{},"lastSeen":1653739221127,"defaultSendRequestWhen":"immediate"}
### Comments
I don't have a Tuya gateway, so I haven't been able to actually use the Tuya platform to check the attributes of this device. But with some trial and error I was able to sort out a couple of properties in an external convertor. As far as I can tell, the external convertor seems to work correctly. Maybe it can be merged with the existing TS0601 convertor. When you press the test button it reports as smoke.
Compared to other TS0601 smoke sensors, this one does not seem to support a battery level, or at least not as far as I could tell. It does have a low battery state property which seems to be in line with the product description. For the low battery state, I was only able to reproduce the values 0 for low battery and 2 with full batteries. Maybe there is an intermediate state 1 or it is a bit array, but I have not seen any indications of either. The device has a tamper switch on the back that is pressed when it is locked into the mounting plate.
### External converter
```shell
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 e = exposes.presets;
const ea = exposes.access;
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const fzLocal = {
tuya_smoke: {
cluster: 'manuSpecificTuya',
type: ['commandDataResponse', 'commandDataReport'],
convert: (model, msg, publish, options, meta) => {
const result = {};
for (const dpValue of msg.data.dpValues) {
const dp = dpValue.dp;
const value = tuya.getDataValue(dpValue);
switch (dp) {
case tuya.dataPoints.state:
result.smoke = value === 0;
break;
case 4:
result.tamper = value;
break;
case 14:
result.battery_low = value === 0;
break;
default:
meta.logger.warn(`zigbee-herdsman-converters:tuya_smoke: Unrecognized DP #${dp} with data ${JSON.stringify(dpValue)}`);
}
}
return result;
},
}
}
const definition = {
zigbeeModel: ['ntcy3xu1'],
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ntcy3xu1'}],
model: 'TS0601_smoke2',
vendor: 'TuYa',
description: 'Smoke sensor',
fromZigbee: [fzLocal.tuya_smoke],
toZigbee: [],
exposes: [e.smoke(), e.tamper(), e.battery_low()],
};
module.exports = definition;
```
### Supported color modes
_No response_
### Color temperature range
_No response_