zigbee-herdsman-converters 14.0.682 → 14.0.683

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.
@@ -184,6 +184,10 @@ const converters = {
184
184
  result.keypad_lockout = constants.keypadLockoutMode.hasOwnProperty(msg.data['keypadLockout']) ?
185
185
  constants.keypadLockoutMode[msg.data['keypadLockout']] : msg.data['keypadLockout'];
186
186
  }
187
+ if (msg.data.hasOwnProperty('tempDisplayMode')) {
188
+ result.temperature_display_mode = constants.temperatureDisplayMode.hasOwnProperty(msg.data['tempDisplayMode']) ?
189
+ constants.temperatureDisplayMode[msg.data['tempDisplayMode']] : msg.data['tempDisplayMode'];
190
+ }
187
191
  return result;
188
192
  },
189
193
  },
@@ -2805,6 +2809,8 @@ const converters = {
2805
2809
  buttonMapping = {1: '1', 2: '2', 3: '3'};
2806
2810
  } else if (['TS0044', 'YSR-MINI-Z', 'TS004F'].includes(model.model)) {
2807
2811
  buttonMapping = {1: '1', 2: '2', 3: '3', 4: '4'};
2812
+ } else if (['TS0046'].includes(model.model)) {
2813
+ buttonMapping = {1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6'};
2808
2814
  }
2809
2815
  const button = buttonMapping ? `${buttonMapping[msg.endpoint.ID]}_` : '';
2810
2816
  // Since it is a non standard ZCL command, no default response is send from zigbee-herdsman
@@ -3416,45 +3422,6 @@ const converters = {
3416
3422
  return result;
3417
3423
  },
3418
3424
  },
3419
- sinope_TH1300ZB_specific: {
3420
- cluster: 'manuSpecificSinope',
3421
- type: ['attributeReport', 'readResponse'],
3422
- convert: (model, msg, publish, options, meta) => {
3423
- const lookup = {0: 'off', 1: 'on'};
3424
- const result = {};
3425
- if (msg.data.hasOwnProperty('GFCiStatus')) {
3426
- result.gfci_status = lookup[msg.data['GFCiStatus']];
3427
- }
3428
- if (msg.data.hasOwnProperty('floorLimitStatus')) {
3429
- result.floor_limit_status = lookup[msg.data['floorLimitStatus']];
3430
- }
3431
- return result;
3432
- },
3433
- },
3434
- sinope_thermostat: {
3435
- cluster: 'hvacThermostat',
3436
- type: ['readResponse'],
3437
- convert: (model, msg, publish, options, meta) => {
3438
- const result = {};
3439
- const cycleOutputLookup = {15: '15_sec', 300: '5_min', 600: '10_min',
3440
- 900: '15_min', 1200: '20_min', 1800: '30_min', 65535: 'off'};
3441
- if (msg.data.hasOwnProperty('1024')) {
3442
- const lookup = {0: 'unoccupied', 1: 'occupied'};
3443
- result.thermostat_occupancy = lookup[msg.data['1024']];
3444
- }
3445
- if (msg.data.hasOwnProperty('1025')) {
3446
- result.main_cycle_output = cycleOutputLookup[msg.data['1025']];
3447
- }
3448
- if (msg.data.hasOwnProperty('1026')) {
3449
- const lookup = {0: 'on_demand', 1: 'sensing'};
3450
- result.backlight_auto_dim = lookup[msg.data['1026']];
3451
- }
3452
- if (msg.data.hasOwnProperty('1028')) {
3453
- result.aux_cycle_output = cycleOutputLookup[msg.data['1028']];
3454
- }
3455
- return result;
3456
- },
3457
- },
3458
3425
  danfoss_thermostat: {
3459
3426
  cluster: 'hvacThermostat',
3460
3427
  type: ['attributeReport', 'readResponse'],
@@ -1247,6 +1247,10 @@ const converters = {
1247
1247
  convertSet: async (entity, key, value, meta) => {
1248
1248
  const tempDisplayMode = utils.getKey(constants.temperatureDisplayMode, value, value, Number);
1249
1249
  await entity.write('hvacUserInterfaceCfg', {tempDisplayMode});
1250
+ return {readAfterWriteTime: 250, state: {temperature_display_mode: value}};
1251
+ },
1252
+ convertGet: async (entity, key, meta) => {
1253
+ await entity.read('hvacUserInterfaceCfg', ['tempDisplayMode']);
1250
1254
  },
1251
1255
  },
1252
1256
  thermostat_keypad_lockout: {
@@ -4252,186 +4256,6 @@ const converters = {
4252
4256
  await entity.read('hvacThermostat', [0x4000], manufacturerOptions.eurotronic);
4253
4257
  },
4254
4258
  },
4255
- sinope_thermostat_occupancy: {
4256
- key: ['thermostat_occupancy'],
4257
- convertSet: async (entity, key, value, meta) => {
4258
- const sinopeOccupancy = {0: 'unoccupied', 1: 'occupied'};
4259
- const SinopeOccupancy = utils.getKey(sinopeOccupancy, value, value, Number);
4260
- await entity.write('hvacThermostat', {SinopeOccupancy});
4261
- return {state: {'thermostat_occupancy': value}};
4262
- },
4263
- convertGet: async (entity, key, meta) => {
4264
- await entity.read('hvacThermostat', ['SinopeOccupancy']);
4265
- },
4266
- },
4267
- sinope_thermostat_backlight_autodim_param: {
4268
- key: ['backlight_auto_dim'],
4269
- convertSet: async (entity, key, value, meta) => {
4270
- const sinopeBacklightParam = {0: 'on_demand', 1: 'sensing'};
4271
- const SinopeBacklight = utils.getKey(sinopeBacklightParam, value, value, Number);
4272
- await entity.write('hvacThermostat', {SinopeBacklight});
4273
- return {state: {'backlight_auto_dim': value}};
4274
- },
4275
- convertGet: async (entity, key, meta) => {
4276
- await entity.read('hvacThermostat', ['SinopeBacklight']);
4277
- },
4278
- },
4279
- sinope_thermostat_enable_outdoor_temperature: {
4280
- key: ['enable_outdoor_temperature'],
4281
- convertSet: async (entity, key, value, meta) => {
4282
- if (value.toLowerCase() == 'on') {
4283
- await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: 10800});
4284
- } else if (value.toLowerCase() == 'off') {
4285
- // set timer to 30sec in order to disable outdoor temperature
4286
- await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: 30});
4287
- }
4288
- },
4289
- },
4290
- sinope_thermostat_outdoor_temperature: {
4291
- key: ['thermostat_outdoor_temperature'],
4292
- convertSet: async (entity, key, value, meta) => {
4293
- if (value > -100 && value < 100) {
4294
- await entity.write('manuSpecificSinope', {outdoorTempToDisplay: value * 100});
4295
- }
4296
- },
4297
- },
4298
- sinope_thermostat_time: {
4299
- key: ['thermostat_time'],
4300
- convertSet: async (entity, key, value, meta) => {
4301
- if (value === '') {
4302
- const thermostatDate = new Date();
4303
- const thermostatTimeSec = thermostatDate.getTime() / 1000;
4304
- const thermostatTimezoneOffsetSec = thermostatDate.getTimezoneOffset() * 60;
4305
- const currentTimeToDisplay = Math.round(thermostatTimeSec - thermostatTimezoneOffsetSec - 946684800);
4306
- await entity.write('manuSpecificSinope', {currentTimeToDisplay});
4307
- } else if (value !== '') {
4308
- await entity.write('manuSpecificSinope', {currentTimeToDisplay: value});
4309
- }
4310
- },
4311
- },
4312
- sinope_floor_control_mode: {
4313
- // TH1300ZB specific
4314
- key: ['floor_control_mode'],
4315
- convertSet: async (entity, key, value, meta) => {
4316
- if (typeof value !== 'string') {
4317
- return;
4318
- }
4319
- const lookup = {'ambiant': 1, 'floor': 2};
4320
- value = value.toLowerCase();
4321
- if (lookup.hasOwnProperty(value)) {
4322
- await entity.write('manuSpecificSinope', {floorControlMode: lookup[value]});
4323
- }
4324
- },
4325
- },
4326
- sinope_ambiant_max_heat_setpoint: {
4327
- // TH1300ZB specific
4328
- key: ['ambiant_max_heat_setpoint'],
4329
- convertSet: async (entity, key, value, meta) => {
4330
- if (value >= 5 && value <= 36) {
4331
- await entity.write('manuSpecificSinope', {ambiantMaxHeatSetpointLimit: value * 100});
4332
- }
4333
- },
4334
- },
4335
- sinope_floor_min_heat_setpoint: {
4336
- // TH1300ZB specific
4337
- key: ['floor_min_heat_setpoint'],
4338
- convertSet: async (entity, key, value, meta) => {
4339
- if (value >= 5 && value <= 36) {
4340
- await entity.write('manuSpecificSinope', {floorMinHeatSetpointLimit: value * 100});
4341
- }
4342
- },
4343
- },
4344
- sinope_floor_max_heat_setpoint: {
4345
- // TH1300ZB specific
4346
- key: ['floor_max_heat_setpoint'],
4347
- convertSet: async (entity, key, value, meta) => {
4348
- if (value >= 5 && value <= 36) {
4349
- await entity.write('manuSpecificSinope', {floorMaxHeatSetpointLimit: value * 100});
4350
- }
4351
- },
4352
- },
4353
- sinope_temperature_sensor: {
4354
- // TH1300ZB specific
4355
- key: ['floor_temperature_sensor'],
4356
- convertSet: async (entity, key, value, meta) => {
4357
- if (typeof value !== 'string') {
4358
- return;
4359
- }
4360
- const lookup = {'10k': 0, '12k': 1};
4361
- value = value.toLowerCase();
4362
- if (lookup.hasOwnProperty(value)) {
4363
- await entity.write('manuSpecificSinope', {temperatureSensor: lookup[value]});
4364
- }
4365
- },
4366
- convertGet: async (entity, key, meta) => {
4367
- await entity.read('manuSpecificSinope', ['temperatureSensor']);
4368
- },
4369
- },
4370
- sinope_time_format: {
4371
- // TH1300ZB specific
4372
- key: ['time_format'],
4373
- convertSet: async (entity, key, value, meta) => {
4374
- if (typeof value !== 'string') {
4375
- return;
4376
- }
4377
- const lookup = {'24h': 0, '12h': 1};
4378
- value = value.toLowerCase();
4379
- if (lookup.hasOwnProperty(value)) {
4380
- await entity.write('manuSpecificSinope', {timeFormatToDisplay: lookup[value]});
4381
- }
4382
- },
4383
- },
4384
- sinope_led_intensity_on: {
4385
- // DM2500ZB and SW2500ZB
4386
- key: ['led_intensity_on'],
4387
- convertSet: async (entity, key, value, meta) => {
4388
- if (value >= 0 && value <= 100) {
4389
- await entity.write('manuSpecificSinope', {ledIntensityOn: value});
4390
- }
4391
- },
4392
- },
4393
- sinope_led_intensity_off: {
4394
- // DM2500ZB and SW2500ZB
4395
- key: ['led_intensity_off'],
4396
- convertSet: async (entity, key, value, meta) => {
4397
- if (value >= 0 && value <= 100) {
4398
- await entity.write('manuSpecificSinope', {ledIntensityOff: value});
4399
- }
4400
- },
4401
- },
4402
- sinope_led_color_on: {
4403
- // DM2500ZB and SW2500ZB
4404
- key: ['led_color_on'],
4405
- convertSet: async (entity, key, value, meta) => {
4406
- const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
4407
- const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
4408
- const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
4409
-
4410
- const valueHex = r + g * 256 + (b * 256 ** 2);
4411
- await entity.write('manuSpecificSinope', {ledColorOn: valueHex});
4412
- },
4413
- },
4414
- sinope_led_color_off: {
4415
- // DM2500ZB and SW2500ZB
4416
- key: ['led_color_off'],
4417
- convertSet: async (entity, key, value, meta) => {
4418
- const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
4419
- const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
4420
- const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
4421
-
4422
- const valueHex = r + g * 256 + b * 256 ** 2;
4423
- await entity.write('manuSpecificSinope', {ledColorOff: valueHex});
4424
- },
4425
- },
4426
- sinope_minimum_brightness: {
4427
- // DM2500ZB
4428
- key: ['minimum_brightness'],
4429
- convertSet: async (entity, key, value, meta) => {
4430
- if (value >= 0 && value <= 3000) {
4431
- await entity.write('manuSpecificSinope', {minimumBrightness: value});
4432
- }
4433
- },
4434
- },
4435
4259
  stelpro_thermostat_outdoor_temperature: {
4436
4260
  key: ['thermostat_outdoor_temperature'],
4437
4261
  convertSet: async (entity, key, value, meta) => {
@@ -35,6 +35,21 @@ module.exports = [
35
35
  device.skipDefaultResponse = true;
36
36
  },
37
37
  },
38
+ {
39
+ zigbeeModel: ['SWITCH-ZR03-1'],
40
+ model: 'SWITCH-ZR03-1',
41
+ vendor: 'eWeLink',
42
+ description: 'Zigbee smart switch',
43
+ extend: extend.switch(),
44
+ fromZigbee: [fz.on_off_skip_duplicate_transaction],
45
+ configure: async (device, coordinatorEndpoint, logger) => {
46
+ const endpoint = device.getEndpoint(1);
47
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
48
+ },
49
+ onEvent: async (type, data, device) => {
50
+ device.skipDefaultResponse = true;
51
+ },
52
+ },
38
53
  {
39
54
  zigbeeModel: ['ZB-SW01'],
40
55
  model: 'ZB-SW01',
@@ -335,6 +335,7 @@ module.exports = [
335
335
  zigbeeModel: ['GL-S-006P'],
336
336
  model: 'GL-S-006P',
337
337
  vendor: 'Gledopto',
338
+ ota: ota.zigbeeOTA,
338
339
  description: 'Zigbee GU10 LED lamp',
339
340
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [158, 495]}),
340
341
  },
package/devices/immax.js CHANGED
@@ -34,7 +34,7 @@ module.exports = [
34
34
  },
35
35
  {
36
36
  zigbeeModel: ['IM-Z3.0-DIM'],
37
- model: '07005B',
37
+ model: '07001L/07005B',
38
38
  vendor: 'Immax',
39
39
  description: 'Neo SMART LED E14 5W warm white, dimmable, Zigbee 3.0',
40
40
  extend: extend.light_onoff_brightness(),
package/devices/iris.js CHANGED
@@ -177,4 +177,20 @@ module.exports = [
177
177
  await reporting.batteryVoltage(endpoint);
178
178
  },
179
179
  },
180
+ {
181
+ zigbeeModel: ['3315-Geu'],
182
+ model: '3315-Geu',
183
+ vendor: 'Iris',
184
+ description: 'Water sensor',
185
+ fromZigbee: [fz.temperature, fz.ias_water_leak_alarm_1, fz.battery],
186
+ exposes: [e.temperature(), e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
187
+ toZigbee: [],
188
+ meta: {battery: {voltageToPercentage: '3V_2500'}},
189
+ configure: async (device, coordinatorEndpoint, logger) => {
190
+ const endpoint = device.getEndpoint(1);
191
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
192
+ await reporting.temperature(endpoint);
193
+ await reporting.batteryVoltage(endpoint);
194
+ },
195
+ },
180
196
  ];
@@ -330,7 +330,7 @@ module.exports = [
330
330
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
331
331
  },
332
332
  {
333
- zigbeeModel: ['929003046001'],
333
+ zigbeeModel: ['929003046001', '929003045801'],
334
334
  model: '5309031P8',
335
335
  vendor: 'Philips',
336
336
  description: 'Hue White ambiance Runner spot white (1 spot)',
@@ -21,6 +21,7 @@ module.exports = [
21
21
  {modelID: 'TS0601', manufacturerName: '_TZE200_zr9c0day'},
22
22
  {modelID: 'TS0601', manufacturerName: '_TZE200_0dvm9mva'},
23
23
  {modelID: 'TS0601', manufacturerName: '_TZE200_h4cgnbzg'},
24
+ {modelID: 'TS0601', manufacturerName: '_TZE200_exfrnlow'},
24
25
  ],
25
26
  model: 'SEA801-Zigbee/SEA802-Zigbee',
26
27
  vendor: 'Saswell',
@@ -423,7 +423,7 @@ module.exports = [
423
423
  description: 'Odace connectable relay switch 10A',
424
424
  extend: extend.switch(),
425
425
  configure: async (device, coordinatorEndpoint, logger) => {
426
- const endpoint = device.getEndpoint(10);
426
+ const endpoint = device.getEndpoint(21);
427
427
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
428
428
  await reporting.onOff(endpoint);
429
429
  },