zigbee-herdsman-converters 14.0.441 → 14.0.444

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.
@@ -20,6 +20,7 @@ const constants = require('../lib/constants');
20
20
  const libColor = require('../lib/color');
21
21
  const utils = require('../lib/utils');
22
22
  const exposes = require('../lib/exposes');
23
+ const xiaomi = require('../lib/xiaomi');
23
24
 
24
25
  const converters = {
25
26
  // #region Generic/recommended converters
@@ -423,11 +424,11 @@ const converters = {
423
424
  // This is for occupancy sensor that send motion start AND stop messages
424
425
  cluster: 'msOccupancySensing',
425
426
  type: ['attributeReport', 'readResponse'],
426
- options: [exposes.options.no_occupancy_since()],
427
+ options: [exposes.options.no_occupancy_since_false()],
427
428
  convert: (model, msg, publish, options, meta) => {
428
429
  if (msg.data.hasOwnProperty('occupancy')) {
429
430
  const payload = {occupancy: (msg.data.occupancy % 2) > 0};
430
- utils.noOccupancySince(msg.endpoint, payload, options, publish);
431
+ utils.noOccupancySince(msg.endpoint, payload, options, publish, payload.occupancy ? 'stop' : 'start');
431
432
  return payload;
432
433
  }
433
434
  },
@@ -438,7 +439,7 @@ const converters = {
438
439
  // Therefore we need to publish the no_motion detected by ourselves.
439
440
  cluster: 'msOccupancySensing',
440
441
  type: ['attributeReport', 'readResponse'],
441
- options: [exposes.options.occupancy_timeout(), exposes.options.no_occupancy_since()],
442
+ options: [exposes.options.occupancy_timeout(), exposes.options.no_occupancy_since_true()],
442
443
  convert: (model, msg, publish, options, meta) => {
443
444
  if (msg.data.occupancy !== 1) {
444
445
  // In case of 0 no occupancy is reported.
@@ -463,7 +464,7 @@ const converters = {
463
464
  }
464
465
 
465
466
  const payload = {occupancy: true};
466
- utils.noOccupancySince(msg.endpoint, payload, options, publish);
467
+ utils.noOccupancySince(msg.endpoint, payload, options, publish, 'start');
467
468
  return payload;
468
469
  },
469
470
  },
@@ -1018,6 +1019,16 @@ const converters = {
1018
1019
  };
1019
1020
  },
1020
1021
  },
1022
+ ias_alarm_only_alarm_1: {
1023
+ cluster: 'ssIasZone',
1024
+ type: 'attributeReport',
1025
+ convert: (model, msg, publish, options, meta) => {
1026
+ const zoneStatus = msg.data.zoneStatus;
1027
+ return {
1028
+ alarm: (zoneStatus & 1) > 0,
1029
+ };
1030
+ },
1031
+ },
1021
1032
  ias_occupancy_only_alarm_2: {
1022
1033
  cluster: 'ssIasZone',
1023
1034
  type: 'commandStatusChangeNotification',
@@ -2595,6 +2606,16 @@ const converters = {
2595
2606
  return result;
2596
2607
  },
2597
2608
  },
2609
+ ts0219_power_source: {
2610
+ cluster: 'genBasic',
2611
+ type: 'attributeReport',
2612
+ convert: (model, msg, publish, options, meta) => {
2613
+ const powerSource = msg.data.powerSource;
2614
+ return {
2615
+ ac_connected: powerSource === 2 ? true : false,
2616
+ };
2617
+ },
2618
+ },
2598
2619
  tuya_cover_options: {
2599
2620
  cluster: 'closuresWindowCovering',
2600
2621
  type: ['attributeReport', 'readResponse'],
@@ -5246,6 +5267,25 @@ const converters = {
5246
5267
  }
5247
5268
  },
5248
5269
  },
5270
+ xiaomi_basic_raw: {
5271
+ cluster: 'genBasic',
5272
+ type: ['raw'],
5273
+ options: (definition) => {
5274
+ const result = [];
5275
+ if (definition.exposes.find((e) => e.name === 'temperature')) {
5276
+ result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
5277
+ }
5278
+ return result;
5279
+ },
5280
+ convert: (model, msg, publish, options, meta) => {
5281
+ let payload = {};
5282
+ if (Buffer.isBuffer(msg.data)) {
5283
+ const dataObject = xiaomi.buffer2DataObject(meta, model, msg.data);
5284
+ payload = xiaomi.numericAttributes2Payload(msg, meta, model, options, dataObject);
5285
+ }
5286
+ return payload;
5287
+ },
5288
+ },
5249
5289
  aqara_opple: {
5250
5290
  cluster: 'aqaraOpple',
5251
5291
  type: ['attributeReport', 'readResponse'],
@@ -5260,226 +5300,7 @@ const converters = {
5260
5300
  return result;
5261
5301
  },
5262
5302
  convert: (model, msg, publish, options, meta) => {
5263
- const payload = {};
5264
- if (msg.data.hasOwnProperty('247')) {
5265
- const data = msg.data['247'];
5266
- // Xiaomi struct parsing
5267
- const length = data.length;
5268
- for (let i=0; i < length; i++) {
5269
- const index = data[i];
5270
- let value = null;
5271
- switch (data[i+1]) {
5272
- case 16:
5273
- // 0x10 ZclBoolean
5274
- value = data.readUInt8(i+2);
5275
- i += 2;
5276
- break;
5277
- case 32:
5278
- // 0x20 Zcl8BitUint
5279
- value = data.readUInt8(i+2);
5280
- i += 2;
5281
- break;
5282
- case 33:
5283
- // 0x21 Zcl16BitUint
5284
- value = data.readUInt16LE(i+2);
5285
- i += 3;
5286
- break;
5287
- case 34:
5288
- // 0x22 Zcl24BitUint
5289
- value = data.readUIntLE(i+2, 3);
5290
- i += 4;
5291
- break;
5292
- case 35:
5293
- // 0x23 Zcl32BitUint
5294
- value = data.readUInt32LE(i+2);
5295
- i += 5;
5296
- break;
5297
- case 36:
5298
- // 0x24 Zcl40BitUint
5299
- value = data.readUIntLE(i+2, 5);
5300
- i += 6;
5301
- break;
5302
- case 37:
5303
- // 0x25 Zcl48BitUint
5304
- value = data.readUIntLE(i+2, 6);
5305
- i += 7;
5306
- break;
5307
- case 38:
5308
- // 0x26 Zcl56BitUint
5309
- value = data.readUIntLE(i+2, 7);
5310
- i += 8;
5311
- break;
5312
- case 39:
5313
- // 0x27 Zcl64BitUint
5314
- value = data.readBigUInt64BE(i+2);
5315
- i += 9;
5316
- break;
5317
- case 40:
5318
- // 0x28 Zcl8BitInt
5319
- value = data.readInt8(i+2);
5320
- i += 2;
5321
- break;
5322
- case 41:
5323
- // 0x29 Zcl16BitInt
5324
- value = data.readInt16LE(i+2);
5325
- i += 3;
5326
- break;
5327
- case 42:
5328
- // 0x2A Zcl24BitInt
5329
- value = data.readIntLE(i+2, 3);
5330
- i += 4;
5331
- break;
5332
- case 43:
5333
- // 0x2B Zcl32BitInt
5334
- value = data.readInt32LE(i+2);
5335
- i += 5;
5336
- break;
5337
- case 44:
5338
- // 0x2C Zcl40BitInt
5339
- value = data.readIntLE(i+2, 5);
5340
- i += 6;
5341
- break;
5342
- case 45:
5343
- // 0x2D Zcl48BitInt
5344
- value = data.readIntLE(i+2, 6);
5345
- i += 7;
5346
- break;
5347
- case 46:
5348
- // 0x2E Zcl56BitInt
5349
- value = data.readIntLE(i+2, 7);
5350
- i += 8;
5351
- break;
5352
- case 47:
5353
- // 0x2F Zcl64BitInt
5354
- value = data.readBigInt64BE(i+2);
5355
- i += 9;
5356
- break;
5357
- case 57:
5358
- // 0x39 ZclSingleFloat
5359
- value = data.readFloatLE(i+2);
5360
- i += 5;
5361
- break;
5362
- case 58:
5363
- // 0x3a ZclDoubleFloat
5364
- value = data.readDoubleLE(i+2);
5365
- i += 5;
5366
- break;
5367
- default:
5368
- if (meta.logger) meta.logger.debug(`${model.zigbeeModel}: unknown vtype=${data[i+1]}, pos=${i+1}`);
5369
- }
5370
-
5371
- if (index == 1) {
5372
- payload.voltage = value;
5373
- payload.battery = batteryVoltageToPercentage(value, '3V_2100');
5374
- } else if (index === 3) {
5375
- if (!['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM'].includes(model.model)) {
5376
- payload.temperature = calibrateAndPrecisionRoundOptions(value, options, 'temperature'); // 0x03
5377
- }
5378
- } else if (index === 5) {
5379
- if (['JT-BZ-01AQ/A', 'RTCZCGQ11LM'].includes(model.model)) payload.power_outage_count = value;
5380
- } else if (index === 100) {
5381
- if (['QBKG20LM', 'QBKG31LM', 'QBKG39LM', 'QBKG41LM', 'QBCZ15LM'].includes(model.model)) {
5382
- const mapping = model.model === 'QBCZ15LM' ? 'relay' : 'left';
5383
- payload[`state_${mapping}`] = value === 1 ? 'ON' : 'OFF';
5384
- } else if (['WXKG14LM', 'WXKG16LM', 'WXKG17LM'].includes(model.model)) {
5385
- payload.click_mode = {1: 'fast', 2: 'multi'}[value];
5386
- } else if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM'].includes(model.model)) {
5387
- // We don't know what the value means for these devices.
5388
- // https://github.com/Koenkk/zigbee2mqtt/issues/11126
5389
- } else {
5390
- payload.state = value === 1 ? 'ON' : 'OFF';
5391
- }
5392
- } else if (index === 101) {
5393
- if (['QBKG20LM', 'QBKG31LM', 'QBKG39LM', 'QBKG41LM', 'QBCZ15LM'].includes(model.model)) {
5394
- const mapping = model.model === 'QBCZ15LM' ? 'usb' : 'right';
5395
- payload[`state_${mapping}`] = value === 1 ? 'ON' : 'OFF';
5396
- } else if (['QBKG25LM', 'QBKG34LM'].includes(model.model)) {
5397
- payload.state_center = value === 1 ? 'ON' : 'OFF';
5398
- } else if (['RTCGQ12LM'].includes(model.model)) {
5399
- payload.illuminance = calibrateAndPrecisionRoundOptions(value, options, 'illuminance');
5400
- } else if (['ZNJLBL01LM'].includes(model.model)) {
5401
- payload.battery = value;
5402
- }
5403
- } else if (index ===102 ) {
5404
- if (['QBKG25LM', 'QBKG34LM'].includes(model.model)) {
5405
- payload.state_right = value === 1 ? 'ON' : 'OFF';
5406
- } else if (['RTCZCGQ11LM'].includes(model.model)) {
5407
- payload.presence_event = {0: 'enter', 1: 'leave', 2: 'left_enter', 3: 'right_leave', 4: 'right_enter',
5408
- 5: 'left_leave', 6: 'approach', 7: 'away', 255: null}[value];
5409
- }
5410
- } else if (index === 103) {
5411
- if (['RTCZCGQ11LM'].includes(model.model)) payload.monitoring_mode = value === 1 ? 'left_right' : 'undirected';
5412
- } else if (index === 105) {
5413
- if (['RTCGQ13LM'].includes(model.model)) {
5414
- payload.motion_sensitivity = {1: 'low', 2: 'medium', 3: 'high'}[value];
5415
- } else if (['RTCZCGQ11LM'].includes(model.model)) {
5416
- payload.approach_distance = {0: 'far', 1: 'medium', 2: 'near'}[value];
5417
- }
5418
- } else if (index === 149) {
5419
- payload.energy = precisionRound(value, 2); // 0x95
5420
- // Consumption is deprecated
5421
- payload.consumption = payload.energy;
5422
- } else if (index === 150) payload.voltage = precisionRound(value * 0.1, 1); // 0x96
5423
- else if (index === 151) payload.current = precisionRound(value * 0.001, 4); // 0x97
5424
- else if (index === 152) payload.power = precisionRound(value, 2); // 0x98
5425
- else if (index === 159) payload.gas_sensitivity = {1: '15%LEL', 2: '10%LEL'}[value]; // JT-BZ-01AQ/A
5426
- else if (index === 160) payload.gas = value === 1; // JT-BZ-01AQ/A
5427
- else if (index === 161) payload.gas_density = value; // JT-BZ-01AQ/A
5428
- else if (index === 162) payload.test = value === 1; // JT-BZ-01AQ/A
5429
- else if (index === 163) payload.mute = value === 1; // JT-BZ-01AQ/A
5430
- else if (index === 164) payload.state = value === 1 ? 'preparation' : 'work'; // JT-BZ-01AQ/A
5431
- else if (index === 166) payload.linkage_alarm = value === 1; // JT-BZ-01AQ/A
5432
- else if (meta.logger) meta.logger.debug(`${model.zigbeeModel}: unknown index ${index} with value ${value}`);
5433
- }
5434
- }
5435
-
5436
- if (msg.data.hasOwnProperty('0')) payload.detection_period = msg.data['0'];
5437
- if (msg.data.hasOwnProperty('2')) {
5438
- if (['JT-BZ-01AQ/A'].includes(model.model)) payload.power_outage_count = msg.data['2'];
5439
- }
5440
- if (msg.data.hasOwnProperty('4')) payload.mode_switch = {4: 'anti_flicker_mode', 1: 'quick_mode'}[msg.data['4']];
5441
- if (msg.data.hasOwnProperty('10')) payload.switch_type = {1: 'toggle', 2: 'momentary'}[msg.data['10']];
5442
- if (msg.data.hasOwnProperty('240')) payload.flip_indicator_light = msg.data['240'] === 1 ? 'ON' : 'OFF';
5443
- if (msg.data.hasOwnProperty('258')) payload.detection_interval = msg.data['258'];
5444
- if (msg.data.hasOwnProperty('268')) {
5445
- if (['RTCGQ13LM'].includes(model.model)) {
5446
- payload.motion_sensitivity = {1: 'low', 2: 'medium', 3: 'high'}[msg.data['268']];
5447
- } else if (['JT-BZ-01AQ/A'].includes(model.model)) {
5448
- payload.gas_sensitivity = {1: '15%LEL', 2: '10%LEL'}[msg.data['268']];
5449
- }
5450
- }
5451
- if (msg.data.hasOwnProperty('293')) payload.click_mode = {1: 'fast', 2: 'multi'}[msg.data['293']];
5452
- if (msg.data.hasOwnProperty('294')) payload.mute = msg.data['294'] === 1; // JT-BZ-01AQ/A
5453
- if (msg.data.hasOwnProperty('295')) payload.test = msg.data['295'] === 1; // JT-BZ-01AQ/A
5454
- if (msg.data.hasOwnProperty('313')) payload.state = msg.data['313'] === 1 ? 'preparation' : 'work'; // JT-BZ-01AQ/A
5455
- if (msg.data.hasOwnProperty('314')) payload.gas = msg.data['314'] === 1; // JT-BZ-01AQ/A
5456
- if (msg.data.hasOwnProperty('315')) payload.gas_density = msg.data['315']; // JT-BZ-01AQ/A
5457
- if (msg.data.hasOwnProperty('322')) payload.presence = msg.data['322'] === 1; // RTCZCGQ11LM
5458
- if (msg.data.hasOwnProperty('323')) {
5459
- payload.presence_event = {0: 'enter', 1: 'leave', 2: 'left_enter', 3: 'right_leave', 4: 'right_enter',
5460
- 5: 'left_leave', 6: 'approach', 7: 'away'}[msg.data['323']]; // RTCZCGQ11LM
5461
- }
5462
- // RTCZCGQ11LM
5463
- if (msg.data.hasOwnProperty('324')) payload.monitoring_mode = msg.data['324'] === 1 ? 'left_right' : 'undirected';
5464
- // RTCZCGQ11LM
5465
- if (msg.data.hasOwnProperty('326')) payload.approach_distance = {0: 'far', 1: 'medium', 2: 'near'}[msg.data['326']];
5466
- if (msg.data.hasOwnProperty('331')) payload.linkage_alarm = msg.data['331'] === 1; // JT-BZ-01AQ/A
5467
- if (msg.data.hasOwnProperty('512')) {
5468
- if (['ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM'].includes(model.model)) {
5469
- payload.button_lock = msg.data['512'] === 1 ? 'OFF' : 'ON';
5470
- } else {
5471
- const mode = {0x01: 'control_relay', 0x00: 'decoupled'}[msg.data['512']];
5472
- payload[postfixWithEndpointName('operation_mode', msg, model)] = mode;
5473
- }
5474
- }
5475
- if (msg.data.hasOwnProperty('513')) payload.power_outage_memory = msg.data['513'] === 1;
5476
- if (msg.data.hasOwnProperty('514')) payload.auto_off = msg.data['514'] === 1;
5477
- if (msg.data.hasOwnProperty('515')) payload.led_disabled_night = msg.data['515'] === 1;
5478
- if (msg.data.hasOwnProperty('519')) payload.consumer_connected = msg.data['519'] === 1;
5479
- if (msg.data.hasOwnProperty('523')) payload.overload_protection = precisionRound(msg.data['523'], 2);
5480
- if (msg.data.hasOwnProperty('550')) payload.button_switch_mode = msg.data['550'] === 1 ? 'relay_and_usb' : 'relay';
5481
- if (msg.data['mode'] !== undefined) payload.operation_mode = ['command', 'event'][msg.data['mode']];
5482
- if (msg.data.hasOwnProperty('1289')) payload.dimmer_mode = {3: 'rgbw', 1: 'dual_ct'}[msg.data['1289']];
5303
+ const payload = xiaomi.numericAttributes2Payload(msg, meta, model, options, msg.data);
5483
5304
  return payload;
5484
5305
  },
5485
5306
  },
@@ -13,7 +13,7 @@ const tzLocal = {
13
13
  convertSet: async (entity, key, value, meta) => {
14
14
  const state = value.toLowerCase();
15
15
  utils.validateValue(state, ['toggle', 'off', 'on']);
16
- const endpoint = meta.device.getEndpoint(3);
16
+ const endpoint = meta.mapped.model === 'AU-A1ZBDSS' ? meta.device.getEndpoint(3) : meta.device.getEndpoint(2);
17
17
  await endpoint.command('genOnOff', state, {});
18
18
  return {state: {backlight_led: state.toUpperCase()}};
19
19
  },
package/devices/hive.js CHANGED
@@ -291,7 +291,7 @@ module.exports = [
291
291
  .withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
292
292
  ' used. 0 to 360 to match the remote display').withEndpoint('heat'),
293
293
  exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
294
- .withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('water'),
294
+ .withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
295
295
  exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
296
296
  .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
297
297
  ' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
@@ -342,7 +342,7 @@ module.exports = [
342
342
  .withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
343
343
  ' used. 0 to 360 to match the remote display').withEndpoint('heat'),
344
344
  exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
345
- .withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('water'),
345
+ .withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
346
346
  exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
347
347
  .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
348
348
  ' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
@@ -393,7 +393,7 @@ module.exports = [
393
393
  .withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
394
394
  ' used. 0 to 360 to match the remote display').withEndpoint('heat'),
395
395
  exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
396
- .withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('water'),
396
+ .withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
397
397
  exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
398
398
  .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
399
399
  ' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
@@ -332,13 +332,13 @@ module.exports = [
332
332
  exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
333
333
  meta: {multiEndpoint: true},
334
334
  configure: async (device, coordinatorEndpoint, logger) => {
335
- const endpointLeft = device.getEndpoint(1);
335
+ const endpointLeft = device.getEndpoint(2);
336
336
  await reporting.bind(endpointLeft, coordinatorEndpoint, ['genOnOff']);
337
- const endpointRight = device.getEndpoint(2);
337
+ const endpointRight = device.getEndpoint(1);
338
338
  await reporting.bind(endpointRight, coordinatorEndpoint, ['genOnOff']);
339
339
  },
340
340
  endpoint: (device) => {
341
- return {left: 1, right: 2};
341
+ return {left: 2, right: 1};
342
342
  },
343
343
  },
344
344
  ];
package/devices/lixee.js CHANGED
@@ -271,6 +271,30 @@ const tarifsDef = {
271
271
  'PJOURF+1',
272
272
  'PPOINTE1',
273
273
  ]},
274
+ stand_HPHC: {fname: 'Standard - Heure Pleine Heure Creuse',
275
+ currentTarf: 'H PLEINE/CREUSE', excluded: [
276
+ 'EASF03',
277
+ 'EASF04',
278
+ 'EASF05',
279
+ 'EASF06',
280
+ 'EASF07',
281
+ 'EASF08',
282
+ 'EASF09',
283
+ 'EASF10',
284
+ 'EASD02',
285
+ 'EASD03',
286
+ 'EASD04',
287
+ 'DPM1',
288
+ 'DPM2',
289
+ 'DPM3',
290
+ 'FPM1',
291
+ 'FPM2',
292
+ 'FPM3',
293
+ 'NJOURF',
294
+ 'NJOURF+1',
295
+ 'PJOURF+1',
296
+ 'PPOINTE1',
297
+ ]},
274
298
  };
275
299
 
276
300
  const linkyModeDef = {
@@ -301,16 +325,16 @@ const exposedData = [
301
325
  {cluster: clustersDef._0x0702, att: 'currentSummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BASE', ea.STATE).withUnit('kWh').withProperty('current_summ_delivered').withDescription('Base index')},
302
326
  {cluster: clustersDef._0xFF66, att: 'currentTarif', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.text('OPTARIF', ea.STATE).withProperty('current_tarif').withDescription('Tarif option')},
303
327
  {cluster: clustersDef._0x0B01, att: 'availablePower', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('ISOUSC', ea.STATE).withUnit('A').withProperty('available_power').withDescription('Subscribed intensity level')},
304
- {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('HCHC', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('HCHC index')},
305
- {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('HCHP', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('HCHP index')},
306
- {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('EJPHN', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('EJPHN index')},
307
- {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('EJPHPM', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('EJPHPM index')},
308
- {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJB', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('BBRHCJB index')},
309
- {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJB', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('BBRHPJB index')},
310
- {cluster: clustersDef._0x0702, att: 'currentTier3SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJW', ea.STATE).withUnit('kWh').withProperty('current_tier3_summ_delivered').withDescription('BBRHCJW index')},
311
- {cluster: clustersDef._0x0702, att: 'currentTier4SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJW', ea.STATE).withUnit('kWh').withProperty('current_tier4_summ_delivered').withDescription('BBRHPJW index')},
312
- {cluster: clustersDef._0x0702, att: 'currentTier5SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJR', ea.STATE).withUnit('kWh').withProperty('current_tier5_summ_delivered').withDescription('BBRHCJR index')},
313
- {cluster: clustersDef._0x0702, att: 'currentTier6SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJR', ea.STATE).withUnit('kWh').withProperty('current_tier6_summ_delivered').withDescription('BBRHPJR index')},
328
+ {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('HCHC', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('HCHC index')},
329
+ {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('HCHP', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('HCHP index')},
330
+ {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('EJPHN', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('EJPHN index')},
331
+ {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('EJPHPM', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('EJPHPM index')},
332
+ {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJB', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('BBRHCJB index')},
333
+ {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJB', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('BBRHPJB index')},
334
+ {cluster: clustersDef._0x0702, att: 'currentTier3SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJW', ea.STATE).withUnit('kWh').withProperty('current_tier3_summ_delivered').withDescription('BBRHCJW index')},
335
+ {cluster: clustersDef._0x0702, att: 'currentTier4SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJW', ea.STATE).withUnit('kWh').withProperty('current_tier4_summ_delivered').withDescription('BBRHPJW index')},
336
+ {cluster: clustersDef._0x0702, att: 'currentTier5SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHCJR', ea.STATE).withUnit('kWh').withProperty('current_tier5_summ_delivered').withDescription('BBRHCJR index')},
337
+ {cluster: clustersDef._0x0702, att: 'currentTier6SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('BBRHPJR', ea.STATE).withUnit('kWh').withProperty('current_tier6_summ_delivered').withDescription('BBRHPJR index')},
314
338
  {cluster: clustersDef._0x0B04, att: 'rmsCurrent', reportable: true, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('IINST', ea.STATE).withUnit('A').withProperty('rms_current').withDescription('RMS current')},
315
339
  {cluster: clustersDef._0x0B04, att: 'rmsCurrent', reportable: true, onlyProducer: false, linkyPhase: linkyPhaseDef.three, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('IINST1', ea.STATE).withUnit('A').withProperty('rms_current').withDescription('RMS current (phase 1)')},
316
340
  {cluster: clustersDef._0x0B04, att: 'rmsCurrentPhB', reportable: true, onlyProducer: false, linkyPhase: linkyPhaseDef.three, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('IINST2', ea.STATE).withUnit('A').withProperty('rms_current_ph_b').withDescription('RMS current (phase 2)')},
@@ -336,7 +360,7 @@ const exposedData = [
336
360
  {cluster: clustersDef._0xFF66, att: 'currentIndexTarif', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('NTARF', ea.STATE).withProperty('current_index_tarif').withDescription('Current tariff index number')},
337
361
  {cluster: clustersDef._0x0B01, att: 'softwareRevision', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('VTIC', ea.STATE).withProperty('software_revision').withDescription('Customer tele-information protocol version')},
338
362
  {cluster: clustersDef._0xFF66, att: 'currentDate', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('DATE', ea.STATE).withProperty('current_date').withDescription('Current date and time')},
339
- {cluster: clustersDef._0x0702, att: 'currentSummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('EAST', ea.STATE).withUnit('kWh').withProperty('current_summ_delivered').withDescription('Total active power delivered')},
363
+ {cluster: clustersDef._0x0702, att: 'currentSummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('EAST', ea.STATE).withUnit('kWh').withProperty('current_summ_delivered').withDescription('Total active power delivered')},
340
364
  {cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('EASF01', ea.STATE).withUnit('kWh').withProperty('current_tier1_summ_delivered').withDescription('Total provider active power delivered (index 01)')},
341
365
  {cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('EASF02', ea.STATE).withUnit('kWh').withProperty('current_tier2_summ_delivered').withDescription('Total provider active power delivered (index 02)')},
342
366
  {cluster: clustersDef._0x0702, att: 'currentTier3SummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('EASF03', ea.STATE).withUnit('kWh').withProperty('current_tier3_summ_delivered').withDescription('Total provider active power delivered (index 03)')},
@@ -390,17 +414,17 @@ const exposedData = [
390
414
  {cluster: clustersDef._0xFF66, att: 'message1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('MSG1', ea.STATE).withProperty('message1').withDescription('Message short')},
391
415
  {cluster: clustersDef._0xFF66, att: 'message2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('MSG2', ea.STATE).withProperty('message2').withDescription('Message ultra-short')},
392
416
  {cluster: clustersDef._0x0702, att: 'siteId', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('PRM', ea.STATE).withProperty('site_id').withDescription('PRM number')},
393
- {cluster: clustersDef._0xFF66, att: 'startMobilePoint1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM1', ea.STATE).withProperty('start_mobile_point1').withDescription('Start mobile point 1')},
394
- {cluster: clustersDef._0xFF66, att: 'stopMobilePoint1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM1', ea.STATE).withProperty('stop_mobile_point1').withDescription('Stop mobile point 1')},
395
- {cluster: clustersDef._0xFF66, att: 'startMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM2', ea.STATE).withProperty('start_mobile_point2').withDescription('Start mobile point 2')},
396
- {cluster: clustersDef._0xFF66, att: 'stopMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM2', ea.STATE).withProperty('stop_mobile_point2').withDescription('Stop mobile point 2')},
397
- {cluster: clustersDef._0xFF66, att: 'startMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM3', ea.STATE).withProperty('start_mobile_point3').withDescription('Start mobile point 3')},
398
- {cluster: clustersDef._0xFF66, att: 'stopMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM3', ea.STATE).withProperty('stop_mobile_point3').withDescription('Stop mobile point 3')},
399
- {cluster: clustersDef._0xFF66, att: 'relais', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('RELAIS', ea.STATE).withProperty('relais')},
400
- {cluster: clustersDef._0xFF66, att: 'daysNumberCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('NJOURF', ea.STATE).withProperty('days_number_current_calendar').withDescription('Current day number supplier calendar')},
401
- {cluster: clustersDef._0xFF66, att: 'daysNumberNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('NJOURF+1', ea.STATE).withProperty('days_number_next_calendar').withDescription('Next day number supplier calendar')},
402
- {cluster: clustersDef._0xFF66, att: 'daysProfileCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.text('PJOURF+1', ea.STATE).withProperty('days_profile_current_calendar').withDescription('Profile of the next supplier calendar day')},
403
- {cluster: clustersDef._0xFF66, att: 'daysProfileNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.standard, exposes: exposes.text('PPOINTE1', ea.STATE).withProperty('days_profile_next_calendar').withDescription('Profile of the next check-in day')},
417
+ {cluster: clustersDef._0xFF66, att: 'startMobilePoint1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM1', ea.STATE).withProperty('start_mobile_point1').withDescription('Start mobile point 1')},
418
+ {cluster: clustersDef._0xFF66, att: 'stopMobilePoint1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM1', ea.STATE).withProperty('stop_mobile_point1').withDescription('Stop mobile point 1')},
419
+ {cluster: clustersDef._0xFF66, att: 'startMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM2', ea.STATE).withProperty('start_mobile_point2').withDescription('Start mobile point 2')},
420
+ {cluster: clustersDef._0xFF66, att: 'stopMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM2', ea.STATE).withProperty('stop_mobile_point2').withDescription('Stop mobile point 2')},
421
+ {cluster: clustersDef._0xFF66, att: 'startMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('DPM3', ea.STATE).withProperty('start_mobile_point3').withDescription('Start mobile point 3')},
422
+ {cluster: clustersDef._0xFF66, att: 'stopMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('FPM3', ea.STATE).withProperty('stop_mobile_point3').withDescription('Stop mobile point 3')},
423
+ {cluster: clustersDef._0xFF66, att: 'relais', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('RELAIS', ea.STATE).withProperty('relais')},
424
+ {cluster: clustersDef._0xFF66, att: 'daysNumberCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('NJOURF', ea.STATE).withProperty('days_number_current_calendar').withDescription('Current day number supplier calendar')},
425
+ {cluster: clustersDef._0xFF66, att: 'daysNumberNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.numeric('NJOURF+1', ea.STATE).withProperty('days_number_next_calendar').withDescription('Next day number supplier calendar')},
426
+ {cluster: clustersDef._0xFF66, att: 'daysProfileCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('PJOURF+1', ea.STATE).withProperty('days_profile_current_calendar').withDescription('Profile of the next supplier calendar day')},
427
+ {cluster: clustersDef._0xFF66, att: 'daysProfileNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.all, linkyMode: linkyModeDef.standard, exposes: exposes.text('PPOINTE1', ea.STATE).withProperty('days_profile_next_calendar').withDescription('Profile of the next check-in day')},
404
428
  ];
405
429
 
406
430
  function getCurrentConfig(device, options, logger=console) {
@@ -478,6 +502,9 @@ function getCurrentConfig(device, options, logger=console) {
478
502
  case linkyMode == linkyModeDef.standard && tarifsDef.stand_SEM_WE_MERCR.currentTarf:
479
503
  myExpose = myExpose.filter((a) => !tarifsDef.stand_SEM_WE_MERCR.excluded.includes(a.exposes.name));
480
504
  break;
505
+ case linkyMode == linkyModeDef.standard && tarifsDef.stand_HPHC.currentTarf:
506
+ myExpose = myExpose.filter((a) => !tarifsDef.stand_HPHC.excluded.includes(a.exposes.name));
507
+ break;
481
508
  default:
482
509
  break;
483
510
  }
@@ -353,7 +353,7 @@ module.exports = [
353
353
  model: '929003055901',
354
354
  vendor: 'Philips',
355
355
  description: 'Hue white ambiance bathroom ceiling light Adore with Bluetooth',
356
- extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 454]}),
356
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
357
357
  ota: ota.zigbeeOTA,
358
358
  },
359
359
  {
@@ -678,4 +678,20 @@ module.exports = [
678
678
  await endpoint37.read('msOccupancySensing', ['pirOToUDelay']);
679
679
  },
680
680
  },
681
+ {
682
+ zigbeeModel: ['CCT595011_AS'],
683
+ model: 'CCT595011_AS',
684
+ vendor: 'Schneider Electric',
685
+ description: 'Wiser motion sensor',
686
+ fromZigbee: [fz.battery, fz.ias_enroll, fz.ias_occupancy_only_alarm_2, fz.illuminance],
687
+ toZigbee: [],
688
+ configure: async (device, coordinatorEndpoint, logger) => {
689
+ const endpoint = device.getEndpoint(1);
690
+ const binds = ['genPowerCfg', 'msIlluminanceMeasurement'];
691
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
692
+ await reporting.batteryPercentageRemaining(endpoint);
693
+ await reporting.illuminance(endpoint, {min: 15, max: constants.repInterval.HOUR, change: 500});
694
+ },
695
+ exposes: [e.battery(), e.illuminance(), e.illuminance_lux(), e.occupancy()],
696
+ },
681
697
  ];