zigbee-herdsman-converters 14.0.643 → 14.0.645

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.
@@ -59,6 +59,13 @@ module.exports = [
59
59
  description: 'ERIA E14 Candle Color',
60
60
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
61
61
  },
62
+ {
63
+ zigbeeModel: ['AD-DimmableLight3001'],
64
+ model: '81810',
65
+ vendor: 'AduroSmart',
66
+ description: 'Zigbee Aduro Eria B22 bulb - warm white',
67
+ extend: extend.light_onoff_brightness(),
68
+ },
62
69
  {
63
70
  zigbeeModel: ['Adurolight_NCC'],
64
71
  model: '81825',
package/devices/awox.js CHANGED
@@ -159,6 +159,7 @@ module.exports = [
159
159
  whiteLabel: [{vendor: 'EGLO', model: '12239'}],
160
160
  },
161
161
  {
162
+ zigbeeModel: ['EGLO_ZM_TW'],
162
163
  fingerprint: [
163
164
  {
164
165
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
@@ -91,14 +91,14 @@ const develco = {
91
91
  type: ['attributeReport', 'readResponse'],
92
92
  convert: (model, msg, publish, options, meta) => {
93
93
  const result = {};
94
- if (0x8000 in msg.data) {
95
- const firmware = msg.data[0x8000].join('.');
94
+ if (msg.data.hasOwnProperty('develcoPrimarySwVersion')) {
95
+ const firmware = msg.data.develcoPrimarySwVersion.join('.');
96
96
  result.current_firmware = firmware;
97
97
  meta.device.softwareBuildID = firmware;
98
98
  }
99
99
 
100
- if (0x8020 in msg.data) {
101
- meta.device.hardwareVersion = msg.data[0x8020].join('.');
100
+ if (msg.data.hasOwnProperty('develcoPrimaryHwVersion')) {
101
+ meta.device.hardwareVersion = msg.data.develcoPrimaryHwVersion.join('.');
102
102
  }
103
103
 
104
104
  return result;
@@ -218,7 +218,7 @@ const develco = {
218
218
  key: ['interface_mode'],
219
219
  convertSet: async (entity, key, value, meta) => {
220
220
  const payload = {'develcoInterfaceMode': utils.getKey(constants.develcoInterfaceMode, value, undefined, Number)};
221
- await entity.write('seMetering', payload, manufacturerOptions.develco);
221
+ await entity.write('seMetering', payload, manufacturerOptions);
222
222
  return {readAfterWriteTime: 200, state: {'interface_mode': value}};
223
223
  },
224
224
  convertGet: async (entity, key, meta) => {
@@ -379,7 +379,7 @@ module.exports = [
379
379
  ota: ota.zigbeeOTA,
380
380
  configure: async (device, coordinatorEndpoint, logger) => {
381
381
  const endpoint = device.getEndpoint(2);
382
- await endpoint.read('genBasic', [0x8000, 0x8010, 0x8020], manufacturerOptions);
382
+ await endpoint.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'], manufacturerOptions);
383
383
  await reporting.bind(endpoint, coordinatorEndpoint, ['haElectricalMeasurement', 'seMetering']);
384
384
 
385
385
  try {
@@ -424,7 +424,7 @@ module.exports = [
424
424
 
425
425
  await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'ssIasZone', 'ssIasWd', 'genBasic', 'genBinaryInput']);
426
426
  await reporting.batteryVoltage(endpoint);
427
- await endpoint.read('genBasic', [0x8000, 0x8010, 0x8020], manufacturerOptions);
427
+ await endpoint.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'], manufacturerOptions);
428
428
  await endpoint.read('ssIasZone', ['iasCieAddr', 'zoneState', 'zoneId']);
429
429
  await endpoint.read('genBinaryInput', ['reliability', 'statusFlags']);
430
430
  await endpoint.read('ssIasWd', ['maxDuration']);
@@ -457,7 +457,7 @@ module.exports = [
457
457
 
458
458
  await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'ssIasZone', 'ssIasWd', 'genBasic', 'genBinaryInput']);
459
459
  await reporting.batteryVoltage(endpoint);
460
- await endpoint.read('genBasic', [0x8000], manufacturerOptions);
460
+ await endpoint.read('genBasic', ['develcoPrimarySwVersion'], manufacturerOptions);
461
461
  await endpoint.read('ssIasZone', ['iasCieAddr', 'zoneState', 'zoneId']);
462
462
  await endpoint.read('genBinaryInput', ['reliability', 'statusFlags']);
463
463
  await endpoint.read('ssIasWd', ['maxDuration']);
@@ -519,7 +519,7 @@ module.exports = [
519
519
  description: 'Motion sensor',
520
520
  fromZigbee: [
521
521
  fz.temperature, fz.illuminance, fz.ias_occupancy_alarm_1, fz.battery,
522
- develco.fz.led_control, develco.fz.ias_occupancy_timeout,
522
+ develco.fz.led_control, develco.fz.ias_occupancy_timeout, develco.fz.firmware_version,
523
523
  ],
524
524
  toZigbee: [develco.tz.led_control, develco.tz.ias_occupancy_timeout],
525
525
  exposes: [
@@ -538,6 +538,7 @@ module.exports = [
538
538
  await reporting.bind(endpoint35, coordinatorEndpoint, ['genPowerCfg']);
539
539
  await reporting.batteryVoltage(endpoint35, {min: constants.repInterval.HOUR, max: 43200, change: 100});
540
540
  try {
541
+ await endpoint35.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'], manufacturerOptions);
541
542
  await endpoint35.read('ssIasZone', ['develcoAlarmOffDelay'], manufacturerOptions);
542
543
  await endpoint35.read('genBasic', ['develcoLedControl'], manufacturerOptions);
543
544
  } catch (error) {/* some reports of timeouts on reading these */}
@@ -682,7 +683,7 @@ module.exports = [
682
683
  const endpoint = device.getEndpoint(43);
683
684
  await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'ssIasZone', 'ssIasWd', 'genBasic']);
684
685
  await reporting.batteryVoltage(endpoint);
685
- await endpoint.read('genBasic', [0x8000], manufacturerOptions);
686
+ await endpoint.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'], manufacturerOptions);
686
687
  await endpoint.read('ssIasZone', ['iasCieAddr', 'zoneState', 'zoneId']);
687
688
  await endpoint.read('ssIasWd', ['maxDuration']);
688
689
 
@@ -758,7 +759,7 @@ module.exports = [
758
759
  const ep2 = device.getEndpoint(112);
759
760
  await reporting.bind(ep2, coordinatorEndpoint, ['genBinaryInput', 'genBasic']);
760
761
  await reporting.presentValue(ep2, {min: 0});
761
- await ep2.read('genBasic', [0x8000, 0x8010, 0x8020], options);
762
+ await ep2.read('genBasic', ['develcoPrimarySwVersion', 'develcoPrimaryHwVersion'], options);
762
763
 
763
764
  const ep3 = device.getEndpoint(113);
764
765
  await reporting.bind(ep3, coordinatorEndpoint, ['genBinaryInput']);
package/devices/fantem.js CHANGED
@@ -9,10 +9,11 @@ const tuya = require('../lib/tuya');
9
9
 
10
10
  module.exports = [
11
11
  {
12
- fingerprint: [{modelID: 'TS110F', manufacturerName: '_TZ3210_lfbz816s'}],
12
+ fingerprint: [{modelID: 'TS110F', manufacturerName: '_TZ3210_lfbz816s'},
13
+ {modelID: 'TS110F', manufacturerName: '_TZ3210_ebbfkvoy'}],
13
14
  model: 'ZB006-X',
14
15
  vendor: 'Fantem',
15
- description: 'Smart dimmer module without neutral',
16
+ description: 'Smart dimmer module',
16
17
  extend: extend.light_onoff_brightness({noConfigure: true}),
17
18
  fromZigbee: [...extend.light_onoff_brightness({noConfigure: true}).fromZigbee,
18
19
  fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.ZB006X_settings],
package/devices/heiman.js CHANGED
@@ -11,7 +11,7 @@ const tuya = require('../lib/tuya');
11
11
  module.exports = [
12
12
  {
13
13
  fingerprint: [{modelID: 'TS0212', manufacturerName: '_TYZB01_wpmo3ja3'}],
14
- zigbeeModel: ['CO_V15', 'CO_YDLV10', 'CO_V16', '1ccaa94c49a84abaa9e38687913947ba'],
14
+ zigbeeModel: ['CO_V15', 'CO_YDLV10', 'CO_V16', '1ccaa94c49a84abaa9e38687913947ba', 'CO_CTPG'],
15
15
  model: 'HS1CA-M',
16
16
  description: 'Smart carbon monoxide sensor',
17
17
  vendor: 'HEIMAN',
@@ -104,7 +104,7 @@ module.exports = [
104
104
  model: 'HS3CG',
105
105
  vendor: 'HEIMAN',
106
106
  description: 'Combustible gas sensor',
107
- fromZigbee: [fz.ias_gas_alarm_1],
107
+ fromZigbee: [fz.ias_gas_alarm_2],
108
108
  toZigbee: [],
109
109
  exposes: [e.gas(), e.battery_low(), e.tamper()],
110
110
  },
@@ -177,19 +177,19 @@ const ATTRIBUTES = {
177
177
  ID: 13,
178
178
  dataType: UINT8,
179
179
  min: 0,
180
- max: 100,
180
+ max: 255,
181
181
  description:
182
182
  'Default level for the dimmer when it is turned on at the switch.' +
183
- ' A setting of 0 means that the switch will return to the level that it was on before it was turned off.',
183
+ ' A setting of 255 means that the switch will return to the level that it was on before it was turned off.',
184
184
  },
185
185
  defaultLevelRemote: {
186
186
  ID: 14,
187
187
  dataType: UINT8,
188
188
  min: 0,
189
- max: 100,
189
+ max: 255,
190
190
  description:
191
191
  'Default level for the dimmer when it is turned on from the hub.' +
192
- ' A setting of 0 means that the switch will return to the level that it was on before it was turned off.',
192
+ ' A setting of 255 means that the switch will return to the level that it was on before it was turned off.',
193
193
  },
194
194
  stateAfterPowerRestored: {
195
195
  ID: 15,
@@ -197,7 +197,7 @@ const ATTRIBUTES = {
197
197
  min: 0,
198
198
  max: 255,
199
199
  description:
200
- 'The state the switch should return to when power is restored after power failure. 0 = off, 1-100 = level, 101 = previous.',
200
+ 'The state the switch should return to when power is restored after power failure. 0 = off, 1-254 = level, 255 = previous.',
201
201
  },
202
202
  loadLevelIndicatorTimeout: {
203
203
  ID: 17,
@@ -225,12 +225,11 @@ const ATTRIBUTES = {
225
225
  },
226
226
  activePowerReports: {
227
227
  ID: 18,
228
- dataType: UINT16,
228
+ dataType: UINT8,
229
229
  min: 0,
230
- max: 32767,
230
+ max: 100,
231
231
  description:
232
- 'Power level change that will result in a new power report being sent. The value is a percentage of the previous report.' +
233
- '0 = disabled, 1-32767 = 0.1W-3276.7W.',
232
+ 'Percent power level change that will result in a new power report being sent. 0 = Disabled',
234
233
  },
235
234
  periodicPowerAndEnergyReports: {
236
235
  ID: 19,
@@ -256,6 +255,7 @@ const ATTRIBUTES = {
256
255
  values: {'Non Neutral': 0, 'Neutral': 1},
257
256
  min: 0,
258
257
  max: 1,
258
+ readOnly: true,
259
259
  description: 'Set the power type for the device.',
260
260
  },
261
261
  switchType: {
@@ -267,11 +267,13 @@ const ATTRIBUTES = {
267
267
  max: 2,
268
268
  description: 'Set the switch configuration.',
269
269
  },
270
- physicalOnOffDelay: {
270
+ buttonDelay: {
271
271
  ID: 50,
272
272
  dataType: UINT8,
273
273
  values: {
274
274
  '0ms': 0,
275
+ '100ms': 1,
276
+ '200ms': 2,
275
277
  '300ms': 3,
276
278
  '400ms': 4,
277
279
  '500ms': 5,
@@ -285,7 +287,7 @@ const ATTRIBUTES = {
285
287
  max: 9,
286
288
  description:
287
289
  'This will set the button press delay. 0 = no delay (Disables Button Press Events),' +
288
- ' 1 = 100ms, 2 = 200ms, 3 = 300ms, etc. up to 900ms. Default = 500ms.',
290
+ 'Default = 500ms.',
289
291
  },
290
292
  smartBulbMode: {
291
293
  ID: 52,
@@ -610,7 +612,7 @@ const ATTRIBUTES = {
610
612
  description:
611
613
  'Intesity of LED strip when off. 101 = Syncronized with default all LED strip intensity parameter.',
612
614
  },
613
- doubleTapUpEvent: {
615
+ doubleTapUpForFullBrightness: {
614
616
  ID: 53,
615
617
  dataType: BOOLEAN,
616
618
  min: 0,
@@ -620,6 +622,16 @@ const ATTRIBUTES = {
620
622
  'Button Press Event Only': 0,
621
623
  'Button Press Event + Set Load to 100%': 1,
622
624
  },
625
+ displayType: 'enum',
626
+ },
627
+ relayClick: {
628
+ ID: 261,
629
+ dataType: BOOLEAN,
630
+ min: 0,
631
+ max: 1,
632
+ description: 'Audible Click in On/Off mode.',
633
+ values: {'Enabled (Default)': 1, 'Disabled': 0},
634
+ displayType: 'enum',
623
635
  },
624
636
  };
625
637
 
@@ -644,11 +656,12 @@ tzLocal.inovelli_vzw31sn_parameters = {
644
656
  manufacturerCode: INOVELLI,
645
657
  });
646
658
 
647
- meta.state[key] = value;
648
-
649
659
  return {
650
660
  state: {
651
- [key]: value,
661
+ [key]:
662
+ ATTRIBUTES[key].displayType === 'enum' ?
663
+ ATTRIBUTES[key].values[value] :
664
+ value,
652
665
  },
653
666
  };
654
667
  },
@@ -700,7 +713,7 @@ tzLocal.inovelli_vzw31sn_parameters_readOnly = {
700
713
  };
701
714
 
702
715
  tzLocal.inovelli_led_effect = {
703
- key: ['ledEffect'],
716
+ key: ['led_effect'],
704
717
  convertSet: async (entity, key, values, meta) => {
705
718
  await entity.command(
706
719
  'manuSpecificInovelliVZM31SN',
@@ -718,7 +731,7 @@ tzLocal.inovelli_led_effect = {
718
731
  };
719
732
 
720
733
  tzLocal.inovelli_individual_led_effect = {
721
- key: ['individualLedEffect'],
734
+ key: ['individual_led_effect'],
722
735
  convertSet: async (entity, key, values, meta) => {
723
736
  await entity.command(
724
737
  'manuSpecificInovelliVZM31SN',
@@ -807,7 +820,6 @@ const inovelliOnOffConvertSet = async (entity, key, value, meta) => {
807
820
  */
808
821
  tzLocal.light_onoff_brightness_inovelli = {
809
822
  key: ['state', 'brightness', 'brightness_percent'],
810
- // options: [exposes.options.transition()], this is a setting on the device
811
823
  convertSet: async (entity, key, value, meta) => {
812
824
  const {message} = meta;
813
825
  const transition = utils.getTransition(entity, 'brightness', meta);
@@ -1146,7 +1158,7 @@ Object.keys(ATTRIBUTES).forEach((key) => {
1146
1158
  const enumE = exposes
1147
1159
  .enum(
1148
1160
  key,
1149
- ATTRIBUTES[key].readOnly ? ea.GET : ea.ALL,
1161
+ ATTRIBUTES[key].readOnly ? ea.STATE_GET : ea.ALL,
1150
1162
  Object.keys(ATTRIBUTES[key].values),
1151
1163
  )
1152
1164
  .withDescription(ATTRIBUTES[key].description);
@@ -1159,7 +1171,7 @@ Object.keys(ATTRIBUTES).forEach((key) => {
1159
1171
  exposes
1160
1172
  .binary(
1161
1173
  key,
1162
- ATTRIBUTES[key].readOnly ? ea.GET : ea.ALL,
1174
+ ATTRIBUTES[key].readOnly ? ea.STATE_GET : ea.ALL,
1163
1175
  ATTRIBUTES[key].values.Enabled,
1164
1176
  ATTRIBUTES[key].values.Disabled,
1165
1177
  )
@@ -1167,7 +1179,7 @@ Object.keys(ATTRIBUTES).forEach((key) => {
1167
1179
  );
1168
1180
  } else {
1169
1181
  const numeric = exposes
1170
- .numeric(key, ATTRIBUTES[key].readOnly ? ea.GET : ea.ALL)
1182
+ .numeric(key, ATTRIBUTES[key].readOnly ? ea.STATE_GET : ea.ALL)
1171
1183
  .withValueMin(ATTRIBUTES[key].min)
1172
1184
  .withValueMax(ATTRIBUTES[key].max);
1173
1185
 
@@ -1206,20 +1218,26 @@ module.exports = [
1206
1218
  configure: async (device, coordinatorEndpoint, logger) => {
1207
1219
  const endpoint = device.getEndpoint(1);
1208
1220
  await reporting.bind(endpoint, coordinatorEndpoint, [
1209
- 'genOnOff',
1210
- 'genLevelCtrl',
1221
+ 'seMetering',
1222
+ 'haElectricalMeasurement',
1211
1223
  ]);
1212
-
1213
1224
  // Bind for Button Event Reporting
1214
1225
  const endpoint2 = device.getEndpoint(2);
1215
1226
  await reporting.bind(endpoint2, coordinatorEndpoint, [
1216
1227
  'manuSpecificInovelliVZM31SN',
1217
1228
  ]);
1229
+ await endpoint.read('haElectricalMeasurement', [
1230
+ 'acPowerMultiplier',
1231
+ 'acPowerDivisor',
1232
+ ]);
1233
+ await reporting.readMeteringMultiplierDivisor(endpoint);
1218
1234
 
1219
- await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
1220
- await reporting.readMeteringMultiplierDivisors(endpoint);
1221
- await reporting.activePower(endpoint);
1222
- await reporting.currentSummDelivered(endpoint);
1235
+ await reporting.activePower(endpoint, {min: 1, max: 3600, change: 1});
1236
+ await reporting.currentSummDelivered(endpoint, {
1237
+ min: 1,
1238
+ max: 3600,
1239
+ change: 0,
1240
+ });
1223
1241
  },
1224
1242
  },
1225
1243
  ];
package/devices/lidl.js CHANGED
@@ -716,7 +716,8 @@ module.exports = [
716
716
  },
717
717
  },
718
718
  {
719
- fingerprint: [{modelID: 'TS0502A', manufacturerName: '_TZ3000_rylaozuc'}],
719
+ fingerprint: [{modelID: 'TS0502A', manufacturerName: '_TZ3000_rylaozuc'},
720
+ {modelID: 'TS0502A', manufacturerName: '_TZ3000_5fkufhn1'}],
720
721
  model: '14147206L',
721
722
  vendor: 'Lidl',
722
723
  description: 'Livarno Lux ceiling light',
@@ -260,7 +260,7 @@ module.exports = [
260
260
  extend: extend.light_onoff_brightness(),
261
261
  },
262
262
  {
263
- fingerprint: [{modelID: 'TS110E', manufacturerName: '_TZ3210_wdexaypg'}],
263
+ fingerprint: [{modelID: 'TS110E', manufacturerName: '_TZ3210_wdexaypg'}, {modelID: 'TS110E', manufacturerName: '_TZ3210_3mpwqzuu'}],
264
264
  model: 'TS110E_2gang',
265
265
  vendor: 'Lonsonho',
266
266
  description: 'Zigbee smart dimmer module 2 gang with neutral',
@@ -81,7 +81,7 @@ module.exports = [
81
81
  },
82
82
  {
83
83
  fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3210_pfbzs1an'}],
84
- model: 'SPUSB02',
84
+ model: 'SPPUSB02',
85
85
  vendor: 'Mercator',
86
86
  description: 'Ikuü double power point with USB',
87
87
  fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
package/devices/moes.js CHANGED
@@ -8,78 +8,10 @@ const extend = require('../lib/extend');
8
8
  const e = exposes.presets;
9
9
  const ea = exposes.access;
10
10
  const zosung = require('../lib/zosung');
11
- const utils = require('../lib/utils');
12
11
  const fzZosung = zosung.fzZosung;
13
12
  const tzZosung = zosung.tzZosung;
14
13
  const ez = zosung.presetsZosung;
15
14
 
16
- const fzLocal = {
17
- ZSEUD: {
18
- cluster: 'manuSpecificTuya',
19
- type: ['commandDataResponse', 'commandDataReport'],
20
- convert: async (model, msg, publish, options, meta) => {
21
- const result = {};
22
- for (const dpValue of msg.data.dpValues) {
23
- const dp = dpValue.dp;
24
- const value = tuya.getDataValue(dpValue);
25
- switch (dp) {
26
- case 1:
27
- result.state_l1 = value ? 'ON' : 'OFF';
28
- break;
29
- case 2:
30
- result.brightness_l1 = utils.mapNumberRange(value, 0, 1000, 0, 254);
31
- break;
32
- case 7:
33
- result.state_l2 = value ? 'ON' : 'OFF';
34
- break;
35
- case 8:
36
- result.brightness_l2 = utils.mapNumberRange(value, 0, 1000, 0, 254);
37
- break;
38
- default:
39
- meta.logger.warn(`zigbee-herdsman-converters:ZSEUD: NOT RECOGNIZED DP #${dp} with data ${JSON.stringify(dpValue)}`);
40
- }
41
- }
42
- return result;
43
- },
44
- },
45
- };
46
-
47
- const tzLocal = {
48
- ZSEUD_state: {
49
- key: ['state'],
50
- convertSet: async (entity, key, value, meta) => {
51
- const lookup = {l1: 1, l2: 7};
52
- const dp = lookup[meta.endpoint_name];
53
- await tuya.sendDataPointBool(entity, dp, value === 'ON');
54
- },
55
- },
56
- ZSEUD_brightness: {
57
- key: ['brightness'],
58
- convertSet: async (entity, key, value, meta) => {
59
- const lookup = {l1: 2, l2: 8};
60
- const dp = lookup[meta.endpoint_name];
61
-
62
- if (key == 'brightness') {
63
- // upscale to 1000
64
- if (value >= 0 && value <= 254) {
65
- const newValue = utils.mapNumberRange(value, 0, 254, 0, 1000);
66
- // Always use same transid as tuya_dimmer_state (https://github.com/Koenkk/zigbee2mqtt/issues/6366)
67
- if (meta.state[`state_${meta.endpoint_name}`] === 'ON') {
68
- await tuya.sendDataPointValue(entity, dp, newValue, 'dataRequest', 1);
69
- } else {
70
- await tuya.sendDataPoints(entity, [tuya.dpValueFromBool(dp-1, true), tuya.dpValueFromIntValue(dp, newValue)],
71
- 'dataRequest', 1);
72
- }
73
- } else {
74
- throw new Error('Dimmer brightness is out of range 0..254');
75
- }
76
- } else {
77
- meta.logger.warn(`ZSEUD TZ unsupported key=${key} value=${value}`);
78
- }
79
- },
80
- },
81
- };
82
-
83
15
  const exposesLocal = {
84
16
  hour: (name) => exposes.numeric(name, ea.STATE_SET).withUnit('h').withValueMin(0).withValueMax(23),
85
17
  minute: (name) => exposes.numeric(name, ea.STATE_SET).withUnit('m').withValueMin(0).withValueMax(59),
@@ -369,7 +301,7 @@ module.exports = [
369
301
  exposes: [
370
302
  e.battery(), e.child_lock(), e.eco_mode(), e.eco_temperature(), e.max_temperature().withValueMax(45), e.min_temperature(),
371
303
  e.valve_state(), e.position(), e.window_detection(),
372
- exposes.binary('window', ea.STATE, 'CLOSED', 'OPEN').withDescription('Window status closed or open '),
304
+ exposes.binary('window', ea.STATE, 'OPEN', 'CLOSED').withDescription('Window status closed or open '),
373
305
  exposes.climate()
374
306
  .withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
375
307
  .withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET)
@@ -391,24 +323,6 @@ module.exports = [
391
323
  exposes.numeric('boost_heating_countdown_time_set', ea.STATE_SET).withUnit('second')
392
324
  .withDescription('Boost Time Setting 100 sec - 900 sec, (default = 300 sec)').withValueMin(100).withValueMax(900)],
393
325
  },
394
- {
395
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_fjjbhx9d'}],
396
- model: 'ZS-EUD',
397
- vendor: 'Moes',
398
- description: '2 gang light dimmer switch',
399
- fromZigbee: [fzLocal.ZSEUD, fz.ignore_basic_report],
400
- toZigbee: [tzLocal.ZSEUD_brightness, tzLocal.ZSEUD_state],
401
- meta: {turnsOffAtBrightness1: true, multiEndpoint: true},
402
- configure: async (device, coordinatorEndpoint, logger) => {
403
- await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
404
- if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
405
- },
406
- exposes: [e.light_brightness().withEndpoint('l1').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET),
407
- e.light_brightness().withEndpoint('l2').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET)],
408
- endpoint: (device) => {
409
- return {'l1': 1, 'l2': 1};
410
- },
411
- },
412
326
  {
413
327
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e3oitdyu'}],
414
328
  model: 'MS-105B',
@@ -2842,10 +2842,24 @@ module.exports = [
2842
2842
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
2843
2843
  },
2844
2844
  {
2845
- zigbeeModel: ['929003048301'],
2845
+ zigbeeModel: ['929003048301_01', '929003048301_02', '929003048301_03', '929003048301_04'],
2846
2846
  model: '8719514339163',
2847
2847
  vendor: 'Philips',
2848
2848
  description: 'Hue white ambiance Buckram quadruple spotlight with Bluetooth',
2849
2849
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
2850
2850
  },
2851
+ {
2852
+ zigbeeModel: ['929003048101_01', '929003048101_02', '929003048101_03'],
2853
+ model: '8719514339125',
2854
+ vendor: 'Philips',
2855
+ description: 'Hue white ambiance Buckram triple spotlight with Bluetooth',
2856
+ extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
2857
+ },
2858
+ {
2859
+ zigbeeModel: ['929003047901_01', '929003047901_02'],
2860
+ model: '871951433908',
2861
+ vendor: 'Philips',
2862
+ description: 'Hue white ambiance Buckram double spotlight with Bluetooth',
2863
+ extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
2864
+ },
2851
2865
  ];
package/devices/robb.js CHANGED
@@ -209,18 +209,22 @@ module.exports = [
209
209
  model: 'ROB_200-017-0',
210
210
  vendor: 'ROBB',
211
211
  description: 'Zigbee smart plug',
212
- fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering],
212
+ fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering, fz.temperature],
213
213
  toZigbee: [tz.on_off],
214
214
  configure: async (device, coordinatorEndpoint, logger) => {
215
215
  const endpoint = device.getEndpoint(1);
216
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
216
+ await reporting.bind(endpoint, coordinatorEndpoint,
217
+ ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'msTemperatureMeasurement']);
217
218
  await reporting.onOff(endpoint);
218
219
  await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
220
+ await reporting.readMeteringMultiplierDivisor(endpoint);
219
221
  await reporting.rmsVoltage(endpoint);
220
222
  await reporting.rmsCurrent(endpoint);
221
223
  await reporting.activePower(endpoint);
224
+ await reporting.temperature(endpoint);
225
+ await reporting.currentSummDelivered(endpoint);
222
226
  },
223
- exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy()],
227
+ exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy(), e.temperature()],
224
228
  },
225
229
  {
226
230
  zigbeeModel: ['ROB_200-017-1'],
@@ -120,4 +120,21 @@ module.exports = [
120
120
  },
121
121
  exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
122
122
  },
123
+ {
124
+ zigbeeModel: ['SZ-PIR04N', 'SZ-PIR04N_EU'],
125
+ model: 'SZ-PIR04N',
126
+ vendor: 'Sercomm',
127
+ description: 'PIR motion & temperature sensor',
128
+ fromZigbee: [fz.ias_occupancy_alarm_1, fz.illuminance, fz.temperature, fz.battery],
129
+ toZigbee: [],
130
+ meta: {battery: {voltageToPercent: '3V_2500_3200'}},
131
+ configure: async (device, coordinatorEndpoint, logger) => {
132
+ const endpoint = device.getEndpoint(1);
133
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msIlluminanceMeasurement', 'msTemperatureMeasurement', 'genPowerCfg']);
134
+ await reporting.illuminance(endpoint);
135
+ await reporting.temperature(endpoint);
136
+ await reporting.batteryVoltage(endpoint);
137
+ },
138
+ exposes: [e.occupancy(), e.tamper(), e.illuminance(), e.temperature(), e.battery(), e.battery_voltage()],
139
+ },
123
140
  ];
package/devices/tuya.js CHANGED
@@ -1172,7 +1172,7 @@ module.exports = [
1172
1172
  fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ip2akl4w', '_TZE200_1agwnems', '_TZE200_la2c2uo9', '_TZE200_579lguh2']),
1173
1173
  model: 'TS0601_dimmer_1',
1174
1174
  vendor: 'TuYa',
1175
- description: 'Zigbee smart dimmer',
1175
+ description: '1 gang smart dimmer',
1176
1176
  fromZigbee: [tuya.fzDataPoints],
1177
1177
  toZigbee: [tuya.tzDataPoints],
1178
1178
  configure: tuya.configureMagicPacket,
@@ -1192,6 +1192,60 @@ module.exports = [
1192
1192
  whiteLabel: [
1193
1193
  {vendor: 'Moes', model: 'MS-105Z'},
1194
1194
  {vendor: 'Lerlink', model: 'X706U'},
1195
+ {vendor: 'Moes', model: 'ZS-EUD_1gang'},
1196
+ ],
1197
+ },
1198
+ {
1199
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_fjjbhx9d']),
1200
+ model: 'TS0601_dimmer_2',
1201
+ vendor: 'TuYa',
1202
+ description: '2 gang smart dimmer',
1203
+ fromZigbee: [tuya.fzDataPoints],
1204
+ toZigbee: [tuya.tzDataPoints],
1205
+ configure: tuya.configureMagicPacket,
1206
+ exposes: [tuya.exposes.lightBrightness().withEndpoint('l1'), tuya.exposes.lightBrightness().withEndpoint('l2')],
1207
+ meta: {
1208
+ multiEndpoint: true,
1209
+ tuyaDatapoints: [
1210
+ [1, 'state_l1', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}],
1211
+ [2, 'brightness_l1', tuya.valueConverter.scale0_254to0_1000],
1212
+ [7, 'state_l2', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}],
1213
+ [8, 'brightness_l2', tuya.valueConverter.scale0_254to0_1000],
1214
+ ],
1215
+ },
1216
+ endpoint: (device) => {
1217
+ return {'l1': 1, 'l2': 1};
1218
+ },
1219
+ whiteLabel: [
1220
+ {vendor: 'Moes', model: 'ZS-EUD_2gang'},
1221
+ ],
1222
+ },
1223
+ {
1224
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_vm1gyrso']),
1225
+ model: 'TS0601_dimmer_3',
1226
+ vendor: 'TuYa',
1227
+ description: '3 gang smart dimmer',
1228
+ fromZigbee: [tuya.fzDataPoints],
1229
+ toZigbee: [tuya.tzDataPoints],
1230
+ configure: tuya.configureMagicPacket,
1231
+ exposes: [tuya.exposes.lightBrightness().withEndpoint('l1'), tuya.exposes.lightBrightness().withEndpoint('l2'),
1232
+ tuya.exposes.lightBrightness().withEndpoint('l3')],
1233
+ meta: {
1234
+ multiEndpoint: true,
1235
+ tuyaDatapoints: [
1236
+ [1, 'state_l1', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}],
1237
+ [2, 'brightness_l1', tuya.valueConverter.scale0_254to0_1000],
1238
+ [7, 'state_l2', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}],
1239
+ [8, 'brightness_l2', tuya.valueConverter.scale0_254to0_1000],
1240
+ [15, 'state_l3', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}],
1241
+ [16, 'brightness_l3', tuya.valueConverter.scale0_254to0_1000],
1242
+ ],
1243
+ },
1244
+ endpoint: (device) => {
1245
+ return {'l1': 1, 'l2': 1, 'l3': 1};
1246
+ },
1247
+ whiteLabel: [
1248
+ {vendor: 'Moes', model: 'ZS-EUD_3gang'},
1195
1249
  ],
1196
1250
  },
1197
1251
  {
@@ -1332,7 +1386,10 @@ module.exports = [
1332
1386
  },
1333
1387
  },
1334
1388
  {
1335
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nkjintbl'}],
1389
+ fingerprint: [
1390
+ {modelID: 'TS0601', manufacturerName: '_TZE200_nkjintbl'},
1391
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ji1gn7rw'},
1392
+ ],
1336
1393
  model: 'TS0601_switch_2_gang',
1337
1394
  vendor: 'TuYa',
1338
1395
  description: '2 gang switch',
@@ -1521,9 +1578,7 @@ module.exports = [
1521
1578
  },
1522
1579
  },
1523
1580
  {
1524
- fingerprint: [
1525
- {modelID: 'TS0201', manufacturerName: '_TZ3000_dowj6gyi'},
1526
- ],
1581
+ fingerprint: tuya.fingerprint('TS0201', ['_TZ3000_dowj6gyi', '_TZ3000_8ybe88nf']),
1527
1582
  model: 'IH-K009',
1528
1583
  vendor: 'TuYa',
1529
1584
  description: 'Temperature & humidity sensor',
@@ -1822,14 +1877,16 @@ module.exports = [
1822
1877
  e.switch().withEndpoint('l1'),
1823
1878
  e.switch().withEndpoint('l2'),
1824
1879
  e.switch().withEndpoint('l3'),
1825
- exposes.presets.power_on_behavior(),
1826
- exposes.presets.switch_type_2(),
1880
+ e.power_on_behavior(),
1881
+ e.switch_type_2(),
1827
1882
  ],
1828
1883
  endpoint: (device) => {
1829
1884
  return {'l1': 1, 'l2': 2, 'l3': 3};
1830
1885
  },
1831
1886
  meta: {multiEndpoint: true},
1832
1887
  configure: async (device, coordinatorEndpoint, logger) => {
1888
+ await device.getEndpoint(1).read('genBasic',
1889
+ ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1833
1890
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
1834
1891
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
1835
1892
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
@@ -1848,14 +1905,16 @@ module.exports = [
1848
1905
  e.switch().withEndpoint('l2'),
1849
1906
  e.switch().withEndpoint('l3'),
1850
1907
  e.switch().withEndpoint('l4'),
1851
- exposes.presets.power_on_behavior(),
1852
- exposes.presets.switch_type_2(),
1908
+ e.power_on_behavior(),
1909
+ e.switch_type_2(),
1853
1910
  ],
1854
1911
  endpoint: (device) => {
1855
1912
  return {'l1': 1, 'l2': 2, 'l3': 3, 'l4': 4};
1856
1913
  },
1857
1914
  meta: {multiEndpoint: true},
1858
1915
  configure: async (device, coordinatorEndpoint, logger) => {
1916
+ await device.getEndpoint(1).read('genBasic',
1917
+ ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1859
1918
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
1860
1919
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
1861
1920
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
@@ -1955,6 +2014,7 @@ module.exports = [
1955
2014
  {vendor: 'SHOJZJ', model: '378RT'},
1956
2015
  {vendor: 'Silvercrest', model: 'TVR01'},
1957
2016
  {vendor: 'Immax', model: '07732B'},
2017
+ {vendor: 'Evolveo', model: 'Heat M30'},
1958
2018
  ],
1959
2019
  meta: {tuyaThermostatPreset: tuya.thermostatPresets, tuyaThermostatSystemMode: tuya.thermostatSystemModes3},
1960
2020
  ota: ota.zigbeeOTA,
@@ -5,7 +5,14 @@ module.exports = [
5
5
  zigbeeModel: ['5991711'],
6
6
  model: 'C5850000',
7
7
  vendor: 'Villeroy & Boch',
8
- description: 'Subway 3.0 Zigbee home Aautomation kit ',
8
+ description: 'Subway 3.0 Zigbee home automation kit',
9
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [160, 450]}),
10
+ },
11
+ {
12
+ zigbeeModel: ['EC1300'],
13
+ model: 'C0040000',
14
+ vendor: 'Villeroy & Boch',
15
+ description: 'Zigbee home automation kit for mirror',
9
16
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [160, 450]}),
10
17
  },
11
18
  ];
@@ -18,6 +18,20 @@ https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---
18
18
 
19
19
  Dresden Elektronik also provide third-party OTA firmware images and external URLs for many third-party Zigbee OTA firmware images.
20
20
 
21
+ ### Inovelli OTA Firmware provider
22
+
23
+ Inovelli Zigbee OTA firmware images are made publicly available by Inovelli (first-party) at the following URLs:
24
+
25
+ https://files.inovelli.com/firmware/firmware.json
26
+
27
+ https://files.inovelli.com/firmware
28
+
29
+ ### Sonoff OTA Firmware provider
30
+
31
+ Sonoff Zigbee OTA firmware images are made publicly available by Sonoff (first-party) at the following URLs:
32
+
33
+ https://zigbee-ota.sonoff.tech/releases/upgrade.json
34
+
21
35
  ### EUROTRONICS
22
36
 
23
37
  EUROTRONICS Zigbee OTA firmware images are made publicly available by EUROTRONIC Technology (first-party) at the following URL:
package/lib/tuya.js CHANGED
@@ -1141,9 +1141,14 @@ const tuyaExposes = {
1141
1141
  .withDescription('Controls the behavior when the device is powered on'),
1142
1142
  lightType: () => exposes.enum('light_type', ea.STATE_SET, ['led', 'incandescent', 'halogen'])
1143
1143
  .withDescription('Type of light attached to the device'),
1144
- lightBrightnessWithMinMax: () => e.light_brightness().withMinBrightness().withMaxBrightness().setAccess(
1145
- 'state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET).setAccess(
1146
- 'min_brightness', ea.STATE_SET).setAccess('max_brightness', ea.STATE_SET),
1144
+ lightBrightnessWithMinMax: () => e.light_brightness().withMinBrightness().withMaxBrightness()
1145
+ .setAccess('state', ea.STATE_SET)
1146
+ .setAccess('brightness', ea.STATE_SET)
1147
+ .setAccess('min_brightness', ea.STATE_SET)
1148
+ .setAccess('max_brightness', ea.STATE_SET),
1149
+ lightBrightness: () => e.light_brightness()
1150
+ .setAccess('state', ea.STATE_SET)
1151
+ .setAccess('brightness', ea.STATE_SET),
1147
1152
  countdown: () => exposes.numeric('countdown', ea.STATE_SET).withValueMin(0).withValueMax(43200).withValueStep(1).withUnit('s')
1148
1153
  .withDescription('Countdown to turn device off after a certain time'),
1149
1154
  switch: () => e.switch().setAccess('state', ea.STATE_SET),
@@ -1235,7 +1240,7 @@ const tzDataPoints = {
1235
1240
  } else {
1236
1241
  throw new Error(`Don't know how to send type '${typeof convertedValue}'`);
1237
1242
  }
1238
- state[convertedKey] = value;
1243
+ state[key] = value;
1239
1244
  }
1240
1245
  return {state};
1241
1246
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.643",
3
+ "version": "14.0.645",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "homepage": "https://github.com/Koenkk/zigbee-herdsman-converters",
36
36
  "dependencies": {
37
- "axios": "^1.1.2",
37
+ "axios": "^1.1.3",
38
38
  "buffer-crc32": "^0.2.13",
39
39
  "https-proxy-agent": "^5.0.1",
40
40
  "tar-stream": "^2.2.0",