zigbee-herdsman-converters 14.0.642 → 14.0.643
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 +1 -2
- package/converters/toZigbee.js +1 -1
- package/devices/lixee.js +3 -3
- package/devices/moes.js +0 -13
- package/devices/philips.js +7 -0
- package/devices/sunricher.js +52 -9
- package/devices/tuya.js +10 -3
- package/lib/exposes.js +1 -0
- package/package.json +1 -1
- package/devices/lerlink.js +0 -19
package/converters/fromZigbee.js
CHANGED
|
@@ -1760,8 +1760,7 @@ const converters = {
|
|
|
1760
1760
|
result.hysterersis = precisionRound(data[0x100A], 2) / 10;
|
|
1761
1761
|
}
|
|
1762
1762
|
if (data.hasOwnProperty(0x100B)) { // DisplayAutoOffEnable
|
|
1763
|
-
|
|
1764
|
-
result.display_auto_off_enabled = lookup[data[0x100B]];
|
|
1763
|
+
result.display_auto_off_enabled = data[0x100B] ? 'enabled' : 'disabled';
|
|
1765
1764
|
}
|
|
1766
1765
|
if (data.hasOwnProperty(0x2001)) { // AlarmAirTempOverValue
|
|
1767
1766
|
result.alarm_airtemp_overvalue = data[0x2001];
|
package/converters/toZigbee.js
CHANGED
|
@@ -3182,7 +3182,7 @@ const converters = {
|
|
|
3182
3182
|
const payload = {0x100A: {value: value * 10, type: 0x20}};
|
|
3183
3183
|
await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
|
|
3184
3184
|
} else if (key==='display_auto_off_enabled') {
|
|
3185
|
-
const lookup = {'
|
|
3185
|
+
const lookup = {'disabled': 0, 'enabled': 1};
|
|
3186
3186
|
const payload = {0x100B: {value: lookup[value], type: herdsman.Zcl.DataType.enum8}};
|
|
3187
3187
|
await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
|
|
3188
3188
|
} else if (key==='alarm_airtemp_overvalue') {
|
package/devices/lixee.js
CHANGED
|
@@ -48,7 +48,7 @@ const fzLocal = {
|
|
|
48
48
|
|
|
49
49
|
for (const at of elements) {
|
|
50
50
|
const at_snake = at.split(/(?=[A-Z])/).join('_').toLowerCase();
|
|
51
|
-
if (msg.data[at]) {
|
|
51
|
+
if (msg.data[at] != null) {
|
|
52
52
|
result[at_snake] = msg.data[at];
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -104,7 +104,7 @@ const fzLocal = {
|
|
|
104
104
|
for (const at of elements) {
|
|
105
105
|
const at_snake = at.split(/(?=[A-Z])/).join('_').toLowerCase();
|
|
106
106
|
let val = msg.data[at];
|
|
107
|
-
if (val) {
|
|
107
|
+
if (val != null) {
|
|
108
108
|
if (val.hasOwnProperty('type') && val.type === 'Buffer') {
|
|
109
109
|
val = Buffer.from(val.data);
|
|
110
110
|
}
|
|
@@ -155,7 +155,7 @@ const fzLocal = {
|
|
|
155
155
|
for (const at of elements) {
|
|
156
156
|
const at_snake = at.split(/(?=[A-Z])/).join('_').toLowerCase();
|
|
157
157
|
const val = msg.data[at];
|
|
158
|
-
if (val) {
|
|
158
|
+
if (val != null) {
|
|
159
159
|
result[at_snake] = val; // By default we assign raw value
|
|
160
160
|
switch (at) {
|
|
161
161
|
// If we receive a Buffer, transform to human readable text
|
package/devices/moes.js
CHANGED
|
@@ -391,19 +391,6 @@ module.exports = [
|
|
|
391
391
|
exposes.numeric('boost_heating_countdown_time_set', ea.STATE_SET).withUnit('second')
|
|
392
392
|
.withDescription('Boost Time Setting 100 sec - 900 sec, (default = 300 sec)').withValueMin(100).withValueMax(900)],
|
|
393
393
|
},
|
|
394
|
-
{
|
|
395
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_la2c2uo9'}],
|
|
396
|
-
model: 'MS-105Z',
|
|
397
|
-
vendor: 'Moes',
|
|
398
|
-
description: '1 gang 2 way Zigbee dimmer switch',
|
|
399
|
-
fromZigbee: [fz.moes_105_dimmer, fz.ignore_basic_report],
|
|
400
|
-
toZigbee: [tz.moes_105_dimmer],
|
|
401
|
-
meta: {turnsOffAtBrightness1: true},
|
|
402
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
403
|
-
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
404
|
-
},
|
|
405
|
-
exposes: [e.light_brightness().setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET)],
|
|
406
|
-
},
|
|
407
394
|
{
|
|
408
395
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_fjjbhx9d'}],
|
|
409
396
|
model: 'ZS-EUD',
|
package/devices/philips.js
CHANGED
|
@@ -2841,4 +2841,11 @@ module.exports = [
|
|
|
2841
2841
|
description: 'Hue white ambiance Fair ceiling with Bluetooth white',
|
|
2842
2842
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2843
2843
|
},
|
|
2844
|
+
{
|
|
2845
|
+
zigbeeModel: ['929003048301'],
|
|
2846
|
+
model: '8719514339163',
|
|
2847
|
+
vendor: 'Philips',
|
|
2848
|
+
description: 'Hue white ambiance Buckram quadruple spotlight with Bluetooth',
|
|
2849
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2850
|
+
},
|
|
2844
2851
|
];
|
package/devices/sunricher.js
CHANGED
|
@@ -2,6 +2,7 @@ const exposes = require('../lib/exposes');
|
|
|
2
2
|
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
4
|
const reporting = require('../lib/reporting');
|
|
5
|
+
const globalStore = require('../lib/store');
|
|
5
6
|
const constants = require('../lib/constants');
|
|
6
7
|
const extend = require('../lib/extend');
|
|
7
8
|
const utils = require('../lib/utils');
|
|
@@ -40,6 +41,14 @@ const fzLocal = {
|
|
|
40
41
|
},
|
|
41
42
|
};
|
|
42
43
|
|
|
44
|
+
function syncTime(endpoint) {
|
|
45
|
+
try {
|
|
46
|
+
const time = Math.round(((new Date()).getTime() - constants.OneJanuary2000) / 1000 + ((new Date()).getTimezoneOffset() * -1) * 60);
|
|
47
|
+
const values = {time: time};
|
|
48
|
+
endpoint.write('genTime', values);
|
|
49
|
+
} catch (error) {/* Do nothing*/}
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
module.exports = [
|
|
44
53
|
{
|
|
45
54
|
zigbeeModel: ['SR-ZG9023A-EU'],
|
|
@@ -351,13 +360,12 @@ module.exports = [
|
|
|
351
360
|
model: 'SR-ZG9092A',
|
|
352
361
|
vendor: 'Sunricher',
|
|
353
362
|
description: 'Touch thermostat',
|
|
354
|
-
fromZigbee: [fz.thermostat, fz.namron_thermostat, fz.metering, fz.electrical_measurement],
|
|
363
|
+
fromZigbee: [fz.thermostat, fz.namron_thermostat, fz.metering, fz.electrical_measurement, fz.namron_hvac_user_interface],
|
|
355
364
|
toZigbee: [tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_occupancy,
|
|
356
365
|
tz.thermostat_local_temperature_calibration, tz.thermostat_local_temperature, tz.thermostat_outdoor_temperature,
|
|
357
366
|
tz.thermostat_system_mode, tz.thermostat_control_sequence_of_operation, tz.thermostat_running_state,
|
|
358
|
-
tz.namron_thermostat],
|
|
367
|
+
tz.namron_thermostat, tz.namron_thermostat_child_lock],
|
|
359
368
|
exposes: [
|
|
360
|
-
e.local_temperature(),
|
|
361
369
|
exposes.numeric('outdoor_temperature', ea.STATE_GET).withUnit('°C')
|
|
362
370
|
.withDescription('Current temperature measured from the floor sensor'),
|
|
363
371
|
exposes.climate()
|
|
@@ -369,7 +377,11 @@ module.exports = [
|
|
|
369
377
|
.withRunningState(['idle', 'heat']),
|
|
370
378
|
exposes.binary('away_mode', ea.ALL, 'ON', 'OFF')
|
|
371
379
|
.withDescription('Enable/disable away mode'),
|
|
380
|
+
exposes.binary('child_lock', ea.ALL, 'UNLOCK', 'LOCK')
|
|
381
|
+
.withDescription('Enables/disables physical input on the device'),
|
|
372
382
|
e.power(), e.current(), e.voltage(), e.energy(),
|
|
383
|
+
exposes.enum('lcd_brightness', ea.ALL, ['low', 'mid', 'high'])
|
|
384
|
+
.withDescription('OLED brightness when operating the buttons. Default: Medium.'),
|
|
373
385
|
exposes.enum('button_vibration_level', ea.ALL, ['off', 'low', 'high'])
|
|
374
386
|
.withDescription('Key beep volume and vibration level. Default: Low.'),
|
|
375
387
|
exposes.enum('floor_sensor_type', ea.ALL, ['10k', '15k', '50k', '100k', '12k'])
|
|
@@ -398,11 +410,24 @@ module.exports = [
|
|
|
398
410
|
.withUnit('°C')
|
|
399
411
|
.withValueMin(0.5).withValueMax(2).withValueStep(0.1)
|
|
400
412
|
.withDescription('Hysteresis setting, between 0.5 and 2 in 0.1 °C. Default: 0.5.'),
|
|
413
|
+
exposes.enum('display_auto_off_enabled', ea.ALL, ['disabled', 'enabled']),
|
|
401
414
|
exposes.numeric('alarm_airtemp_overvalue', ea.ALL)
|
|
402
415
|
.withUnit('°C')
|
|
403
416
|
.withValueMin(20).withValueMax(60)
|
|
404
417
|
.withDescription('Room temperature alarm threshold, between 20 and 60 in °C. 0 means disabled. Default: 45.'),
|
|
405
418
|
],
|
|
419
|
+
onEvent: async (type, data, device, options) => {
|
|
420
|
+
if (type === 'stop') {
|
|
421
|
+
clearInterval(globalStore.getValue(device, 'time'));
|
|
422
|
+
globalStore.clearValue(device, 'time');
|
|
423
|
+
} else if (!globalStore.hasValue(device, 'time')) {
|
|
424
|
+
const endpoint = device.getEndpoint(1);
|
|
425
|
+
const hours24 = 1000 * 60 * 60 * 24;
|
|
426
|
+
// Device does not ask for the time with binding, therefore we write the time every 24 hours
|
|
427
|
+
const interval = setInterval(async () => syncTime(endpoint), hours24);
|
|
428
|
+
globalStore.putValue(device, 'time', interval);
|
|
429
|
+
}
|
|
430
|
+
},
|
|
406
431
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
407
432
|
const endpoint = device.getEndpoint(1);
|
|
408
433
|
const binds = [
|
|
@@ -415,6 +440,7 @@ module.exports = [
|
|
|
415
440
|
await reporting.thermostatTemperature(endpoint);
|
|
416
441
|
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
417
442
|
await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
|
|
443
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
418
444
|
|
|
419
445
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
420
446
|
attribute: 'ocupancy',
|
|
@@ -425,16 +451,24 @@ module.exports = [
|
|
|
425
451
|
|
|
426
452
|
await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor', 'acCurrentMultiplier']);
|
|
427
453
|
await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor']);
|
|
454
|
+
await endpoint.read('seMetering', ['multiplier', 'divisor']);
|
|
428
455
|
|
|
429
|
-
await reporting.activePower(endpoint);
|
|
430
|
-
await reporting.rmsCurrent(endpoint, {min:
|
|
431
|
-
await reporting.rmsVoltage(endpoint, {min:
|
|
456
|
+
await reporting.activePower(endpoint, {min: 30, change: 10}); // Min report change 10W
|
|
457
|
+
await reporting.rmsCurrent(endpoint, {min: 30, change: 50}); // Min report change 0.05A
|
|
458
|
+
await reporting.rmsVoltage(endpoint, {min: 30, change: 20}); // Min report change 2V
|
|
459
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
432
460
|
await reporting.currentSummDelivered(endpoint);
|
|
433
461
|
|
|
434
462
|
// Custom attributes
|
|
435
463
|
const options = {manufacturerCode: 0x1224}; // Sunricher Manufacturer Code
|
|
436
464
|
|
|
437
|
-
// OperateDisplayLcdBrightnesss
|
|
465
|
+
// OperateDisplayLcdBrightnesss
|
|
466
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
467
|
+
attribute: {ID: 0x1000, type: 0x30},
|
|
468
|
+
minimumReportInterval: 0,
|
|
469
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
470
|
+
reportableChange: null}],
|
|
471
|
+
options);
|
|
438
472
|
// ButtonVibrationLevel
|
|
439
473
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
440
474
|
attribute: {ID: 0x1001, type: 0x30},
|
|
@@ -507,6 +541,14 @@ module.exports = [
|
|
|
507
541
|
reportableChange: 0}],
|
|
508
542
|
options);
|
|
509
543
|
|
|
544
|
+
// DisplayAutoOffEnable
|
|
545
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
546
|
+
attribute: {ID: 0x100B, type: 0x30},
|
|
547
|
+
minimumReportInterval: 0,
|
|
548
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
549
|
+
reportableChange: null}],
|
|
550
|
+
options);
|
|
551
|
+
|
|
510
552
|
// AlarmAirTempOverValue
|
|
511
553
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
512
554
|
attribute: {ID: 0x2001, type: 0x20},
|
|
@@ -523,12 +565,13 @@ module.exports = [
|
|
|
523
565
|
options);
|
|
524
566
|
|
|
525
567
|
// Device does not asks for the time with binding, we need to write time during configure
|
|
568
|
+
syncTime(endpoint);
|
|
526
569
|
|
|
527
570
|
// Trigger initial read
|
|
528
571
|
await endpoint.read('hvacThermostat', ['systemMode', 'runningState', 'occupiedHeatingSetpoint']);
|
|
529
|
-
await endpoint.read('hvacThermostat', [0x1001, 0x1002, 0x1003], options);
|
|
572
|
+
await endpoint.read('hvacThermostat', [0x1000, 0x1001, 0x1002, 0x1003], options);
|
|
530
573
|
await endpoint.read('hvacThermostat', [0x1004, 0x1005, 0x1006, 0x1007], options);
|
|
531
|
-
await endpoint.read('hvacThermostat', [0x1008, 0x1009, 0x100A], options);
|
|
574
|
+
await endpoint.read('hvacThermostat', [0x1008, 0x1009, 0x100A, 0x100B], options);
|
|
532
575
|
await endpoint.read('hvacThermostat', [0x2001, 0x2002], options);
|
|
533
576
|
},
|
|
534
577
|
},
|
package/devices/tuya.js
CHANGED
|
@@ -793,6 +793,7 @@ module.exports = [
|
|
|
793
793
|
fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_hktqahrq'}, {manufacturerName: '_TZ3000_hktqahrq'},
|
|
794
794
|
{manufacturerName: '_TZ3000_q6a3tepg'}, {modelID: 'TS000F', manufacturerName: '_TZ3000_m9af2l6g'},
|
|
795
795
|
{modelID: 'TS000F', manufacturerName: '_TZ3000_mx3vgyea'},
|
|
796
|
+
{modelID: 'TS000F', manufacturerName: '_TZ3000_xkap8wtb'},
|
|
796
797
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_npzfdcof'},
|
|
797
798
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_5ng23zjs'},
|
|
798
799
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_rmjr4ufz'},
|
|
@@ -1168,7 +1169,7 @@ module.exports = [
|
|
|
1168
1169
|
],
|
|
1169
1170
|
},
|
|
1170
1171
|
{
|
|
1171
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ip2akl4w', '_TZE200_1agwnems']),
|
|
1172
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ip2akl4w', '_TZE200_1agwnems', '_TZE200_la2c2uo9', '_TZE200_579lguh2']),
|
|
1172
1173
|
model: 'TS0601_dimmer_1',
|
|
1173
1174
|
vendor: 'TuYa',
|
|
1174
1175
|
description: 'Zigbee smart dimmer',
|
|
@@ -1188,6 +1189,10 @@ module.exports = [
|
|
|
1188
1189
|
[14, 'power_on_behavior', tuya.valueConverter.powerOnBehavior],
|
|
1189
1190
|
],
|
|
1190
1191
|
},
|
|
1192
|
+
whiteLabel: [
|
|
1193
|
+
{vendor: 'Moes', model: 'MS-105Z'},
|
|
1194
|
+
{vendor: 'Lerlink', model: 'X706U'},
|
|
1195
|
+
],
|
|
1191
1196
|
},
|
|
1192
1197
|
{
|
|
1193
1198
|
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_oiymh3qu'}],
|
|
@@ -2315,19 +2320,20 @@ module.exports = [
|
|
|
2315
2320
|
fromZigbee: [tuya.fzDataPoints],
|
|
2316
2321
|
toZigbee: [tuya.tzDataPoints],
|
|
2317
2322
|
configure: tuya.configureMagicPacket,
|
|
2318
|
-
exposes: [tuya.exposes.switch(), e.ac_frequency(), e.energy(), e.power(), e.power_factor(), e.voltage(), e.current()
|
|
2323
|
+
exposes: [tuya.exposes.switch(), e.ac_frequency(), e.energy(), e.power(), e.power_factor(), e.voltage(), e.current(),
|
|
2324
|
+
e.produced_energy()],
|
|
2319
2325
|
meta: {
|
|
2320
2326
|
tuyaDatapoints: [
|
|
2321
2327
|
[1, 'energy', tuya.valueConverter.divideBy100],
|
|
2322
2328
|
[6, null, tuya.valueConverter.phaseA], // voltage and current
|
|
2323
2329
|
[16, 'state', tuya.valueConverter.onOff],
|
|
2330
|
+
[102, 'produced_energy', tuya.valueConverter.divideBy100],
|
|
2324
2331
|
[103, 'power', tuya.valueConverter.raw],
|
|
2325
2332
|
[105, 'ac_frequency', tuya.valueConverter.divideBy100],
|
|
2326
2333
|
[111, 'power_factor', tuya.valueConverter.divideBy10],
|
|
2327
2334
|
// Ignored for now; we don't know what the values mean
|
|
2328
2335
|
[109, null, null], // reactive_power in VArh, ignored for now
|
|
2329
2336
|
[101, null, null], // total active power (translated from chinese) - same as energy dp 1??
|
|
2330
|
-
[102, null, null], // Reverse active power (translated from chinese), produced power? (e.g. if solar panels are connected)
|
|
2331
2337
|
[9, null, null], // Fault - we don't know the possible values here
|
|
2332
2338
|
[110, null, null], // total reactive power (translated from chinese) - value is 0.03kvar, we already have kvarh on dp 109
|
|
2333
2339
|
[17, null, null], // Alarm set1 - value seems garbage "AAAAAAAAAAAAAABkAAEOAACqAAAAAAAKAAAAAAAA"
|
|
@@ -3221,6 +3227,7 @@ module.exports = [
|
|
|
3221
3227
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
|
|
3222
3228
|
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
|
|
3223
3229
|
{modelID: 'TS0601', manufacturerName: '_TZE200_jva8ink8'},
|
|
3230
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_holel4dk'},
|
|
3224
3231
|
{modelID: 'TS0601', manufacturerName: '_TZE200_wukb7rhc'},
|
|
3225
3232
|
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
|
|
3226
3233
|
model: 'TS0601_smart_human_presense_sensor',
|
package/lib/exposes.js
CHANGED
|
@@ -549,6 +549,7 @@ module.exports = {
|
|
|
549
549
|
eco_temperature: () => new Numeric('eco_temperature', access.STATE_SET).withUnit('°C').withDescription('Eco temperature').withValueMin(0).withValueMax(35),
|
|
550
550
|
effect: () => new Enum('effect', access.SET, ['blink', 'breathe', 'okay', 'channel_change', 'finish_effect', 'stop_effect']).withDescription('Triggers an effect on the light (e.g. make light blink for a few seconds)'),
|
|
551
551
|
energy: () => new Numeric('energy', access.STATE).withUnit('kWh').withDescription('Sum of consumed energy'),
|
|
552
|
+
produced_energy: () => new Numeric('produced_energy', access.STATE).withUnit('kWh').withDescription('Sum of produced energy'),
|
|
552
553
|
fan: () => new Fan(),
|
|
553
554
|
flip_indicator_light: () => new Binary('flip_indicator_light', access.ALL, 'ON', 'OFF').withDescription('After turn on, the indicator light turns on while switch is off, and vice versa'),
|
|
554
555
|
force: () => new Enum('force', access.STATE_SET, ['normal', 'open', 'close']).withDescription('Force the valve position'),
|
package/package.json
CHANGED
package/devices/lerlink.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const exposes = require('../lib/exposes');
|
|
2
|
-
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
|
-
const tz = require('../converters/toZigbee');
|
|
4
|
-
const e = exposes.presets;
|
|
5
|
-
const ea = exposes.access;
|
|
6
|
-
|
|
7
|
-
module.exports = [
|
|
8
|
-
{
|
|
9
|
-
fingerprint: [
|
|
10
|
-
{modelID: 'TS0601', manufacturerName: '_TZE200_579lguh2'},
|
|
11
|
-
],
|
|
12
|
-
model: 'X706U',
|
|
13
|
-
vendor: 'Lerlink',
|
|
14
|
-
description: 'Zigbee dimmer switch',
|
|
15
|
-
fromZigbee: [fz.moes_105_dimmer, fz.ignore_basic_report],
|
|
16
|
-
toZigbee: [tz.moes_105_dimmer],
|
|
17
|
-
exposes: [e.light_brightness().setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET)],
|
|
18
|
-
},
|
|
19
|
-
];
|