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.
- package/converters/fromZigbee.js +45 -224
- package/devices/aurora_lighting.js +1 -1
- package/devices/hive.js +3 -3
- package/devices/legrand.js +3 -3
- package/devices/lixee.js +49 -22
- package/devices/philips.js +1 -1
- package/devices/schneider_electric.js +16 -0
- package/devices/sengled.js +40 -5
- package/devices/smartthings.js +4 -1
- package/devices/smartwings.js +24 -0
- package/devices/tuya.js +9 -5
- package/devices/woox.js +20 -0
- package/devices/xiaomi.js +1 -1
- package/devices/yale.js +7 -0
- package/lib/exposes.js +2 -1
- package/lib/utils.js +17 -12
- package/lib/xiaomi.js +374 -0
- package/npm-shrinkwrap.json +33 -33
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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'),
|
package/devices/legrand.js
CHANGED
|
@@ -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(
|
|
335
|
+
const endpointLeft = device.getEndpoint(2);
|
|
336
336
|
await reporting.bind(endpointLeft, coordinatorEndpoint, ['genOnOff']);
|
|
337
|
-
const endpointRight = device.getEndpoint(
|
|
337
|
+
const endpointRight = device.getEndpoint(1);
|
|
338
338
|
await reporting.bind(endpointRight, coordinatorEndpoint, ['genOnOff']);
|
|
339
339
|
},
|
|
340
340
|
endpoint: (device) => {
|
|
341
|
-
return {left:
|
|
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.
|
|
305
|
-
{cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
306
|
-
{cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
307
|
-
{cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
308
|
-
{cluster: clustersDef._0x0702, att: 'currentTier1SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
309
|
-
{cluster: clustersDef._0x0702, att: 'currentTier2SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
310
|
-
{cluster: clustersDef._0x0702, att: 'currentTier3SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
311
|
-
{cluster: clustersDef._0x0702, att: 'currentTier4SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
312
|
-
{cluster: clustersDef._0x0702, att: 'currentTier5SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
313
|
-
{cluster: clustersDef._0x0702, att: 'currentTier6SummDelivered', reportable: false, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
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.
|
|
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.
|
|
394
|
-
{cluster: clustersDef._0xFF66, att: 'stopMobilePoint1', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
395
|
-
{cluster: clustersDef._0xFF66, att: 'startMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
396
|
-
{cluster: clustersDef._0xFF66, att: 'stopMobilePoint2', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
397
|
-
{cluster: clustersDef._0xFF66, att: 'startMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
398
|
-
{cluster: clustersDef._0xFF66, att: 'stopMobilePoint3', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
399
|
-
{cluster: clustersDef._0xFF66, att: 'relais', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
400
|
-
{cluster: clustersDef._0xFF66, att: 'daysNumberCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
401
|
-
{cluster: clustersDef._0xFF66, att: 'daysNumberNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
402
|
-
{cluster: clustersDef._0xFF66, att: 'daysProfileCurrentCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
403
|
-
{cluster: clustersDef._0xFF66, att: 'daysProfileNextCalendar', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
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
|
}
|
package/devices/philips.js
CHANGED
|
@@ -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.
|
|
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
|
];
|