zigbee-herdsman-converters 14.0.426 → 14.0.430
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 +9 -8
- package/devices/evn.js +26 -0
- package/devices/gidealed.js +11 -0
- package/devices/jumitech.js +18 -0
- package/devices/lidl.js +2 -1
- package/devices/lixee.js +1 -1
- package/devices/philips.js +19 -1
- package/devices/robb.js +4 -2
- package/devices/stelpro.js +3 -3
- package/devices/xiaomi.js +10 -13
- package/lib/exposes.js +2 -2
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -5527,15 +5527,16 @@ const converters = {
|
|
|
5527
5527
|
const actionLookup = !isLegacyEnabled(options) && ['QBKG03LM', 'QBKG22LM', 'QBKG04LM', 'QBKG21LM'].includes(model.model) ?
|
|
5528
5528
|
{0: 'hold', 1: 'release', 2: 'double'} : {0: 'single', 1: 'single'};
|
|
5529
5529
|
|
|
5530
|
-
|
|
5531
|
-
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
}
|
|
5536
|
-
} else {
|
|
5537
|
-
return {action: actionLookup[msg.data['onOff']]};
|
|
5530
|
+
const action = actionLookup[msg.data['onOff']];
|
|
5531
|
+
const button = mapping && mapping[msg.endpoint.ID] ? `_${mapping[msg.endpoint.ID]}` : '';
|
|
5532
|
+
|
|
5533
|
+
if (action === 'release') {
|
|
5534
|
+
const anotherAction = globalStore.getValue(msg.endpoint, 'hold', false) ? 'hold_release' : 'single';
|
|
5535
|
+
publish({action: `${anotherAction}${button}`});
|
|
5538
5536
|
}
|
|
5537
|
+
globalStore.putValue(msg.endpoint, 'hold', action === 'hold');
|
|
5538
|
+
|
|
5539
|
+
return {action: `${action}${button}`};
|
|
5539
5540
|
},
|
|
5540
5541
|
},
|
|
5541
5542
|
xiaomi_multistate_action: {
|
package/devices/evn.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
|
+
const reporting = require('../lib/reporting');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
module.exports = [
|
|
7
|
+
{
|
|
8
|
+
zigbeeModel: ['EVN ZBHS4RGBW'],
|
|
9
|
+
model: 'ZBHS4RGBW',
|
|
10
|
+
vendor: 'EVN',
|
|
11
|
+
description: 'Zigbee 4 channel RGBW remote control',
|
|
12
|
+
fromZigbee: [fz.battery, fz.command_on, fz.command_off, fz.command_step, fz.command_move, fz.command_stop, fz.command_recall,
|
|
13
|
+
fz.command_move_hue, fz.command_move_to_color, fz.command_move_to_color_temp],
|
|
14
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up',
|
|
15
|
+
'brightness_move_down', 'brightness_stop', 'recall_1', 'recall_2', 'recall_3', 'hue_move', 'color_temperature_move',
|
|
16
|
+
'color_move', 'hue_stop'])],
|
|
17
|
+
toZigbee: [],
|
|
18
|
+
meta: {multiEndpoint: true, battery: {dontDividePercentage: true}},
|
|
19
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
20
|
+
const endpoint = device.getEndpoint(1);
|
|
21
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
|
|
22
|
+
await reporting.batteryVoltage(endpoint);
|
|
23
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['A11'],
|
|
6
|
+
model: 'ZC05M',
|
|
7
|
+
vendor: 'GIDEALED',
|
|
8
|
+
description: 'Smart Zigbee RGB LED strip controller',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153, 500]}),
|
|
10
|
+
},
|
|
11
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const reporting = require('../lib/reporting');
|
|
2
|
+
const extend = require('../lib/extend');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['J2182548'],
|
|
7
|
+
model: 'J2182548',
|
|
8
|
+
vendor: 'JUMITECH APS',
|
|
9
|
+
description: 'ZigBee AC phase-cut dimmer single-line',
|
|
10
|
+
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
11
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
12
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
13
|
+
const endpoint = device.getEndpoint(1);
|
|
14
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
15
|
+
await reporting.onOff(endpoint);
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
];
|
package/devices/lidl.js
CHANGED
|
@@ -508,7 +508,8 @@ module.exports = [
|
|
|
508
508
|
},
|
|
509
509
|
},
|
|
510
510
|
{
|
|
511
|
-
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_th6zqqy6'}
|
|
511
|
+
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_th6zqqy6'},
|
|
512
|
+
{modelID: 'TS0505B', manufacturerName: '_TZ3000_wr6g6olr'}],
|
|
512
513
|
model: 'HG07834B',
|
|
513
514
|
vendor: 'Lidl',
|
|
514
515
|
description: 'Livarno Lux E14 candle RGB',
|
package/devices/lixee.js
CHANGED
|
@@ -298,7 +298,7 @@ const clustersDef = {
|
|
|
298
298
|
const exposedData = [
|
|
299
299
|
// Historique
|
|
300
300
|
{cluster: clustersDef._0x0702, att: 'meterSerialNumber', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.text('ADCO', ea.STATE).withProperty('meter_serial_number').withDescription('Serial Number')},
|
|
301
|
-
{cluster: clustersDef._0x0702, att: 'currentSummDelivered', reportable: true, report: {change: 100}, onlyProducer: false, linkyPhase: linkyPhaseDef.
|
|
301
|
+
{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
302
|
{cluster: clustersDef._0xFF66, att: 'currentTarif', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.text('OPTARIF', ea.STATE).withProperty('current_tarif').withDescription('Tarif option')},
|
|
303
303
|
{cluster: clustersDef._0x0B01, att: 'availablePower', reportable: false, onlyProducer: false, linkyPhase: linkyPhaseDef.single, linkyMode: linkyModeDef.legacy, exposes: exposes.numeric('ISOUSC', ea.STATE).withUnit('A').withProperty('available_power').withDescription('Subscribed intensity level')},
|
|
304
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')},
|
package/devices/philips.js
CHANGED
|
@@ -2437,6 +2437,15 @@ module.exports = [
|
|
|
2437
2437
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2438
2438
|
ota: ota.zigbeeOTA,
|
|
2439
2439
|
},
|
|
2440
|
+
{
|
|
2441
|
+
zigbeeModel: ['LCX001'],
|
|
2442
|
+
model: '929002422702',
|
|
2443
|
+
vendor: 'Philips',
|
|
2444
|
+
description: 'Hue Play gradient lightstrip 55',
|
|
2445
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2446
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2447
|
+
ota: ota.zigbeeOTA,
|
|
2448
|
+
},
|
|
2440
2449
|
{
|
|
2441
2450
|
zigbeeModel: ['LCX002'],
|
|
2442
2451
|
model: '929002422801',
|
|
@@ -2446,6 +2455,15 @@ module.exports = [
|
|
|
2446
2455
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2447
2456
|
ota: ota.zigbeeOTA,
|
|
2448
2457
|
},
|
|
2458
|
+
{
|
|
2459
|
+
zigbeeModel: ['929003099301'],
|
|
2460
|
+
model: '929003099301',
|
|
2461
|
+
vendor: 'Philips',
|
|
2462
|
+
description: 'Hue white ambiance Aurelle round panel light',
|
|
2463
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2464
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2465
|
+
ota: ota.zigbeeOTA,
|
|
2466
|
+
},
|
|
2449
2467
|
{
|
|
2450
2468
|
zigbeeModel: ['3418331P6'],
|
|
2451
2469
|
model: '3418331P6',
|
|
@@ -2707,7 +2725,7 @@ module.exports = [
|
|
|
2707
2725
|
ota: ota.zigbeeOTA,
|
|
2708
2726
|
},
|
|
2709
2727
|
{
|
|
2710
|
-
zigbeeModel: ['915005997301'],
|
|
2728
|
+
zigbeeModel: ['915005997301', '915005997201'],
|
|
2711
2729
|
model: '915005997301',
|
|
2712
2730
|
vendor: 'Philips',
|
|
2713
2731
|
description: 'Hue Bluetooth white & color ambiance ceiling lamp Infuse medium',
|
package/devices/robb.js
CHANGED
|
@@ -139,9 +139,11 @@ module.exports = [
|
|
|
139
139
|
model: 'ROB_200-018-0',
|
|
140
140
|
vendor: 'ROBB',
|
|
141
141
|
description: 'ZigBee knob smart dimmer',
|
|
142
|
-
fromZigbee: [fz.command_on, fz.command_off, fz.command_move_to_level, fz.command_move_to_color_temp
|
|
143
|
-
|
|
142
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.command_move_to_level, fz.command_move_to_color_temp, fz.battery,
|
|
143
|
+
fz.command_move_to_color],
|
|
144
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_to_level', 'color_temperature_move', 'color_move'])],
|
|
144
145
|
toZigbee: [],
|
|
146
|
+
meta: {multiEndpoint: true, battery: {dontDividePercentage: true}},
|
|
145
147
|
whiteLabel: [{vendor: 'Sunricher', model: 'SR-ZG2835'}],
|
|
146
148
|
},
|
|
147
149
|
{
|
package/devices/stelpro.js
CHANGED
|
@@ -47,7 +47,7 @@ module.exports = [
|
|
|
47
47
|
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
|
|
48
48
|
tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode,
|
|
49
49
|
tz.thermostat_running_state, tz.stelpro_thermostat_outdoor_temperature],
|
|
50
|
-
exposes: [e.local_temperature(), e.keypad_lockout(),
|
|
50
|
+
exposes: [e.local_temperature(), e.keypad_lockout(), e.humidity(),
|
|
51
51
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withLocalTemperature()
|
|
52
52
|
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])],
|
|
53
53
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -79,7 +79,7 @@ module.exports = [
|
|
|
79
79
|
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
|
|
80
80
|
tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
81
81
|
tz.stelpro_thermostat_outdoor_temperature],
|
|
82
|
-
exposes: [e.local_temperature(), e.keypad_lockout(),
|
|
82
|
+
exposes: [e.local_temperature(), e.keypad_lockout(), e.humidity(),
|
|
83
83
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withLocalTemperature()
|
|
84
84
|
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])],
|
|
85
85
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -142,7 +142,7 @@ module.exports = [
|
|
|
142
142
|
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
|
|
143
143
|
tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
144
144
|
tz.stelpro_thermostat_outdoor_temperature],
|
|
145
|
-
exposes: [e.local_temperature(), e.keypad_lockout(),
|
|
145
|
+
exposes: [e.local_temperature(), e.keypad_lockout(), e.humidity(),
|
|
146
146
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withLocalTemperature()
|
|
147
147
|
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])],
|
|
148
148
|
configure: async (device, coordinatorEndpoint, logger) => {
|
package/devices/xiaomi.js
CHANGED
|
@@ -353,8 +353,7 @@ module.exports = [
|
|
|
353
353
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
354
354
|
const endpoint1 = device.getEndpoint(1);
|
|
355
355
|
// set "event" mode
|
|
356
|
-
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f,
|
|
357
|
-
disableDefaultResponse: true, disableResponse: true});
|
|
356
|
+
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
358
357
|
},
|
|
359
358
|
},
|
|
360
359
|
{
|
|
@@ -378,8 +377,7 @@ module.exports = [
|
|
|
378
377
|
e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both'])],
|
|
379
378
|
onEvent: preventReset,
|
|
380
379
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
381
|
-
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f,
|
|
382
|
-
disableDefaultResponse: true, disableResponse: true});
|
|
380
|
+
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
383
381
|
},
|
|
384
382
|
},
|
|
385
383
|
{
|
|
@@ -397,8 +395,7 @@ module.exports = [
|
|
|
397
395
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
398
396
|
const endpoint1 = device.getEndpoint(1);
|
|
399
397
|
// set "event" mode
|
|
400
|
-
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f,
|
|
401
|
-
disableDefaultResponse: true, disableResponse: true});
|
|
398
|
+
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
402
399
|
},
|
|
403
400
|
},
|
|
404
401
|
{
|
|
@@ -424,8 +421,7 @@ module.exports = [
|
|
|
424
421
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
425
422
|
const endpoint1 = device.getEndpoint(1);
|
|
426
423
|
// set "event" mode
|
|
427
|
-
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f,
|
|
428
|
-
disableDefaultResponse: true, disableResponse: true});
|
|
424
|
+
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
429
425
|
},
|
|
430
426
|
},
|
|
431
427
|
{
|
|
@@ -436,7 +432,7 @@ module.exports = [
|
|
|
436
432
|
fromZigbee: [fz.xiaomi_on_off_ignore_endpoint_4_5_6, fz.xiaomi_on_off_action, fz.legacy.QBKG04LM_QBKG11LM_click,
|
|
437
433
|
fz.xiaomi_operation_mode_basic],
|
|
438
434
|
exposes: [
|
|
439
|
-
e.switch(), e.action(['release', 'hold', 'double']),
|
|
435
|
+
e.switch(), e.action(['release', 'hold', 'double', 'single', 'hold_release']),
|
|
440
436
|
exposes.enum('operation_mode', ea.STATE_SET, ['control_relay', 'decoupled'])
|
|
441
437
|
.withDescription('Decoupled mode'),
|
|
442
438
|
],
|
|
@@ -484,7 +480,8 @@ module.exports = [
|
|
|
484
480
|
e.switch().withEndpoint('left'),
|
|
485
481
|
e.switch().withEndpoint('right'),
|
|
486
482
|
e.temperature(),
|
|
487
|
-
e.action(['release_left', 'release_right', 'release_both', 'double_left', 'double_right'
|
|
483
|
+
e.action(['release_left', 'release_right', 'release_both', 'double_left', 'double_right',
|
|
484
|
+
'single_left', 'single_right', 'hold_release_left', 'hold_release_left']),
|
|
488
485
|
exposes.enum('operation_mode', ea.STATE_SET, ['control_left_relay', 'control_right_relay', 'decoupled'])
|
|
489
486
|
.withDescription('Operation mode for left button')
|
|
490
487
|
.withEndpoint('left'),
|
|
@@ -560,8 +557,7 @@ module.exports = [
|
|
|
560
557
|
fromZigbee: [fz.xiaomi_on_off_ignore_endpoint_4_5_6, fz.xiaomi_on_off_action, fz.legacy.QBKG04LM_QBKG11LM_click,
|
|
561
558
|
fz.xiaomi_operation_mode_basic],
|
|
562
559
|
exposes: [
|
|
563
|
-
e.switch(),
|
|
564
|
-
e.action(['single', 'hold', 'release']),
|
|
560
|
+
e.switch(), e.action(['release', 'hold', 'double', 'single', 'hold_release']),
|
|
565
561
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
566
562
|
.withDescription('Decoupled mode'),
|
|
567
563
|
],
|
|
@@ -586,7 +582,8 @@ module.exports = [
|
|
|
586
582
|
exposes: [
|
|
587
583
|
e.switch().withEndpoint('left'),
|
|
588
584
|
e.switch().withEndpoint('right'),
|
|
589
|
-
e.action(['
|
|
585
|
+
e.action(['release_left', 'release_right', 'release_both', 'double_left', 'double_right',
|
|
586
|
+
'single_left', 'single_right', 'hold_release_left', 'hold_release_left']),
|
|
590
587
|
exposes.enum('operation_mode', ea.ALL, ['control_left_relay', 'control_right_relay', 'decoupled'])
|
|
591
588
|
.withDescription('Operation mode for left button')
|
|
592
589
|
.withEndpoint('left'),
|
package/lib/exposes.js
CHANGED
|
@@ -503,8 +503,8 @@ module.exports = {
|
|
|
503
503
|
presets: {
|
|
504
504
|
ac_frequency: () => new Numeric('ac_frequency', access.STATE).withUnit('Hz').withDescription('Measured electrical AC frequency'),
|
|
505
505
|
action: (values) => new Enum('action', access.STATE, values).withDescription('Triggered action (e.g. a button click)'),
|
|
506
|
-
angle: (name) => new Numeric(name, access.STATE).withValueMin(-360).withValueMax(360),
|
|
507
|
-
angle_axis: (name) => new Numeric(name, access.STATE).withValueMin(-90).withValueMax(90),
|
|
506
|
+
angle: (name) => new Numeric(name, access.STATE).withValueMin(-360).withValueMax(360).withUnit('°'),
|
|
507
|
+
angle_axis: (name) => new Numeric(name, access.STATE).withValueMin(-90).withValueMax(90).withUnit('°'),
|
|
508
508
|
aqi: () => new Numeric('aqi', access.STATE).withDescription('Air quality index'),
|
|
509
509
|
auto_lock: () => new Switch().withState('auto_lock', false, 'Enable/disable auto lock', access.STATE_SET, 'AUTO', 'MANUAL'),
|
|
510
510
|
auto_relock_time: () => new Numeric('auto_relock_time', access.ALL).withValueMin(0).withUnit('s').withDescription('The number of seconds to wait after unlocking a lock before it automatically locks again. 0=disabled'),
|
package/npm-shrinkwrap.json
CHANGED