zigbee-herdsman-converters 15.0.100 → 15.0.102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/devices/bosch.js +1 -1
- package/devices/ledvance.js +1 -1
- package/devices/philips.js +7 -0
- package/devices/samotech.js +31 -0
- package/devices/tuya.js +46 -8
- package/devices/ynoa.js +7 -0
- package/index.js +2 -2
- package/lib/xiaomi.js +4 -2
- package/package.json +1 -1
package/devices/bosch.js
CHANGED
|
@@ -860,7 +860,7 @@ const definition = [
|
|
|
860
860
|
zigbeeModel: ['RBSH-MMS-ZB-EU'],
|
|
861
861
|
model: 'BMCT-SLZ',
|
|
862
862
|
vendor: 'Bosch',
|
|
863
|
-
description: '
|
|
863
|
+
description: 'Light/shutter control unit II',
|
|
864
864
|
fromZigbee: [fzLocal.bmct, fz.cover_position_tilt, fz.on_off, fz.power_on_behavior],
|
|
865
865
|
toZigbee: [tzLocal.bmct, tz.cover_position_tilt, tz.on_off, tz.power_on_behavior],
|
|
866
866
|
meta: {multiEndpoint: true},
|
package/devices/ledvance.js
CHANGED
|
@@ -31,7 +31,7 @@ module.exports = [
|
|
|
31
31
|
zigbeeModel: ['Panel TW Z3'],
|
|
32
32
|
model: '4058075181472',
|
|
33
33
|
vendor: 'LEDVANCE',
|
|
34
|
-
description: 'SMART+ panel
|
|
34
|
+
description: 'SMART+ panel 60x60cm/120x30cm tunable white',
|
|
35
35
|
extend: extend.ledvance.light_onoff_brightness_colortemp(),
|
|
36
36
|
ota: ota.ledvance,
|
|
37
37
|
},
|
package/devices/philips.js
CHANGED
|
@@ -395,6 +395,13 @@ module.exports = [
|
|
|
395
395
|
description: 'Hue Go portable light',
|
|
396
396
|
extend: philips.extend.light_onoff_brightness_colortemp({colorTempRange: [153, 500]}),
|
|
397
397
|
},
|
|
398
|
+
{
|
|
399
|
+
zigbeeModel: ['929003128501'],
|
|
400
|
+
model: '929003128501',
|
|
401
|
+
vendor: 'Philips',
|
|
402
|
+
description: 'Hue Go portable table lamp',
|
|
403
|
+
extend: philips.extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
404
|
+
},
|
|
398
405
|
{
|
|
399
406
|
zigbeeModel: ['7602031K6'],
|
|
400
407
|
model: '7602031K6',
|
package/devices/samotech.js
CHANGED
|
@@ -27,6 +27,37 @@ module.exports = [
|
|
|
27
27
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genIdentify', 'genOnOff']);
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
|
+
{
|
|
31
|
+
zigbeeModel: ['SM308-2CH'],
|
|
32
|
+
model: 'SM308-2CH',
|
|
33
|
+
vendor: 'Samotech',
|
|
34
|
+
description: 'Zigbee 2 channel in wall switch',
|
|
35
|
+
extend: extend.switch({fromZigbee: [fz.electrical_measurement, fz.metering]}),
|
|
36
|
+
exposes: [
|
|
37
|
+
e.switch().withEndpoint('l1'),
|
|
38
|
+
e.switch().withEndpoint('l2'),
|
|
39
|
+
e.power_on_behavior().withEndpoint('l1'),
|
|
40
|
+
e.power_on_behavior().withEndpoint('l2'),
|
|
41
|
+
e.power(), e.current(), e.voltage(), e.energy()],
|
|
42
|
+
endpoint: (device) => {
|
|
43
|
+
return {'l1': 1, 'l2': 2};
|
|
44
|
+
},
|
|
45
|
+
meta: {multiEndpoint: true},
|
|
46
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
47
|
+
const endpoint1 = device.getEndpoint(1);
|
|
48
|
+
const endpoint2 = device.getEndpoint(2);
|
|
49
|
+
const endpoint11 = device.getEndpoint(11);
|
|
50
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ['genBasic', 'genIdentify', 'genOnOff']);
|
|
51
|
+
await reporting.bind(endpoint2, coordinatorEndpoint, ['genBasic', 'genIdentify', 'genOnOff']);
|
|
52
|
+
await reporting.bind(endpoint11, coordinatorEndpoint, ['genOta', 'haElectricalMeasurement', 'seMetering']);
|
|
53
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint11);
|
|
54
|
+
await reporting.readMeteringMultiplierDivisor(endpoint11);
|
|
55
|
+
await reporting.rmsVoltage(endpoint11, {min: 10, change: 20});
|
|
56
|
+
await reporting.rmsCurrent(endpoint11, {min: 10, change: 10});
|
|
57
|
+
await reporting.activePower(endpoint11, {min: 10, change: 15});
|
|
58
|
+
await reporting.currentSummDelivered(endpoint11, {min: 300});
|
|
59
|
+
},
|
|
60
|
+
},
|
|
30
61
|
{
|
|
31
62
|
zigbeeModel: ['SM309-S'],
|
|
32
63
|
model: 'SM309-S',
|
package/devices/tuya.js
CHANGED
|
@@ -903,10 +903,11 @@ const fzLocal = {
|
|
|
903
903
|
// https://github.com/Koenkk/zigbee2mqtt/issues/16709#issuecomment-1509599046
|
|
904
904
|
if (['_TZ3000_gvn91tmx', '_TZ3000_amdymr7l'].includes(meta.device.manufacturerName)) {
|
|
905
905
|
for (const key of ['power', 'current', 'voltage']) {
|
|
906
|
-
|
|
906
|
+
const value = result[key];
|
|
907
|
+
if (value === 0 && globalStore.getValue(msg.endpoint, key) !== 0) {
|
|
907
908
|
delete result[key];
|
|
908
909
|
}
|
|
909
|
-
globalStore.putValue(msg.endpoint, key,
|
|
910
|
+
globalStore.putValue(msg.endpoint, key, value);
|
|
910
911
|
}
|
|
911
912
|
}
|
|
912
913
|
return result;
|
|
@@ -1433,7 +1434,9 @@ module.exports = [
|
|
|
1433
1434
|
whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMA02P'},
|
|
1434
1435
|
{vendor: 'TuYa', model: 'TY-ZPR06'},
|
|
1435
1436
|
{vendor: 'Tesla Smart', model: 'TS0202'},
|
|
1436
|
-
tuya.whitelabel('MiBoxer', 'PIR1-ZB', 'PIR
|
|
1437
|
+
tuya.whitelabel('MiBoxer', 'PIR1-ZB', 'PIR sensor', ['_TZ3040_wqmtjsyk']),
|
|
1438
|
+
tuya.whitelabel('TuYa', 'ZMS01', 'Motion sensor', ['_TZ3000_otvn3lne']),
|
|
1439
|
+
],
|
|
1437
1440
|
fromZigbee: [fz.ias_occupancy_alarm_1, fz.battery, fz.ignore_basic_report, fz.ias_occupancy_alarm_1_report],
|
|
1438
1441
|
toZigbee: [],
|
|
1439
1442
|
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery(), e.battery_voltage()],
|
|
@@ -1768,7 +1771,10 @@ module.exports = [
|
|
|
1768
1771
|
toZigbee: [tz.cover_state, tz.cover_position_tilt, tz.tuya_cover_calibration, tz.tuya_cover_reversal,
|
|
1769
1772
|
tuya.tz.backlight_indicator_mode_1],
|
|
1770
1773
|
meta: {coverInverted: true},
|
|
1771
|
-
whiteLabel: [
|
|
1774
|
+
whiteLabel: [
|
|
1775
|
+
{vendor: 'LoraTap', model: 'SC400'},
|
|
1776
|
+
tuya.whitelabel('Zemismart', 'ZN-LC1E', 'Smart curtain/shutter switch', ['_TZ3000_74hsp7qy']),
|
|
1777
|
+
],
|
|
1772
1778
|
exposes: [e.cover_position(), exposes.enum('moving', ea.STATE, ['UP', 'STOP', 'DOWN']),
|
|
1773
1779
|
exposes.binary('calibration', ea.ALL, 'ON', 'OFF'), exposes.binary('motor_reversal', ea.ALL, 'ON', 'OFF'),
|
|
1774
1780
|
exposes.enum('backlight_mode', ea.ALL, ['low', 'medium', 'high']),
|
|
@@ -2385,8 +2391,9 @@ module.exports = [
|
|
|
2385
2391
|
vendor: 'TuYa',
|
|
2386
2392
|
description: '2 gang switch module',
|
|
2387
2393
|
whiteLabel: [
|
|
2388
|
-
{vendor: 'OXT', model: 'SWTZ22'},
|
|
2394
|
+
{vendor: 'OXT', model: 'SWTZ22'},
|
|
2389
2395
|
tuya.whitelabel('pcblab.io', 'RR620ZB', '2 gang Zigbee switch module', ['_TZ3000_4xfqlgqo']),
|
|
2396
|
+
tuya.whitelabel('Nous', 'L13Z', '2 gang switch', ['_TZ3000_ruxexjfz']),
|
|
2390
2397
|
],
|
|
2391
2398
|
extend: tuya.extend.switch({switchType: true, endpoints: ['l1', 'l2']}),
|
|
2392
2399
|
endpoint: (device) => {
|
|
@@ -2512,7 +2519,9 @@ module.exports = [
|
|
|
2512
2519
|
{modelID: 'TS0601', manufacturerName: '_TZE200_3ylew7b4'},
|
|
2513
2520
|
{modelID: 'TS0601', manufacturerName: '_TZE200_llm0epxg'},
|
|
2514
2521
|
{modelID: 'TS0601', manufacturerName: '_TZE200_n1aauwb4'},
|
|
2522
|
+
{modelID: 'TS0601', manufacturerName: '_TZE204_sxm7l9xa'},
|
|
2515
2523
|
{modelID: 'TS0601', manufacturerName: '_TZE200_xu4a5rhj'},
|
|
2524
|
+
{modelID: 'TS0601', manufacturerName: '_TZE204_r0jdjrvi'},
|
|
2516
2525
|
],
|
|
2517
2526
|
model: 'TS0601_cover_1',
|
|
2518
2527
|
vendor: 'TuYa',
|
|
@@ -2709,6 +2718,7 @@ module.exports = [
|
|
|
2709
2718
|
{vendor: 'AVATTO', model: 'TRV06'},
|
|
2710
2719
|
{vendor: 'Tesla Smart', model: 'TSL-TRV-TV01ZG'},
|
|
2711
2720
|
{vendor: 'Unknown/id3.pl', model: 'GTZ08'},
|
|
2721
|
+
tuya.whitelabel('Moes', 'ZTRV-ZX-TV01-MS', 'Thermostat radiator valve', ['_TZE200_7yoranx2']),
|
|
2712
2722
|
],
|
|
2713
2723
|
ota: ota.zigbeeOTA,
|
|
2714
2724
|
fromZigbee: [tuya.fz.datapoints],
|
|
@@ -3065,7 +3075,9 @@ module.exports = [
|
|
|
3065
3075
|
whiteLabel: [{vendor: 'LELLKI', model: 'TS011F_plug'}, {vendor: 'NEO', model: 'NAS-WR01B'},
|
|
3066
3076
|
{vendor: 'BlitzWolf', model: 'BW-SHP15'}, {vendor: 'Nous', model: 'A1Z'}, {vendor: 'BlitzWolf', model: 'BW-SHP13'},
|
|
3067
3077
|
{vendor: 'MatSee Plus', model: 'PJ-ZSW01'}, {vendor: 'MODEMIX', model: 'MOD037'}, {vendor: 'MODEMIX', model: 'MOD048'},
|
|
3068
|
-
{vendor: 'Coswall', model: 'CS-AJ-DE2U-ZG-11'}, {vendor: 'Aubess', model: 'TS011F_plug_1'}, {vendor: 'Immax', model: '07752L'}
|
|
3078
|
+
{vendor: 'Coswall', model: 'CS-AJ-DE2U-ZG-11'}, {vendor: 'Aubess', model: 'TS011F_plug_1'}, {vendor: 'Immax', model: '07752L'},
|
|
3079
|
+
tuya.whitelabel('NOUS', 'A1Z', 'Smart plug (with power monitoring)', ['_TZ3000_2putqrmw']),
|
|
3080
|
+
],
|
|
3069
3081
|
ota: ota.zigbeeOTA,
|
|
3070
3082
|
extend: tuya.extend.switch({
|
|
3071
3083
|
electricalMeasurements: true, electricalMeasurementsFzConverter: fzLocal.TS011F_electrical_measurement,
|
|
@@ -3103,7 +3115,9 @@ module.exports = [
|
|
|
3103
3115
|
description: 'Smart plug (with power monitoring by polling)',
|
|
3104
3116
|
vendor: 'TuYa',
|
|
3105
3117
|
whiteLabel: [{vendor: 'VIKEFON', model: 'TS011F'}, {vendor: 'BlitzWolf', model: 'BW-SHP15'},
|
|
3106
|
-
{vendor: 'Avatto', model: 'MIUCOT10Z'}, {vendor: 'Neo', model: 'NAS-WR01B'}, {vendor: 'Neo', model: 'PLUG-001SPB2'}
|
|
3118
|
+
{vendor: 'Avatto', model: 'MIUCOT10Z'}, {vendor: 'Neo', model: 'NAS-WR01B'}, {vendor: 'Neo', model: 'PLUG-001SPB2'},
|
|
3119
|
+
tuya.whitelabel('TuYa', 'BSD29', 'Smart plug (with power monitoring by polling)', ['_TZ3000_okaz9tjs']),
|
|
3120
|
+
],
|
|
3107
3121
|
ota: ota.zigbeeOTA,
|
|
3108
3122
|
extend: tuya.extend.switch({electricalMeasurements: true, powerOutageMemory: true, indicatorMode: true, childLock: true}),
|
|
3109
3123
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -3197,6 +3211,9 @@ module.exports = [
|
|
|
3197
3211
|
[101, 'test', tuya.valueConverter.raw],
|
|
3198
3212
|
],
|
|
3199
3213
|
},
|
|
3214
|
+
whiteLabel: [
|
|
3215
|
+
tuya.whitelabel('TuYa', 'PA-44Z', 'Smoke detector', ['_TZE200_m9skfctm']),
|
|
3216
|
+
],
|
|
3200
3217
|
},
|
|
3201
3218
|
{
|
|
3202
3219
|
fingerprint: [
|
|
@@ -4205,7 +4222,8 @@ module.exports = [
|
|
|
4205
4222
|
},
|
|
4206
4223
|
{
|
|
4207
4224
|
fingerprint: [{modelID: 'TS004F', manufacturerName: '_TZ3000_4fjiwweb'}, {modelID: 'TS004F', manufacturerName: '_TZ3000_uri7ongn'},
|
|
4208
|
-
{modelID: 'TS004F', manufacturerName: '_TZ3000_ixla93vd'}, {modelID: 'TS004F', manufacturerName: '_TZ3000_qja6nq5z'}
|
|
4225
|
+
{modelID: 'TS004F', manufacturerName: '_TZ3000_ixla93vd'}, {modelID: 'TS004F', manufacturerName: '_TZ3000_qja6nq5z'},
|
|
4226
|
+
{modelID: 'TS004F', manufacturerName: '_TZ3000_abrsvsou'}],
|
|
4209
4227
|
model: 'ERS-10TZBVK-AA',
|
|
4210
4228
|
vendor: 'TuYa',
|
|
4211
4229
|
description: 'Smart knob',
|
|
@@ -4316,6 +4334,9 @@ module.exports = [
|
|
|
4316
4334
|
exposes.enum('self_test', ea.STATE, Object.values(tuya.tuyaHPSCheckingResult))
|
|
4317
4335
|
.withDescription('Self_test, possible resuts: checking, check_success, check_failure, others, comm_fault, radar_fault.'),
|
|
4318
4336
|
],
|
|
4337
|
+
whiteLabel: [
|
|
4338
|
+
tuya.whitelabel('TuYa', 'ZY-M100-S', 'Human presence sensor', ['_TZE204_ztc6ggyl']),
|
|
4339
|
+
],
|
|
4319
4340
|
},
|
|
4320
4341
|
{
|
|
4321
4342
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_whkgqxse'}],
|
|
@@ -4815,4 +4836,21 @@ module.exports = [
|
|
|
4815
4836
|
tuya.whitelabel('TONGOU', 'TO-Q-SY2-163JZT', 'Smart circuit breaker', ['_TZ3000_cayepv1a']),
|
|
4816
4837
|
],
|
|
4817
4838
|
},
|
|
4839
|
+
{
|
|
4840
|
+
fingerprint: tuya.fingerprint('TS000F', ['_TZ3000_m8f3z8ju']),
|
|
4841
|
+
model: 'QS-Zigbee-SEC02-U',
|
|
4842
|
+
vendor: 'TuYa',
|
|
4843
|
+
description: 'Zigbee 3.0 smart light switch module 2 gang',
|
|
4844
|
+
toZigbee: [tz.on_off],
|
|
4845
|
+
extend: extend.switch(),
|
|
4846
|
+
exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2')],
|
|
4847
|
+
endpoint: (device) => {
|
|
4848
|
+
return {'l1': 1, 'l2': 2};
|
|
4849
|
+
},
|
|
4850
|
+
meta: {multiEndpoint: true},
|
|
4851
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
4852
|
+
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
4853
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
4854
|
+
},
|
|
4855
|
+
},
|
|
4818
4856
|
];
|
package/devices/ynoa.js
CHANGED
|
@@ -6,6 +6,13 @@ const e = exposes.presets;
|
|
|
6
6
|
const extend = require('..//lib/extend');
|
|
7
7
|
|
|
8
8
|
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['ZBT-CCTfilament-D0001'],
|
|
11
|
+
model: '8718801528204',
|
|
12
|
+
vendor: 'Ynoa',
|
|
13
|
+
description: 'Smart LED E27 CCT',
|
|
14
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [250, 454], disableEffect: true}),
|
|
15
|
+
},
|
|
9
16
|
{
|
|
10
17
|
zigbeeModel: ['ZBT-CCTLight-GU100001'],
|
|
11
18
|
model: '8718801528273',
|
package/index.js
CHANGED
|
@@ -131,7 +131,7 @@ function findByZigbeeModel(zigbeeModel) {
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
function findByDevice(device) {
|
|
134
|
-
let definition =
|
|
134
|
+
let definition = findDefinition(device);
|
|
135
135
|
if (definition && definition.whiteLabel) {
|
|
136
136
|
const match = definition.whiteLabel.find((w) => w.fingerprint && w.fingerprint.find((f) => isFingerprintMatch(f, device)));
|
|
137
137
|
if (match) {
|
|
@@ -146,7 +146,7 @@ function findByDevice(device) {
|
|
|
146
146
|
return definition;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
function
|
|
149
|
+
function findDefinition(device) {
|
|
150
150
|
if (!device) {
|
|
151
151
|
return null;
|
|
152
152
|
}
|
package/lib/xiaomi.js
CHANGED
|
@@ -224,11 +224,13 @@ const numericAttributes2Payload = async (msg, meta, model, options, dataObject)
|
|
|
224
224
|
payload[`state_${mapping}`] = value === 1 ? 'ON' : 'OFF';
|
|
225
225
|
} else if (['WXKG14LM', 'WXKG16LM', 'WXKG17LM'].includes(model.model)) {
|
|
226
226
|
payload.click_mode = {1: 'fast', 2: 'multi'}[value];
|
|
227
|
-
} else if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM', 'ZNMS12LM', 'ZNCLBL01LM', 'RTCGQ12LM', 'RTCGQ13LM',
|
|
228
|
-
'
|
|
227
|
+
} else if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM', 'ZNMS12LM', 'ZNCLBL01LM', 'RTCGQ12LM', 'RTCGQ13LM',
|
|
228
|
+
'RTCGQ14LM'].includes(model.model)) {
|
|
229
229
|
// We don't know what the value means for these devices.
|
|
230
230
|
// https://github.com/Koenkk/zigbee2mqtt/issues/11126
|
|
231
231
|
// https://github.com/Koenkk/zigbee2mqtt/issues/12279
|
|
232
|
+
} else if (['RTCGQ15LM'].includes(model.model)) {
|
|
233
|
+
payload.occupancy = value;
|
|
232
234
|
} else if (['WSDCGQ01LM', 'WSDCGQ11LM', 'WSDCGQ12LM', 'VOCKQJK11LM'].includes(model.model)) {
|
|
233
235
|
// https://github.com/Koenkk/zigbee2mqtt/issues/798
|
|
234
236
|
// Sometimes the sensor publishes non-realistic vales, filter these
|