zigbee-herdsman-converters 14.0.491 → 14.0.494
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/devices/heiman.js +10 -2
- package/devices/philips.js +1 -1
- package/devices/schneider_electric.js +130 -11
- package/devices/tuya.js +3 -2
- package/lib/exposes.js +2 -0
- package/lib/ota/OTA_URLs.md +87 -0
- package/package.json +1 -1
package/devices/heiman.js
CHANGED
|
@@ -285,9 +285,17 @@ module.exports = [
|
|
|
285
285
|
model: 'SMHM-I1',
|
|
286
286
|
vendor: 'HEIMAN',
|
|
287
287
|
description: 'Smart motion sensor',
|
|
288
|
-
fromZigbee: [fz.ias_occupancy_alarm_1],
|
|
288
|
+
fromZigbee: [fz.ias_occupancy_alarm_1, fz.battery],
|
|
289
289
|
toZigbee: [],
|
|
290
|
-
exposes: [e.occupancy(), e.battery_low()],
|
|
290
|
+
exposes: [e.occupancy(), e.battery_low(), e.battery(), e.battery_voltage()],
|
|
291
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
292
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
293
|
+
const endpoint = device.getEndpoint(1);
|
|
294
|
+
const bindClusters = ['genPowerCfg'];
|
|
295
|
+
await reporting.bind(endpoint, coordinatorEndpoint, bindClusters);
|
|
296
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
297
|
+
await reporting.batteryVoltage(endpoint);
|
|
298
|
+
},
|
|
291
299
|
},
|
|
292
300
|
{
|
|
293
301
|
zigbeeModel: ['HT-EM', 'TH-EM', 'TH-T_V14'],
|
package/devices/philips.js
CHANGED
|
@@ -591,7 +591,7 @@ module.exports = [
|
|
|
591
591
|
ota: ota.zigbeeOTA,
|
|
592
592
|
},
|
|
593
593
|
{
|
|
594
|
-
zigbeeModel: ['4090531P9'],
|
|
594
|
+
zigbeeModel: ['4090531P9', '929003053601'],
|
|
595
595
|
model: '4090531P9',
|
|
596
596
|
vendor: 'Philips',
|
|
597
597
|
description: 'Hue Flourish white and color ambiance ceiling light with Bluetooth',
|
|
@@ -34,19 +34,111 @@ const fzLocal = {
|
|
|
34
34
|
const ret = {};
|
|
35
35
|
|
|
36
36
|
switch (commandID) {
|
|
37
|
-
case 0xA1:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
case 0xA1: {
|
|
38
|
+
const attr = msg.data.commandFrame.attributes;
|
|
39
|
+
const clusterID = msg.data.commandFrame.clusterID;
|
|
40
|
+
|
|
41
|
+
switch (clusterID) {
|
|
42
|
+
case 2820: { // haElectricalMeasurement
|
|
43
|
+
const acCurrentDivisor = attr['acCurrentDivisor'];
|
|
44
|
+
const acVoltageDivisor = attr['acVoltageDivisor'];
|
|
45
|
+
const acFrequencyDivisor = attr['acFrequencyDivisor'];
|
|
46
|
+
const powerDivisor = attr['powerDivisor'];
|
|
47
|
+
|
|
48
|
+
if (attr.hasOwnProperty('rmsVoltage')) {
|
|
49
|
+
ret['voltage_phase_a'] = attr['rmsVoltage'] / acVoltageDivisor;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (attr.hasOwnProperty('rmsVoltagePhB')) {
|
|
53
|
+
ret['voltage_phase_b'] = attr['rmsVoltagePhB'] / acVoltageDivisor;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (attr.hasOwnProperty('rmsVoltagePhC')) {
|
|
57
|
+
ret['voltage_phase_c'] = attr['rmsVoltagePhC'] / acVoltageDivisor;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (attr.hasOwnProperty('19200')) {
|
|
61
|
+
ret['voltage_phase_ab'] = attr['19200'] / acVoltageDivisor;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (attr.hasOwnProperty('19456')) {
|
|
65
|
+
ret['voltage_phase_bc'] = attr['19456'] / acVoltageDivisor;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (attr.hasOwnProperty('19712')) {
|
|
69
|
+
ret['voltage_phase_ca'] = attr['19712'] / acVoltageDivisor;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (attr.hasOwnProperty('rmsCurrent')) {
|
|
73
|
+
ret['current_phase_a'] = attr['rmsCurrent'] / acCurrentDivisor;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (attr.hasOwnProperty('rmsCurrentPhB')) {
|
|
77
|
+
ret['current_phase_b'] = attr['rmsCurrentPhB'] / acCurrentDivisor;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (attr.hasOwnProperty('rmsCurrentPhC')) {
|
|
81
|
+
ret['current_phase_c'] = attr['rmsCurrentPhC'] / acCurrentDivisor;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (attr.hasOwnProperty('totalActivePower')) {
|
|
85
|
+
ret['power'] = attr['totalActivePower'] * 1000 / powerDivisor;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (attr.hasOwnProperty('totalApparentPower')) {
|
|
89
|
+
ret['power_apparent'] = attr['totalApparentPower'] * 1000 / powerDivisor;
|
|
46
90
|
}
|
|
47
|
-
|
|
91
|
+
|
|
92
|
+
if (attr.hasOwnProperty('acFrequency')) {
|
|
93
|
+
ret['ac_frequency'] = attr['acFrequency'] / acFrequencyDivisor;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (attr.hasOwnProperty('activePower')) {
|
|
97
|
+
ret['power_phase_a'] = attr['activePower'] * 1000 / powerDivisor;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (attr.hasOwnProperty('activePowerPhB')) {
|
|
101
|
+
ret['power_phase_b'] = attr['activePowerPhB'] * 1000 / powerDivisor;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (attr.hasOwnProperty('activePowerPhC')) {
|
|
105
|
+
ret['power_phase_c'] = attr['activePowerPhC'] * 1000 / powerDivisor;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case 1794: { // seMetering
|
|
110
|
+
const divisor = attr['divisor'];
|
|
111
|
+
|
|
112
|
+
if (attr.hasOwnProperty('currentSummDelivered')) {
|
|
113
|
+
const val = attr['currentSummDelivered'];
|
|
114
|
+
ret['energy'] = ((parseInt(val[0]) << 32) + parseInt(val[1])) / divisor;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (attr.hasOwnProperty('16652')) {
|
|
118
|
+
const val = attr['16652'];
|
|
119
|
+
ret['energy_phase_a'] = ((parseInt(val[0]) << 32) + parseInt(val[1])) / divisor;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (attr.hasOwnProperty('16908')) {
|
|
123
|
+
const val = attr['16908'];
|
|
124
|
+
ret['energy_phase_b'] = ((parseInt(val[0]) << 32) + parseInt(val[1])) / divisor;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (attr.hasOwnProperty('17164')) {
|
|
128
|
+
const val = attr['17164'];
|
|
129
|
+
ret['energy_phase_c'] = ((parseInt(val[0]) << 32) + parseInt(val[1])) / divisor;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (attr.hasOwnProperty('powerFactor')) {
|
|
133
|
+
ret['power_factor'] = attr['powerFactor'];
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
48
139
|
|
|
49
140
|
break;
|
|
141
|
+
}
|
|
50
142
|
case 0xA3:
|
|
51
143
|
// Should handle this cluster as well
|
|
52
144
|
break;
|
|
@@ -792,6 +884,33 @@ module.exports = [
|
|
|
792
884
|
description: 'PowerTag power sensor',
|
|
793
885
|
fromZigbee: [fzLocal.schneider_powertag],
|
|
794
886
|
toZigbee: [],
|
|
795
|
-
exposes: [
|
|
887
|
+
exposes: [
|
|
888
|
+
e.power(),
|
|
889
|
+
e.power_apparent(),
|
|
890
|
+
exposes.numeric('power_phase_a', ea.STATE).withUnit('W').withDescription('Instantaneous measured power on phase A'),
|
|
891
|
+
exposes.numeric('power_phase_b', ea.STATE).withUnit('W').withDescription('Instantaneous measured power on phase B'),
|
|
892
|
+
exposes.numeric('power_phase_c', ea.STATE).withUnit('W').withDescription('Instantaneous measured power on phase C'),
|
|
893
|
+
e.power_factor(),
|
|
894
|
+
e.energy(),
|
|
895
|
+
exposes.numeric('energy_phase_a', ea.STATE).withUnit('kWh').withDescription('Sum of consumed energy on phase A'),
|
|
896
|
+
exposes.numeric('energy_phase_b', ea.STATE).withUnit('kWh').withDescription('Sum of consumed energy on phase B'),
|
|
897
|
+
exposes.numeric('energy_phase_c', ea.STATE).withUnit('kWh').withDescription('Sum of consumed energy on phase C'),
|
|
898
|
+
e.ac_frequency(),
|
|
899
|
+
exposes.numeric('voltage_phase_a', ea.STATE).withUnit('V').withDescription('Measured electrical potential value on phase A'),
|
|
900
|
+
exposes.numeric('voltage_phase_b', ea.STATE).withUnit('V').withDescription('Measured electrical potential value on phase B'),
|
|
901
|
+
exposes.numeric('voltage_phase_c', ea.STATE).withUnit('V').withDescription('Measured electrical potential value on phase C'),
|
|
902
|
+
exposes.numeric('voltage_phase_ab', ea.STATE)
|
|
903
|
+
.withUnit('V').withDescription('Measured electrical potential value between phase A and B'),
|
|
904
|
+
exposes.numeric('voltage_phase_bc', ea.STATE)
|
|
905
|
+
.withUnit('V').withDescription('Measured electrical potential value between phase B and C'),
|
|
906
|
+
exposes.numeric('voltage_phase_ca', ea.STATE)
|
|
907
|
+
.withUnit('V').withDescription('Measured electrical potential value between phase C and A'),
|
|
908
|
+
exposes.numeric('current_phase_a', ea.STATE)
|
|
909
|
+
.withUnit('A').withDescription('Instantaneous measured electrical current on phase A'),
|
|
910
|
+
exposes.numeric('current_phase_b', ea.STATE)
|
|
911
|
+
.withUnit('A').withDescription('Instantaneous measured electrical current on phase B'),
|
|
912
|
+
exposes.numeric('current_phase_c', ea.STATE)
|
|
913
|
+
.withUnit('A').withDescription('Instantaneous measured electrical current on phase C'),
|
|
914
|
+
],
|
|
796
915
|
},
|
|
797
916
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -13,7 +13,7 @@ const utils = require('../lib/utils');
|
|
|
13
13
|
const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak', '_TZ3000_ew3ldmgx', '_TZ3000_gjnozsaz',
|
|
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
|
-
'_TZ3000_nzkqcvvs'];
|
|
16
|
+
'_TZ3000_nzkqcvvs', '_TZ3000_1h2x4akh'];
|
|
17
17
|
|
|
18
18
|
const tzLocal = {
|
|
19
19
|
TS0504B_color: {
|
|
@@ -287,7 +287,8 @@ module.exports = [
|
|
|
287
287
|
{modelID: 'TS0505B', manufacturerName: '_TZ3210_mzdax7ha'},
|
|
288
288
|
{modelID: 'TS0505B', manufacturerName: '_TZB210_tmi0rihb'},
|
|
289
289
|
{modelID: 'TS0505B', manufacturerName: '_TZ3210_a4s41wm4'},
|
|
290
|
-
{modelID: 'TS0505B', manufacturerName: '_TZ3210_qxenlrin'}
|
|
290
|
+
{modelID: 'TS0505B', manufacturerName: '_TZ3210_qxenlrin'},
|
|
291
|
+
{modelID: 'TS0505B', manufacturerName: '_TZ3210_klv2wul0'}],
|
|
291
292
|
model: 'TS0505B',
|
|
292
293
|
vendor: 'TuYa',
|
|
293
294
|
description: 'Zigbee RGB+CCT light',
|
package/lib/exposes.js
CHANGED
|
@@ -588,6 +588,8 @@ module.exports = {
|
|
|
588
588
|
pm25: () => new Numeric('pm25', access.STATE).withUnit('µg/m³').withDescription('Measured PM2.5 (particulate matter) concentration'),
|
|
589
589
|
position: () => new Numeric('position', access.STATE).withUnit('%').withDescription('Position'),
|
|
590
590
|
power: () => new Numeric('power', access.STATE).withUnit('W').withDescription('Instantaneous measured power'),
|
|
591
|
+
power_factor: () => new Numeric('power_factor', access.STATE).withUnit('%').withDescription('Instantaneous measured power factor'),
|
|
592
|
+
power_apparent: () => new Numeric('power_apparent', access.STATE).withUnit('VA').withDescription('Instantaneous measured apparent power'),
|
|
591
593
|
power_on_behavior: () => new Enum('power_on_behavior', access.ALL, ['off', 'previous', 'on']).withDescription('Controls the behavior when the device is powered on'),
|
|
592
594
|
power_outage_count: (resetsWhenPairing = true) => new Numeric('power_outage_count', access.STATE).withDescription('Number of power outages' + (resetsWhenPairing ? ' (since last pairing)' : '')),
|
|
593
595
|
power_outage_memory: () => new Binary('power_outage_memory', access.ALL, true, false).withDescription('Enable/disable the power outage memory, this recovers the on/off mode after power failure'),
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Zigbee OTA source provider sources for these and others
|
|
2
|
+
|
|
3
|
+
Collection of external Zigbee OTA firmware images from official and unofficial OTA provider sources.
|
|
4
|
+
|
|
5
|
+
### Koenkk zigbee-OTA repository
|
|
6
|
+
|
|
7
|
+
Koenkk zigbee-OTA repository host third-party OTA firmware images and external URLs for many third-party Zigbee OTA firmware images.
|
|
8
|
+
|
|
9
|
+
https://github.com/Koenkk/zigbee-OTA/tree/master/images
|
|
10
|
+
|
|
11
|
+
https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json
|
|
12
|
+
|
|
13
|
+
### Dresden Elektronik
|
|
14
|
+
|
|
15
|
+
Dresden Elektronik Zigbee OTA firmware images are made publicly available by Dresden Elektronik (first-party) at the following URL:
|
|
16
|
+
|
|
17
|
+
https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---Firmware-versions
|
|
18
|
+
|
|
19
|
+
Dresden Elektronik also provide third-party OTA firmware images and external URLs for many third-party Zigbee OTA firmware images.
|
|
20
|
+
|
|
21
|
+
### EUROTRONICS
|
|
22
|
+
|
|
23
|
+
EUROTRONICS Zigbee OTA firmware images are made publicly available by EUROTRONIC Technology (first-party) at the following URL:
|
|
24
|
+
|
|
25
|
+
https://github.com/EUROTRONIC-Technology/Spirit-ZigBee/releases/download/
|
|
26
|
+
|
|
27
|
+
### IKEA Trådfri
|
|
28
|
+
|
|
29
|
+
IKEA Tradfi Zigbee OTA firmware images are made publicly available by IKEA (first-party) at the following URL:
|
|
30
|
+
|
|
31
|
+
Download-URL:
|
|
32
|
+
|
|
33
|
+
http://fw.ota.homesmart.ikea.net/feed/version_info.json
|
|
34
|
+
|
|
35
|
+
Download-URL (Test/Beta-Version):
|
|
36
|
+
|
|
37
|
+
http://fw.test.ota.homesmart.ikea.net/feed/version_info.json
|
|
38
|
+
|
|
39
|
+
Release changelogs
|
|
40
|
+
|
|
41
|
+
https://ww8.ikea.com/ikeahomesmart/releasenotes/releasenotes.html
|
|
42
|
+
|
|
43
|
+
### LEDVANCE/Sylvania and OSRAM Lightify
|
|
44
|
+
|
|
45
|
+
LEDVANCE/Sylvania and OSRAM Lightify Zigbee OTA firmware images are made publicly available by LEDVANCE (first-party) at the following URL:
|
|
46
|
+
|
|
47
|
+
https://update.ledvance.com/firmware-overview
|
|
48
|
+
|
|
49
|
+
https://api.update.ledvance.com/v1/zigbee/firmwares/download
|
|
50
|
+
|
|
51
|
+
https://consumer.sylvania.com/our-products/smart/sylvania-smart-zigbee-products-menu/index.jsp
|
|
52
|
+
|
|
53
|
+
### Legrand/Netatmo
|
|
54
|
+
|
|
55
|
+
Legrand/Netatmo Zigbee OTA firmware images are made publicly available by Legrand (first-party) at the following URL:
|
|
56
|
+
|
|
57
|
+
https://developer.legrand.com/documentation/operating-manual/ https://developer.legrand.com/documentation/firmwares-download/
|
|
58
|
+
|
|
59
|
+
### LiXee
|
|
60
|
+
|
|
61
|
+
LiXee Zigbee OTA firmware images are made publicly available by Fairecasoimeme / ZiGate (first-party) at the following URL:
|
|
62
|
+
|
|
63
|
+
https://github.com/fairecasoimeme/Zlinky_TIC/releases
|
|
64
|
+
|
|
65
|
+
### SALUS/Computime
|
|
66
|
+
|
|
67
|
+
SALUS/Computime Hue Zigbee OTA firmware images are made publicly available by SALUS (first-party) at the following URL:
|
|
68
|
+
|
|
69
|
+
https://eu.salusconnect.io/demo/default/status/firmware
|
|
70
|
+
|
|
71
|
+
### Sengled
|
|
72
|
+
|
|
73
|
+
Sengled Zigbee OTA firmware images are made publicly available by Dresden Elektronik (third-party) at the following URL:
|
|
74
|
+
|
|
75
|
+
https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---Firmware-versions#sengled
|
|
76
|
+
|
|
77
|
+
### Philips Hue (Signify)
|
|
78
|
+
|
|
79
|
+
Philips Hue (Signify) Zigbee OTA firmware images are made publicly available by Dresden Elektronik (third-party) at the following URL:
|
|
80
|
+
|
|
81
|
+
https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---Firmware-versions#philips-hue
|
|
82
|
+
|
|
83
|
+
### Ubisys
|
|
84
|
+
|
|
85
|
+
Ubisys Zigbee OTA firmware images are made publicly available by Ubisys (first-party) at the following URL:
|
|
86
|
+
|
|
87
|
+
https://www.ubisys.de/en/support/firmware/
|