zigbee-herdsman-converters 14.0.471 → 14.0.474
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 +48 -9
- package/converters/toZigbee.js +43 -0
- package/devices/adeo.js +1 -1
- package/devices/dnake.js +11 -0
- package/devices/fantem.js +9 -1
- package/devices/home_control_as.js +0 -0
- package/devices/led_trading.js +29 -0
- package/devices/neo.js +8 -2
- package/devices/philips.js +18 -0
- package/devices/plaid.js +5 -3
- package/devices/tuya.js +27 -3
- package/devices/ynoa.js +24 -0
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -2491,7 +2491,6 @@ const converters = {
|
|
|
2491
2491
|
const dpValue = tuya.firstDpValue(msg, meta, 'neo_nas_pd07');
|
|
2492
2492
|
const dp = dpValue.dp;
|
|
2493
2493
|
const value = tuya.getDataValue(dpValue);
|
|
2494
|
-
|
|
2495
2494
|
if (dp === 101) return {occupancy: value > 0 ? true : false};
|
|
2496
2495
|
else if (dp === 102) {
|
|
2497
2496
|
return {
|
|
@@ -2504,8 +2503,19 @@ const converters = {
|
|
|
2504
2503
|
return {temperature: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
|
|
2505
2504
|
} else if (dp === 105) {
|
|
2506
2505
|
return {humidity: calibrateAndPrecisionRoundOptions(value, options, 'humidity')};
|
|
2506
|
+
} else if (dp === tuya.dataPoints.neoMinTemp) {
|
|
2507
|
+
return {temperature_min: value};
|
|
2508
|
+
} else if (dp === tuya.dataPoints.neoMaxTemp) {
|
|
2509
|
+
return {temperature_max: value};
|
|
2510
|
+
} else if (dp === tuya.dataPoints.neoMinHumidity) {
|
|
2511
|
+
return {humidity_min: value};
|
|
2512
|
+
} else if (dp === tuya.dataPoints.neoMaxHumidity) {
|
|
2513
|
+
return {humidity_max: value};
|
|
2514
|
+
} else if (dp === 113) {
|
|
2515
|
+
return {alarm: {0: 'over_temperature', 1: 'over_humidity',
|
|
2516
|
+
2: 'below_min_temperature', 3: 'below_min_humdity', 4: 'off'}[value]};
|
|
2507
2517
|
} else {
|
|
2508
|
-
meta.logger.warn(`
|
|
2518
|
+
meta.logger.warn(`fromZigbee.neo_nas_pd07: Unrecognized DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
2509
2519
|
}
|
|
2510
2520
|
},
|
|
2511
2521
|
},
|
|
@@ -3129,6 +3139,21 @@ const converters = {
|
|
|
3129
3139
|
};
|
|
3130
3140
|
},
|
|
3131
3141
|
},
|
|
3142
|
+
plaid_battery: {
|
|
3143
|
+
cluster: 'genPowerCfg',
|
|
3144
|
+
type: ['readResponse', 'attributeReport'],
|
|
3145
|
+
convert: (model, msg, publish, options, meta) => {
|
|
3146
|
+
const payload = {};
|
|
3147
|
+
if (msg.data.hasOwnProperty('mainsVoltage')) {
|
|
3148
|
+
payload.voltage = msg.data['mainsVoltage'];
|
|
3149
|
+
|
|
3150
|
+
if (model.meta && model.meta.battery && model.meta.battery.voltageToPercentage) {
|
|
3151
|
+
payload.battery = batteryVoltageToPercentage(payload.voltage, model.meta.battery.voltageToPercentage);
|
|
3152
|
+
}
|
|
3153
|
+
}
|
|
3154
|
+
return payload;
|
|
3155
|
+
},
|
|
3156
|
+
},
|
|
3132
3157
|
silvercrest_smart_led_string: {
|
|
3133
3158
|
cluster: 'manuSpecificTuya',
|
|
3134
3159
|
type: ['commandDataResponse', 'commandDataReport'],
|
|
@@ -5976,13 +6001,6 @@ const converters = {
|
|
|
5976
6001
|
return result;
|
|
5977
6002
|
},
|
|
5978
6003
|
},
|
|
5979
|
-
scenes_recall_scene_65029: {
|
|
5980
|
-
cluster: 65029,
|
|
5981
|
-
type: ['raw'],
|
|
5982
|
-
convert: (model, msg, publish, options, meta) => {
|
|
5983
|
-
return {action: `scene_${msg.data[msg.data.length - 1]}`};
|
|
5984
|
-
},
|
|
5985
|
-
},
|
|
5986
6004
|
scenes_recall_scene_65024: {
|
|
5987
6005
|
cluster: 65024,
|
|
5988
6006
|
type: ['raw'],
|
|
@@ -7186,6 +7204,27 @@ const converters = {
|
|
|
7186
7204
|
return {occupancy: (zoneStatus & 1) > 0, tamper: (zoneStatus & 4) > 0};
|
|
7187
7205
|
},
|
|
7188
7206
|
},
|
|
7207
|
+
ZB006X_settings: {
|
|
7208
|
+
cluster: 'manuSpecificTuya',
|
|
7209
|
+
type: ['commandDataResponse'],
|
|
7210
|
+
convert: (model, msg, publish, options, meta) => {
|
|
7211
|
+
const dpValue = tuya.firstDpValue(msg, meta, 'ZB006X_settings');
|
|
7212
|
+
const dp = dpValue.dp;
|
|
7213
|
+
const value = tuya.getDataValue(dpValue);
|
|
7214
|
+
if (dp === 103) {
|
|
7215
|
+
meta.logger.debug(`fromZigbee.ZB006X_settings: Found DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
7216
|
+
return {ext_switch_type: {0: 'unknown', 1: 'toggle_sw', 2: 'momentary_sw', 3: 'rotary_sw', 4: 'auto_config'}[value]};
|
|
7217
|
+
} else if (dp === 105) {
|
|
7218
|
+
meta.logger.debug(`fromZigbee.ZB006X_settings: Found DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
7219
|
+
return {load_detection_mode: {0: 'none', 1: 'first_power_on', 2: 'every_power_on'}[value]};
|
|
7220
|
+
} else if (dp === 109) {
|
|
7221
|
+
meta.logger.debug(`fromZigbee.ZB006X_settings: Found DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
7222
|
+
return {control_mode: {0: 'local', 1: 'remote', 2: 'both'}[value]};
|
|
7223
|
+
} else {
|
|
7224
|
+
meta.logger.warn(`fromZigbee.ZB006X_settings: Unrecognized DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
7225
|
+
}
|
|
7226
|
+
},
|
|
7227
|
+
},
|
|
7189
7228
|
ZM35HQ_attr: {
|
|
7190
7229
|
cluster: 'ssIasZone',
|
|
7191
7230
|
type: ['attributeReport', 'readResponse'],
|
package/converters/toZigbee.js
CHANGED
|
@@ -5332,6 +5332,27 @@ const converters = {
|
|
|
5332
5332
|
await entity.read(payloads[key][0], [payloads[key][1]]);
|
|
5333
5333
|
},
|
|
5334
5334
|
},
|
|
5335
|
+
neo_nas_pd07: {
|
|
5336
|
+
key: ['temperature_max', 'temperature_min', 'humidity_max', 'humidity_min'],
|
|
5337
|
+
convertSet: async (entity, key, value, meta) => {
|
|
5338
|
+
switch (key) {
|
|
5339
|
+
case 'temperature_max':
|
|
5340
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.neoMaxTemp, value);
|
|
5341
|
+
break;
|
|
5342
|
+
case 'temperature_min':
|
|
5343
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.neoMinTemp, value);
|
|
5344
|
+
break;
|
|
5345
|
+
case 'humidity_max':
|
|
5346
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.neoMaxHumidity, value);
|
|
5347
|
+
break;
|
|
5348
|
+
case 'humidity_min':
|
|
5349
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.neoMinHumidity, value);
|
|
5350
|
+
break;
|
|
5351
|
+
default: // Unknown key
|
|
5352
|
+
throw new Error(`toZigbee.neo_nas_pd07: Unhandled key ${key}`);
|
|
5353
|
+
}
|
|
5354
|
+
},
|
|
5355
|
+
},
|
|
5335
5356
|
neo_t_h_alarm: {
|
|
5336
5357
|
key: [
|
|
5337
5358
|
'alarm', 'melody', 'volume', 'duration',
|
|
@@ -6285,6 +6306,28 @@ const converters = {
|
|
|
6285
6306
|
}
|
|
6286
6307
|
},
|
|
6287
6308
|
},
|
|
6309
|
+
ZB006X_settings: {
|
|
6310
|
+
key: ['ext_switch_type', 'load_detection_mode', 'control_mode'],
|
|
6311
|
+
convertSet: async (entity, key, value, meta) => {
|
|
6312
|
+
switch (key) {
|
|
6313
|
+
case 'ext_switch_type':
|
|
6314
|
+
meta.logger.debug(`toZigbee.ZB006X_settings: Send key/value [${key}|${value}]`);
|
|
6315
|
+
await tuya.sendDataPointEnum(entity, 103, {'unknown': 0, 'toggle_sw': 1,
|
|
6316
|
+
'momentary_sw': 2, 'rotary_sw': 3, 'auto_config': 4}[value]);
|
|
6317
|
+
break;
|
|
6318
|
+
case 'load_detection_mode':
|
|
6319
|
+
meta.logger.debug(`toZigbee.ZB006X_settings: Send key/value [${key}|${value}]`);
|
|
6320
|
+
await tuya.sendDataPointEnum(entity, 105, {'none': 0, 'first_power_on': 1, 'every_power_on': 2}[value]);
|
|
6321
|
+
break;
|
|
6322
|
+
case 'control_mode':
|
|
6323
|
+
meta.logger.debug(`toZigbee.ZB006X_settings: Send key/value [${key}|${value}]`);
|
|
6324
|
+
await tuya.sendDataPointEnum(entity, 109, {'local': 0, 'remote': 1, 'both': 2}[value]);
|
|
6325
|
+
break;
|
|
6326
|
+
default: // Unknown key
|
|
6327
|
+
throw new Error(`toZigbee.ZB006X_settings: Unhandled key ${key}`);
|
|
6328
|
+
}
|
|
6329
|
+
},
|
|
6330
|
+
},
|
|
6288
6331
|
ZM35HQ_attr: {
|
|
6289
6332
|
key: [
|
|
6290
6333
|
'sensitivity', 'keep_time',
|
package/devices/adeo.js
CHANGED
|
@@ -8,7 +8,7 @@ const e = exposes.presets;
|
|
|
8
8
|
module.exports = [
|
|
9
9
|
{
|
|
10
10
|
zigbeeModel: ['ZBEK-4'],
|
|
11
|
-
model: 'IM-
|
|
11
|
+
model: 'IM-CDZDGAAA0005KA_MAN',
|
|
12
12
|
vendor: 'ADEO',
|
|
13
13
|
description: 'ENKI LEXMAN RGBTW GU10 Bulb',
|
|
14
14
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
|
package/devices/dnake.js
ADDED
package/devices/fantem.js
CHANGED
|
@@ -13,7 +13,15 @@ module.exports = [
|
|
|
13
13
|
vendor: 'Fantem',
|
|
14
14
|
description: 'Smart dimmer module without neutral',
|
|
15
15
|
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
16
|
-
|
|
16
|
+
fromZigbee: [...extend.light_onoff_brightness({noConfigure: true}).fromZigbee, fz.ZB006X_settings],
|
|
17
|
+
toZigbee: [...extend.light_onoff_brightness({noConfigure: true}).toZigbee, tz.ZB006X_settings],
|
|
18
|
+
exposes: [e.light_brightness(),
|
|
19
|
+
exposes.enum('ext_switch_type', ea.STATE_SET, ['unknown', 'toggle_sw', 'momentary_sw', 'rotary_sw', 'auto_config'])
|
|
20
|
+
.withDescription('External switch type'),
|
|
21
|
+
exposes.enum('load_detection_mode', ea.STATE_SET, ['none', 'first_power_on', 'every_power_on'])
|
|
22
|
+
.withDescription('Load detection mode'),
|
|
23
|
+
exposes.enum('control_mode', ea.STATE_SET, ['local', 'remote', 'both']).withDescription('Control mode'),
|
|
24
|
+
],
|
|
17
25
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
26
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
19
27
|
const endpoint = device.getEndpoint(1);
|
|
File without changes
|
package/devices/led_trading.js
CHANGED
|
@@ -1,9 +1,38 @@
|
|
|
1
1
|
const reporting = require('../lib/reporting');
|
|
2
2
|
const extend = require('../lib/extend');
|
|
3
3
|
const exposes = require('../lib/exposes');
|
|
4
|
+
const utils = require('../lib/utils');
|
|
4
5
|
const e = exposes.presets;
|
|
5
6
|
|
|
7
|
+
const fzLocal = {
|
|
8
|
+
led_trading_9133: {
|
|
9
|
+
cluster: 'greenPower',
|
|
10
|
+
type: ['commandNotification', 'commandCommisioningNotification'],
|
|
11
|
+
convert: (model, msg, publish, options, meta) => {
|
|
12
|
+
const commandID = msg.data.commandID;
|
|
13
|
+
if (utils.hasAlreadyProcessedMessage(msg, msg.data.frameCounter, `${msg.device.ieeeAddr}_${commandID}`)) return;
|
|
14
|
+
if (commandID === 224) return;
|
|
15
|
+
const lookup = {0x13: 'press_1', 0x14: 'press_2', 0x15: 'press_3', 0x16: 'press_4',
|
|
16
|
+
0x1B: 'hold_1', 0x1C: 'hold_2', 0x1D: 'hold_3', 0x1E: 'hold_4'};
|
|
17
|
+
if (!lookup.hasOwnProperty(commandID)) {
|
|
18
|
+
meta.logger.error(`led_trading_9133: missing command '${commandID}'`);
|
|
19
|
+
} else {
|
|
20
|
+
return {action: lookup[commandID]};
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
6
26
|
module.exports = [
|
|
27
|
+
{
|
|
28
|
+
fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000427.....$/}],
|
|
29
|
+
model: '9133',
|
|
30
|
+
vendor: 'Led Trading',
|
|
31
|
+
description: 'Pushbutton transmitter module',
|
|
32
|
+
fromZigbee: [fzLocal.led_trading_9133],
|
|
33
|
+
toZigbee: [],
|
|
34
|
+
exposes: [e.action(['press_1', 'hold_1', 'press_2', 'hold_2', 'press_3', 'hold_3', 'press_4', 'hold_4'])],
|
|
35
|
+
},
|
|
7
36
|
{
|
|
8
37
|
zigbeeModel: ['HK-LN-DIM-A'],
|
|
9
38
|
model: 'HK-LN-DIM-A',
|
package/devices/neo.js
CHANGED
|
@@ -63,9 +63,15 @@ module.exports = [
|
|
|
63
63
|
vendor: 'Neo',
|
|
64
64
|
description: 'Motion, temperature & humidity sensor',
|
|
65
65
|
fromZigbee: [fz.neo_nas_pd07],
|
|
66
|
-
toZigbee: [],
|
|
66
|
+
toZigbee: [tz.neo_nas_pd07],
|
|
67
67
|
onEvent: tuya.onEventSetTime,
|
|
68
68
|
exposes: [e.occupancy(), e.humidity(), e.temperature(), e.tamper(), e.battery_low(),
|
|
69
|
-
exposes.enum('power_type', ea.STATE, ['battery_full', 'battery_high', 'battery_medium', 'battery_low', 'usb'])
|
|
69
|
+
exposes.enum('power_type', ea.STATE, ['battery_full', 'battery_high', 'battery_medium', 'battery_low', 'usb']),
|
|
70
|
+
exposes.enum('alarm', ea.STATE, ['over_temperature', 'over_humidity', 'below_min_temperature', 'below_min_humdity', 'off'])
|
|
71
|
+
.withDescription('Temperature/humidity alarm status'),
|
|
72
|
+
exposes.numeric('temperature_min', ea.STATE_SET).withUnit('°C').withValueMin(-40).withValueMax(40),
|
|
73
|
+
exposes.numeric('temperature_max', ea.STATE_SET).withUnit('°C').withValueMin(-40).withValueMax(40),
|
|
74
|
+
exposes.numeric('humidity_min', ea.STATE_SET).withUnit('%').withValueMin(0).withValueMax(100),
|
|
75
|
+
exposes.numeric('humidity_max', ea.STATE_SET).withUnit('%').withValueMin(0).withValueMax(100)],
|
|
70
76
|
},
|
|
71
77
|
];
|
package/devices/philips.js
CHANGED
|
@@ -117,6 +117,24 @@ module.exports = [
|
|
|
117
117
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
118
118
|
ota: ota.zigbeeOTA,
|
|
119
119
|
},
|
|
120
|
+
{
|
|
121
|
+
zigbeeModel: ['915005997601'],
|
|
122
|
+
model: '915005997601',
|
|
123
|
+
vendor: 'Philips',
|
|
124
|
+
description: 'Hue Devere M white ambiance white & dimmer',
|
|
125
|
+
meta: {turnsOffAtBrightness1: true},
|
|
126
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
127
|
+
ota: ota.zigbeeOTA,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
zigbeeModel: ['915005997701'],
|
|
131
|
+
model: '915005997701',
|
|
132
|
+
vendor: 'Philips',
|
|
133
|
+
description: 'Hue Devere L white ambiance white & dimmer',
|
|
134
|
+
meta: {turnsOffAtBrightness1: true},
|
|
135
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
136
|
+
ota: ota.zigbeeOTA,
|
|
137
|
+
},
|
|
120
138
|
{
|
|
121
139
|
zigbeeModel: ['929003054001'],
|
|
122
140
|
model: '929003054001',
|
package/devices/plaid.js
CHANGED
|
@@ -11,13 +11,15 @@ module.exports = [
|
|
|
11
11
|
vendor: 'PLAID SYSTEMS',
|
|
12
12
|
description: 'Spruce temperature and moisture sensor',
|
|
13
13
|
toZigbee: [],
|
|
14
|
-
fromZigbee: [fz.temperature, fz.humidity],
|
|
15
|
-
exposes: [e.humidity(), e.temperature()],
|
|
14
|
+
fromZigbee: [fz.temperature, fz.humidity, fz.plaid_battery],
|
|
15
|
+
exposes: [e.humidity(), e.temperature(), e.battery(), e.battery_voltage()],
|
|
16
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
16
17
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
17
18
|
const endpoint = device.getEndpoint(1);
|
|
18
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
|
|
19
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg']);
|
|
19
20
|
await reporting.temperature(endpoint);
|
|
20
21
|
await reporting.humidity(endpoint);
|
|
22
|
+
device.powerSource = 'Battery';
|
|
21
23
|
},
|
|
22
24
|
},
|
|
23
25
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -44,6 +44,14 @@ const tzLocal = {
|
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
const fzLocal = {
|
|
47
|
+
scenes_recall_scene_65029: {
|
|
48
|
+
cluster: '65029',
|
|
49
|
+
type: ['raw', 'attributeReport'],
|
|
50
|
+
convert: (model, msg, publish, options, meta) => {
|
|
51
|
+
const id = meta.device.modelID === '005f0c3b' ? msg.data[0] : msg.data[msg.data.length - 1];
|
|
52
|
+
return {action: `scene_${id}`};
|
|
53
|
+
},
|
|
54
|
+
},
|
|
47
55
|
TS0201_battery: {
|
|
48
56
|
cluster: 'genPowerCfg',
|
|
49
57
|
type: ['attributeReport', 'readResponse'],
|
|
@@ -207,7 +215,7 @@ module.exports = [
|
|
|
207
215
|
{
|
|
208
216
|
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_mvn6jl7x'},
|
|
209
217
|
{modelID: 'TS011F', manufacturerName: '_TZ3000_raviyuvk'}, {modelID: 'TS011F', manufacturerName: '_TYZB01_hlla45kx'},
|
|
210
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_92qd4sqa'}],
|
|
218
|
+
{modelID: 'TS011F', manufacturerName: '_TZ3000_92qd4sqa'}, {modelID: 'TS011F', manufacturerName: '_TZ3000_zwaadvus'}],
|
|
211
219
|
model: 'TS011F_2_gang_wall',
|
|
212
220
|
vendor: 'TuYa',
|
|
213
221
|
description: '2 gang wall outlet',
|
|
@@ -1713,7 +1721,7 @@ module.exports = [
|
|
|
1713
1721
|
model: 'U86KCJ-ZP',
|
|
1714
1722
|
vendor: 'TuYa',
|
|
1715
1723
|
description: 'Smart 6 key scene wall switch',
|
|
1716
|
-
fromZigbee: [
|
|
1724
|
+
fromZigbee: [fzLocal.scenes_recall_scene_65029],
|
|
1717
1725
|
exposes: [e.action(['scene_1', 'scene_2', 'scene_3', 'scene_4', 'scene_5', 'scene_6'])],
|
|
1718
1726
|
toZigbee: [],
|
|
1719
1727
|
},
|
|
@@ -1884,7 +1892,7 @@ module.exports = [
|
|
|
1884
1892
|
exposes: [e.battery(), e.vibration(), exposes.enum('sensitivity', exposes.access.STATE_SET, ['low', 'medium', 'high'])],
|
|
1885
1893
|
},
|
|
1886
1894
|
{
|
|
1887
|
-
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_8bxrzyxz'}],
|
|
1895
|
+
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_8bxrzyxz'}, {modelID: 'TS011F', manufacturerName: '_TZ3000_ky0fq4ho'}],
|
|
1888
1896
|
model: 'TS011F_din_smart_relay',
|
|
1889
1897
|
description: 'Din smart relay (with power monitoring)',
|
|
1890
1898
|
vendor: 'TuYa',
|
|
@@ -1921,6 +1929,22 @@ module.exports = [
|
|
|
1921
1929
|
exposes: [exposes.binary('trigger', ea.STATE_SET, true, false).withDescription('Trigger the door movement'),
|
|
1922
1930
|
exposes.binary('garage_door_contact', ea.STATE, true, false)],
|
|
1923
1931
|
},
|
|
1932
|
+
{
|
|
1933
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_wfxuhoea'}],
|
|
1934
|
+
model: 'GDC311ZBQ1',
|
|
1935
|
+
vendor: 'TuYa',
|
|
1936
|
+
description: 'LoraTap garage door opener with wireless sensor',
|
|
1937
|
+
fromZigbee: [fz.matsee_garage_door_opener, fz.ignore_basic_report],
|
|
1938
|
+
toZigbee: [tz.matsee_garage_door_opener, tz.tuya_data_point_test],
|
|
1939
|
+
whiteLabel: [{vendor: 'LoraTap', model: 'GDC311ZBQ1'}],
|
|
1940
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1941
|
+
const endpoint = device.getEndpoint(1);
|
|
1942
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
|
|
1943
|
+
},
|
|
1944
|
+
exposes: [exposes.binary('trigger', ea.STATE_SET, true, false).withDescription('Trigger the door movement'),
|
|
1945
|
+
exposes.binary('garage_door_contact', ea.STATE, false, true)
|
|
1946
|
+
.withDescription('Indicates if the garage door contact is closed (= true) or open (= false)')],
|
|
1947
|
+
},
|
|
1924
1948
|
{
|
|
1925
1949
|
fingerprint: [{modelID: 'TS0201', manufacturerName: '_TZ3000_qaaysllp'}],
|
|
1926
1950
|
model: 'LCZ030',
|
package/devices/ynoa.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 reporting = require('../lib/reporting');
|
|
4
4
|
const e = exposes.presets;
|
|
5
|
+
const extend = require('..//lib/extend');
|
|
5
6
|
|
|
6
7
|
module.exports = [
|
|
7
8
|
{
|
|
@@ -18,4 +19,27 @@ module.exports = [
|
|
|
18
19
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
19
20
|
},
|
|
20
21
|
},
|
|
22
|
+
{
|
|
23
|
+
zigbeeModel: ['ZBT-RGBWLight-M0000'],
|
|
24
|
+
model: 'LA-GU10-RGBW',
|
|
25
|
+
vendor: 'Ynoa',
|
|
26
|
+
description: 'Smart LED GU10 RGB CCT',
|
|
27
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 526], supportsHS: true}),
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
zigbeeModel: ['ZBT-RGBWSwitch-D0800'],
|
|
31
|
+
model: 'LA-5KEY-RGBW',
|
|
32
|
+
vendor: 'Ynoa',
|
|
33
|
+
description: '5 key control for RGBW light',
|
|
34
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.command_move_to_color_temp,
|
|
35
|
+
fz.command_move_to_color, fz.command_move_to_level, fz.battery],
|
|
36
|
+
exposes: [e.battery(), e.battery_low(), e.action(['on', 'off', 'brightness_move_to_level',
|
|
37
|
+
'color_temperature_move', 'color_move'])],
|
|
38
|
+
toZigbee: [],
|
|
39
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
40
|
+
const endpoint = device.getEndpoint(1);
|
|
41
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
42
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
43
|
+
},
|
|
44
|
+
},
|
|
21
45
|
];
|