zigbee-herdsman-converters 14.0.554 → 14.0.557
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/toZigbee.js +14 -13
- package/devices/RMC002.js +17 -0
- package/devices/giex.js +132 -0
- package/devices/ikea.js +3 -2
- package/devices/lidl.js +11 -8
- package/devices/niko.js +1 -1
- package/devices/paulmann.js +8 -0
- package/devices/philips.js +17 -589
- package/devices/rgb_genie.js +26 -1
- package/devices/tuya.js +31 -6
- package/devices/visonic.js +9 -0
- package/devices/xiaomi.js +33 -16
- package/lib/xiaomi.js +2 -3
- package/package.json +1 -1
package/converters/toZigbee.js
CHANGED
|
@@ -73,7 +73,7 @@ const converters = {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
if (isNotification) {
|
|
76
|
-
entity.commandResponse('ssIasAce', 'armRsp', {armnotification: mode}, {}, value.transaction);
|
|
76
|
+
await entity.commandResponse('ssIasAce', 'armRsp', {armnotification: mode}, {}, value.transaction);
|
|
77
77
|
|
|
78
78
|
// Do not update PanelStatus after confirming transaction.
|
|
79
79
|
// Instead the server should send an arm_mode command with the necessary state.
|
|
@@ -88,7 +88,7 @@ const converters = {
|
|
|
88
88
|
|
|
89
89
|
globalStore.putValue(entity, 'panelStatus', panelStatus);
|
|
90
90
|
const payload = {panelstatus: panelStatus, secondsremain: 0, audiblenotif: 0, alarmstatus: 0};
|
|
91
|
-
entity.commandResponse('ssIasAce', 'panelStatusChanged', payload);
|
|
91
|
+
await entity.commandResponse('ssIasAce', 'panelStatusChanged', payload);
|
|
92
92
|
},
|
|
93
93
|
},
|
|
94
94
|
battery_percentage_remaining: {
|
|
@@ -2577,17 +2577,7 @@ const converters = {
|
|
|
2577
2577
|
return {state: {power_outage_memory: value}};
|
|
2578
2578
|
},
|
|
2579
2579
|
},
|
|
2580
|
-
|
|
2581
|
-
key: ['power_outage_memory'],
|
|
2582
|
-
convertSet: async (entity, key, value, meta) => {
|
|
2583
|
-
value = value.toLowerCase();
|
|
2584
|
-
const lookup = {'off': 0x00, 'on': 0x01, 'restore': 0x02};
|
|
2585
|
-
utils.validateValue(value, Object.keys(lookup));
|
|
2586
|
-
const payload = lookup[value];
|
|
2587
|
-
await entity.write('genOnOff', {0x8002: {value: payload, type: 0x30}});
|
|
2588
|
-
return {state: {power_outage_memory: value}};
|
|
2589
|
-
},
|
|
2590
|
-
},
|
|
2580
|
+
|
|
2591
2581
|
tuya_relay_din_led_indicator: {
|
|
2592
2582
|
key: ['indicator_mode'],
|
|
2593
2583
|
convertSet: async (entity, key, value, meta) => {
|
|
@@ -3580,6 +3570,17 @@ const converters = {
|
|
|
3580
3570
|
await tuya.sendDataPointBool(entity, tuya.dataPoints.state, value === 'cool');
|
|
3581
3571
|
},
|
|
3582
3572
|
},
|
|
3573
|
+
tuya_switch_power_outage_memory: {
|
|
3574
|
+
key: ['power_outage_memory'],
|
|
3575
|
+
convertSet: async (entity, key, value, meta) => {
|
|
3576
|
+
value = value.toLowerCase();
|
|
3577
|
+
const lookup = {'off': 0x00, 'on': 0x01, 'restore': 0x02};
|
|
3578
|
+
utils.validateValue(value, Object.keys(lookup));
|
|
3579
|
+
const payload = lookup[value];
|
|
3580
|
+
await entity.write('genOnOff', {0x8002: {value: payload, type: 0x30}});
|
|
3581
|
+
return {state: {power_outage_memory: value}};
|
|
3582
|
+
},
|
|
3583
|
+
},
|
|
3583
3584
|
moes_power_on_behavior: {
|
|
3584
3585
|
key: ['power_on_behavior'],
|
|
3585
3586
|
convertSet: async (entity, key, value, meta) => {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const reporting = require('../lib/reporting');
|
|
2
|
+
const extend = require('../lib/extend');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['Bouffalolab'],
|
|
7
|
+
model: 'RMC002',
|
|
8
|
+
vendor: 'Bouffalolab',
|
|
9
|
+
description: 'US plug smart socket',
|
|
10
|
+
extend: extend.switch(),
|
|
11
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
12
|
+
const endpoint = device.getEndpoint(1);
|
|
13
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
14
|
+
await reporting.onOff(endpoint);
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
];
|
package/devices/giex.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const tuya = require('../lib/tuya');
|
|
3
|
+
const e = exposes.presets;
|
|
4
|
+
const ea = exposes.access;
|
|
5
|
+
|
|
6
|
+
const dataPoints = {
|
|
7
|
+
// GIEX Water Valve
|
|
8
|
+
giexWaterValveState: 2,
|
|
9
|
+
giexWaterValveMode: 1,
|
|
10
|
+
giexWaterValveIrrigationTarget: 104,
|
|
11
|
+
giexWaterValveWaterConsumed: 111,
|
|
12
|
+
giexWaterValveIrrigationStartTime: 101,
|
|
13
|
+
giexWaterValveIrrigationEndTime: 102,
|
|
14
|
+
giexWaterValveLastIrrigationDuration: 114,
|
|
15
|
+
giexWaterValveBattery: 108,
|
|
16
|
+
giexWaterValveCycleIrrigationNumTimes: 103,
|
|
17
|
+
giexWaterValveCycleIrrigationInterval: 105,
|
|
18
|
+
giexWaterValveCurrentTempurature: 106,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const fzLocal = {
|
|
22
|
+
giex_water_valve:
|
|
23
|
+
{
|
|
24
|
+
cluster: 'manuSpecificTuya',
|
|
25
|
+
type: ['commandDataResponse', 'commandDataReport'],
|
|
26
|
+
convert: (model, msg, publish, options, meta) => {
|
|
27
|
+
for (const dpValue of msg.data.dpValues) {
|
|
28
|
+
const value = tuya.getDataValue(dpValue);
|
|
29
|
+
const dp = dpValue.dp;
|
|
30
|
+
switch (dp) {
|
|
31
|
+
case dataPoints.giexWaterValveState: {
|
|
32
|
+
return {state: value ? 'ON': 'OFF'};
|
|
33
|
+
}
|
|
34
|
+
case dataPoints.giexWaterValveMode: {
|
|
35
|
+
return {mode: value ? 'capacity': 'duration'};
|
|
36
|
+
}
|
|
37
|
+
case dataPoints.giexWaterValveIrrigationTarget: {
|
|
38
|
+
return {irrigation_target: value};
|
|
39
|
+
}
|
|
40
|
+
case dataPoints.giexWaterValveCycleIrrigationNumTimes: {
|
|
41
|
+
return {cycle_irrigation_num_times: value};
|
|
42
|
+
}
|
|
43
|
+
case dataPoints.giexWaterValveCycleIrrigationInterval: {
|
|
44
|
+
return {cycle_irrigation_interval: value};
|
|
45
|
+
}
|
|
46
|
+
case dataPoints.giexWaterValveWaterConsumed: {
|
|
47
|
+
return {water_consumed: value};
|
|
48
|
+
}
|
|
49
|
+
case dataPoints.giexWaterValveIrrigationStartTime: {
|
|
50
|
+
return {irrigation_start_time: value};
|
|
51
|
+
}
|
|
52
|
+
case dataPoints.giexWaterValveIrrigationEndTime: {
|
|
53
|
+
return {irrigation_end_time: value};
|
|
54
|
+
}
|
|
55
|
+
case dataPoints.giexWaterValveLastIrrigationDuration: {
|
|
56
|
+
return {last_irrigation_duration: value};
|
|
57
|
+
}
|
|
58
|
+
case dataPoints.giexWaterValveBattery: {
|
|
59
|
+
return {battery: value};
|
|
60
|
+
}
|
|
61
|
+
case dataPoints.giexWaterValveCurrentTempurature: {
|
|
62
|
+
return; // Do Nothing - value ignored because isn't a valid tempurature reading. Misdocumented and usage unclear
|
|
63
|
+
}
|
|
64
|
+
default: {
|
|
65
|
+
meta.logger.warn(`fz:giex_water_valve: NOT RECOGNIZED DP #${dp} with VALUE = ${value}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const tzLocal = {
|
|
74
|
+
giex_water_valve:
|
|
75
|
+
{
|
|
76
|
+
key: ['mode', 'irrigation_target', 'state', 'cycle_irrigation_num_times', 'cycle_irrigation_interval'],
|
|
77
|
+
convertSet: async (entity, key, value, meta) => {
|
|
78
|
+
switch (key) {
|
|
79
|
+
case 'mode': {
|
|
80
|
+
let mode = 0;
|
|
81
|
+
if (value === 'duration') mode = 0;
|
|
82
|
+
else if (value === 'capacity') mode = 1;
|
|
83
|
+
await tuya.sendDataPointBool(entity, dataPoints.giexWaterValveMode, mode);
|
|
84
|
+
return {state: {mode: value}};
|
|
85
|
+
}
|
|
86
|
+
case 'irrigation_target':
|
|
87
|
+
await tuya.sendDataPointValue(entity, dataPoints.giexWaterValveIrrigationTarget, value);
|
|
88
|
+
return {state: {irrigation_target: value}};
|
|
89
|
+
case 'state':
|
|
90
|
+
await tuya.sendDataPointBool(entity, dataPoints.giexWaterValveState, value === 'ON');
|
|
91
|
+
break;
|
|
92
|
+
case 'cycle_irrigation_num_times':
|
|
93
|
+
await tuya.sendDataPointValue(entity, dataPoints.giexWaterValveCycleIrrigationNumTimes, value);
|
|
94
|
+
return {state: {cycle_irrigation_num_times: value}};
|
|
95
|
+
case 'cycle_irrigation_interval':
|
|
96
|
+
await tuya.sendDataPointValue(entity, dataPoints.giexWaterValveCycleIrrigationInterval, value);
|
|
97
|
+
return {state: {cycle_irrigation_interval: value}};
|
|
98
|
+
default: // Unknown key warning
|
|
99
|
+
meta.logger.warn(`tz.GIEX_water_valve: Unhandled key ${key}`);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
module.exports = [
|
|
106
|
+
{
|
|
107
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_sh1btabb'}],
|
|
108
|
+
model: 'QT06',
|
|
109
|
+
vendor: 'GiEX',
|
|
110
|
+
description: 'Water irrigation valve',
|
|
111
|
+
onEvent: tuya.onEventSetLocalTime,
|
|
112
|
+
fromZigbee: [fzLocal.giex_water_valve],
|
|
113
|
+
toZigbee: [tzLocal.giex_water_valve],
|
|
114
|
+
exposes: [
|
|
115
|
+
e.battery(),
|
|
116
|
+
exposes.binary('state', ea.STATE_SET, 'ON', 'OFF').withDescription('State'),
|
|
117
|
+
exposes.enum('mode', ea.STATE_SET, ['duration', 'capacity']).withDescription('Irrigation mode'),
|
|
118
|
+
exposes.numeric('irrigation_target', exposes.access.STATE_SET).withValueMin(0).withValueMax(1440).withUnit('mintues or Litres')
|
|
119
|
+
.withDescription('Irrigation Target, duration in minutes or capacity in Liters (depending on mode)'),
|
|
120
|
+
exposes.numeric('cycle_irrigation_num_times', exposes.access.STATE_SET).withValueMin(0).withValueMax(100).withUnit('#')
|
|
121
|
+
.withDescription('Number of cycle irrigation times, set to 0 for single cycle'),
|
|
122
|
+
exposes.numeric('cycle_irrigation_interval', exposes.access.STATE_SET).withValueMin(0).withValueMax(1440).withUnit('min')
|
|
123
|
+
.withDescription('Cycle irrigation interval'),
|
|
124
|
+
exposes.numeric('irrigation_start_time', ea.STATE).withUnit('GMT+8').withDescription('Irrigation start time'),
|
|
125
|
+
exposes.numeric('irrigation_end_time', ea.STATE).withUnit('GMT+8').withDescription('Irrigation end time'),
|
|
126
|
+
exposes.numeric('last_irrigation_duration', exposes.access.STATE).withUnit('min')
|
|
127
|
+
.withDescription('Last irrigation duration'),
|
|
128
|
+
exposes.numeric('water_consumed', exposes.access.STATE).withUnit('L')
|
|
129
|
+
.withDescription('Water consumed (Litres)'),
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
];
|
package/devices/ikea.js
CHANGED
|
@@ -46,7 +46,7 @@ const bulbOnEvent = async (type, data, device, options, state) => {
|
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
const configureRemote = async (device, coordinatorEndpoint, logger) => {
|
|
49
|
-
// Firmware 2.3.
|
|
49
|
+
// Firmware 2.3.075 >= only supports binding to endpoint, before only to group
|
|
50
50
|
// - https://github.com/Koenkk/zigbee2mqtt/issues/2772#issuecomment-577389281
|
|
51
51
|
// - https://github.com/Koenkk/zigbee2mqtt/issues/7716
|
|
52
52
|
const endpoint = device.getEndpoint(1);
|
|
@@ -292,7 +292,8 @@ module.exports = [
|
|
|
292
292
|
extend: tradfriExtend.light_onoff_brightness_colortemp(),
|
|
293
293
|
},
|
|
294
294
|
{
|
|
295
|
-
zigbeeModel: ['TRADFRIbulbE27WSglobeopal1055lm', 'TRADFRIbulbE26WSglobeopal1100lm', 'TRADFRIbulbE26WSglobeopal1160lm'
|
|
295
|
+
zigbeeModel: ['TRADFRIbulbE27WSglobeopal1055lm', 'TRADFRIbulbE26WSglobeopal1100lm', 'TRADFRIbulbE26WSglobeopal1160lm',
|
|
296
|
+
'TRADFRIbulbE26WSglobeopal1055lm'],
|
|
296
297
|
model: 'LED2003G10',
|
|
297
298
|
vendor: 'IKEA',
|
|
298
299
|
description: 'TRADFRI LED bulb E26/27 1100/1055/1160 lumen, dimmable, white spectrum, opal white',
|
package/devices/lidl.js
CHANGED
|
@@ -486,14 +486,6 @@ module.exports = [
|
|
|
486
486
|
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
487
487
|
},
|
|
488
488
|
},
|
|
489
|
-
{
|
|
490
|
-
fingerprint: [{modelID: 'TS0505B', manufactureName: '_TZ3210_umi6vbsz'}],
|
|
491
|
-
model: '100341862',
|
|
492
|
-
vendor: 'Lidl',
|
|
493
|
-
description: 'Livarno Home LED-Flooder',
|
|
494
|
-
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500], disableColorTempStartup: true}),
|
|
495
|
-
meta: {applyRedFix: true, enhancedHue: false},
|
|
496
|
-
},
|
|
497
489
|
{
|
|
498
490
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_s8gkrkxk'}],
|
|
499
491
|
model: 'HG06467',
|
|
@@ -614,6 +606,17 @@ module.exports = [
|
|
|
614
606
|
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
615
607
|
},
|
|
616
608
|
},
|
|
609
|
+
{
|
|
610
|
+
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_q50zhdsc'}],
|
|
611
|
+
model: 'HG08131C',
|
|
612
|
+
vendor: 'Lidl',
|
|
613
|
+
description: 'Livarno Home outdoor E27 bulb in set with flare',
|
|
614
|
+
...extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
|
|
615
|
+
meta: {applyRedFix: true, enhancedHue: false},
|
|
616
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
617
|
+
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
618
|
+
},
|
|
619
|
+
},
|
|
617
620
|
{
|
|
618
621
|
fingerprint: [{modelID: 'TS0505A', manufacturerName: '_TZ3000_kdpxju99'}],
|
|
619
622
|
model: 'HG06106A',
|
package/devices/niko.js
CHANGED
|
@@ -96,7 +96,7 @@ const local = {
|
|
|
96
96
|
module.exports = [
|
|
97
97
|
{
|
|
98
98
|
zigbeeModel: ['Connected socket outlet'],
|
|
99
|
-
model: '170-33505',
|
|
99
|
+
model: '170-33505/170-34605',
|
|
100
100
|
vendor: 'Niko',
|
|
101
101
|
description: 'Connected socket outlet',
|
|
102
102
|
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, local.fz.outlet],
|
package/devices/paulmann.js
CHANGED
|
@@ -64,6 +64,14 @@ module.exports = [
|
|
|
64
64
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
|
+
fingerprint: [{modelID: 'RGBW Controller', manufacturerName: 'Paulmann Licht'}],
|
|
68
|
+
model: '94191',
|
|
69
|
+
vendor: 'Paulmann',
|
|
70
|
+
description: 'Plug & shine LED strip',
|
|
71
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
fingerprint: [{modelID: 'CCT Light', manufacturerName: 'Paulmann lamp'}],
|
|
67
75
|
zigbeeModel: ['CCT light', 'CCT_light', 'CCT light '],
|
|
68
76
|
model: '50064',
|
|
69
77
|
vendor: 'Paulmann',
|