zigbee-herdsman-converters 14.0.254 → 14.0.258
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 +46 -0
- package/converters/toZigbee.js +2 -2
- package/devices/centralite.js +38 -0
- package/devices/ikea.js +1 -1
- package/devices/paulmann.js +7 -0
- package/devices/philips.js +9 -0
- package/devices/tuya.js +26 -3
- package/devices/xiaomi.js +29 -1
- package/npm-shrinkwrap.json +287 -284
- package/package.json +2 -2
package/converters/fromZigbee.js
CHANGED
|
@@ -1681,6 +1681,35 @@ const converters = {
|
|
|
1681
1681
|
}
|
|
1682
1682
|
},
|
|
1683
1683
|
},
|
|
1684
|
+
ts0201_temperature_humidity_alarm: {
|
|
1685
|
+
cluster: 'manuSpecificTuya_2',
|
|
1686
|
+
type: ['attributeReport', 'readResponse'],
|
|
1687
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1688
|
+
const result = {};
|
|
1689
|
+
if (msg.data.hasOwnProperty('alarm_temperature_max')) {
|
|
1690
|
+
result.alarm_temperature_max = msg.data['alarm_temperature_max'];
|
|
1691
|
+
}
|
|
1692
|
+
if (msg.data.hasOwnProperty('alarm_temperature_min')) {
|
|
1693
|
+
result.alarm_temperature_min = msg.data['alarm_temperature_min'];
|
|
1694
|
+
}
|
|
1695
|
+
if (msg.data.hasOwnProperty('alarm_humidity_max')) {
|
|
1696
|
+
result.alarm_humidity_max = msg.data['alarm_humidity_max'];
|
|
1697
|
+
}
|
|
1698
|
+
if (msg.data.hasOwnProperty('alarm_humidity_min')) {
|
|
1699
|
+
result.alarm_humidity_min = msg.data['alarm_humidity_min'];
|
|
1700
|
+
}
|
|
1701
|
+
if (msg.data.hasOwnProperty('alarm_humidity')) {
|
|
1702
|
+
const sensorAlarmLookup = {'0': 'below_min_humdity', '1': 'over_humidity', '2': 'off'};
|
|
1703
|
+
result.alarm_humidity = sensorAlarmLookup[msg.data['alarm_humidity']];
|
|
1704
|
+
}
|
|
1705
|
+
if (msg.data.hasOwnProperty('alarm_temperature')) {
|
|
1706
|
+
const sensorAlarmLookup = {'0': 'below_min_temperature', '1': 'over_temperature', '2': 'off'};
|
|
1707
|
+
result.alarm_temperature = sensorAlarmLookup[msg.data['alarm_temperature']];
|
|
1708
|
+
}
|
|
1709
|
+
return result;
|
|
1710
|
+
},
|
|
1711
|
+
|
|
1712
|
+
},
|
|
1684
1713
|
tuya_thermostat_weekly_schedule: {
|
|
1685
1714
|
cluster: 'manuSpecificTuya',
|
|
1686
1715
|
type: ['commandGetData', 'commandSetDataResponse'],
|
|
@@ -6521,6 +6550,23 @@ const converters = {
|
|
|
6521
6550
|
};
|
|
6522
6551
|
},
|
|
6523
6552
|
},
|
|
6553
|
+
aqara_knob_rotation: {
|
|
6554
|
+
cluster: 'aqaraOpple',
|
|
6555
|
+
type: ['attributeReport', 'readResponse'],
|
|
6556
|
+
convert: (model, msg, publish, options, meta) => {
|
|
6557
|
+
if (msg.data.hasOwnProperty(570)) {
|
|
6558
|
+
const act = {1: 'start_rotating', 2: 'rotation', 3: 'stop_rotating'};
|
|
6559
|
+
return {
|
|
6560
|
+
action: act[msg.data[570]],
|
|
6561
|
+
action_rotation_angle: msg.data[558],
|
|
6562
|
+
action_rotation_angle_speed: msg.data[560],
|
|
6563
|
+
action_rotation_percent: msg.data[563],
|
|
6564
|
+
action_rotation_percent_speed: msg.data[562],
|
|
6565
|
+
action_rotation_time: msg.data[561],
|
|
6566
|
+
};
|
|
6567
|
+
}
|
|
6568
|
+
},
|
|
6569
|
+
},
|
|
6524
6570
|
// #endregion
|
|
6525
6571
|
|
|
6526
6572
|
// #region Ignore converters (these message dont need parsing).
|
package/converters/toZigbee.js
CHANGED
|
@@ -1902,7 +1902,7 @@ const converters = {
|
|
|
1902
1902
|
xiaomi_switch_power_outage_memory: {
|
|
1903
1903
|
key: ['power_outage_memory'],
|
|
1904
1904
|
convertSet: async (entity, key, value, meta) => {
|
|
1905
|
-
if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
|
|
1905
|
+
if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
|
|
1906
1906
|
'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG31LM', 'QBCZ15LM',
|
|
1907
1907
|
'QBCZ14LM'].includes(meta.mapped.model)) {
|
|
1908
1908
|
await entity.write('aqaraOpple', {0x0201: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
|
|
@@ -1925,7 +1925,7 @@ const converters = {
|
|
|
1925
1925
|
return {state: {power_outage_memory: value}};
|
|
1926
1926
|
},
|
|
1927
1927
|
convertGet: async (entity, key, meta) => {
|
|
1928
|
-
if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
|
|
1928
|
+
if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
|
|
1929
1929
|
'WS-EUK02', 'WS-EUK01', 'QBKG31LM', 'QBCZ15LM', 'QBCZ14LM'].includes(meta.mapped.model)) {
|
|
1930
1930
|
await entity.read('aqaraOpple', [0x0201]);
|
|
1931
1931
|
} else if (['ZNCZ02LM', 'QBCZ11LM', 'ZNCZ11LM'].includes(meta.mapped.model)) {
|
package/devices/centralite.js
CHANGED
|
@@ -202,4 +202,42 @@ module.exports = [
|
|
|
202
202
|
await reporting.batteryVoltage(endpoint);
|
|
203
203
|
},
|
|
204
204
|
},
|
|
205
|
+
{
|
|
206
|
+
zigbeeModel: ['3200-fr'],
|
|
207
|
+
model: '3200-fr',
|
|
208
|
+
vendor: 'Centralite',
|
|
209
|
+
description: 'Smart outlet',
|
|
210
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement],
|
|
211
|
+
toZigbee: [tz.on_off],
|
|
212
|
+
exposes: [e.switch(), e.power(), e.voltage(), e.current()],
|
|
213
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
214
|
+
const endpoint = device.getEndpoint(1);
|
|
215
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
|
|
216
|
+
await reporting.onOff(endpoint);
|
|
217
|
+
await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
|
|
218
|
+
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
219
|
+
await reporting.rmsVoltage(endpoint, {change: 2});
|
|
220
|
+
await reporting.rmsCurrent(endpoint, {change: 10});
|
|
221
|
+
await reporting.activePower(endpoint, {change: 2});
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
zigbeeModel: ['3200-de'],
|
|
226
|
+
model: '3200-de',
|
|
227
|
+
vendor: 'Centralite',
|
|
228
|
+
description: 'Smart outlet',
|
|
229
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement],
|
|
230
|
+
toZigbee: [tz.on_off],
|
|
231
|
+
exposes: [e.switch(), e.power(), e.voltage(), e.current()],
|
|
232
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
233
|
+
const endpoint = device.getEndpoint(1);
|
|
234
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
|
|
235
|
+
await reporting.onOff(endpoint);
|
|
236
|
+
await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
|
|
237
|
+
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
238
|
+
await reporting.rmsVoltage(endpoint, {change: 2});
|
|
239
|
+
await reporting.rmsCurrent(endpoint, {change: 10});
|
|
240
|
+
await reporting.activePower(endpoint, {change: 2});
|
|
241
|
+
},
|
|
242
|
+
},
|
|
205
243
|
];
|
package/devices/ikea.js
CHANGED
|
@@ -614,7 +614,7 @@ module.exports = [
|
|
|
614
614
|
extend: tradfriExtend.light_onoff_brightness(),
|
|
615
615
|
},
|
|
616
616
|
{
|
|
617
|
-
zigbeeModel: ['TRADFRIbulbGU10WS345lm'],
|
|
617
|
+
zigbeeModel: ['TRADFRIbulbGU10WS345lm', 'TRADFRI bulb GU10 WW 345lm'],
|
|
618
618
|
model: 'LED2005R5',
|
|
619
619
|
vendor: 'IKEA',
|
|
620
620
|
description: 'TRADFRI LED bulb GU10 345 lumen, dimmable, white spectrum',
|
package/devices/paulmann.js
CHANGED
|
@@ -18,6 +18,13 @@ module.exports = [
|
|
|
18
18
|
description: 'SmartHome Zigbee Cephei Switch Controller',
|
|
19
19
|
extend: extend.switch(),
|
|
20
20
|
},
|
|
21
|
+
{
|
|
22
|
+
zigbeeModel: ['50131'],
|
|
23
|
+
model: '501.31',
|
|
24
|
+
vendor: 'Paulmann',
|
|
25
|
+
description: 'Smart plug for Euro- and Schuko-sockets',
|
|
26
|
+
extend: extend.switch(),
|
|
27
|
+
},
|
|
21
28
|
{
|
|
22
29
|
zigbeeModel: ['Dimmablelight '],
|
|
23
30
|
model: '50044/50045',
|
package/devices/philips.js
CHANGED
|
@@ -2011,4 +2011,13 @@ module.exports = [
|
|
|
2011
2011
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2012
2012
|
ota: ota.zigbeeOTA,
|
|
2013
2013
|
},
|
|
2014
|
+
{
|
|
2015
|
+
zigbeeModel: ['1745430P7'],
|
|
2016
|
+
model: '1745430P7',
|
|
2017
|
+
vendor: 'Philips',
|
|
2018
|
+
description: 'Hue Impress outdoor Pedestal',
|
|
2019
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2020
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2021
|
+
ota: ota.zigbeeOTA,
|
|
2022
|
+
},
|
|
2014
2023
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -398,6 +398,7 @@ module.exports = [
|
|
|
398
398
|
vendor: 'TuYa',
|
|
399
399
|
description: 'Led strip controller',
|
|
400
400
|
extend: extend.light_onoff_brightness_color(),
|
|
401
|
+
meta: {applyRedFix: true},
|
|
401
402
|
},
|
|
402
403
|
{
|
|
403
404
|
zigbeeModel: ['TS0503A'],
|
|
@@ -764,7 +765,8 @@ module.exports = [
|
|
|
764
765
|
{modelID: 'TS011F', manufacturerName: '_TZ3000_ew3ldmgx'},
|
|
765
766
|
{modelID: 'TS011F', manufacturerName: '_TZ3000_ps3dmato'},
|
|
766
767
|
{modelID: 'TS011F', manufacturerName: '_TZ3000_mraovvmm'},
|
|
767
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_jvzvulen'}
|
|
768
|
+
{modelID: 'TS011F', manufacturerName: '_TZ3000_jvzvulen'},
|
|
769
|
+
{modelID: 'TS011F', manufacturerName: '_TZ3000_dpo1ysak'}],
|
|
768
770
|
model: 'TS011F_plug',
|
|
769
771
|
description: 'Smart plug (with power monitoring)',
|
|
770
772
|
vendor: 'TuYa',
|
|
@@ -787,8 +789,7 @@ module.exports = [
|
|
|
787
789
|
.withDescription('Recover state after power outage')],
|
|
788
790
|
},
|
|
789
791
|
{
|
|
790
|
-
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_hyfvrar3'},
|
|
791
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_dpo1ysak'}],
|
|
792
|
+
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_hyfvrar3'}],
|
|
792
793
|
model: 'TS011F_plug_2',
|
|
793
794
|
description: 'Smart plug (without power monitoring)',
|
|
794
795
|
vendor: 'TuYa',
|
|
@@ -1179,4 +1180,26 @@ module.exports = [
|
|
|
1179
1180
|
e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
|
|
1180
1181
|
.withDescription('Recover state after power outage')],
|
|
1181
1182
|
},
|
|
1183
|
+
{
|
|
1184
|
+
fingerprint: [{modelID: 'TS0201', manufacturerName: '_TZ3000_qaaysllp'}],
|
|
1185
|
+
model: 'LCZ030',
|
|
1186
|
+
vendor: 'TuYa',
|
|
1187
|
+
description: 'Temperature & humidity & illuminance sensor with display',
|
|
1188
|
+
fromZigbee: [fz.battery, fz.illuminance, fz.temperature, fz.humidity, fz.ts0201_temperature_humidity_alarm],
|
|
1189
|
+
toZigbee: [],
|
|
1190
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1191
|
+
const endpoint = device.getEndpoint(1);
|
|
1192
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg']);
|
|
1193
|
+
},
|
|
1194
|
+
exposes: [e.temperature(), e.humidity(), e.battery(), e.illuminance(), e.illuminance_lux(),
|
|
1195
|
+
exposes.numeric('alarm_temperature_max', ea.STATE).withUnit('°C').withDescription('Alarm temperature max'),
|
|
1196
|
+
exposes.numeric('alarm_temperature_min', ea.STATE).withUnit('°C').withDescription('Alarm temperature min'),
|
|
1197
|
+
exposes.numeric('alarm_humidity_max', ea.STATE).withUnit('%').withDescription('Alarm huminity max'),
|
|
1198
|
+
exposes.numeric('alarm_humidity_min', ea.STATE).withUnit('%').withDescription('Alarm huminity min'),
|
|
1199
|
+
exposes.enum('alarm_humidity', ea.STATE, ['below_min_humdity', 'over_humidity', 'off'])
|
|
1200
|
+
.withDescription('Alarm humidity status'),
|
|
1201
|
+
exposes.enum('alarm_temperature', ea.STATE, ['below_min_temperature', 'over_temperature', 'off'])
|
|
1202
|
+
.withDescription('Alarm temperature status'),
|
|
1203
|
+
],
|
|
1204
|
+
},
|
|
1182
1205
|
];
|
package/devices/xiaomi.js
CHANGED
|
@@ -1278,11 +1278,15 @@ module.exports = [
|
|
|
1278
1278
|
model: 'SSM-U02',
|
|
1279
1279
|
vendor: 'Xiaomi',
|
|
1280
1280
|
description: 'Aqara single switch module T1 (without neutral). Doesn\'t work as a router and doesn\'t support power meter',
|
|
1281
|
-
|
|
1281
|
+
fromZigbee: [fz.on_off, fz.xiaomi_switch_type, fz.xiaomi_switch_power_outage_memory],
|
|
1282
|
+
exposes: [e.switch(), e.power_outage_memory(), e.switch_type()],
|
|
1283
|
+
toZigbee: [tz.xiaomi_switch_type, tz.on_off, tz.xiaomi_switch_power_outage_memory],
|
|
1282
1284
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1283
1285
|
const endpoint = device.getEndpoint(1);
|
|
1284
1286
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
1285
1287
|
await reporting.onOff(endpoint);
|
|
1288
|
+
device.powerSource = 'Mains (single phase)';
|
|
1289
|
+
device.save();
|
|
1286
1290
|
},
|
|
1287
1291
|
},
|
|
1288
1292
|
{
|
|
@@ -1593,4 +1597,28 @@ module.exports = [
|
|
|
1593
1597
|
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
1594
1598
|
},
|
|
1595
1599
|
},
|
|
1600
|
+
{
|
|
1601
|
+
zigbeeModel: ['lumi.remote.rkba01'],
|
|
1602
|
+
model: 'ZNXNKG02LM',
|
|
1603
|
+
vendor: 'Xiaomi',
|
|
1604
|
+
description: 'Aqara knob H1 (wireless)',
|
|
1605
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
1606
|
+
exposes: [e.battery(), e.battery_voltage(),
|
|
1607
|
+
e.action(['single', 'double', 'hold', 'release', 'start_rotating', 'rotation', 'stop_rotating']),
|
|
1608
|
+
exposes.enum('operation_mode', ea.ALL, ['event', 'command']).withDescription('Button mode'),
|
|
1609
|
+
exposes.numeric('action_rotation_angle', ea.STATE).withUnit('*').withDescription('Rotation angle'),
|
|
1610
|
+
exposes.numeric('action_rotation_angle_speed', ea.STATE).withUnit('*').withDescription('Rotation angle speed'),
|
|
1611
|
+
exposes.numeric('action_rotation_percent', ea.STATE).withUnit('%').withDescription('Rotation percent'),
|
|
1612
|
+
exposes.numeric('action_rotation_percent_speed', ea.STATE).withUnit('%').withDescription('Rotation percent speed'),
|
|
1613
|
+
exposes.numeric('action_rotation_time', ea.STATE).withUnit('ms').withDescription('Rotation time'),
|
|
1614
|
+
],
|
|
1615
|
+
fromZigbee: [fz.xiaomi_on_off_action, fz.xiaomi_multistate_action, fz.xiaomi_battery, fz.aqara_opple_report,
|
|
1616
|
+
fz.aqara_knob_rotation],
|
|
1617
|
+
toZigbee: [tz.aqara_opple_operation_mode],
|
|
1618
|
+
onEvent: preventReset,
|
|
1619
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1620
|
+
const endpoint1 = device.getEndpoint(1);
|
|
1621
|
+
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
1622
|
+
},
|
|
1623
|
+
},
|
|
1596
1624
|
];
|