zigbee-herdsman-converters 14.0.498 → 14.0.499
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 +1 -11
- package/converters/toZigbee.js +15 -1
- package/devices/awox.js +20 -1
- package/devices/danfoss.js +2 -1
- package/devices/miboxer.js +25 -0
- package/devices/philips.js +9 -0
- package/devices/tuya.js +1 -1
- package/devices/xiaomi.js +9 -2
- package/lib/exposes.js +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -5872,19 +5872,9 @@ const converters = {
|
|
|
5872
5872
|
return result;
|
|
5873
5873
|
},
|
|
5874
5874
|
},
|
|
5875
|
-
xiaomi_curtain_acn002_position: {
|
|
5876
|
-
cluster: 'genAnalogOutput',
|
|
5877
|
-
type: ['attributeReport', 'readResponse'],
|
|
5878
|
-
options: [exposes.options.invert_cover()],
|
|
5879
|
-
convert: (model, msg, publish, options, meta) => {
|
|
5880
|
-
let position = precisionRound(msg.data['presentValue'], 2);
|
|
5881
|
-
position = options.invert_cover ? 100 - position : position;
|
|
5882
|
-
return {position: position};
|
|
5883
|
-
},
|
|
5884
|
-
},
|
|
5885
5875
|
xiaomi_curtain_acn002_status: {
|
|
5886
5876
|
cluster: 'genMultistateOutput',
|
|
5887
|
-
type: ['attributeReport'
|
|
5877
|
+
type: ['attributeReport'],
|
|
5888
5878
|
convert: (model, msg, publish, options, meta) => {
|
|
5889
5879
|
let running = false;
|
|
5890
5880
|
const data = msg.data;
|
package/converters/toZigbee.js
CHANGED
|
@@ -792,7 +792,7 @@ const converters = {
|
|
|
792
792
|
},
|
|
793
793
|
},
|
|
794
794
|
light_onoff_brightness: {
|
|
795
|
-
key: ['state', 'brightness', 'brightness_percent'],
|
|
795
|
+
key: ['state', 'brightness', 'brightness_percent', 'on_time'],
|
|
796
796
|
options: [exposes.options.transition()],
|
|
797
797
|
convertSet: async (entity, key, value, meta) => {
|
|
798
798
|
const {message} = meta;
|
|
@@ -2439,6 +2439,20 @@ const converters = {
|
|
|
2439
2439
|
} else {
|
|
2440
2440
|
await entity.command('closuresWindowCovering', 'stop', {}, utils.getOptions(meta.mapped, entity));
|
|
2441
2441
|
}
|
|
2442
|
+
|
|
2443
|
+
if (!['ZNCLDJ11LM', 'ZNJLBL01LM'].includes(meta.mapped.model)) {
|
|
2444
|
+
// The code below is originally added for ZNCLDJ11LM (Koenkk/zigbee2mqtt#4585).
|
|
2445
|
+
// However, in Koenkk/zigbee-herdsman-converters#4039 it was replaced by reading
|
|
2446
|
+
// directly from currentPositionLiftPercentage, so that device is excluded.
|
|
2447
|
+
// For ZNJLBL01LM, in Koenkk/zigbee-herdsman-converters#4163 the position is read
|
|
2448
|
+
// through onEvent each time the motor stops, so it becomes redundant, and the
|
|
2449
|
+
// device is excluded.
|
|
2450
|
+
// The code is left here to avoid breaking compatibility, ideally all devices using
|
|
2451
|
+
// this converter should be tested so the code can be adjusted/deleted.
|
|
2452
|
+
|
|
2453
|
+
// Xiaomi curtain does not send position update on stop, request this.
|
|
2454
|
+
await entity.read('genAnalogOutput', [0x0055]);
|
|
2455
|
+
}
|
|
2442
2456
|
} else {
|
|
2443
2457
|
const lookup = {'open': 100, 'close': 0, 'on': 100, 'off': 0};
|
|
2444
2458
|
|
package/devices/awox.js
CHANGED
|
@@ -224,11 +224,30 @@ module.exports = [
|
|
|
224
224
|
},
|
|
225
225
|
],
|
|
226
226
|
},
|
|
227
|
+
{
|
|
228
|
+
type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
|
|
229
|
+
{
|
|
230
|
+
ID: 1,
|
|
231
|
+
profileID: 260,
|
|
232
|
+
deviceID: 268,
|
|
233
|
+
inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10],
|
|
234
|
+
outputClusters: [6],
|
|
235
|
+
},
|
|
236
|
+
{ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
|
|
237
|
+
{
|
|
238
|
+
ID: 3,
|
|
239
|
+
profileID: 4751,
|
|
240
|
+
deviceID: 268,
|
|
241
|
+
inputClusters: [65360, 65361],
|
|
242
|
+
outputClusters: [65360, 65361],
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
},
|
|
227
246
|
],
|
|
228
247
|
model: '33957',
|
|
229
248
|
vendor: 'AwoX',
|
|
230
249
|
description: 'LED light with color temperature',
|
|
231
|
-
extend: extend.light_onoff_brightness_colortemp(),
|
|
250
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
232
251
|
},
|
|
233
252
|
{
|
|
234
253
|
fingerprint: [
|
package/devices/danfoss.js
CHANGED
|
@@ -79,7 +79,8 @@ module.exports = [
|
|
|
79
79
|
.withDescription('Mean radiator load for room calculated by gateway for load balancing purposes (-8000=undefined)')
|
|
80
80
|
.withValueMin(-8000).withValueMax(2000),
|
|
81
81
|
exposes.numeric('load_estimate', ea.STATE_GET)
|
|
82
|
-
.withDescription('Load estimate on this radiator')
|
|
82
|
+
.withDescription('Load estimate on this radiator')
|
|
83
|
+
.withValueMin(-8000).withValueMax(3600),
|
|
83
84
|
exposes.binary('preheat_status', ea.STATE_GET, true, false)
|
|
84
85
|
.withDescription('Specific for pre-heat running in Zigbee Weekly Schedule mode'),
|
|
85
86
|
exposes.enum('adaptation_run_status', ea.STATE_GET, ['none', 'in_progress', 'found', 'lost'])
|
package/devices/miboxer.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
2
3
|
const tz = require('../converters/toZigbee');
|
|
3
4
|
const e = exposes.presets;
|
|
4
5
|
const ea = exposes.access;
|
|
@@ -47,4 +48,28 @@ module.exports = [
|
|
|
47
48
|
vendor: 'Miboxer',
|
|
48
49
|
extend: extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
|
|
49
50
|
},
|
|
51
|
+
{
|
|
52
|
+
fingerprint: [{manufacturerName: '_TZ3000_xwh1e22x'}],
|
|
53
|
+
model: 'FUT089Z',
|
|
54
|
+
vendor: 'MiBoxer',
|
|
55
|
+
description: 'RGB+CCT Remote',
|
|
56
|
+
fromZigbee: [fz.battery],
|
|
57
|
+
toZigbee: [],
|
|
58
|
+
exposes: [e.battery(), e.battery_voltage()],
|
|
59
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
60
|
+
const endpoint = device.getEndpoint(1);
|
|
61
|
+
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
62
|
+
await endpoint.command('genGroups', 'miboxerSetZones', {zones: [
|
|
63
|
+
{zoneNum: 1, groupId: 101},
|
|
64
|
+
{zoneNum: 2, groupId: 102},
|
|
65
|
+
{zoneNum: 3, groupId: 103},
|
|
66
|
+
{zoneNum: 4, groupId: 104},
|
|
67
|
+
{zoneNum: 5, groupId: 105},
|
|
68
|
+
{zoneNum: 6, groupId: 106},
|
|
69
|
+
{zoneNum: 7, groupId: 107},
|
|
70
|
+
{zoneNum: 8, groupId: 108},
|
|
71
|
+
]});
|
|
72
|
+
await endpoint.command('genBasic', 'tuyaSetup', {}, {disableDefaultResponse: true});
|
|
73
|
+
},
|
|
74
|
+
},
|
|
50
75
|
];
|
package/devices/philips.js
CHANGED
|
@@ -108,6 +108,15 @@ module.exports = [
|
|
|
108
108
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
109
109
|
ota: ota.zigbeeOTA,
|
|
110
110
|
},
|
|
111
|
+
{
|
|
112
|
+
zigbeeModel: ['915005996801', '915005996901'],
|
|
113
|
+
model: '915005996901',
|
|
114
|
+
vendor: 'Philips',
|
|
115
|
+
description: 'Hue white ambiance ceiling light Enrave L with Bluetooth',
|
|
116
|
+
meta: {turnsOffAtBrightness1: true},
|
|
117
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
118
|
+
ota: ota.zigbeeOTA,
|
|
119
|
+
},
|
|
111
120
|
{
|
|
112
121
|
zigbeeModel: ['915005997001', '915005997101'],
|
|
113
122
|
model: '915005997001',
|
package/devices/tuya.js
CHANGED
|
@@ -167,7 +167,7 @@ module.exports = [
|
|
|
167
167
|
description: 'Air quality sensor',
|
|
168
168
|
fromZigbee: [fz.tuya_air_quality],
|
|
169
169
|
toZigbee: [],
|
|
170
|
-
exposes: [e.temperature(), e.humidity(), e.co2(), e.voc(), e.formaldehyd()],
|
|
170
|
+
exposes: [e.temperature(), e.humidity(), e.co2(), e.voc().withUnit('ppm'), e.formaldehyd()],
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_dwcarsat'}],
|
package/devices/xiaomi.js
CHANGED
|
@@ -1348,9 +1348,16 @@ module.exports = [
|
|
|
1348
1348
|
model: 'ZNJLBL01LM',
|
|
1349
1349
|
description: 'Aqara roller shade companion E1',
|
|
1350
1350
|
vendor: 'Xiaomi',
|
|
1351
|
-
fromZigbee: [fz.
|
|
1352
|
-
fz.ignore_basic_report, fz.aqara_opple],
|
|
1351
|
+
fromZigbee: [fz.xiaomi_curtain_position, fz.xiaomi_curtain_acn002_status, fz.ignore_basic_report, fz.aqara_opple],
|
|
1353
1352
|
toZigbee: [tz.xiaomi_curtain_position_state, tz.xiaomi_curtain_acn002_battery, tz.xiaomi_curtain_acn002_charging_status],
|
|
1353
|
+
onEvent: async (type, data, device) => {
|
|
1354
|
+
if (type === 'message' && data.type === 'attributeReport' && data.cluster === 'genMultistateOutput' &&
|
|
1355
|
+
data.data.hasOwnProperty('presentValue') && data.data['presentValue'] > 1) {
|
|
1356
|
+
// Try to read the position after the motor stops, the device occasionally report wrong data right after stopping
|
|
1357
|
+
// Might need to add delay, seems to be working without one but needs more tests.
|
|
1358
|
+
await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
|
|
1359
|
+
}
|
|
1360
|
+
},
|
|
1354
1361
|
exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET),
|
|
1355
1362
|
exposes.binary('charging_status', ea.STATE_GET, true, false)
|
|
1356
1363
|
.withDescription('The current charging status.'),
|
package/lib/exposes.js
CHANGED
|
@@ -550,7 +550,7 @@ module.exports = {
|
|
|
550
550
|
fan: () => new Fan(),
|
|
551
551
|
flip_indicator_light: () => new Binary('flip_indicator_light', access.ALL, 'ON', 'OFF').withDescription('After turn on, the indicator light turns on while switch is off, and vice versa'),
|
|
552
552
|
force: () => new Enum('force', access.STATE_SET, ['normal', 'open', 'close']).withDescription('Force the valve position'),
|
|
553
|
-
formaldehyd: () => new Numeric('formaldehyd', access.STATE).withDescription('The measured formaldehyd value'),
|
|
553
|
+
formaldehyd: () => new Numeric('formaldehyd', access.STATE).withDescription('The measured formaldehyd value').withUnit('mg/m³'),
|
|
554
554
|
gas: () => new Binary('gas', access.STATE, true, false).withDescription('Indicates whether the device detected gas'),
|
|
555
555
|
hcho: () => new Numeric('hcho', access.STATE).withUnit('mg/m³').withDescription('Measured Hcho value'),
|
|
556
556
|
holiday_temperature: () => new Numeric('holiday_temperature', access.STATE_SET).withUnit('°C').withDescription('Holiday temperature').withValueMin(0).withValueMax(30),
|