zigbee-herdsman-converters 14.0.521 → 14.0.524
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 +12 -1
- package/devices/centralite.js +8 -35
- package/devices/innr.js +2 -1
- package/devices/insta.js +1 -1
- package/devices/kmpcil.js +97 -0
- package/devices/legrand.js +4 -4
- package/devices/lifecontrol.js +2 -0
- package/devices/philips.js +10 -1
- package/devices/somgoms.js +9 -0
- package/devices/tci.js +7 -0
- package/devices/third_reality.js +16 -0
- package/devices/tuya.js +3 -3
- package/devices/vimar.js +11 -0
- package/devices/woox.js +1 -1
- package/devices/xiaomi.js +48 -47
- package/devices/zemismart.js +2 -0
- package/lib/legacy.js +1 -1
- package/lib/xiaomi.js +5 -6
- package/package.json +2 -2
package/converters/fromZigbee.js
CHANGED
|
@@ -2257,7 +2257,9 @@ const converters = {
|
|
|
2257
2257
|
const value = tuya.getDataValue(dpValue);
|
|
2258
2258
|
|
|
2259
2259
|
switch (dp) {
|
|
2260
|
-
case tuya.dataPoints.coverPosition: // Started moving to position (triggered from Zigbee)
|
|
2260
|
+
case tuya.dataPoints.coverPosition: { // Started moving to position (triggered from Zigbee)
|
|
2261
|
+
return {running: true};
|
|
2262
|
+
}
|
|
2261
2263
|
case tuya.dataPoints.coverArrived: { // Arrived at position
|
|
2262
2264
|
const running = dp === tuya.dataPoints.coverArrived ? false : true;
|
|
2263
2265
|
const invert = tuya.isCoverInverted(meta.device.manufacturerName) ? !options.invert_cover : options.invert_cover;
|
|
@@ -5529,6 +5531,9 @@ const converters = {
|
|
|
5529
5531
|
if (definition.exposes.find((e) => e.name === 'temperature')) {
|
|
5530
5532
|
result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
|
|
5531
5533
|
}
|
|
5534
|
+
if (definition.exposes.find((e) => e.name === 'device_temperature')) {
|
|
5535
|
+
result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
|
|
5536
|
+
}
|
|
5532
5537
|
if (definition.exposes.find((e) => e.name === 'illuminance')) {
|
|
5533
5538
|
result.push(exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual'));
|
|
5534
5539
|
}
|
|
@@ -5550,6 +5555,9 @@ const converters = {
|
|
|
5550
5555
|
if (definition.exposes.find((e) => e.name === 'temperature')) {
|
|
5551
5556
|
result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
|
|
5552
5557
|
}
|
|
5558
|
+
if (definition.exposes.find((e) => e.name === 'device_temperature')) {
|
|
5559
|
+
result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
|
|
5560
|
+
}
|
|
5553
5561
|
return result;
|
|
5554
5562
|
},
|
|
5555
5563
|
convert: (model, msg, publish, options, meta) => {
|
|
@@ -5569,6 +5577,9 @@ const converters = {
|
|
|
5569
5577
|
if (definition.exposes.find((e) => e.name === 'temperature')) {
|
|
5570
5578
|
result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
|
|
5571
5579
|
}
|
|
5580
|
+
if (definition.exposes.find((e) => e.name === 'device_temperature')) {
|
|
5581
|
+
result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
|
|
5582
|
+
}
|
|
5572
5583
|
if (definition.exposes.find((e) => e.name === 'illuminance')) {
|
|
5573
5584
|
result.push(exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual'));
|
|
5574
5585
|
}
|
package/devices/centralite.js
CHANGED
|
@@ -161,36 +161,10 @@ module.exports = [
|
|
|
161
161
|
extend: extend.light_onoff_brightness(),
|
|
162
162
|
},
|
|
163
163
|
{
|
|
164
|
-
|
|
164
|
+
fingerprint: [{modelID: '3157100', manufacturerName: 'Centralite'}, {modelID: '3157100-E', manufacturerName: 'Centralite'}],
|
|
165
165
|
model: '3157100',
|
|
166
166
|
vendor: 'Centralite',
|
|
167
|
-
description: '3-Series pearl touch thermostat
|
|
168
|
-
fromZigbee: [fz.battery, fz.legacy.thermostat_att_report, fz.fan, fz.ignore_time_read],
|
|
169
|
-
toZigbee: [tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
|
|
170
|
-
tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
|
|
171
|
-
tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
|
|
172
|
-
tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
|
|
173
|
-
tz.thermostat_relay_status_log, tz.fan_mode, tz.thermostat_running_state],
|
|
174
|
-
exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 10, 30, 1).withLocalTemperature()
|
|
175
|
-
.withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
|
|
176
|
-
.withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
|
|
177
|
-
.withSetpoint('occupied_cooling_setpoint', 10, 30, 1)
|
|
178
|
-
.withLocalTemperatureCalibration(-30, 30, 0.1)],
|
|
179
|
-
meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
|
|
180
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
181
|
-
const endpoint = device.getEndpoint(1);
|
|
182
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat', 'hvacFanCtrl']);
|
|
183
|
-
await reporting.batteryVoltage(endpoint);
|
|
184
|
-
await reporting.thermostatRunningState(endpoint);
|
|
185
|
-
await reporting.thermostatTemperature(endpoint);
|
|
186
|
-
await reporting.fanMode(endpoint);
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
zigbeeModel: ['3157100-E'],
|
|
191
|
-
model: '3157100-E',
|
|
192
|
-
vendor: 'Centralite',
|
|
193
|
-
description: '3-Series pearl touch thermostat,',
|
|
167
|
+
description: '3-Series pearl touch thermostat',
|
|
194
168
|
fromZigbee: [fz.battery, fz.thermostat, fz.fan, fz.ignore_time_read],
|
|
195
169
|
toZigbee: [tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
|
|
196
170
|
tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
|
|
@@ -200,11 +174,11 @@ module.exports = [
|
|
|
200
174
|
exposes: [e.battery(),
|
|
201
175
|
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
202
176
|
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
|
|
203
|
-
exposes.climate().withSetpoint('occupied_heating_setpoint',
|
|
177
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
|
|
204
178
|
.withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
|
|
205
179
|
.withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
|
|
206
|
-
.withSetpoint('occupied_cooling_setpoint',
|
|
207
|
-
.withLocalTemperatureCalibration(-
|
|
180
|
+
.withSetpoint('occupied_cooling_setpoint', 7, 30, 1)
|
|
181
|
+
.withLocalTemperatureCalibration(-2.5, 2.5, 0.1)],
|
|
208
182
|
meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
|
|
209
183
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
210
184
|
const endpoint = device.getEndpoint(1);
|
|
@@ -222,7 +196,7 @@ module.exports = [
|
|
|
222
196
|
vendor: 'Centralite',
|
|
223
197
|
description: 'HA thermostat',
|
|
224
198
|
fromZigbee: [fz.battery, fz.thermostat, fz.fan, fz.ignore_time_read],
|
|
225
|
-
toZigbee: [tz.factory_reset, tz.thermostat_local_temperature,
|
|
199
|
+
toZigbee: [tz.factory_reset, tz.thermostat_local_temperature,
|
|
226
200
|
tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
|
|
227
201
|
tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
|
|
228
202
|
tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
|
|
@@ -230,11 +204,10 @@ module.exports = [
|
|
|
230
204
|
exposes: [e.battery(),
|
|
231
205
|
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
232
206
|
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
|
|
233
|
-
exposes.climate().withSetpoint('occupied_heating_setpoint',
|
|
207
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
|
|
234
208
|
.withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
|
|
235
209
|
.withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
|
|
236
|
-
.withSetpoint('occupied_cooling_setpoint',
|
|
237
|
-
.withLocalTemperatureCalibration(-30, 30, 0.1)],
|
|
210
|
+
.withSetpoint('occupied_cooling_setpoint', 7, 30, 1)],
|
|
238
211
|
meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
|
|
239
212
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
240
213
|
const endpoint = device.getEndpoint(1);
|
package/devices/innr.js
CHANGED
|
@@ -60,7 +60,8 @@ module.exports = [
|
|
|
60
60
|
model: 'OPL 130 C',
|
|
61
61
|
vendor: 'Innr',
|
|
62
62
|
description: 'Outdoor smart pedestal light colour',
|
|
63
|
-
extend: extend.light_onoff_brightness_colortemp_color(
|
|
63
|
+
extend: extend.light_onoff_brightness_colortemp_color(
|
|
64
|
+
{colorTempRange: [153, 555], supportsHS: true, disableColorTempStartup: true}),
|
|
64
65
|
meta: {applyRedFix: true, turnsOffAtBrightness1: true},
|
|
65
66
|
},
|
|
66
67
|
{
|
package/devices/insta.js
CHANGED
|
@@ -21,7 +21,7 @@ module.exports = [
|
|
|
21
21
|
ota: ota.zigbeeOTA,
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
zigbeeModel: ['Generic UP Device'],
|
|
24
|
+
zigbeeModel: ['NEXENTRO Blinds Actuator', 'Generic UP Device'],
|
|
25
25
|
model: '57008000',
|
|
26
26
|
vendor: 'Insta',
|
|
27
27
|
description: 'Blinds actor with lift/tilt calibration & with with inputs for wall switches',
|
package/devices/kmpcil.js
CHANGED
|
@@ -3,8 +3,71 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
|
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
4
|
const constants = require('../lib/constants');
|
|
5
5
|
const reporting = require('../lib/reporting');
|
|
6
|
+
const globalStore = require('../lib/store');
|
|
7
|
+
const utils = require('../lib/utils');
|
|
6
8
|
const e = exposes.presets;
|
|
7
9
|
|
|
10
|
+
const kmpcilOptions={
|
|
11
|
+
presence_timeout_dc: () => {
|
|
12
|
+
return exposes.numeric('presence_timeout_dc').withValueMin(60).withDescription(
|
|
13
|
+
'Time in seconds after which presence is cleared after detecting it (default 60 seconds) while in DC.');
|
|
14
|
+
},
|
|
15
|
+
presence_timeout_battery: () => {
|
|
16
|
+
return exposes.numeric('presence_timeout_battery').withValueMin(120).withDescription(
|
|
17
|
+
'Time in seconds after which presence is cleared after detecting it (default 420 seconds) while in Battery.');
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function handleKmpcilPresence(model, msg, publish, options, meta) {
|
|
22
|
+
const useOptionsTimeoutBattery = options && options.hasOwnProperty('presence_timeout_battery');
|
|
23
|
+
const timeoutBattery = useOptionsTimeoutBattery ? options.presence_timeout_battery : 420; // 100 seconds by default
|
|
24
|
+
|
|
25
|
+
const useOptionsTimeoutDc = options && options.hasOwnProperty('presence_timeout_dc');
|
|
26
|
+
const timeoutDc = useOptionsTimeoutDc ? options.presence_timeout_dc : 60;
|
|
27
|
+
|
|
28
|
+
const mode = meta.state? meta.state['power_state'] : false;
|
|
29
|
+
|
|
30
|
+
const timeout = mode ? timeoutDc : timeoutBattery;
|
|
31
|
+
// Stop existing timer because motion is detected and set a new one.
|
|
32
|
+
clearTimeout(globalStore.getValue(msg.endpoint, 'timer'));
|
|
33
|
+
const timer = setTimeout(() => publish({presence: false}), timeout * 1000);
|
|
34
|
+
globalStore.putValue(msg.endpoint, 'timer', timer);
|
|
35
|
+
|
|
36
|
+
return {presence: true};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const kmpcilConverters = {
|
|
40
|
+
presence_binary_input: {
|
|
41
|
+
cluster: 'genBinaryInput',
|
|
42
|
+
type: ['attributeReport', 'readResponse'],
|
|
43
|
+
convert: (model, msg, publish, options, meta) => {
|
|
44
|
+
const payload = handleKmpcilPresence(model, msg, publish, options, meta);
|
|
45
|
+
if (msg.data.hasOwnProperty('presentValue')) {
|
|
46
|
+
const presentValue = msg.data['presentValue'];
|
|
47
|
+
payload.power_state = (presentValue & 0x01)> 0;
|
|
48
|
+
payload.occupancy = (presentValue & 0x04) > 0;
|
|
49
|
+
payload.vibration = (presentValue & 0x02) > 0;
|
|
50
|
+
}
|
|
51
|
+
return payload;
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
presence_power: {
|
|
55
|
+
cluster: 'genPowerCfg',
|
|
56
|
+
type: ['attributeReport', 'readResponse'],
|
|
57
|
+
options: [kmpcilOptions.presence_timeout_dc(), kmpcilOptions.presence_timeout_battery()],
|
|
58
|
+
convert: (model, msg, publish, options, meta) => {
|
|
59
|
+
const payload = handleKmpcilPresence(model, msg, publish, options, meta);
|
|
60
|
+
if (msg.data.hasOwnProperty('batteryVoltage')) {
|
|
61
|
+
payload.voltage = msg.data['batteryVoltage'] * 100;
|
|
62
|
+
if (model.meta && model.meta.battery && model.meta.battery.voltageToPercentage) {
|
|
63
|
+
payload.battery = utils.batteryVoltageToPercentage(payload.voltage, model.meta.battery.voltageToPercentage);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return payload;
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
8
71
|
module.exports = [
|
|
9
72
|
{
|
|
10
73
|
zigbeeModel: ['RES005'],
|
|
@@ -47,4 +110,38 @@ module.exports = [
|
|
|
47
110
|
await endpoint.configureReporting('genBinaryOutput', payloadBinaryOutput);
|
|
48
111
|
},
|
|
49
112
|
},
|
|
113
|
+
{
|
|
114
|
+
zigbeeModel: ['tagv1'],
|
|
115
|
+
model: 'KMPCIL-tag-001',
|
|
116
|
+
vendor: 'KMPCIL',
|
|
117
|
+
description: 'Arrival sensor',
|
|
118
|
+
fromZigbee: [kmpcilConverters.presence_binary_input, kmpcilConverters.presence_power, fz.temperature],
|
|
119
|
+
exposes: [e.battery(), e.presence(), exposes.binary('power_state', exposes.access.STATE, true, false),
|
|
120
|
+
e.occupancy(), e.vibration(), e.temperature()],
|
|
121
|
+
toZigbee: [],
|
|
122
|
+
meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
|
|
123
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
124
|
+
const endpoint = device.getEndpoint(1);
|
|
125
|
+
for (const cluster of ['msTemperatureMeasurement', 'genPowerCfg', 'genBinaryInput']) {
|
|
126
|
+
// This sleep here(and the sleep) after is to allow the command to be
|
|
127
|
+
// fully sent to coordinator. In case repeater involved and the repeater
|
|
128
|
+
// is litted in resources, we may want to give some time so that the sequence of
|
|
129
|
+
// commands does not overwhelm the repeater.
|
|
130
|
+
await utils.sleep(2000);
|
|
131
|
+
await endpoint.bind(cluster, coordinatorEndpoint);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
await utils.sleep(1000);
|
|
135
|
+
const p = reporting.payload('batteryVoltage', 0, 10, 1);
|
|
136
|
+
await endpoint.configureReporting('genPowerCfg', p);
|
|
137
|
+
|
|
138
|
+
await utils.sleep(1000);
|
|
139
|
+
const p2 = reporting.payload('presentValue', 0, 300, 1);
|
|
140
|
+
await endpoint.configureReporting('genBinaryInput', p2);
|
|
141
|
+
|
|
142
|
+
await utils.sleep(1000);
|
|
143
|
+
await reporting.temperature(endpoint);
|
|
144
|
+
await endpoint.read('genBinaryInput', ['presentValue']);
|
|
145
|
+
},
|
|
146
|
+
},
|
|
50
147
|
];
|
package/devices/legrand.js
CHANGED
|
@@ -32,8 +32,8 @@ module.exports = [
|
|
|
32
32
|
{
|
|
33
33
|
zigbeeModel: [' Contactor\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'+
|
|
34
34
|
'\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'],
|
|
35
|
-
model: '
|
|
36
|
-
description: '
|
|
35
|
+
model: '412171',
|
|
36
|
+
description: 'DIN contactor module ( Bticino FC80CC )',
|
|
37
37
|
vendor: 'Legrand',
|
|
38
38
|
extend: extend.switch(),
|
|
39
39
|
fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement, fz.legrand_cluster_fc01, fz.ignore_basic_report, fz.ignore_genOta],
|
|
@@ -52,8 +52,8 @@ module.exports = [
|
|
|
52
52
|
{
|
|
53
53
|
zigbeeModel: [' Teleruptor\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'+
|
|
54
54
|
'\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'],
|
|
55
|
-
model: '
|
|
56
|
-
description: '
|
|
55
|
+
model: '412170',
|
|
56
|
+
description: 'DIN smart relay for light control ( Bticino FC80RC ) ',
|
|
57
57
|
vendor: 'Legrand',
|
|
58
58
|
extend: extend.switch(),
|
|
59
59
|
fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement, fz.legrand_cluster_fc01, fz.ignore_basic_report, fz.ignore_genOta],
|
package/devices/lifecontrol.js
CHANGED
|
@@ -14,6 +14,7 @@ module.exports = [
|
|
|
14
14
|
description: 'Water leak switch',
|
|
15
15
|
fromZigbee: [fz.ias_water_leak_alarm_1, fz.battery],
|
|
16
16
|
toZigbee: [],
|
|
17
|
+
meta: {battery: {dontDividePercentage: true}},
|
|
17
18
|
exposes: [e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
|
|
18
19
|
},
|
|
19
20
|
{
|
|
@@ -82,6 +83,7 @@ module.exports = [
|
|
|
82
83
|
description: 'Air sensor',
|
|
83
84
|
fromZigbee: [fz.lifecontrolVoc, fz.battery],
|
|
84
85
|
toZigbee: [],
|
|
86
|
+
meta: {battery: {dontDividePercentage: true}},
|
|
85
87
|
exposes: [e.temperature(), e.humidity(), e.voc(), e.eco2(), e.battery()],
|
|
86
88
|
},
|
|
87
89
|
];
|
package/devices/philips.js
CHANGED
|
@@ -1259,7 +1259,7 @@ module.exports = [
|
|
|
1259
1259
|
vendor: 'Philips',
|
|
1260
1260
|
description: 'Hue white ambiance 5/6" retrofit recessed downlight',
|
|
1261
1261
|
meta: {turnsOffAtBrightness1: true},
|
|
1262
|
-
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1262
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1263
1263
|
ota: ota.zigbeeOTA,
|
|
1264
1264
|
},
|
|
1265
1265
|
{
|
|
@@ -2762,6 +2762,15 @@ module.exports = [
|
|
|
2762
2762
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2763
2763
|
ota: ota.zigbeeOTA,
|
|
2764
2764
|
},
|
|
2765
|
+
{
|
|
2766
|
+
zigbeeModel: ['1745130P7'],
|
|
2767
|
+
model: '1745130P7',
|
|
2768
|
+
vendor: 'Philips',
|
|
2769
|
+
description: 'Hue Calla outdoor',
|
|
2770
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2771
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2772
|
+
ota: ota.zigbeeOTA,
|
|
2773
|
+
},
|
|
2765
2774
|
{
|
|
2766
2775
|
zigbeeModel: ['LTO002'],
|
|
2767
2776
|
model: '8719514301542',
|
package/devices/somgoms.js
CHANGED
|
@@ -25,6 +25,15 @@ module.exports = [
|
|
|
25
25
|
toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options],
|
|
26
26
|
exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
zigbeeModel: ['sbordckq'],
|
|
30
|
+
model: 'SM-1CTW-EU',
|
|
31
|
+
vendor: 'Somgoms',
|
|
32
|
+
description: 'Curtain switch',
|
|
33
|
+
fromZigbee: [fz.tuya_cover, fz.ignore_basic_report],
|
|
34
|
+
toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options],
|
|
35
|
+
exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
|
|
36
|
+
},
|
|
28
37
|
{
|
|
29
38
|
zigbeeModel: ['hpb9yts'],
|
|
30
39
|
model: 'ZSTY-SM-1DMZG-US-W',
|
package/devices/tci.js
CHANGED
|
@@ -15,4 +15,11 @@ module.exports = [
|
|
|
15
15
|
description: 'LED driver for wireless control (60 watt)',
|
|
16
16
|
extend: extend.light_onoff_brightness(),
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
zigbeeModel: ['PROFESSIONALE ZB3'],
|
|
20
|
+
model: '122576',
|
|
21
|
+
vendor: 'TCI',
|
|
22
|
+
description: 'Direct current wireless dimmable electronic drivers with DIP-SWITCH',
|
|
23
|
+
extend: extend.light_onoff_brightness(),
|
|
24
|
+
},
|
|
18
25
|
];
|
package/devices/third_reality.js
CHANGED
|
@@ -98,4 +98,20 @@ module.exports = [
|
|
|
98
98
|
await reporting.onOff(endpoint);
|
|
99
99
|
},
|
|
100
100
|
},
|
|
101
|
+
{
|
|
102
|
+
zigbeeModel: ['3RSB015BZ'],
|
|
103
|
+
model: '3RSB015BZ',
|
|
104
|
+
vendor: 'Third Reality',
|
|
105
|
+
description: 'Roller shade',
|
|
106
|
+
fromZigbee: [fz.cover_position_tilt, fz.battery],
|
|
107
|
+
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
108
|
+
meta: {battery: {dontDividePercentage: false}},
|
|
109
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
110
|
+
const endpoint = device.getEndpoint(1);
|
|
111
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
|
|
112
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
113
|
+
await reporting.currentPositionLiftPercentage(endpoint);
|
|
114
|
+
},
|
|
115
|
+
exposes: [e.cover_position(), e.battery()],
|
|
116
|
+
},
|
|
101
117
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -14,7 +14,7 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
|
|
|
14
14
|
'_TZ3000_jvzvulen', '_TZ3000_mraovvmm', '_TZ3000_nfnmi125', '_TZ3000_ps3dmato', '_TZ3000_w0qqde0g', '_TZ3000_u5u4cakc',
|
|
15
15
|
'_TZ3000_rdtixbnu', '_TZ3000_typdpbpg', '_TZ3000_kx0pris5', '_TZ3000_amdymr7l', '_TZ3000_z1pnpsdo', '_TZ3000_ksw8qtmt',
|
|
16
16
|
'_TZ3000_nzkqcvvs', '_TZ3000_1h2x4akh', '_TZ3000_9vo5icau', '_TZ3000_cehuw1lw', '_TZ3000_ko6v90pg', '_TZ3000_f1bapcit',
|
|
17
|
-
'_TZ3000_cjrngdr3', '_TZ3000_zloso4jk'];
|
|
17
|
+
'_TZ3000_cjrngdr3', '_TZ3000_zloso4jk', '_TZ3000_v4mevirn'];
|
|
18
18
|
|
|
19
19
|
const tzLocal = {
|
|
20
20
|
TS0504B_color: {
|
|
@@ -214,7 +214,8 @@ module.exports = [
|
|
|
214
214
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_5ng23zjs'},
|
|
215
215
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_rmjr4ufz'},
|
|
216
216
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_v7gnj3ad'},
|
|
217
|
-
{modelID: 'TS0001', manufacturerName: '_TZ3000_mx3vgyea'}
|
|
217
|
+
{modelID: 'TS0001', manufacturerName: '_TZ3000_mx3vgyea'},
|
|
218
|
+
{modelID: 'TS0001', manufacturerName: '_TZ3000_qsp2pwtf'}],
|
|
218
219
|
model: 'WHD02',
|
|
219
220
|
vendor: 'TuYa',
|
|
220
221
|
description: 'Wall switch module',
|
|
@@ -1099,7 +1100,6 @@ module.exports = [
|
|
|
1099
1100
|
{modelID: 'zo2pocs\u0000', manufacturerName: '_TYST11_fzo2pocs'},
|
|
1100
1101
|
{modelID: 'TS0601', manufacturerName: '_TZE200_cf1sl3tj'},
|
|
1101
1102
|
// Roller blinds:
|
|
1102
|
-
{modelID: 'TS0601', manufacturerName: '_TZE200_sbordckq'},
|
|
1103
1103
|
{modelID: 'TS0601', manufacturerName: '_TZE200_fctwhugx'},
|
|
1104
1104
|
{modelID: 'TS0601', manufacturerName: '_TZE200_zah67ekd'},
|
|
1105
1105
|
{modelID: 'TS0601', manufacturerName: '_TZE200_hsgrhjpf'},
|
package/devices/vimar.js
CHANGED
|
@@ -26,4 +26,15 @@ module.exports = [
|
|
|
26
26
|
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
27
27
|
exposes: [e.cover_position()],
|
|
28
28
|
},
|
|
29
|
+
{
|
|
30
|
+
zigbeeModel: ['Mains_Power_Outlet_v1.0'],
|
|
31
|
+
model: '14593',
|
|
32
|
+
vendor: 'Vimar',
|
|
33
|
+
description: '16A outlet IoT connected',
|
|
34
|
+
extend: extend.switch(),
|
|
35
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
36
|
+
const endpoint = device.getEndpoint(10);
|
|
37
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
38
|
+
},
|
|
39
|
+
},
|
|
29
40
|
];
|
package/devices/woox.js
CHANGED
|
@@ -134,7 +134,7 @@ module.exports = [
|
|
|
134
134
|
onEvent: tuya.onEventsetTime,
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
|
-
fingerprint: [{modelID: 'TS0219', manufacturerName: '_TYZB01_ynsiasng'}],
|
|
137
|
+
fingerprint: [{modelID: 'TS0219', manufacturerName: '_TYZB01_ynsiasng'}, {modelID: 'TS0219', manufacturerName: '_TYZB01_bwsijaty'}],
|
|
138
138
|
model: 'R7051',
|
|
139
139
|
vendor: 'Woox',
|
|
140
140
|
description: 'Smart siren',
|
package/devices/xiaomi.js
CHANGED
|
@@ -79,7 +79,7 @@ module.exports = [
|
|
|
79
79
|
endpoint: (device) => {
|
|
80
80
|
return {l1: 1, l2: 2};
|
|
81
81
|
},
|
|
82
|
-
exposes: [e.power(), e.energy(), e.voltage(), e.
|
|
82
|
+
exposes: [e.power(), e.energy(), e.voltage(), e.device_temperature(), e.power_outage_memory(),
|
|
83
83
|
// When in rgbw mode, only one of color and colortemp will be valid, and l2 will be invalid
|
|
84
84
|
// Do not control l2 in rgbw mode
|
|
85
85
|
e.light_brightness_colortemp_colorxy([153, 370]).removeFeature('color_temp_startup').withEndpoint('l1'),
|
|
@@ -178,7 +178,7 @@ module.exports = [
|
|
|
178
178
|
description: 'Aqara wireless switch',
|
|
179
179
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
180
180
|
exposes: [e.battery(), e.battery_voltage(), e.action(['single', 'double', 'triple', 'quadruple', 'hold', 'release']),
|
|
181
|
-
e.
|
|
181
|
+
e.device_temperature(), e.power_outage_count()],
|
|
182
182
|
fromZigbee: [fz.xiaomi_multistate_action, fz.xiaomi_WXKG11LM_action, fz.xiaomi_basic,
|
|
183
183
|
fz.legacy.WXKG11LM_click, fz.legacy.xiaomi_action_click_multistate],
|
|
184
184
|
toZigbee: [],
|
|
@@ -337,8 +337,8 @@ module.exports = [
|
|
|
337
337
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple, fz.xiaomi_multistate_action],
|
|
338
338
|
toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
|
|
339
339
|
tz.xiaomi_led_disabled_night, tz.xiaomi_flip_indicator_light],
|
|
340
|
-
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
|
|
341
|
-
e.
|
|
340
|
+
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.power(), e.energy(), e.voltage(),
|
|
341
|
+
e.device_temperature(), e.power_outage_memory(), e.led_disabled_night(), e.flip_indicator_light(),
|
|
342
342
|
e.action([
|
|
343
343
|
'single_left', 'single_right', 'single_both',
|
|
344
344
|
'double_left', 'double_right', 'double_both']),
|
|
@@ -398,7 +398,7 @@ module.exports = [
|
|
|
398
398
|
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
|
|
399
399
|
tz.xiaomi_flip_indicator_light],
|
|
400
400
|
exposes: [e.switch(), e.action(['single', 'double']), e.power().withAccess(ea.STATE_GET), e.energy(), e.flip_indicator_light(),
|
|
401
|
-
e.power_outage_memory(), e.
|
|
401
|
+
e.power_outage_memory(), e.device_temperature().withAccess(ea.STATE),
|
|
402
402
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode')],
|
|
403
403
|
onEvent: preventReset,
|
|
404
404
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -425,7 +425,7 @@ module.exports = [
|
|
|
425
425
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button')
|
|
426
426
|
.withEndpoint('right'),
|
|
427
427
|
e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
|
|
428
|
-
e.
|
|
428
|
+
e.device_temperature().withAccess(ea.STATE), e.power_outage_memory(), e.flip_indicator_light()],
|
|
429
429
|
onEvent: preventReset,
|
|
430
430
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
431
431
|
const endpoint1 = device.getEndpoint(1);
|
|
@@ -466,7 +466,7 @@ module.exports = [
|
|
|
466
466
|
fz.legacy.QBKG04LM_QBKG11LM_click, fz.xiaomi_basic, fz.xiaomi_operation_mode_basic,
|
|
467
467
|
fz.legacy.QBKG11LM_click, fz.ignore_multistate_report, fz.xiaomi_power],
|
|
468
468
|
exposes: [
|
|
469
|
-
e.switch(), e.power().withAccess(ea.STATE_GET), e.
|
|
469
|
+
e.switch(), e.power().withAccess(ea.STATE_GET), e.device_temperature(),
|
|
470
470
|
e.action(['single', 'double', 'release', 'hold']),
|
|
471
471
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
472
472
|
.withDescription('Decoupled mode'),
|
|
@@ -488,7 +488,7 @@ module.exports = [
|
|
|
488
488
|
exposes: [
|
|
489
489
|
e.switch().withEndpoint('left'),
|
|
490
490
|
e.switch().withEndpoint('right'),
|
|
491
|
-
e.
|
|
491
|
+
e.device_temperature(),
|
|
492
492
|
e.action(['release_left', 'release_right', 'release_both', 'double_left', 'double_right',
|
|
493
493
|
'single_left', 'single_right', 'hold_release_left', 'hold_release_left']),
|
|
494
494
|
exposes.enum('operation_mode', ea.STATE_SET, ['control_left_relay', 'control_right_relay', 'decoupled'])
|
|
@@ -522,7 +522,7 @@ module.exports = [
|
|
|
522
522
|
exposes: [
|
|
523
523
|
e.switch().withEndpoint('left'),
|
|
524
524
|
e.switch().withEndpoint('right'),
|
|
525
|
-
e.
|
|
525
|
+
e.device_temperature(),
|
|
526
526
|
e.power().withAccess(ea.STATE_GET),
|
|
527
527
|
e.action(['single_left', 'single_right', 'single_both', 'double_left', 'double_right', 'double_both',
|
|
528
528
|
'hold_left', 'hold_right', 'hold_both', 'release_left', 'release_right', 'release_both']),
|
|
@@ -638,7 +638,7 @@ module.exports = [
|
|
|
638
638
|
exposes.enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
|
|
639
639
|
.withDescription('Anti flicker mode can be used to solve blinking issues of some lights.' +
|
|
640
640
|
'Quick mode makes the device respond faster.'),
|
|
641
|
-
e.power_outage_memory(), e.led_disabled_night(), e.
|
|
641
|
+
e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE), e.flip_indicator_light(),
|
|
642
642
|
e.action([
|
|
643
643
|
'left_single', 'left_double', 'center_single', 'center_double', 'right_single', 'right_double',
|
|
644
644
|
'single_left_center', 'double_left_center', 'single_left_right', 'double_left_right',
|
|
@@ -668,7 +668,7 @@ module.exports = [
|
|
|
668
668
|
.withDescription('Decoupled mode for right button')
|
|
669
669
|
.withEndpoint('right'),
|
|
670
670
|
e.power().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(),
|
|
671
|
-
e.
|
|
671
|
+
e.device_temperature().withAccess(ea.STATE), e.flip_indicator_light(),
|
|
672
672
|
e.action([
|
|
673
673
|
'single_left', 'double_left', 'single_center', 'double_center', 'single_right', 'double_right',
|
|
674
674
|
'single_left_center', 'double_left_center', 'single_left_right', 'double_left_right',
|
|
@@ -699,7 +699,7 @@ module.exports = [
|
|
|
699
699
|
onEvent: preventReset,
|
|
700
700
|
exposes: [
|
|
701
701
|
e.switch(), e.power().withAccess(ea.STATE_GET),
|
|
702
|
-
e.energy(), e.
|
|
702
|
+
e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
703
703
|
e.voltage().withAccess(ea.STATE), e.action(['single', 'release']),
|
|
704
704
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
705
705
|
.withDescription('Decoupled mode'),
|
|
@@ -749,7 +749,7 @@ module.exports = [
|
|
|
749
749
|
tz.xiaomi_led_disabled_night, tz.xiaomi_flip_indicator_light],
|
|
750
750
|
exposes: [
|
|
751
751
|
e.switch(), e.action(['single', 'double']), e.power().withAccess(ea.STATE), e.energy(),
|
|
752
|
-
e.voltage().withAccess(ea.STATE), e.
|
|
752
|
+
e.voltage().withAccess(ea.STATE), e.device_temperature().withAccess(ea.STATE),
|
|
753
753
|
e.power_outage_memory(), e.led_disabled_night(), e.flip_indicator_light(),
|
|
754
754
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
755
755
|
.withDescription('Decoupled mode for left button'),
|
|
@@ -772,7 +772,7 @@ module.exports = [
|
|
|
772
772
|
exposes: [
|
|
773
773
|
e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
|
|
774
774
|
e.power().withAccess(ea.STATE), e.energy(), e.voltage().withAccess(ea.STATE), e.flip_indicator_light(),
|
|
775
|
-
e.power_outage_memory(), e.led_disabled_night(), e.
|
|
775
|
+
e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE),
|
|
776
776
|
e.action([
|
|
777
777
|
'single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
|
|
778
778
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
@@ -800,7 +800,7 @@ module.exports = [
|
|
|
800
800
|
exposes: [
|
|
801
801
|
e.switch().withEndpoint('left'), e.switch().withEndpoint('center'), e.switch().withEndpoint('right'),
|
|
802
802
|
e.power().withAccess(ea.STATE), e.energy(), e.voltage().withAccess(ea.STATE), e.flip_indicator_light(),
|
|
803
|
-
e.power_outage_memory(), e.led_disabled_night(), e.
|
|
803
|
+
e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE),
|
|
804
804
|
e.action([
|
|
805
805
|
'single_left', 'double_left', 'single_center', 'double_center',
|
|
806
806
|
'single_right', 'double_right', 'single_left_center', 'double_left_center',
|
|
@@ -850,7 +850,7 @@ module.exports = [
|
|
|
850
850
|
description: 'Aqara T1 temperature, humidity and pressure sensor',
|
|
851
851
|
fromZigbee: [fz.aqara_opple, fz.temperature, fz.humidity, fz.pressure, fz.battery],
|
|
852
852
|
toZigbee: [],
|
|
853
|
-
exposes: [e.temperature(), e.humidity(), e.pressure(), e.battery(), e.battery_voltage()],
|
|
853
|
+
exposes: [e.temperature(), e.humidity(), e.pressure(), e.device_temperature(), e.battery(), e.battery_voltage()],
|
|
854
854
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
855
855
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
856
856
|
const endpoint = device.getEndpoint(1);
|
|
@@ -878,7 +878,7 @@ module.exports = [
|
|
|
878
878
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
879
879
|
fromZigbee: [fz.xiaomi_basic, fz.occupancy_with_timeout, fz.RTCGQ11LM_illuminance],
|
|
880
880
|
toZigbee: [],
|
|
881
|
-
exposes: [e.battery(), e.occupancy(), e.
|
|
881
|
+
exposes: [e.battery(), e.occupancy(), e.device_temperature(), e.battery_voltage(), e.illuminance_lux().withProperty('illuminance'),
|
|
882
882
|
e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux')],
|
|
883
883
|
},
|
|
884
884
|
{
|
|
@@ -891,7 +891,7 @@ module.exports = [
|
|
|
891
891
|
exposes: [e.occupancy(), e.illuminance_lux().withProperty('illuminance'),
|
|
892
892
|
e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
|
|
893
893
|
exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
|
|
894
|
-
.withDescription('Time interval for detecting actions'), e.
|
|
894
|
+
.withDescription('Time interval for detecting actions'), e.device_temperature(), e.battery(), e.battery_voltage()],
|
|
895
895
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
896
896
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
897
897
|
const endpoint = device.getEndpoint(1);
|
|
@@ -909,7 +909,7 @@ module.exports = [
|
|
|
909
909
|
toZigbee: [tz.aqara_detection_interval, tz.aqara_motion_sensitivity],
|
|
910
910
|
exposes: [e.occupancy(), exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
|
|
911
911
|
exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
|
|
912
|
-
.withDescription('Time interval for detecting actions'), e.
|
|
912
|
+
.withDescription('Time interval for detecting actions'), e.device_temperature(), e.battery(), e.battery_voltage()],
|
|
913
913
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
914
914
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
915
915
|
const endpoint = device.getEndpoint(1);
|
|
@@ -933,7 +933,7 @@ module.exports = [
|
|
|
933
933
|
exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
|
|
934
934
|
.withDescription('Time interval for detecting actions'),
|
|
935
935
|
exposes.binary('trigger_indicator', ea.ALL, true, false).withDescription('When this option is enabled then ' +
|
|
936
|
-
'blue LED will blink once when motion is detected'), e.
|
|
936
|
+
'blue LED will blink once when motion is detected'), e.device_temperature(), e.battery(), e.battery_voltage()],
|
|
937
937
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
938
938
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
939
939
|
const endpoint = device.getEndpoint(1);
|
|
@@ -952,7 +952,7 @@ module.exports = [
|
|
|
952
952
|
fromZigbee: [fz.aqara_opple],
|
|
953
953
|
toZigbee: [tz.RTCZCGQ11LM_presence, tz.RTCZCGQ11LM_monitoring_mode, tz.RTCZCGQ11LM_approach_distance,
|
|
954
954
|
tz.aqara_motion_sensitivity, tz.RTCZCGQ11LM_reset_nopresence_status],
|
|
955
|
-
exposes: [e.presence().withAccess(ea.STATE_GET),
|
|
955
|
+
exposes: [e.presence().withAccess(ea.STATE_GET),
|
|
956
956
|
exposes.enum('presence_event', ea.STATE, ['enter', 'leave', 'left_enter', 'right_leave', 'right_enter', 'left_leave',
|
|
957
957
|
'approach', 'away']).withDescription('Presence events: "enter", "leave", "left_enter", "right_leave", ' +
|
|
958
958
|
'"right_enter", "left_leave", "approach", "away"'),
|
|
@@ -963,7 +963,7 @@ module.exports = [
|
|
|
963
963
|
exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('Different sensitivities ' +
|
|
964
964
|
'means different static human body recognition rate and response speed of occupied'),
|
|
965
965
|
exposes.enum('reset_nopresence_status', ea.SET, ['Reset']).withDescription('Reset the status of no presence'),
|
|
966
|
-
|
|
966
|
+
e.device_temperature(), e.power_outage_count()],
|
|
967
967
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
968
968
|
const endpoint = device.getEndpoint(1);
|
|
969
969
|
await endpoint.read('aqaraOpple', [0x010c], {manufacturerCode: 0x115f});
|
|
@@ -991,7 +991,7 @@ module.exports = [
|
|
|
991
991
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
992
992
|
fromZigbee: [fz.xiaomi_basic, fz.xiaomi_contact],
|
|
993
993
|
toZigbee: [],
|
|
994
|
-
exposes: [e.battery(), e.contact(), e.
|
|
994
|
+
exposes: [e.battery(), e.contact(), e.device_temperature(), e.battery_voltage()],
|
|
995
995
|
configure: async (device) => {
|
|
996
996
|
device.powerSource = 'Battery';
|
|
997
997
|
device.save();
|
|
@@ -1005,7 +1005,7 @@ module.exports = [
|
|
|
1005
1005
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
1006
1006
|
fromZigbee: [fz.xiaomi_basic, fz.ias_water_leak_alarm_1],
|
|
1007
1007
|
toZigbee: [],
|
|
1008
|
-
exposes: [e.battery(), e.water_leak(), e.battery_low(), e.battery_voltage(), e.
|
|
1008
|
+
exposes: [e.battery(), e.water_leak(), e.battery_low(), e.battery_voltage(), e.device_temperature(), e.power_outage_count()],
|
|
1009
1009
|
},
|
|
1010
1010
|
{
|
|
1011
1011
|
zigbeeModel: ['lumi.flood.agl02'],
|
|
@@ -1025,7 +1025,7 @@ module.exports = [
|
|
|
1025
1025
|
description: 'Mi/Aqara smart home cube',
|
|
1026
1026
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
1027
1027
|
fromZigbee: [fz.xiaomi_basic, fz.MFKZQ01LM_action_multistate, fz.MFKZQ01LM_action_analog],
|
|
1028
|
-
exposes: [e.battery(), e.battery_voltage(), e.angle('action_angle'), e.
|
|
1028
|
+
exposes: [e.battery(), e.battery_voltage(), e.angle('action_angle'), e.device_temperature(), e.power_outage_count(),
|
|
1029
1029
|
e.cube_side('action_from_side'), e.cube_side('action_side'), e.cube_side('action_to_side'),
|
|
1030
1030
|
e.action(['shake', 'wakeup', 'fall', 'tap', 'slide', 'flip180', 'flip90', 'rotate_left', 'rotate_right'])],
|
|
1031
1031
|
toZigbee: [],
|
|
@@ -1037,7 +1037,7 @@ module.exports = [
|
|
|
1037
1037
|
vendor: 'Xiaomi',
|
|
1038
1038
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
|
|
1039
1039
|
toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_power],
|
|
1040
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1040
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.power_outage_memory()],
|
|
1041
1041
|
ota: ota.zigbeeOTA,
|
|
1042
1042
|
},
|
|
1043
1043
|
{
|
|
@@ -1047,7 +1047,7 @@ module.exports = [
|
|
|
1047
1047
|
vendor: 'Xiaomi',
|
|
1048
1048
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
|
|
1049
1049
|
toZigbee: [tz.on_off, tz.xiaomi_power],
|
|
1050
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1050
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1051
1051
|
e.voltage().withAccess(ea.STATE)],
|
|
1052
1052
|
},
|
|
1053
1053
|
{
|
|
@@ -1060,7 +1060,7 @@ module.exports = [
|
|
|
1060
1060
|
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_auto_off, tz.xiaomi_led_disabled_night,
|
|
1061
1061
|
tz.xiaomi_overload_protection],
|
|
1062
1062
|
exposes: [
|
|
1063
|
-
e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1063
|
+
e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1064
1064
|
e.voltage().withAccess(ea.STATE), e.current(), e.consumer_connected(), e.led_disabled_night(),
|
|
1065
1065
|
e.power_outage_memory(), exposes.binary('auto_off', ea.STATE_SET, true, false)
|
|
1066
1066
|
.withDescription('Turn the device automatically off when attached device consumes less than 2W for 20 minutes'),
|
|
@@ -1075,7 +1075,7 @@ module.exports = [
|
|
|
1075
1075
|
vendor: 'Xiaomi',
|
|
1076
1076
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
|
|
1077
1077
|
toZigbee: [tz.on_off, tz.xiaomi_power],
|
|
1078
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1078
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1079
1079
|
e.voltage().withAccess(ea.STATE)],
|
|
1080
1080
|
},
|
|
1081
1081
|
{
|
|
@@ -1147,7 +1147,7 @@ module.exports = [
|
|
|
1147
1147
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.ignore_occupancy_report, fz.xiaomi_basic],
|
|
1148
1148
|
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_led_disabled_night,
|
|
1149
1149
|
tz.xiaomi_switch_power_outage_memory, tz.xiaomi_auto_off],
|
|
1150
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1150
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.voltage().withAccess(ea.STATE),
|
|
1151
1151
|
e.power_outage_memory(), e.led_disabled_night(),
|
|
1152
1152
|
exposes.binary('auto_off', ea.STATE_SET, true, false)
|
|
1153
1153
|
.withDescription('If the power is constantly lower than 2W within half an hour, ' +
|
|
@@ -1173,7 +1173,7 @@ module.exports = [
|
|
|
1173
1173
|
vendor: 'Xiaomi',
|
|
1174
1174
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic],
|
|
1175
1175
|
toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_power],
|
|
1176
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1176
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1177
1177
|
e.voltage().withAccess(ea.STATE), e.power_outage_memory()],
|
|
1178
1178
|
ota: ota.zigbeeOTA,
|
|
1179
1179
|
},
|
|
@@ -1259,7 +1259,7 @@ module.exports = [
|
|
|
1259
1259
|
'the normal monitoring state, the green indicator light flashes every 60 seconds'),
|
|
1260
1260
|
exposes.binary('linkage_alarm', ea.ALL, true, false).withDescription('When this option is enabled and a smoke ' +
|
|
1261
1261
|
'is detected, other detectors with this option enabled will also sound the alarm buzzer'),
|
|
1262
|
-
e.
|
|
1262
|
+
e.device_temperature(), e.battery(), e.battery_voltage()],
|
|
1263
1263
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
1264
1264
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1265
1265
|
const endpoint = device.getEndpoint(1);
|
|
@@ -1290,7 +1290,7 @@ module.exports = [
|
|
|
1290
1290
|
fromZigbee: [fz.xiaomi_basic, fz.DJT11LM_vibration],
|
|
1291
1291
|
toZigbee: [tz.DJT11LM_vibration_sensitivity],
|
|
1292
1292
|
exposes: [
|
|
1293
|
-
e.battery(), e.
|
|
1293
|
+
e.battery(), e.device_temperature(), e.vibration(), e.action(['vibration', 'tilt', 'drop']),
|
|
1294
1294
|
exposes.numeric('strength', ea.STATE), exposes.enum('sensitivity', ea.STATE_SET, ['low', 'medium', 'high']),
|
|
1295
1295
|
e.angle_axis('angle_x'), e.angle_axis('angle_y'), e.angle_axis('angle_z'), e.battery_voltage(),
|
|
1296
1296
|
],
|
|
@@ -1366,7 +1366,7 @@ module.exports = [
|
|
|
1366
1366
|
await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
|
|
1367
1367
|
}
|
|
1368
1368
|
},
|
|
1369
|
-
exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.
|
|
1369
|
+
exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.device_temperature(),
|
|
1370
1370
|
exposes.binary('charging_status', ea.STATE_GET, true, false)
|
|
1371
1371
|
.withDescription('The current charging status.'),
|
|
1372
1372
|
exposes.enum('motor_state', ea.STATE, ['declining', 'rising', 'pause', 'blocked'])
|
|
@@ -1392,7 +1392,7 @@ module.exports = [
|
|
|
1392
1392
|
endpoint: (device) => {
|
|
1393
1393
|
return {'l1': 1, 'l2': 2};
|
|
1394
1394
|
},
|
|
1395
|
-
exposes: [e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1395
|
+
exposes: [e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.voltage(), e.current(),
|
|
1396
1396
|
e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.power_outage_count(false),
|
|
1397
1397
|
e.power_outage_memory(),
|
|
1398
1398
|
exposes.binary('interlock', ea.STATE_SET, true, false)
|
|
@@ -1470,7 +1470,7 @@ module.exports = [
|
|
|
1470
1470
|
vendor: 'Xiaomi',
|
|
1471
1471
|
description: 'Aqara Opple switch 1 band',
|
|
1472
1472
|
fromZigbee: [fz.aqara_opple_on, fz.aqara_opple_off, fz.battery, fz.aqara_opple_multistate, fz.aqara_opple],
|
|
1473
|
-
exposes: [e.battery(), e.action([
|
|
1473
|
+
exposes: [e.battery(), e.battery_voltage(), e.action([
|
|
1474
1474
|
'button_1_hold', 'button_1_release', 'button_1_single', 'button_1_double', 'button_1_triple',
|
|
1475
1475
|
'button_2_hold', 'button_2_release', 'button_2_single', 'button_2_double', 'button_2_triple',
|
|
1476
1476
|
]), exposes.enum('operation_mode', ea.ALL, ['command', 'event'])
|
|
@@ -1490,7 +1490,7 @@ module.exports = [
|
|
|
1490
1490
|
description: 'Aqara Opple switch 2 bands',
|
|
1491
1491
|
fromZigbee: [fz.aqara_opple_on, fz.aqara_opple_off, fz.aqara_opple_step, fz.aqara_opple_step_color_temp, fz.battery,
|
|
1492
1492
|
fz.aqara_opple_multistate, fz.aqara_opple],
|
|
1493
|
-
exposes: [e.battery(), e.action([
|
|
1493
|
+
exposes: [e.battery(), e.battery_voltage(), e.action([
|
|
1494
1494
|
'button_1_hold', 'button_1_release', 'button_1_single', 'button_1_double', 'button_1_triple',
|
|
1495
1495
|
'button_2_hold', 'button_2_release', 'button_2_single', 'button_2_double', 'button_2_triple',
|
|
1496
1496
|
'button_3_hold', 'button_3_release', 'button_3_single', 'button_3_double', 'button_3_triple',
|
|
@@ -1514,7 +1514,7 @@ module.exports = [
|
|
|
1514
1514
|
description: 'Aqara Opple switch 3 bands',
|
|
1515
1515
|
fromZigbee: [fz.aqara_opple_on, fz.aqara_opple_off, fz.aqara_opple_step, fz.aqara_opple_move, fz.aqara_opple_stop,
|
|
1516
1516
|
fz.aqara_opple_step_color_temp, fz.aqara_opple_move_color_temp, fz.battery, fz.aqara_opple_multistate, fz.aqara_opple],
|
|
1517
|
-
exposes: [e.battery(), e.action([
|
|
1517
|
+
exposes: [e.battery(), e.battery_voltage(), e.action([
|
|
1518
1518
|
'button_1_hold', 'button_1_release', 'button_1_single', 'button_1_double', 'button_1_triple',
|
|
1519
1519
|
'button_2_hold', 'button_2_release', 'button_2_single', 'button_2_double', 'button_2_triple',
|
|
1520
1520
|
'button_3_hold', 'button_3_release', 'button_3_single', 'button_3_double', 'button_3_triple',
|
|
@@ -1593,7 +1593,7 @@ module.exports = [
|
|
|
1593
1593
|
description: 'Aqara single switch module T1 (with neutral)',
|
|
1594
1594
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple],
|
|
1595
1595
|
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_type, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night],
|
|
1596
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.
|
|
1596
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1597
1597
|
e.voltage().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(), e.switch_type()],
|
|
1598
1598
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1599
1599
|
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
@@ -1731,7 +1731,7 @@ module.exports = [
|
|
|
1731
1731
|
toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
|
|
1732
1732
|
tz.aqara_switch_mode_switch, tz.xiaomi_flip_indicator_light],
|
|
1733
1733
|
exposes: [e.switch(), e.power_outage_memory(), e.action(['single', 'double']),
|
|
1734
|
-
e.
|
|
1734
|
+
e.device_temperature(), e.flip_indicator_light(),
|
|
1735
1735
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
1736
1736
|
.withDescription('Decoupled mode for button'),
|
|
1737
1737
|
exposes.enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
|
|
@@ -1755,7 +1755,7 @@ module.exports = [
|
|
|
1755
1755
|
return {'left': 1, 'right': 2};
|
|
1756
1756
|
},
|
|
1757
1757
|
exposes: [
|
|
1758
|
-
e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.
|
|
1758
|
+
e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.device_temperature(),
|
|
1759
1759
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
1760
1760
|
.withDescription('Decoupled mode for left button')
|
|
1761
1761
|
.withEndpoint('left'),
|
|
@@ -1782,7 +1782,7 @@ module.exports = [
|
|
|
1782
1782
|
fromZigbee: [fz.xiaomi_tvoc, fz.battery, fz.temperature, fz.humidity],
|
|
1783
1783
|
toZigbee: [],
|
|
1784
1784
|
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
1785
|
-
exposes: [e.
|
|
1785
|
+
exposes: [e.temperature(), e.humidity(), e.voc(), e.battery(), e.battery_voltage()],
|
|
1786
1786
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1787
1787
|
const endpoint = device.getEndpoint(1);
|
|
1788
1788
|
const binds = ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg', 'genAnalogInput'];
|
|
@@ -1816,7 +1816,7 @@ module.exports = [
|
|
|
1816
1816
|
.withDescription('Decoupled mode for right button')
|
|
1817
1817
|
.withEndpoint('right'),
|
|
1818
1818
|
e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
|
|
1819
|
-
e.power_outage_memory(), e.
|
|
1819
|
+
e.power_outage_memory(), e.device_temperature(), e.flip_indicator_light(),
|
|
1820
1820
|
],
|
|
1821
1821
|
onEvent: preventReset,
|
|
1822
1822
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -1832,7 +1832,7 @@ module.exports = [
|
|
|
1832
1832
|
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple],
|
|
1833
1833
|
toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night,
|
|
1834
1834
|
tz.xiaomi_overload_protection, tz.xiaomi_socket_button_lock],
|
|
1835
|
-
exposes: [e.switch(), e.power().withAccess(ea.STATE), e.energy(), e.
|
|
1835
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1836
1836
|
e.voltage().withAccess(ea.STATE), e.current(), e.consumer_connected().withAccess(ea.STATE),
|
|
1837
1837
|
e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
|
|
1838
1838
|
exposes.numeric('overload_protection', exposes.access.ALL).withValueMin(100).withValueMax(2500).withUnit('W')
|
|
@@ -1847,7 +1847,7 @@ module.exports = [
|
|
|
1847
1847
|
fromZigbee: [fz.on_off, fz.xiaomi_multistate_action, fz.aqara_opple],
|
|
1848
1848
|
toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
|
|
1849
1849
|
tz.xiaomi_flip_indicator_light],
|
|
1850
|
-
exposes: [e.switch(), e.action(['single', 'double']), e.power_outage_memory(), e.
|
|
1850
|
+
exposes: [e.switch(), e.action(['single', 'double']), e.power_outage_memory(), e.device_temperature(), e.flip_indicator_light(),
|
|
1851
1851
|
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode')],
|
|
1852
1852
|
onEvent: preventReset,
|
|
1853
1853
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -1900,7 +1900,7 @@ module.exports = [
|
|
|
1900
1900
|
},
|
|
1901
1901
|
exposes: [
|
|
1902
1902
|
e.switch().withEndpoint('relay'), e.switch().withEndpoint('usb'),
|
|
1903
|
-
e.power().withAccess(ea.STATE), e.energy(), e.
|
|
1903
|
+
e.power().withAccess(ea.STATE), e.energy(), e.device_temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
|
|
1904
1904
|
e.current(), e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
|
|
1905
1905
|
exposes.enum('button_switch_mode', exposes.access.ALL, ['relay', 'relay_and_usb'])
|
|
1906
1906
|
.withDescription('Control both relay and usb or only the relay with the physical switch button'),
|
|
@@ -1928,7 +1928,7 @@ module.exports = [
|
|
|
1928
1928
|
tz.xiaomi_overload_protection, tz.xiaomi_socket_button_lock],
|
|
1929
1929
|
exposes: [
|
|
1930
1930
|
e.switch(), e.power().withAccess(ea.STATE), e.energy(),
|
|
1931
|
-
e.
|
|
1931
|
+
e.device_temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
|
|
1932
1932
|
e.current(), e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
|
|
1933
1933
|
exposes.numeric('overload_protection', exposes.access.ALL).withValueMin(100).withValueMax(2500).withUnit('W')
|
|
1934
1934
|
.withDescription('Maximum allowed load, turns off if exceeded')],
|
|
@@ -2006,6 +2006,7 @@ module.exports = [
|
|
|
2006
2006
|
'multi: supports more events like double and hold'),
|
|
2007
2007
|
exposes.enum('operation_mode', ea.ALL, ['command', 'event'])
|
|
2008
2008
|
.withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)')],
|
|
2009
|
+
meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
|
|
2009
2010
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
2010
2011
|
const endpoint1 = device.getEndpoint(1);
|
|
2011
2012
|
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
package/devices/zemismart.js
CHANGED
|
@@ -70,6 +70,8 @@ module.exports = [
|
|
|
70
70
|
whiteLabel: [{vendor: 'BSEED', model: 'TS0003', description: 'Zigbee switch'}],
|
|
71
71
|
meta: {multiEndpoint: true, disableDefaultResponse: true},
|
|
72
72
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
73
|
+
await device.getEndpoint(1).read('genBasic',
|
|
74
|
+
['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
73
75
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
74
76
|
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
75
77
|
await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
|
package/lib/legacy.js
CHANGED
|
@@ -2107,7 +2107,7 @@ const fromZigbee = {
|
|
|
2107
2107
|
hue_dimmer_switch: {
|
|
2108
2108
|
cluster: 'manuSpecificPhilips',
|
|
2109
2109
|
type: 'commandHueNotification',
|
|
2110
|
-
options: [exposes.options.legacy()],
|
|
2110
|
+
options: [exposes.options.legacy(), exposes.options.simulated_brightness('Only works when legacy is false.')],
|
|
2111
2111
|
convert: (model, msg, publish, options, meta) => {
|
|
2112
2112
|
if (!isLegacyEnabled(options)) {
|
|
2113
2113
|
return fromZigbeeConverters.hue_dimmer_switch.convert(model, msg, publish, options, meta);
|
package/lib/xiaomi.js
CHANGED
|
@@ -158,12 +158,11 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
|
|
|
158
158
|
}
|
|
159
159
|
break;
|
|
160
160
|
case '3':
|
|
161
|
-
if (['
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
payload.temperature = calibrateAndPrecisionRoundOptions(value, options, 'temperature'); // 0x03
|
|
161
|
+
if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM'].includes(model.model)) {
|
|
162
|
+
// The temperature value is constant 25 °C and does not change, so we ignore it
|
|
163
|
+
// https://github.com/Koenkk/zigbee2mqtt/issues/11126
|
|
164
|
+
} else {
|
|
165
|
+
payload.device_temperature = calibrateAndPrecisionRoundOptions(value, options, 'device_temperature'); // 0x03
|
|
167
166
|
}
|
|
168
167
|
break;
|
|
169
168
|
case '4':
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zigbee-herdsman-converters",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.524",
|
|
4
4
|
"description": "Collection of device converters to be used with zigbee-herdsman",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"files": [
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"buffer-crc32": "^0.2.13",
|
|
39
39
|
"https-proxy-agent": "^5.0.1",
|
|
40
40
|
"tar-stream": "^2.2.0",
|
|
41
|
-
"zigbee-herdsman": "^0.14.
|
|
41
|
+
"zigbee-herdsman": "^0.14.32"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"eslint": "*",
|