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 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: 'Bosch Light/shutter control unit II',
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},
@@ -31,7 +31,7 @@ module.exports = [
31
31
  zigbeeModel: ['Panel TW Z3'],
32
32
  model: '4058075181472',
33
33
  vendor: 'LEDVANCE',
34
- description: 'SMART+ panel 60 x 60cm tunable white',
34
+ description: 'SMART+ panel 60x60cm/120x30cm tunable white',
35
35
  extend: extend.ledvance.light_onoff_brightness_colortemp(),
36
36
  ota: ota.ledvance,
37
37
  },
@@ -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',
@@ -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
- if (result[key] === 0 && globalStore.getValue(msg.endpoint, key) !== 0) {
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, result[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 Sensor', ['_TZ3040_wqmtjsyk'])],
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: [{vendor: 'LoraTap', model: 'SC400'}],
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'}, {vendor: 'Nous', model: 'L13Z'},
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 = findDefintion(device);
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 findDefintion(device) {
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', 'RTCGQ14LM',
228
- 'RTCGQ15LM'].includes(model.model)) {
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "15.0.100",
3
+ "version": "15.0.102",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [