zigbee-herdsman-converters 14.0.630 → 14.0.632
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/devices/danfoss.js +1 -1
- package/devices/develco.js +12 -8
- package/devices/gledopto.js +16 -0
- package/devices/immax.js +7 -0
- package/devices/lidl.js +5 -0
- package/devices/moes.js +1 -0
- package/devices/m/303/274ller_licht.js +8 -0
- package/devices/philips.js +7 -0
- package/devices/rtx.js +3 -1
- package/devices/shinasystem.js +4 -4
- package/devices/siglis.js +83 -77
- package/devices/tuya.js +21 -2
- package/devices/xiaomi.js +8 -0
- package/lib/reporting.js +4 -0
- package/lib/tuya.js +12 -12
- package/package.json +1 -1
package/devices/danfoss.js
CHANGED
|
@@ -37,7 +37,7 @@ module.exports = [
|
|
|
37
37
|
.withDescription('Thermostat Orientation. This is important for the PID in how it assesses temperature. ' +
|
|
38
38
|
'`false` Horizontal or `true` Vertical'),
|
|
39
39
|
exposes.binary('viewing_direction', ea.ALL, true, false)
|
|
40
|
-
.withDescription('Viewing/
|
|
40
|
+
.withDescription('Viewing/display direction, `false` normal or `true` upside-down'),
|
|
41
41
|
exposes.binary('heat_available', ea.ALL, true, false)
|
|
42
42
|
.withDescription('Not clear how this affects operation. However, it would appear that the device does not execute any ' +
|
|
43
43
|
'motor functions if this is set to false. This may be a means to conserve battery during periods that the heating ' +
|
package/devices/develco.js
CHANGED
|
@@ -290,16 +290,20 @@ module.exports = [
|
|
|
290
290
|
model: 'MOSZB-140',
|
|
291
291
|
vendor: 'Develco',
|
|
292
292
|
description: 'Motion sensor',
|
|
293
|
-
fromZigbee: [fz.temperature, fz.illuminance, fz.ias_occupancy_alarm_1],
|
|
293
|
+
fromZigbee: [fz.temperature, fz.illuminance, fz.ias_occupancy_alarm_1, fz.battery],
|
|
294
294
|
toZigbee: [],
|
|
295
|
-
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.temperature(), e.illuminance_lux()],
|
|
295
|
+
exposes: [e.occupancy(), e.battery(), e.battery_low(), e.tamper(), e.temperature(), e.illuminance_lux()],
|
|
296
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
296
297
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
297
|
-
const endpoint1 = device.getEndpoint(
|
|
298
|
-
await reporting.bind(endpoint1, coordinatorEndpoint, ['
|
|
299
|
-
await reporting.
|
|
300
|
-
const endpoint2 = device.getEndpoint(
|
|
301
|
-
await reporting.bind(endpoint2, coordinatorEndpoint, ['
|
|
302
|
-
await reporting.
|
|
298
|
+
const endpoint1 = device.getEndpoint(35);
|
|
299
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ['genPowerCfg']);
|
|
300
|
+
await reporting.batteryVoltage(endpoint1, {min: constants.repInterval.HOUR, max: 43200, change: 100});
|
|
301
|
+
const endpoint2 = device.getEndpoint(38);
|
|
302
|
+
await reporting.bind(endpoint2, coordinatorEndpoint, ['msTemperatureMeasurement']);
|
|
303
|
+
await reporting.temperature(endpoint2);
|
|
304
|
+
const endpoint3 = device.getEndpoint(39);
|
|
305
|
+
await reporting.bind(endpoint3, coordinatorEndpoint, ['msIlluminanceMeasurement']);
|
|
306
|
+
await reporting.illuminance(endpoint3);
|
|
303
307
|
},
|
|
304
308
|
},
|
|
305
309
|
{
|
package/devices/gledopto.js
CHANGED
|
@@ -2,6 +2,7 @@ const exposes = require('../lib/exposes');
|
|
|
2
2
|
const globalStore = require('../lib/store');
|
|
3
3
|
const ota = require('../lib/ota');
|
|
4
4
|
const extend = require('../lib/extend');
|
|
5
|
+
const reporting = require('../lib/reporting');
|
|
5
6
|
const utils = require('../lib/utils');
|
|
6
7
|
const tz = require('../converters/toZigbee');
|
|
7
8
|
const e = exposes.presets;
|
|
@@ -600,6 +601,21 @@ module.exports = [
|
|
|
600
601
|
description: 'Zigbee 10W Floodlight RGB+CCT (pro)',
|
|
601
602
|
extend: gledoptoExtend.light_onoff_brightness_colortemp_color(),
|
|
602
603
|
},
|
|
604
|
+
{
|
|
605
|
+
zigbeeModel: ['GL-C-004P'],
|
|
606
|
+
model: 'GL-C-004P',
|
|
607
|
+
vendor: 'Gledopto',
|
|
608
|
+
description: 'Zigbee LED Strip Light Kit',
|
|
609
|
+
extend: gledoptoExtend.light_onoff_brightness_colortemp({noConfigure: true, colorTempRange: [158, 495]}),
|
|
610
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
611
|
+
await extend.light_onoff_brightness_colortemp().configure(device, coordinatorEndpoint, logger);
|
|
612
|
+
const endpoint = device.getEndpoint(11);
|
|
613
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'lightingColorCtrl']);
|
|
614
|
+
await reporting.onOff(endpoint);
|
|
615
|
+
await reporting.brightness(endpoint);
|
|
616
|
+
await reporting.colorTemperature(endpoint);
|
|
617
|
+
},
|
|
618
|
+
},
|
|
603
619
|
{
|
|
604
620
|
zigbeeModel: ['GL-FL-001P'],
|
|
605
621
|
model: 'GL-FL-001P',
|
package/devices/immax.js
CHANGED
|
@@ -53,6 +53,13 @@ module.exports = [
|
|
|
53
53
|
description: 'Neo SMART LED strip RGB + CCT, color, dimmable, Zigbee 3.0',
|
|
54
54
|
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
55
55
|
},
|
|
56
|
+
{
|
|
57
|
+
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_pwauw3g2'}],
|
|
58
|
+
model: '07743L',
|
|
59
|
+
vendor: 'Immax',
|
|
60
|
+
description: 'Neo Smart LED E27 11W RGB + CCT, color, dimmable, Zigbee 3.0',
|
|
61
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
62
|
+
},
|
|
56
63
|
{
|
|
57
64
|
zigbeeModel: ['Keyfob-ZB3.0'],
|
|
58
65
|
model: '07046L',
|
package/devices/lidl.js
CHANGED
|
@@ -407,6 +407,11 @@ module.exports = [
|
|
|
407
407
|
description: 'Silvercrest smart button',
|
|
408
408
|
fromZigbee: [fz.command_on, fz.command_off, fz.command_step, fz.command_stop, fz.battery],
|
|
409
409
|
toZigbee: [],
|
|
410
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
411
|
+
const endpoint = device.getEndpoint(1);
|
|
412
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
413
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
414
|
+
},
|
|
410
415
|
exposes: [e.action(['on', 'off', 'brightness_stop', 'brightness_step_up', 'brightness_step_down']), e.battery()],
|
|
411
416
|
},
|
|
412
417
|
{
|
package/devices/moes.js
CHANGED
|
@@ -416,6 +416,7 @@ module.exports = [
|
|
|
416
416
|
model: 'MS-108ZR',
|
|
417
417
|
vendor: 'Moes',
|
|
418
418
|
description: 'Zigbee + RF curtain switch module',
|
|
419
|
+
meta: {coverInverted: true},
|
|
419
420
|
fromZigbee: [fz.tuya_cover_options, fz.cover_position_tilt],
|
|
420
421
|
toZigbee: [tz.cover_state, tz.moes_cover_calibration, tz.cover_position_tilt, tz.tuya_cover_reversal],
|
|
421
422
|
exposes: [e.cover_position(), exposes.numeric('calibration_time', ea.ALL).withValueMin(0).withValueMax(100),
|
|
@@ -14,6 +14,14 @@ module.exports = [
|
|
|
14
14
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556]}),
|
|
15
15
|
toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
|
|
16
16
|
},
|
|
17
|
+
{
|
|
18
|
+
zigbeeModel: ['Retro Bulb Gold XXL white+ambiance'],
|
|
19
|
+
model: '404065',
|
|
20
|
+
vendor: 'Müller Licht',
|
|
21
|
+
description: 'tint LED-Globe Retro Gold XXL E27',
|
|
22
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
|
|
23
|
+
toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
|
|
24
|
+
},
|
|
17
25
|
{
|
|
18
26
|
zigbeeModel: ['ZBT-DIMLight-A4700001'],
|
|
19
27
|
model: '404023',
|
package/devices/philips.js
CHANGED
|
@@ -2806,4 +2806,11 @@ module.exports = [
|
|
|
2806
2806
|
description: 'Hue white ambiance ceiling black Enrave',
|
|
2807
2807
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2808
2808
|
},
|
|
2809
|
+
{
|
|
2810
|
+
zigbeeModel: ['1740447P0'],
|
|
2811
|
+
model: '8718696166079',
|
|
2812
|
+
vendor: 'Philips',
|
|
2813
|
+
description: 'Hue Tuar outdoor wall light',
|
|
2814
|
+
extend: hueExtend.light_onoff_brightness(),
|
|
2815
|
+
},
|
|
2809
2816
|
];
|
package/devices/rtx.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const fz = require('../converters/fromZigbee');
|
|
2
2
|
const tz = require('../converters/toZigbee');
|
|
3
3
|
const exposes = require('../lib/exposes');
|
|
4
|
+
const tuya = require('../lib/tuya');
|
|
4
5
|
const e = exposes.presets;
|
|
5
6
|
const ea = exposes.access;
|
|
6
7
|
|
|
@@ -14,7 +15,8 @@ module.exports = [
|
|
|
14
15
|
model: 'ZVG1',
|
|
15
16
|
vendor: 'RTX',
|
|
16
17
|
description: 'Zigbee smart water valve',
|
|
17
|
-
|
|
18
|
+
onEvent: tuya.onEventSetLocalTime,
|
|
19
|
+
fromZigbee: [fz.ZVG1, fz.ignore_basic_report],
|
|
18
20
|
toZigbee: [tz.tuya_switch_state, tz.ZVG1_weather_delay, tz.ZVG1_timer, tz.ZVG1_cycle_timer, tz.ZVG1_normal_schedule_timer],
|
|
19
21
|
exposes: [e.switch().setAccess('state', ea.STATE_SET), e.battery(),
|
|
20
22
|
exposes.enum('weather_delay', ea.STATE_SET, ['disabled', '24h', '48h', '72h']),
|
package/devices/shinasystem.js
CHANGED
|
@@ -59,7 +59,7 @@ const fzLocal = {
|
|
|
59
59
|
|
|
60
60
|
const tzLocal = {
|
|
61
61
|
CSM300_SETUP: {
|
|
62
|
-
key: ['rf_pairing_on', 'counting_freeze', 'tof_init', 'led_state', 'rf_state', '
|
|
62
|
+
key: ['rf_pairing_on', 'counting_freeze', 'tof_init', 'led_state', 'rf_state', 'transaction', 'fast_in', 'fast_out'],
|
|
63
63
|
convertSet: async (entity, key, value, meta) => {
|
|
64
64
|
let payload = null;
|
|
65
65
|
const endpoint = meta.device.endpoints.find((e) => e.supportsInputCluster('genAnalogInput'));
|
|
@@ -91,7 +91,7 @@ const tzLocal = {
|
|
|
91
91
|
payload = {'presentValue': 89};
|
|
92
92
|
}
|
|
93
93
|
break;
|
|
94
|
-
case '
|
|
94
|
+
case 'transaction':
|
|
95
95
|
if (value === '0ms') {
|
|
96
96
|
payload = {'presentValue': 90};
|
|
97
97
|
} else if (value === '200ms') {
|
|
@@ -216,8 +216,8 @@ module.exports = [
|
|
|
216
216
|
exposes.enum('tof_init', ea.SET, ['initial']).withDescription('ToF sensor initial'),
|
|
217
217
|
exposes.binary('led_state', ea.SET, 'enable', 'disable').withDescription('Indicate LED enable/disable, default : enable'),
|
|
218
218
|
exposes.binary('rf_state', ea.SET, 'enable', 'disable').withDescription('RF function enable/disable, default : disable'),
|
|
219
|
-
exposes.enum('
|
|
220
|
-
.withDescription('
|
|
219
|
+
exposes.enum('transaction', ea.SET, ['0ms', '200ms', '400ms', '600ms', '800ms', '1,000ms'])
|
|
220
|
+
.withDescription('Transaction interval, default : 400ms'),
|
|
221
221
|
exposes.binary('fast_in', ea.SET, 'enable', 'disable')
|
|
222
222
|
.withDescription('Fast process enable/disable when people 0 to 1. default : enable'),
|
|
223
223
|
exposes.binary('fast_out', ea.SET, 'enable', 'disable')
|
package/devices/siglis.js
CHANGED
|
@@ -41,18 +41,26 @@ const zifgredFromZigbeeButtonEvent = {
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
const coverAndLightToZigbee = {
|
|
44
|
-
key: ['state', 'brightness', 'brightness_percent', 'on_time'],
|
|
44
|
+
key: ['state', 'brightness', 'brightness_percent', 'on_time', 'position', 'tilt'],
|
|
45
45
|
options: [exposes.options.transition()],
|
|
46
46
|
convertSet: async (entity, key, value, meta) => {
|
|
47
|
-
const isCover =
|
|
47
|
+
const isCover = entity.ID === 0x0b || entity.ID === 0x0c;
|
|
48
48
|
if (isCover) {
|
|
49
|
-
|
|
49
|
+
if (key === 'state') {
|
|
50
|
+
return tz.cover_state.convertSet(entity, key, value, meta);
|
|
51
|
+
} else if (key === 'position' || key === 'tilt') {
|
|
52
|
+
return tz.cover_position_tilt.convertSet(entity, key, value, meta);
|
|
53
|
+
}
|
|
50
54
|
} else {
|
|
51
|
-
|
|
55
|
+
if (key === 'state' || key === 'brightness' || key === 'brightness_percent' || key === 'on_time') {
|
|
56
|
+
return tz.light_onoff_brightness.convertSet(entity, key, value, meta);
|
|
57
|
+
}
|
|
52
58
|
}
|
|
53
59
|
},
|
|
54
60
|
convertGet: async (entity, key, meta) => {
|
|
55
|
-
if (key === '
|
|
61
|
+
if (key === 'state' && (entity.ID === 0x0b || entity.ID === 0x0c)) {
|
|
62
|
+
await tz.cover_position_tilt.convertGet(entity, 'position', meta);
|
|
63
|
+
} else if (key === 'brightness') {
|
|
56
64
|
await entity.read('genLevelCtrl', ['currentLevel']);
|
|
57
65
|
} else if (key === 'state') {
|
|
58
66
|
await tz.on_off.convertGet(entity, key, meta);
|
|
@@ -68,7 +76,7 @@ const buttonEventExposes = e.action([
|
|
|
68
76
|
]);
|
|
69
77
|
|
|
70
78
|
function checkOption(device, options, key) {
|
|
71
|
-
if (options.hasOwnProperty(key)) {
|
|
79
|
+
if (options != null && options.hasOwnProperty(key)) {
|
|
72
80
|
if (options[key] === 'true') {
|
|
73
81
|
return true;
|
|
74
82
|
} else if (options[key] === 'false') {
|
|
@@ -80,16 +88,22 @@ function checkOption(device, options, key) {
|
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
function checkMetaOption(device, key) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
if (device != null) {
|
|
92
|
+
const enabled = device.meta[key];
|
|
93
|
+
if (enabled === undefined) {
|
|
94
|
+
return false;
|
|
95
|
+
} else {
|
|
96
|
+
return !!enabled;
|
|
97
|
+
}
|
|
88
98
|
}
|
|
99
|
+
|
|
100
|
+
return false;
|
|
89
101
|
}
|
|
90
102
|
|
|
91
103
|
function setMetaOption(device, key, enabled) {
|
|
92
|
-
device
|
|
104
|
+
if (device != null && key != null) {
|
|
105
|
+
device.meta[key] = enabled;
|
|
106
|
+
}
|
|
93
107
|
}
|
|
94
108
|
|
|
95
109
|
module.exports = [
|
|
@@ -114,21 +128,19 @@ module.exports = [
|
|
|
114
128
|
expose.push(buttonEventExposes);
|
|
115
129
|
expose.push(e.linkquality());
|
|
116
130
|
|
|
117
|
-
if (device
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
131
|
+
if (checkOption(device, options, 'front_surface_enabled')) {
|
|
132
|
+
expose.push(e.light_brightness_colorxy().withEndpoint('l1'));
|
|
133
|
+
}
|
|
121
134
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
135
|
+
if (checkOption(device, options, 'relay_enabled')) {
|
|
136
|
+
expose.push(e.switch().withEndpoint('l2'));
|
|
137
|
+
}
|
|
125
138
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
139
|
+
if (checkOption(device, options, 'dimmer_enabled')) {
|
|
140
|
+
if (checkOption(device, options, 'dimmer_dimming_enabled')) {
|
|
141
|
+
expose.push(e.light_brightness().withEndpoint('l3'));
|
|
142
|
+
} else {
|
|
143
|
+
expose.push(e.switch().withEndpoint('l3'));
|
|
132
144
|
}
|
|
133
145
|
}
|
|
134
146
|
|
|
@@ -238,65 +250,63 @@ module.exports = [
|
|
|
238
250
|
expose.push(buttonEventExposes);
|
|
239
251
|
expose.push(e.linkquality());
|
|
240
252
|
|
|
241
|
-
if (device
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
253
|
+
if (checkOption(device, options, 'front_surface_enabled')) {
|
|
254
|
+
expose.push(e.light_brightness_colorxy().withEndpoint('l1'));
|
|
255
|
+
}
|
|
245
256
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
257
|
+
if (checkOption(device, options, 'dimmer_1_enabled')) {
|
|
258
|
+
if (checkOption(device, options, 'dimmer_1_dimming_enabled')) {
|
|
259
|
+
expose.push(e.light_brightness().withEndpoint('l2'));
|
|
260
|
+
} else {
|
|
261
|
+
expose.push(e.switch().withEndpoint('l2'));
|
|
252
262
|
}
|
|
263
|
+
}
|
|
253
264
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}
|
|
265
|
+
if (checkOption(device, options, 'dimmer_2_enabled')) {
|
|
266
|
+
if (checkOption(device, options, 'dimmer_2_dimming_enabled')) {
|
|
267
|
+
expose.push(e.light_brightness().withEndpoint('l3'));
|
|
268
|
+
} else {
|
|
269
|
+
expose.push(e.switch().withEndpoint('l3'));
|
|
260
270
|
}
|
|
271
|
+
}
|
|
261
272
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
}
|
|
273
|
+
if (checkOption(device, options, 'dimmer_3_enabled')) {
|
|
274
|
+
if (checkOption(device, options, 'dimmer_3_dimming_enabled')) {
|
|
275
|
+
expose.push(e.light_brightness().withEndpoint('l4'));
|
|
276
|
+
} else {
|
|
277
|
+
expose.push(e.switch().withEndpoint('l4'));
|
|
268
278
|
}
|
|
279
|
+
}
|
|
269
280
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
281
|
+
if (checkOption(device, options, 'dimmer_4_enabled')) {
|
|
282
|
+
if (checkOption(device, options, 'dimmer_4_dimming_enabled')) {
|
|
283
|
+
expose.push(e.light_brightness().withEndpoint('l5'));
|
|
284
|
+
} else {
|
|
285
|
+
expose.push(e.switch().withEndpoint('l5'));
|
|
276
286
|
}
|
|
287
|
+
}
|
|
277
288
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
289
|
+
if (checkOption(device, options, 'cover_1_enabled')) {
|
|
290
|
+
if (checkOption(device, options, 'cover_1_tilt_enabled')) {
|
|
291
|
+
expose.push(exposes.cover()
|
|
292
|
+
.setAccess('state', exposes.access.STATE_SET | exposes.access.STATE_GET)
|
|
293
|
+
.withPosition().withTilt().withEndpoint('l6'));
|
|
294
|
+
} else {
|
|
295
|
+
expose.push(exposes.cover()
|
|
296
|
+
.setAccess('state', exposes.access.STATE_SET | exposes.access.STATE_GET)
|
|
297
|
+
.withPosition().withEndpoint('l6'));
|
|
288
298
|
}
|
|
299
|
+
}
|
|
289
300
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
301
|
+
if (checkOption(device, options, 'cover_2_enabled')) {
|
|
302
|
+
if (checkOption(device, options, 'cover_2_tilt_enabled')) {
|
|
303
|
+
expose.push(exposes.cover()
|
|
304
|
+
.setAccess('state', exposes.access.STATE_SET | exposes.access.STATE_GET)
|
|
305
|
+
.withPosition().withTilt().withEndpoint('l7'));
|
|
306
|
+
} else {
|
|
307
|
+
expose.push(exposes.cover()
|
|
308
|
+
.setAccess('state', exposes.access.STATE_SET | exposes.access.STATE_GET)
|
|
309
|
+
.withPosition().withEndpoint('l7'));
|
|
300
310
|
}
|
|
301
311
|
}
|
|
302
312
|
|
|
@@ -311,9 +321,6 @@ module.exports = [
|
|
|
311
321
|
fz.power_on_behavior,
|
|
312
322
|
fz.ignore_basic_report,
|
|
313
323
|
fz.cover_position_tilt,
|
|
314
|
-
fz.command_cover_open,
|
|
315
|
-
fz.command_cover_close,
|
|
316
|
-
fz.command_cover_stop,
|
|
317
324
|
],
|
|
318
325
|
toZigbee: [
|
|
319
326
|
tz.light_color,
|
|
@@ -327,7 +334,6 @@ module.exports = [
|
|
|
327
334
|
tz.light_hue_saturation_step,
|
|
328
335
|
tz.light_color_options,
|
|
329
336
|
tz.light_color_mode,
|
|
330
|
-
tz.cover_position_tilt,
|
|
331
337
|
coverAndLightToZigbee,
|
|
332
338
|
],
|
|
333
339
|
meta: {multiEndpoint: true},
|
package/devices/tuya.js
CHANGED
|
@@ -21,7 +21,7 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
|
|
|
21
21
|
'_TZ3000_1h2x4akh', '_TZ3000_9vo5icau', '_TZ3000_cehuw1lw', '_TZ3000_ko6v90pg', '_TZ3000_f1bapcit', '_TZ3000_cjrngdr3',
|
|
22
22
|
'_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
|
|
23
23
|
'_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx',
|
|
24
|
-
'_TZ3000_aim0ztek', '_TZ3000_mlswgkc3', '_TZ3000_7dndcnnb'];
|
|
24
|
+
'_TZ3000_aim0ztek', '_TZ3000_mlswgkc3', '_TZ3000_7dndcnnb', '_TZ3000_waho4jtj'];
|
|
25
25
|
|
|
26
26
|
const tzLocal = {
|
|
27
27
|
SA12IZL_silence_siren: {
|
|
@@ -1044,6 +1044,22 @@ module.exports = [
|
|
|
1044
1044
|
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
1045
1045
|
},
|
|
1046
1046
|
},
|
|
1047
|
+
{
|
|
1048
|
+
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3040_msl6wxk9'}],
|
|
1049
|
+
model: '40ZH-O',
|
|
1050
|
+
vendor: 'TuYa',
|
|
1051
|
+
description: 'Motion sensor',
|
|
1052
|
+
fromZigbee: [fz.ias_occupancy_alarm_1, fz.battery, fz.ignore_basic_report, fz.ZM35HQ_attr, fzLocal.ZM35HQ_battery],
|
|
1053
|
+
toZigbee: [tz.ZM35HQ_attr],
|
|
1054
|
+
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery(),
|
|
1055
|
+
exposes.enum('sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('PIR sensor sensitivity'),
|
|
1056
|
+
exposes.enum('keep_time', ea.ALL, [30, 60, 120]).withDescription('PIR keep time in seconds'),
|
|
1057
|
+
],
|
|
1058
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1059
|
+
const endpoint = device.getEndpoint(1);
|
|
1060
|
+
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
1061
|
+
},
|
|
1062
|
+
},
|
|
1047
1063
|
{
|
|
1048
1064
|
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'}],
|
|
1049
1065
|
model: 'IH012-RT01',
|
|
@@ -1143,6 +1159,7 @@ module.exports = [
|
|
|
1143
1159
|
{vendor: 'Earda', model: 'EDM-1ZBA-EU'},
|
|
1144
1160
|
{vendor: 'Mercator Ikuü', model: 'SSWD01'},
|
|
1145
1161
|
{vendor: 'Moes', model: 'ZS-USD'},
|
|
1162
|
+
{vendor: 'Moes', model: 'EDM-1ZBB-EU'},
|
|
1146
1163
|
],
|
|
1147
1164
|
},
|
|
1148
1165
|
{
|
|
@@ -1368,6 +1385,7 @@ module.exports = [
|
|
|
1368
1385
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_ijsj2evj'},
|
|
1369
1386
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_pgq2qvyv'},
|
|
1370
1387
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_nvaik6gk'},
|
|
1388
|
+
{modelID: 'TS0502B', manufacturerName: '_TZB210_rkgngb5o'},
|
|
1371
1389
|
{modelID: 'TS0502B', manufacturerName: '_TZ3000_armwcncd'},
|
|
1372
1390
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_2p6wbry3'},
|
|
1373
1391
|
{modelID: 'TS0502B', manufacturerName: '_TZB210_nfzrlz29'},
|
|
@@ -1913,6 +1931,7 @@ module.exports = [
|
|
|
1913
1931
|
{modelID: 'TS0601', manufacturerName: '_TZE200_husqqvux'}, /* model: 'TSL-TRV-TV01ZG', vendor: 'Tesla Smart' */
|
|
1914
1932
|
{modelID: 'TS0601', manufacturerName: '_TZE200_lllliz3p'}, /* model: 'TV02-Zigbee', vendor: 'TuYa' */
|
|
1915
1933
|
{modelID: 'TS0601', manufacturerName: '_TZE200_mudxchsu'}, /* model: 'TV05-ZG curve', vendor: 'TuYa' */
|
|
1934
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_7yoranx2'}, /* model: 'TV01-ZB', vendor: 'Moes' */
|
|
1916
1935
|
],
|
|
1917
1936
|
model: 'TV02-Zigbee',
|
|
1918
1937
|
vendor: 'TuYa',
|
|
@@ -3173,7 +3192,7 @@ module.exports = [
|
|
|
3173
3192
|
exposes: [e.temperature(), e.humidity(), e.battery()],
|
|
3174
3193
|
},
|
|
3175
3194
|
{
|
|
3176
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_3towulqd'}],
|
|
3195
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_3towulqd'}, {modelID: 'TS0601', manufacturerName: '_TZE200_1ibpyhdc'}],
|
|
3177
3196
|
model: 'ZG-204ZL',
|
|
3178
3197
|
vendor: 'TuYa',
|
|
3179
3198
|
description: 'Luminance motion sensor',
|
package/devices/xiaomi.js
CHANGED
|
@@ -635,6 +635,10 @@ module.exports = [
|
|
|
635
635
|
},
|
|
636
636
|
onEvent: preventReset,
|
|
637
637
|
ota: ota.zigbeeOTA,
|
|
638
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
639
|
+
device.powerSource = 'Mains (single phase)';
|
|
640
|
+
device.save();
|
|
641
|
+
},
|
|
638
642
|
},
|
|
639
643
|
{
|
|
640
644
|
zigbeeModel: ['lumi.ctrl_neutral2'],
|
|
@@ -698,6 +702,10 @@ module.exports = [
|
|
|
698
702
|
},
|
|
699
703
|
onEvent: preventReset,
|
|
700
704
|
ota: ota.zigbeeOTA,
|
|
705
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
706
|
+
device.powerSource = 'Mains (single phase)';
|
|
707
|
+
device.save();
|
|
708
|
+
},
|
|
701
709
|
},
|
|
702
710
|
{
|
|
703
711
|
zigbeeModel: ['lumi.remote.b286acn02'],
|
package/lib/reporting.js
CHANGED
|
@@ -86,6 +86,10 @@ module.exports = {
|
|
|
86
86
|
const p = payload('currentLevel', 0, repInterval.HOUR, 1, overrides);
|
|
87
87
|
await endpoint.configureReporting('genLevelCtrl', p);
|
|
88
88
|
},
|
|
89
|
+
colorTemperature: async (endpoint, overrides) => {
|
|
90
|
+
const p = payload('colorTemperature', 0, repInterval.HOUR, 1, overrides);
|
|
91
|
+
await endpoint.configureReporting('lightingColorCtrl', p);
|
|
92
|
+
},
|
|
89
93
|
occupancy: async (endpoint, overrides) => {
|
|
90
94
|
const p = payload('occupancy', 0, repInterval.HOUR, 0, overrides);
|
|
91
95
|
await endpoint.configureReporting('msOccupancySensing', p);
|
package/lib/tuya.js
CHANGED
|
@@ -125,12 +125,12 @@ function convertRawToCycleTimer(value) {
|
|
|
125
125
|
timernr = value[1];
|
|
126
126
|
timeractive = value[2];
|
|
127
127
|
if (value[3] > 0) {
|
|
128
|
-
weekdays = (value[3] & 0x40 ? '
|
|
129
|
-
(value[3] & 0x20 ? '
|
|
130
|
-
(value[3] & 0x10 ? '
|
|
131
|
-
(value[3] & 0x08 ? '
|
|
132
|
-
(value[3] & 0x04 ? '
|
|
133
|
-
(value[3] & 0x02 ? '
|
|
128
|
+
weekdays = (value[3] & 0x40 ? 'Sa' : '') +
|
|
129
|
+
(value[3] & 0x20 ? 'Fr' : '') +
|
|
130
|
+
(value[3] & 0x10 ? 'Th' : '') +
|
|
131
|
+
(value[3] & 0x08 ? 'We' : '') +
|
|
132
|
+
(value[3] & 0x04 ? 'Tu' : '') +
|
|
133
|
+
(value[3] & 0x02 ? 'Mo' : '') +
|
|
134
134
|
(value[3] & 0x01 ? 'Su' : '');
|
|
135
135
|
} else {
|
|
136
136
|
weekdays = 'once';
|
|
@@ -165,12 +165,12 @@ function convertRawToTimer(value) {
|
|
|
165
165
|
starttime = String(parseInt(minsincemidnight / 60)).padStart(2, '0') + ':' + String(minsincemidnight % 60).padStart(2, '0');
|
|
166
166
|
duration = value[4] * 256 + value[5];
|
|
167
167
|
if (value[6] > 0) {
|
|
168
|
-
weekdays = (value[6] & 0x40 ? '
|
|
169
|
-
(value[6] & 0x20 ? '
|
|
170
|
-
(value[6] & 0x10 ? '
|
|
171
|
-
(value[6] & 0x08 ? '
|
|
172
|
-
(value[6] & 0x04 ? '
|
|
173
|
-
(value[6] & 0x02 ? '
|
|
168
|
+
weekdays = (value[6] & 0x40 ? 'Sa' : '') +
|
|
169
|
+
(value[6] & 0x20 ? 'Fr' : '') +
|
|
170
|
+
(value[6] & 0x10 ? 'Th' : '') +
|
|
171
|
+
(value[6] & 0x08 ? 'We' : '') +
|
|
172
|
+
(value[6] & 0x04 ? 'Tu' : '') +
|
|
173
|
+
(value[6] & 0x02 ? 'Mo' : '') +
|
|
174
174
|
(value[6] & 0x01 ? 'Su' : '');
|
|
175
175
|
} else {
|
|
176
176
|
weekdays = 'once';
|