zigbee-herdsman-converters 14.0.647 → 14.0.648

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.
@@ -4261,6 +4261,7 @@ const converters = {
4261
4261
  convertSet: async (entity, key, value, meta) => {
4262
4262
  const payload = {0x4000: {value, type: 0x30}};
4263
4263
  await entity.write('hvacThermostat', payload, manufacturerOptions.eurotronic);
4264
+ return {state: {[key]: value}};
4264
4265
  },
4265
4266
  convertGet: async (entity, key, meta) => {
4266
4267
  await entity.read('hvacThermostat', [0x4000], manufacturerOptions.eurotronic);
@@ -25,35 +25,29 @@ const develcoLedControlMap = {
25
25
  0xFF: 'both',
26
26
  };
27
27
 
28
+ // develco specific convertors
29
+ const develco = {
30
+ configure: {
31
+ read_sw_hw_version: async (device, logger) => {
32
+ for (const ep of device.endpoints) {
33
+ if (ep.supportsInputCluster('genBasic')) {
34
+ try {
35
+ const data = await ep.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'],
36
+ manufacturerOptions);
28
37
 
29
- const fwOnEvent = async (type, data, device, options, state) => {
30
- /**
31
- * Develco devices have a manufacturer specific field on genBasic
32
- * for sw and hw versions.
33
- *
34
- * We read those during deviceInterview
35
- * so that this information is usable during configure() calls
36
- * to skip some features on older devices that might cause
37
- * timeouts and other issues.
38
- */
39
- if (type === 'deviceInterview') { // WARN: also reading on deviceAnnounce hits a timeout!
40
- try {
41
- const data = await device.endpoints[0].read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'],
42
- manufacturerOptions);
43
-
44
- if (data.hasOwnProperty('develcoPrimarySwVersion')) {
45
- device.softwareBuildID = data.develcoPrimarySwVersion.join('.');
46
- }
38
+ if (data.hasOwnProperty('develcoPrimarySwVersion')) {
39
+ device.softwareBuildID = data.develcoPrimarySwVersion.join('.');
40
+ }
47
41
 
48
- if (data.hasOwnProperty('develcoPrimaryHwVersion')) {
49
- device.hardwareVersion = data.develcoPrimaryHwVersion.join('.');
42
+ if (data.hasOwnProperty('develcoPrimaryHwVersion')) {
43
+ device.hardwareVersion = data.develcoPrimaryHwVersion.join('.');
44
+ }
45
+ } catch (error) {/* catch timeouts of sleeping devices */}
46
+ break;
47
+ }
50
48
  }
51
- } catch (error) {/* catch timeouts of sleeping devices */}
52
- }
53
- };
54
-
55
- // develco specific convertors
56
- const develco = {
49
+ },
50
+ },
57
51
  fz: {
58
52
  // SPLZB-134 and SPLZB-131 reports strange values sometimes
59
53
  // https://github.com/Koenkk/zigbee2mqtt/issues/13329
@@ -406,11 +400,11 @@ module.exports = [
406
400
  await reporting.instantaneousDemand(endpoint);
407
401
  await reporting.currentSummDelivered(endpoint);
408
402
  await reporting.currentSummReceived(endpoint);
403
+ await develco.configure.read_sw_hw_version(device, logger);
409
404
  },
410
405
  exposes: [e.power(), e.energy(), e.current(), e.voltage(), e.current_phase_b(), e.voltage_phase_b(), e.current_phase_c(),
411
406
  e.voltage_phase_c()],
412
407
  onEvent: async (type, data, device) => {
413
- fwOnEvent(type, data, device);
414
408
  if (type === 'message' && data.type === 'attributeReport' && data.cluster === 'seMetering' && data.data['divisor']) {
415
409
  // Device sends wrong divisior (512) while it should be fixed to 1000
416
410
  // https://github.com/Koenkk/zigbee-herdsman-converters/issues/3066
@@ -427,7 +421,6 @@ module.exports = [
427
421
  fz.ias_enroll, fz.ias_wd, develco.fz.fault_status],
428
422
  toZigbee: [tz.warning, tz.ias_max_duration, tz.warning_simple],
429
423
  ota: ota.zigbeeOTA,
430
- onEvent: fwOnEvent,
431
424
  meta: {battery: {voltageToPercentage: '3V_2500'}},
432
425
  configure: async (device, coordinatorEndpoint, logger) => {
433
426
  const endpoint = device.getEndpoint(35);
@@ -441,6 +434,8 @@ module.exports = [
441
434
  const endpoint2 = device.getEndpoint(38);
442
435
  await reporting.bind(endpoint2, coordinatorEndpoint, ['msTemperatureMeasurement']);
443
436
  await reporting.temperature(endpoint2, {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 10});
437
+
438
+ await develco.configure.read_sw_hw_version(device, logger);
444
439
  },
445
440
  endpoint: (device) => {
446
441
  return {default: 35};
@@ -461,7 +456,6 @@ module.exports = [
461
456
  fz.ias_enroll, fz.ias_wd, develco.fz.fault_status],
462
457
  toZigbee: [tz.warning, tz.ias_max_duration, tz.warning_simple],
463
458
  meta: {battery: {voltageToPercentage: '3V_2500'}},
464
- onEvent: fwOnEvent,
465
459
  configure: async (device, coordinatorEndpoint, logger) => {
466
460
  const endpoint = device.getEndpoint(35);
467
461
 
@@ -474,6 +468,8 @@ module.exports = [
474
468
  const endpoint2 = device.getEndpoint(38);
475
469
  await reporting.bind(endpoint2, coordinatorEndpoint, ['msTemperatureMeasurement']);
476
470
  await reporting.temperature(endpoint2, {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 10});
471
+
472
+ await develco.configure.read_sw_hw_version(device, logger);
477
473
  },
478
474
  endpoint: (device) => {
479
475
  return {default: 35};
@@ -501,6 +497,8 @@ module.exports = [
501
497
  await reporting.bind(endpoint38, coordinatorEndpoint, ['msTemperatureMeasurement']);
502
498
  await reporting.batteryVoltage(endpoint35);
503
499
  await reporting.temperature(endpoint38);
500
+
501
+ await develco.configure.read_sw_hw_version(device, logger);
504
502
  },
505
503
  },
506
504
  {
@@ -531,7 +529,6 @@ module.exports = [
531
529
  develco.fz.led_control, develco.fz.ias_occupancy_timeout,
532
530
  ],
533
531
  toZigbee: [develco.tz.led_control, develco.tz.ias_occupancy_timeout],
534
- onEvent: fwOnEvent,
535
532
  exposes: (device, options) => {
536
533
  const dynExposes = [];
537
534
  dynExposes.push(e.occupancy());
@@ -571,6 +568,7 @@ module.exports = [
571
568
  await reporting.batteryVoltage(endpoint35, {min: constants.repInterval.HOUR, max: 43200, change: 100});
572
569
 
573
570
  // zigbee2mqtt#14277 some features are not available on older firmwares
571
+ await develco.configure.read_sw_hw_version(device, logger);
574
572
  if (device && device.softwareBuildID && device.softwareBuildID.split('.')[0] >= 3) {
575
573
  await endpoint35.read('ssIasZone', ['develcoAlarmOffDelay'], manufacturerOptions);
576
574
  }
@@ -694,6 +692,8 @@ module.exports = [
694
692
  await reporting.temperature(endpoint, {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 10});
695
693
  await reporting.humidity(endpoint, {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 300});
696
694
  await reporting.batteryVoltage(endpoint, {min: constants.repInterval.HOUR, max: 43200, change: 100});
695
+
696
+ await develco.configure.read_sw_hw_version(device, logger);
697
697
  },
698
698
  },
699
699
  {
@@ -703,7 +703,6 @@ module.exports = [
703
703
  description: 'Customizable siren',
704
704
  fromZigbee: [fz.temperature, fz.battery, fz.ias_enroll, fz.ias_wd, fz.ias_siren],
705
705
  toZigbee: [tz.warning, tz.warning_simple, tz.ias_max_duration, tz.squawk],
706
- onEvent: fwOnEvent,
707
706
  meta: {battery: {voltageToPercentage: '3V_2500'}},
708
707
  configure: async (device, coordinatorEndpoint, logger) => {
709
708
  const endpoint = device.getEndpoint(43);
@@ -714,6 +713,8 @@ module.exports = [
714
713
 
715
714
  const endpoint2 = device.getEndpoint(1);
716
715
  await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
716
+
717
+ await develco.configure.read_sw_hw_version(device, logger);
717
718
  },
718
719
  endpoint: (device) => {
719
720
  return {default: 43};
@@ -769,7 +770,6 @@ module.exports = [
769
770
  description: 'IO module',
770
771
  fromZigbee: [fz.on_off, develco.fz.input],
771
772
  toZigbee: [tz.on_off, develco.tz.input],
772
- onEvent: fwOnEvent,
773
773
  meta: {multiEndpoint: true},
774
774
  exposes: [
775
775
  exposes.binary('input', ea.STATE_GET, true, false).withEndpoint('l1').withDescription('State of input 1'),
@@ -803,6 +803,8 @@ module.exports = [
803
803
  const ep7 = device.getEndpoint(117);
804
804
  await reporting.bind(ep7, coordinatorEndpoint, ['genOnOff']);
805
805
  await reporting.onOff(ep7);
806
+
807
+ await develco.configure.read_sw_hw_version(device, logger);
806
808
  },
807
809
 
808
810
  endpoint: (device) => {
@@ -20,7 +20,7 @@ module.exports = [
20
20
  model: '10011723',
21
21
  vendor: 'HORNBACH',
22
22
  description: 'FLAIR Viyu Smart LED bulb CCT E27',
23
- extend: extend.light_onoff_brightness_colortemp(),
23
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
24
24
  },
25
25
  {
26
26
  zigbeeModel: ['VIYU-C35-470-CCT-10011722'],
package/devices/immax.js CHANGED
@@ -23,7 +23,7 @@ module.exports = [
23
23
  model: '07089L',
24
24
  vendor: 'Immax',
25
25
  description: 'NEO SMART LED E27 5W',
26
- extend: extend.light_onoff_brightness_colortemp(),
26
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
27
27
  },
28
28
  {
29
29
  zigbeeModel: ['E27-filament-Dim-ZB3.0'],
@@ -247,7 +247,6 @@ module.exports = [
247
247
  vendor: 'Perenio',
248
248
  description: 'Flood alarm device',
249
249
  fromZigbee: [fz.ias_water_leak_alarm_1, fz.ignore_basic_report, fz.battery],
250
- meta: {battery: {dontDividePercentage: true}},
251
250
  toZigbee: [],
252
251
  configure: async (device, coordinatorEndpoint, logger) => {
253
252
  const endpoint = device.getEndpoint(1);
@@ -537,6 +537,40 @@ module.exports = [
537
537
  }]);
538
538
  },
539
539
  },
540
+ {
541
+ zigbeeModel: ['PMM-300Z3'],
542
+ model: 'PMM-300Z3',
543
+ vendor: 'ShinaSystem',
544
+ description: 'SiHAS 3phase energy monitor',
545
+ fromZigbee: [fz.electrical_measurement, fz.metering, fz.temperature],
546
+ toZigbee: [tz.metering_power, tz.currentsummdelivered, tz.frequency, tz.powerfactor, tz.acvoltage, tz.accurrent, tz.temperature],
547
+ exposes: [e.power().withAccess(ea.STATE_GET), e.energy().withAccess(ea.STATE_GET),
548
+ e.current().withAccess(ea.STATE_GET), e.voltage().withAccess(ea.STATE_GET),
549
+ e.temperature().withAccess(ea.STATE_GET).withDescription('temperature of device internal mcu'),
550
+ exposes.numeric('power_factor', ea.STATE_GET).withDescription('Measured electrical power factor'),
551
+ exposes.numeric('ac_frequency', ea.STATE_GET).withUnit('Hz').withDescription('Measured electrical ac frequency')],
552
+ configure: async (device, coordinatorEndpoint, logger) => {
553
+ const endpoint = device.getEndpoint(1);
554
+ await reporting.bind(endpoint, coordinatorEndpoint, ['haElectricalMeasurement', 'seMetering', 'msTemperatureMeasurement']);
555
+ await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor', 'acCurrentMultiplier',
556
+ 'acCurrentDivisor']);
557
+ await endpoint.read('seMetering', ['multiplier', 'divisor']);
558
+ // await reporting.activePower(endpoint, {min: 1, max: 600, change: 5}); // no need, duplicate for power value.
559
+ await reporting.instantaneousDemand(endpoint, {min: 1, max: 600, change: 5});
560
+ await reporting.powerFactor(endpoint, {min: 10, max: 600, change: 1});
561
+ await reporting.rmsVoltage(endpoint, {min: 5, max: 600, change: 1});
562
+ await reporting.rmsCurrent(endpoint, {min: 5, max: 600, change: 1});
563
+ await reporting.currentSummDelivered(endpoint, {min: 1, max: 600, change: 5});
564
+ await reporting.temperature(endpoint, {min: 20, max: 300, change: 10});
565
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acFrequencyMultiplier: 1, acFrequencyDivisor: 10});
566
+ await endpoint.configureReporting('haElectricalMeasurement', [{
567
+ attribute: 'acFrequency',
568
+ minimumReportInterval: 10,
569
+ maximumReportInterval: 600,
570
+ reportableChange: 3,
571
+ }]);
572
+ },
573
+ },
540
574
  {
541
575
  zigbeeModel: ['DLM-300Z'],
542
576
  model: 'DLM-300Z',
package/devices/tuya.js CHANGED
@@ -22,7 +22,7 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
22
22
  '_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
23
23
  '_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx',
24
24
  '_TZ3000_aim0ztek', '_TZ3000_mlswgkc3', '_TZ3000_7dndcnnb', '_TZ3000_waho4jtj', '_TZ3000_nmsciidq', '_TZ3000_jtgxgmks',
25
- '_TZ3000_rdfh8cfs', '_TZ3000_yujkchbz'];
25
+ '_TZ3000_rdfh8cfs', '_TZ3000_yujkchbz', '_TZ3000_fgwhjm9j'];
26
26
 
27
27
  const tzLocal = {
28
28
  SA12IZL_silence_siren: {
@@ -2989,7 +2989,9 @@ module.exports = [
2989
2989
  exposes: [e.battery(), e.vibration(), exposes.enum('sensitivity', exposes.access.STATE_SET, ['low', 'medium', 'high'])],
2990
2990
  },
2991
2991
  {
2992
- fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_8bxrzyxz'}, {modelID: 'TS011F', manufacturerName: '_TZ3000_ky0fq4ho'}],
2992
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_8bxrzyxz'},
2993
+ {modelID: 'TS011F', manufacturerName: '_TZ3000_ky0fq4ho'},
2994
+ {modelID: 'TS011F', manufacturerName: '_TZ3000_qeuvnohg'}],
2993
2995
  model: 'TS011F_din_smart_relay',
2994
2996
  description: 'Din smart relay (with power monitoring)',
2995
2997
  vendor: 'TuYa',
@@ -235,7 +235,7 @@ module.exports = [
235
235
  },
236
236
  },
237
237
  {
238
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_9mahtqtg'}],
238
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_9mahtqtg'}, {modelID: 'TS0601', manufacturerName: '_TZE200_r731zlxk'}],
239
239
  model: 'TB26-6',
240
240
  vendor: 'Zemismart',
241
241
  description: '6-gang smart wall switch',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.647",
3
+ "version": "14.0.648",
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": "^2.2.0",
41
- "zigbee-herdsman": "^0.14.64"
41
+ "zigbee-herdsman": "^0.14.66"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",