Skip to content

Commit 9aef8e4

Browse files
authored
feat: Support calibration up/down for Tuya _TZ3000_cet6ch1r (#8099)
* Update fromZigbee.ts Add support for calibration time up and down in tuya_cover_options Signed-off-by: Jonathan Sciarrabba <[email protected]> * Update toZigbee.ts Add support for calibration up and down in tuya_cover_calibration Signed-off-by: Jonathan Sciarrabba <[email protected]> * Update tuya.ts Add support for Tuya TS130F _TZ3000_cet6ch1r, it supports different calibration times for up and down Signed-off-by: Jonathan Sciarrabba <[email protected]> --------- Signed-off-by: Jonathan Sciarrabba <[email protected]>
1 parent 9d4e7c6 commit 9aef8e4

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

src/converters/fromZigbee.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -2212,7 +2212,13 @@ const converters1 = {
22122212
}
22132213
if (msg.data.moesCalibrationTime !== undefined) {
22142214
const value = parseFloat(msg.data['moesCalibrationTime']) / 10.0;
2215-
result[postfixWithEndpointName('calibration_time', msg, model, meta)] = value;
2215+
if (meta.device.manufacturerName === '_TZ3000_cet6ch1r') {
2216+
const endpoint = msg.endpoint.ID;
2217+
const calibrationLookup: KeyValueAny = {1: 'up', 2: 'down'};
2218+
result[postfixWithEndpointName(`calibration_time_'${calibrationLookup[endpoint]}'`, msg, model, meta)] = value;
2219+
} else {
2220+
result[postfixWithEndpointName('calibration_time', msg, model, meta)] = value;
2221+
}
22162222
}
22172223
return result;
22182224
},

src/converters/toZigbee.ts

+20-4
Original file line numberDiff line numberDiff line change
@@ -3915,17 +3915,33 @@ const converters2 = {
39153915
},
39163916
} satisfies Tz.Converter,
39173917
tuya_cover_calibration: {
3918-
key: ['calibration'],
3918+
key: ['calibration', 'calibration_up', 'calibration_down'],
39193919
convertSet: async (entity, key, value, meta) => {
39203920
utils.assertString(value, key);
39213921
const lookup = {ON: 0, OFF: 1};
39223922
value = value.toUpperCase();
39233923
const calibration = utils.getFromLookup(value, lookup);
3924-
await entity.write('closuresWindowCovering', {tuyaCalibration: calibration});
3925-
return {state: {calibration: value}};
3924+
switch (key) {
3925+
case 'calibration':
3926+
case 'calibration_up':
3927+
await entity.write('closuresWindowCovering', {tuyaCalibration: calibration});
3928+
break;
3929+
case 'calibration_down':
3930+
await meta.device.getEndpoint(2).write('closuresWindowCovering', {tuyaCalibration: calibration});
3931+
break;
3932+
}
3933+
return {state: {[key]: value}};
39263934
},
39273935
convertGet: async (entity, key, meta) => {
3928-
await entity.read('closuresWindowCovering', ['tuyaCalibration']);
3936+
switch (key) {
3937+
case 'calibration':
3938+
case 'calibration_up':
3939+
await entity.read('closuresWindowCovering', ['tuyaCalibration']);
3940+
break;
3941+
case 'calibration_down':
3942+
await meta.device.getEndpoint(2).read('closuresWindowCovering', ['tuyaCalibration']);
3943+
break;
3944+
}
39293945
},
39303946
} satisfies Tz.Converter,
39313947
tuya_cover_reversal: {

src/devices/tuya.ts

+14-3
Original file line numberDiff line numberDiff line change
@@ -2558,13 +2558,24 @@ const definitions: DefinitionWithExtend[] = [
25582558
tuya.whitelabel('Nous', 'B4Z', 'Curtain switch', ['_TZ3000_yruungrl']),
25592559
],
25602560
exposes: (device) => {
2561-
const exps = [
2561+
const exps: Expose[] = [
25622562
e.cover_position(),
25632563
e.enum('moving', ea.STATE, ['UP', 'STOP', 'DOWN']),
2564-
e.binary('calibration', ea.ALL, 'ON', 'OFF'),
25652564
e.binary('motor_reversal', ea.ALL, 'ON', 'OFF'),
2566-
e.numeric('calibration_time', ea.STATE).withUnit('s').withDescription('Calibration time'),
25672565
];
2566+
if (device?.manufacturerName !== '_TZ3000_cet6ch1r') {
2567+
exps.push(
2568+
e.binary('calibration', ea.ALL, 'ON', 'OFF'),
2569+
e.numeric('calibration_time', ea.STATE).withUnit('s').withDescription('Calibration time'),
2570+
);
2571+
} else {
2572+
exps.push(
2573+
e.binary('calibration_up', ea.ALL, 'ON', 'OFF'),
2574+
e.numeric('calibration_time_up', ea.STATE).withUnit('s').withDescription('Calibration time up'),
2575+
e.binary('calibration_down', ea.ALL, 'ON', 'OFF'),
2576+
e.numeric('calibration_time_down', ea.STATE).withUnit('s').withDescription('Calibration time down'),
2577+
);
2578+
}
25682579
if (device?.manufacturerName !== '_TZ3210_xbpt8ewc') {
25692580
exps.push(tuya.exposes.indicatorMode(), tuya.exposes.backlightModeOffOn());
25702581
}

0 commit comments

Comments
 (0)