zigbee-herdsman-converters 15.0.74 → 15.0.76

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
@@ -48,6 +48,26 @@ const displayOrientation = {
48
48
 
49
49
  // Radiator Thermostat II
50
50
  const tzLocal = {
51
+ bwa1: {
52
+ key: ['alarm_on_motion', 'test'],
53
+ convertSet: async (entity, key, value, meta) => {
54
+ if (key === 'alarm_on_motion') {
55
+ value = value.toUpperCase();
56
+ const index = stateOffOn[value];
57
+ await entity.write(0xFCAC, {0x0003: {value: index, type: 0x10}}, boschManufacturer);
58
+ return {state: {alarm_on_motion: value}};
59
+ }
60
+ },
61
+ convertGet: async (entity, key, meta) => {
62
+ switch (key) {
63
+ case 'alarm_on_motion':
64
+ await entity.read(0xFCAC, [0x0003], boschManufacturer);
65
+ break;
66
+ default: // Unknown key
67
+ throw new Error(`Unhandled key toZigbee.bosch_twinguard.convertGet ${key}`);
68
+ }
69
+ },
70
+ },
51
71
  bosch_thermostat: {
52
72
  key: ['window_open', 'boost', 'system_mode', 'pi_heating_demand'],
53
73
  convertSet: async (entity, key, value, meta) => {
@@ -212,6 +232,19 @@ const tzLocal = {
212
232
 
213
233
 
214
234
  const fzLocal = {
235
+ bwa1_alarm_on_motion: {
236
+ cluster: '64684',
237
+ type: ['attributeReport', 'readResponse'],
238
+ options: [],
239
+ convert: (model, msg, publish, options, meta) => {
240
+ const result = {};
241
+ const data = msg.data;
242
+ if (data.hasOwnProperty(0x0003)) {
243
+ result.alarm_on_motion = (Object.keys(stateOffOn)[msg.data[0x0003]]);
244
+ }
245
+ return result;
246
+ },
247
+ },
215
248
  bosch_contact: {
216
249
  cluster: 'ssIasZone',
217
250
  type: 'commandStatusChangeNotification',
@@ -396,6 +429,46 @@ const fzLocal = {
396
429
  };
397
430
 
398
431
  const definition = [
432
+ {
433
+ zigbeeModel: ['RBSH-WS-ZB-EU'],
434
+ model: 'BWA-1',
435
+ vendor: 'Bosch',
436
+ description: 'Zigbee smart water leak detector',
437
+ fromZigbee: [fz.ias_water_leak_alarm_1, fz.battery, fzLocal.bwa1_alarm_on_motion],
438
+ toZigbee: [tzLocal.bwa1],
439
+ meta: {battery: {voltageToPercentage: '3V_2500'}},
440
+ configure: async (device, coordinatorEndpoint, logger) => {
441
+ const endpoint = device.getEndpoint(1);
442
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', '64684']);
443
+ await reporting.batteryPercentageRemaining(endpoint);
444
+ await reporting.batteryVoltage(endpoint);
445
+ await endpoint.configureReporting(0xFCAC, [{
446
+ attribute: {ID: 0x0003, type: herdsman.Zcl.DataType.bool},
447
+ minimumReportInterval: 0,
448
+ maximumReportInterval: constants.repInterval.HOUR,
449
+ reportableChange: 1,
450
+ }], boschManufacturer);
451
+ },
452
+ exposes: [
453
+ e.water_leak(), e.battery(), e.tamper(),
454
+ exposes.binary('alarm_on_motion', ea.ALL, 'ON', 'OFF').withDescription('Enable/Disable sound alarm on motion'),
455
+ ],
456
+ },
457
+ {
458
+ zigbeeModel: ['RBSH-SD-ZB-EU'],
459
+ model: 'BSD-2',
460
+ vendor: 'Bosch',
461
+ description: 'Smoke alarm detector',
462
+ fromZigbee: [fz.battery, fz.ias_smoke_alarm_1],
463
+ toZigbee: [],
464
+ meta: {},
465
+ configure: async (device, coordinatorEndpoint, logger) => {
466
+ const endpoint = device.getEndpoint(1);
467
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 64684]);
468
+ await reporting.batteryPercentageRemaining(endpoint);
469
+ },
470
+ exposes: [e.smoke(), e.battery(), e.battery_low(), e.test()],
471
+ },
399
472
  {
400
473
  zigbeeModel: ['RFDL-ZB', 'RFDL-ZB-EU', 'RFDL-ZB-H', 'RFDL-ZB-K', 'RFDL-ZB-CHI', 'RFDL-ZB-MS', 'RFDL-ZB-ES', 'RFPR-ZB',
401
474
  'RFPR-ZB-EU', 'RFPR-ZB-CHI', 'RFPR-ZB-ES', 'RFPR-ZB-MS'],
package/devices/heiman.js CHANGED
@@ -787,4 +787,19 @@ module.exports = [
787
787
  },
788
788
  exposes: [e.co2(), e.battery(), e.humidity(), e.temperature()],
789
789
  },
790
+ {
791
+ zigbeeModel: ['RouteLight-EF-3.0'],
792
+ model: 'HS2RNL',
793
+ vendor: 'HEIMAN',
794
+ description: 'Smart repeater & night light',
795
+ fromZigbee: [fz.on_off, fz.battery],
796
+ toZigbee: [tz.on_off],
797
+ configure: async (device, coordinatorEndpoint, logger) => {
798
+ const endpoint = device.getEndpoint(1);
799
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'genOnOff', 'genLevelCtrl']);
800
+ await reporting.onOff(endpoint); // switch the night light on/off
801
+ await reporting.batteryPercentageRemaining(endpoint); // internal backup battery in case of power outage
802
+ },
803
+ exposes: [e.switch(), e.battery()],
804
+ },
790
805
  ];
package/devices/ikea.js CHANGED
@@ -245,6 +245,71 @@ const ikea = {
245
245
  }
246
246
  },
247
247
  },
248
+ ikea_dots_click_v1: {
249
+ // For remotes with firmware 1.0.012 (20211214)
250
+ cluster: 64639,
251
+ type: 'raw',
252
+ convert: (model, msg, publish, options, meta) => {
253
+ if (!Buffer.isBuffer(msg.data)) return;
254
+ let action;
255
+ const button = msg.data[5];
256
+ switch (msg.data[6]) {
257
+ case 1: action = 'initial_press'; break;
258
+ case 2: action = 'double_press'; break;
259
+ case 3: action = 'long_press'; break;
260
+ }
261
+
262
+ return {action: `dots_${button}_${action}`};
263
+ },
264
+ },
265
+ ikea_dots_click_v2: {
266
+ // For remotes with firmware 1.0.32 (20221219)
267
+ cluster: 'heimanSpecificScenes',
268
+ type: 'raw',
269
+ convert: (model, msg, publish, options, meta) => {
270
+ if (!Buffer.isBuffer(msg.data)) return;
271
+ let button;
272
+ let action;
273
+ switch (msg.endpoint.ID) {
274
+ case 2: button = '1'; break; // 1 dot
275
+ case 3: button = '2'; break; // 2 dot
276
+ }
277
+ switch (msg.data[4]) {
278
+ case 1: action = 'initial_press'; break;
279
+ case 2: action = 'long_press'; break;
280
+ case 3: action = 'short_release'; break;
281
+ case 4: action = 'long_release'; break;
282
+ case 6: action = 'double_press'; break;
283
+ }
284
+
285
+ return {action: `dots_${button}_${action}`};
286
+ },
287
+ },
288
+ ikea_volume_click: {
289
+ cluster: 'genLevelCtrl',
290
+ type: 'commandMoveWithOnOff',
291
+ convert: (model, msg, publish, options, meta) => {
292
+ const direction = msg.data.movemode === 1 ? 'down' : 'up';
293
+ return {action: `volume_${direction}`};
294
+ },
295
+ },
296
+ ikea_volume_hold: {
297
+ cluster: 'genLevelCtrl',
298
+ type: 'commandMove',
299
+ convert: (model, msg, publish, options, meta) => {
300
+ const direction = msg.data.movemode === 1 ? 'down_hold' : 'up_hold';
301
+ return {action: `volume_${direction}`};
302
+ },
303
+ },
304
+ ikea_track_click: {
305
+ cluster: 'genLevelCtrl',
306
+ type: 'commandStep',
307
+ convert: (model, msg, publish, options, meta) => {
308
+ if (utils.hasAlreadyProcessedMessage(msg, model)) return;
309
+ const direction = msg.data.stepmode === 1 ? 'previous' : 'next';
310
+ return {action: `track_${direction}`};
311
+ },
312
+ },
248
313
  },
249
314
  tz: {
250
315
  air_purifier_fan_mode: {
@@ -1073,4 +1138,31 @@ module.exports = [
1073
1138
  }]);
1074
1139
  },
1075
1140
  },
1141
+ {
1142
+ zigbeeModel: ['SYMFONISK sound remote gen2'],
1143
+ model: 'E2123',
1144
+ vendor: 'IKEA',
1145
+ description: 'SYMFONISK sound remote gen2',
1146
+ fromZigbee: [ikea.fz.battery, fz.legacy.E1744_play_pause, ikea.fz.ikea_track_click, ikea.fz.ikea_volume_click,
1147
+ ikea.fz.ikea_volume_hold, ikea.fz.ikea_dots_click_v1, ikea.fz.ikea_dots_click_v2],
1148
+ exposes: [e.battery().withAccess(ea.STATE_GET), e.action(['toggle', 'track_previous', 'track_next', 'volume_up',
1149
+ 'volume_down', 'volume_up_hold', 'volume_down_hold', 'dots_1_initial_press', 'dots_2_initial_press',
1150
+ 'dots_1_long_press', 'dots_2_long_press', 'dots_1_short_release', 'dots_2_short_release', 'dots_1_long_release',
1151
+ 'dots_2_long_release', 'dots_1_double_press', 'dots_2_double_press'])],
1152
+ toZigbee: [tz.battery_percentage_remaining],
1153
+ ota: ota.zigbeeOTA,
1154
+ configure: async (device, coordinatorEndpoint, logger) => {
1155
+ const endpoint1 = device.getEndpoint(1);
1156
+ const endpoint2 = device.getEndpoint(2);
1157
+ const endpoint3 = device.getEndpoint(3);
1158
+ await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'genPollCtrl']);
1159
+ if (endpoint2) {
1160
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['heimanSpecificScenes']);
1161
+ }
1162
+ if (endpoint3) {
1163
+ await reporting.bind(endpoint3, coordinatorEndpoint, ['heimanSpecificScenes']);
1164
+ }
1165
+ await reporting.batteryVoltage(endpoint1);
1166
+ },
1167
+ },
1076
1168
  ];
package/devices/innr.js CHANGED
@@ -44,6 +44,7 @@ module.exports = [
44
44
  description: 'Smart round ceiling lamp comfort',
45
45
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [200, 454]}),
46
46
  meta: {turnsOffAtBrightness1: true},
47
+ ota: ota.zigbeeOTA,
47
48
  },
48
49
  {
49
50
  zigbeeModel: ['FL 140 C'],
@@ -76,6 +77,7 @@ module.exports = [
76
77
  description: 'B22 filament bulb dimmable',
77
78
  extend: extend.light_onoff_brightness(),
78
79
  meta: {turnsOffAtBrightness1: true},
80
+ ota: ota.zigbeeOTA,
79
81
  },
80
82
  {
81
83
  zigbeeModel: ['OGL 130 C'],
@@ -125,6 +127,7 @@ module.exports = [
125
127
  description: 'E14 bulb RGBW',
126
128
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
127
129
  meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true},
130
+ ota: ota.zigbeeOTA,
128
131
  },
129
132
  {
130
133
  zigbeeModel: ['RB 265'],
@@ -141,6 +144,7 @@ module.exports = [
141
144
  description: 'B22 (Bayonet) bulb, dimmable',
142
145
  extend: extend.light_onoff_brightness(),
143
146
  meta: {turnsOffAtBrightness1: true},
147
+ ota: ota.zigbeeOTA,
144
148
  },
145
149
  {
146
150
  zigbeeModel: ['RB 266'],
@@ -149,6 +153,7 @@ module.exports = [
149
153
  description: 'E27 bulb',
150
154
  extend: extend.light_onoff_brightness(),
151
155
  meta: {turnsOffAtBrightness1: true},
156
+ ota: ota.zigbeeOTA,
152
157
  },
153
158
  {
154
159
  zigbeeModel: ['RF 265'],
@@ -157,6 +162,7 @@ module.exports = [
157
162
  description: 'E27 bulb filament clear',
158
163
  extend: extend.light_onoff_brightness(),
159
164
  meta: {turnsOffAtBrightness1: true},
165
+ ota: ota.zigbeeOTA,
160
166
  },
161
167
  {
162
168
  zigbeeModel: ['BF 265'],
@@ -165,6 +171,7 @@ module.exports = [
165
171
  description: 'B22 bulb filament clear',
166
172
  extend: extend.light_onoff_brightness(),
167
173
  meta: {turnsOffAtBrightness1: true},
174
+ ota: ota.zigbeeOTA,
168
175
  },
169
176
  {
170
177
  zigbeeModel: ['RB 278 T'],
@@ -181,6 +188,7 @@ module.exports = [
181
188
  description: 'Smart bulb tunable white E27',
182
189
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
183
190
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
191
+ ota: ota.zigbeeOTA,
184
192
  },
185
193
  {
186
194
  zigbeeModel: ['RB 285 C'],
@@ -197,6 +205,7 @@ module.exports = [
197
205
  description: 'E27 bulb RGBW',
198
206
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
199
207
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
208
+ ota: ota.zigbeeOTA,
200
209
  },
201
210
  {
202
211
  zigbeeModel: ['BY 285 C'],
@@ -213,6 +222,7 @@ module.exports = [
213
222
  description: 'B22 bulb RGBW',
214
223
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
215
224
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
225
+ ota: ota.zigbeeOTA,
216
226
  },
217
227
  {
218
228
  zigbeeModel: ['RB 165'],
@@ -293,6 +303,7 @@ module.exports = [
293
303
  description: 'GU10 Spot',
294
304
  extend: extend.light_onoff_brightness(),
295
305
  meta: {turnsOffAtBrightness1: true},
306
+ ota: ota.zigbeeOTA,
296
307
  },
297
308
  {
298
309
  zigbeeModel: ['RS 227 T'],
@@ -301,6 +312,7 @@ module.exports = [
301
312
  description: 'GU10 spot 420 lm, dimmable, white spectrum',
302
313
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [200, 454]}),
303
314
  meta: {turnsOffAtBrightness1: true},
315
+ ota: ota.zigbeeOTA,
304
316
  },
305
317
  {
306
318
  zigbeeModel: ['RS 128 T'],
@@ -325,6 +337,7 @@ module.exports = [
325
337
  description: 'GU10 spot 350 lm, dimmable, white spectrum',
326
338
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [200, 454]}),
327
339
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
340
+ ota: ota.zigbeeOTA,
328
341
  },
329
342
  {
330
343
  zigbeeModel: ['RS 230 C'],
@@ -334,6 +347,7 @@ module.exports = [
334
347
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
335
348
  exposes: [e.light_brightness_colortemp_color()],
336
349
  meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true},
350
+ ota: ota.zigbeeOTA,
337
351
  },
338
352
  {
339
353
  zigbeeModel: ['RB 145'],
@@ -350,6 +364,7 @@ module.exports = [
350
364
  description: 'E14 candle',
351
365
  extend: extend.light_onoff_brightness(),
352
366
  meta: {turnsOffAtBrightness1: true},
367
+ ota: ota.zigbeeOTA,
353
368
  },
354
369
  {
355
370
  zigbeeModel: ['RB 248 T'],
@@ -358,6 +373,7 @@ module.exports = [
358
373
  description: 'E14 candle with white spectrum',
359
374
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
360
375
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
376
+ ota: ota.zigbeeOTA,
361
377
  },
362
378
  {
363
379
  zigbeeModel: ['RB 249 T'],
@@ -366,6 +382,7 @@ module.exports = [
366
382
  description: 'E14 candle, dimmable with, color temp',
367
383
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [200, 454]}),
368
384
  meta: {turnsOffAtBrightness1: true},
385
+ ota: ota.zigbeeOTA,
369
386
  },
370
387
  {
371
388
  zigbeeModel: ['RB 148 T'],
@@ -382,6 +399,7 @@ module.exports = [
382
399
  description: 'E27 filament bulb dimmable',
383
400
  extend: extend.light_onoff_brightness(),
384
401
  meta: {turnsOffAtBrightness1: true},
402
+ ota: ota.zigbeeOTA,
385
403
  },
386
404
  {
387
405
  zigbeeModel: ['RF 263'],
@@ -390,6 +408,7 @@ module.exports = [
390
408
  description: 'E27 filament bulb dimmable',
391
409
  extend: extend.light_onoff_brightness(),
392
410
  meta: {turnsOffAtBrightness1: true},
411
+ ota: ota.zigbeeOTA,
393
412
  },
394
413
  {
395
414
  zigbeeModel: ['RF 264'],
@@ -398,6 +417,7 @@ module.exports = [
398
417
  description: 'E27 filament bulb dimmable',
399
418
  extend: extend.light_onoff_brightness(),
400
419
  meta: {turnsOffAtBrightness1: true},
420
+ ota: ota.zigbeeOTA,
401
421
  },
402
422
  {
403
423
  zigbeeModel: ['BY 165', 'BY 265'],
@@ -518,6 +538,7 @@ module.exports = [
518
538
  description: 'E26 bulb RGBW',
519
539
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
520
540
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
541
+ ota: ota.zigbeeOTA,
521
542
  },
522
543
  {
523
544
  zigbeeModel: ['SP 120'],
@@ -574,6 +595,7 @@ module.exports = [
574
595
  vendor: 'Innr',
575
596
  description: 'Smart plug',
576
597
  extend: extend.switch(),
598
+ ota: ota.zigbeeOTA,
577
599
  configure: async (device, coordinatorEndpoint, logger) => {
578
600
  const endpoint = device.getEndpoint(1);
579
601
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
package/devices/namron.js CHANGED
@@ -757,4 +757,18 @@ module.exports = [
757
757
  await reporting.activePower(endpoint);
758
758
  },
759
759
  },
760
+ {
761
+ zigbeeModel: ['4512747'],
762
+ model: '4512747',
763
+ vendor: 'Namron',
764
+ description: 'Curtain motor controller',
765
+ fromZigbee: [fz.cover_position_tilt],
766
+ toZigbee: [tz.cover_state, tz.cover_position_tilt],
767
+ exposes: [e.cover_position()],
768
+ configure: async (device, coordinatorEndpoint, logger) => {
769
+ const endpoint = device.getEndpoint(1);
770
+ await reporting.bind(endpoint, coordinatorEndpoint, ['closuresWindowCovering']);
771
+ await reporting.currentPositionLiftPercentage(endpoint);
772
+ },
773
+ },
760
774
  ];
package/devices/nue_3a.js CHANGED
@@ -122,6 +122,25 @@ module.exports = [
122
122
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
123
123
  },
124
124
  },
125
+ {
126
+ zigbeeModel: ['LXN-4S27LX1.0'],
127
+ model: 'HGZB-4S',
128
+ vendor: 'Nue / 3A',
129
+ description: 'Smart light switch - 4 gang v2.0',
130
+ extend: extend.switch(),
131
+ exposes: [
132
+ e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.switch().withEndpoint('l3'), e.switch().withEndpoint('l4')],
133
+ endpoint: (device) => {
134
+ return {'l1': 1, 'l2': 2, 'l3': 3, 'l4': 4};
135
+ },
136
+ meta: {multiEndpoint: true},
137
+ configure: async (device, coordinatorEndpoint, logger) => {
138
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
139
+ await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
140
+ await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
141
+ await reporting.bind(device.getEndpoint(4), coordinatorEndpoint, ['genOnOff']);
142
+ },
143
+ },
125
144
  {
126
145
  zigbeeModel: ['FB56+ZSW1IKJ1.7', 'FB56+ZSW1IKJ2.5', 'FB56+ZSW1IKJ2.7'],
127
146
  model: 'HGZB-043',
package/devices/owon.js CHANGED
@@ -105,6 +105,24 @@ module.exports = [
105
105
  change: [10, 10]}); // divider 1000: 0,01kWh
106
106
  },
107
107
  },
108
+ {
109
+ zigbeeModel: ['WSP403-E'],
110
+ model: 'WSP403',
111
+ vendor: 'OWON',
112
+ description: 'Smart plug',
113
+ fromZigbee: [fz.on_off, fz.metering],
114
+ toZigbee: [tz.on_off],
115
+ exposes: [e.switch(), e.power(), e.energy()],
116
+ configure: async (device, coordinatorEndpoint, logger) => {
117
+ const endpoint = device.getEndpoint(1);
118
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
119
+ await reporting.onOff(endpoint);
120
+ await reporting.readMeteringMultiplierDivisor(endpoint);
121
+ await reporting.instantaneousDemand(endpoint, {min: 5, max: constants.repInterval.MINUTES_5, change: 2}); // divider 1000: 2W
122
+ await reporting.currentSummDelivered(endpoint, {min: 5, max: constants.repInterval.MINUTES_5,
123
+ change: [10, 10]}); // divider 1000: 0,01kWh
124
+ },
125
+ },
108
126
  {
109
127
  zigbeeModel: ['WSP404'],
110
128
  model: 'WSP404',
@@ -279,7 +279,7 @@ module.exports = [
279
279
  model: 'CCT5011-0001/CCT5011-0002/MEG5011-0001',
280
280
  vendor: 'Schneider Electric',
281
281
  description: 'Micro module switch',
282
- extend: extend.switch(),
282
+ extend: extend.switch({disablePowerOnBehavior: true}),
283
283
  whiteLabel: [{vendor: 'Elko', model: 'EKO07144'}],
284
284
  configure: async (device, coordinatorEndpoint, logger) => {
285
285
  const endpoint = device.getEndpoint(1);
package/devices/tuya.js CHANGED
@@ -1987,7 +1987,7 @@ module.exports = [
1987
1987
  },
1988
1988
  },
1989
1989
  {
1990
- fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_tqlv4ug4'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_gjrubzje'}],
1990
+ fingerprint: tuya.fingerprint('TS0001', ['_TZ3000_tqlv4ug4', '_TZ3000_gjrubzje', '_TZ3000_tygpxwqa']),
1991
1991
  model: 'TS0001_switch_module',
1992
1992
  vendor: 'TuYa',
1993
1993
  description: '1 gang switch module',
@@ -3372,6 +3372,7 @@ module.exports = [
3372
3372
  {modelID: 'TS0210', manufacturerName: '_TYZB01_kulduhbj'},
3373
3373
  {modelID: 'TS0210', manufacturerName: '_TYZB01_cc3jzhlj'},
3374
3374
  {modelID: 'TS0210', manufacturerName: '_TZ3000_bmfw9ykl'},
3375
+ {modelID: 'TS0210', manufacturerName: '_TYZB01_geigpsy4'},
3375
3376
  {modelID: 'TS0210', manufacturerName: '_TZ3000_fkxmyics'}],
3376
3377
  model: 'TS0210',
3377
3378
  vendor: 'TuYa',
@@ -24,6 +24,7 @@ module.exports = [
24
24
  exposes.binary('window_open_force', ea.ALL, true, false)
25
25
  .withDescription('Manually set window_open, ~1 minute to take affect.'),
26
26
  e.keypad_lockout(),
27
+ e.battery(),
27
28
  ],
28
29
  configure: async (device, coordinatorEndpoint, logger) => {
29
30
  const endpoint = device.getEndpoint(1);
package/devices/woox.js CHANGED
@@ -160,10 +160,11 @@ module.exports = [
160
160
  vendor: 'Woox',
161
161
  description: 'Smart siren',
162
162
  fromZigbee: [fz.battery, fz.ts0216_siren, fz.ias_alarm_only_alarm_1, fz.power_source],
163
- toZigbee: [tz.warning, tz.ts0216_volume],
163
+ toZigbee: [tz.warning, tz.ts0216_volume, tz.ts0216_duration],
164
164
  exposes: [e.battery(), e.battery_voltage(), e.warning(), exposes.binary('alarm', ea.STATE, true, false),
165
165
  exposes.binary('ac_connected', ea.STATE, true, false).withDescription('Is the device plugged in'),
166
- exposes.numeric('volume', ea.ALL).withValueMin(0).withValueMax(100).withDescription('Volume of siren')],
166
+ exposes.numeric('volume', ea.ALL).withValueMin(0).withValueMax(100).withDescription('Volume of siren'),
167
+ exposes.numeric('duration', ea.ALL).withValueMin(0).withValueMax(3600).withDescription('Duration of siren')],
167
168
  meta: {disableDefaultResponse: true},
168
169
  configure: async (device, coordinatorEndpoint) => {
169
170
  const endpoint = device.getEndpoint(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "15.0.74",
3
+ "version": "15.0.76",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -38,7 +38,7 @@
38
38
  "buffer-crc32": "^0.2.13",
39
39
  "https-proxy-agent": "^5.0.1",
40
40
  "tar-stream": "^3.0.0",
41
- "zigbee-herdsman": "^0.14.99"
41
+ "zigbee-herdsman": "^0.14.100"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",