zigbee-herdsman-converters 14.0.301 → 14.0.305
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/ajax_online.js +7 -0
- package/devices/danfoss.js +7 -6
- package/devices/gledopto.js +1 -0
- package/devices/hive.js +12 -1
- package/devices/ledvance.js +1 -1
- package/devices/osram.js +7 -3
- package/devices/perenio.js +15 -0
- package/devices/philips.js +12 -3
- package/devices/popp.js +13 -6
- package/devices/tuya.js +1 -0
- package/devices/universal_electronics_inc.js +16 -0
- package/lib/exposes.js +1 -0
- package/lib/ota/tradfri.js +5 -2
- package/npm-shrinkwrap.json +1137 -1315
- package/package.json +3 -3
package/devices/ajax_online.js
CHANGED
|
@@ -23,4 +23,11 @@ module.exports = [
|
|
|
23
23
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [158, 495]}),
|
|
24
24
|
meta: {turnsOffAtBrightness1: true},
|
|
25
25
|
},
|
|
26
|
+
{
|
|
27
|
+
zigbeeModel: ['ZB_A60_RGBCW'],
|
|
28
|
+
model: 'ZB_A60_RGBCW',
|
|
29
|
+
vendor: 'Ajax Online',
|
|
30
|
+
description: 'Smart Zigbee pro 12W A60 RGBCW bulb',
|
|
31
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
32
|
+
},
|
|
26
33
|
];
|
package/devices/danfoss.js
CHANGED
|
@@ -9,7 +9,8 @@ const ea = exposes.access;
|
|
|
9
9
|
|
|
10
10
|
module.exports = [
|
|
11
11
|
{
|
|
12
|
-
// eTRV0100 is the same as Hive
|
|
12
|
+
// eTRV0100 is the same as Hive TRV001 and Popp eT093WRO. If implementing anything, please consider
|
|
13
|
+
// changing those two too.
|
|
13
14
|
zigbeeModel: ['eTRV0100'],
|
|
14
15
|
model: '014G2461',
|
|
15
16
|
vendor: 'Danfoss',
|
|
@@ -37,7 +38,7 @@ module.exports = [
|
|
|
37
38
|
exposes.binary('heat_required', ea.STATE_GET, true, false)
|
|
38
39
|
.withDescription('Whether or not the unit needs warm water. `false` No Heat Request or `true` Heat Request'),
|
|
39
40
|
exposes.enum('setpoint_change_source', ea.STATE, ['manual', 'schedule', 'externally'])
|
|
40
|
-
.withDescription('Values observed are `0` (
|
|
41
|
+
.withDescription('Values observed are `0` (manual), `1` (schedule) or `2` (externally)'),
|
|
41
42
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature().withPiHeatingDemand()
|
|
42
43
|
.withSystemMode(['heat']).withRunningState(['idle', 'heat'], ea.STATE),
|
|
43
44
|
exposes.numeric('external_measured_room_sensor', ea.ALL)
|
|
@@ -71,10 +72,10 @@ module.exports = [
|
|
|
71
72
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
|
|
72
73
|
|
|
73
74
|
// standard ZCL attributes
|
|
74
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
75
|
-
await reporting.thermostatTemperature(endpoint, {min: 0, max: constants.repInterval.
|
|
76
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
77
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {min: 0, max: constants.repInterval.
|
|
75
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
76
|
+
await reporting.thermostatTemperature(endpoint, {min: 0, max: constants.repInterval.HOUR, change: 5});
|
|
77
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
78
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {min: 0, max: constants.repInterval.HOUR, change: 5});
|
|
78
79
|
|
|
79
80
|
// danfoss attributes
|
|
80
81
|
await endpoint.configureReporting('hvacThermostat', [{
|
package/devices/gledopto.js
CHANGED
package/devices/hive.js
CHANGED
|
@@ -150,6 +150,8 @@ module.exports = [
|
|
|
150
150
|
},
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
|
+
// TRV001 is the same as Danfoss Ally (eTRV0100) and Popp eT093WRO. If implementing anything, please consider
|
|
154
|
+
// changing those two too.
|
|
153
155
|
zigbeeModel: ['TRV001'],
|
|
154
156
|
model: 'UK7004240',
|
|
155
157
|
vendor: 'Hive',
|
|
@@ -160,7 +162,7 @@ module.exports = [
|
|
|
160
162
|
tz.danfoss_heat_available, tz.danfoss_heat_required, tz.danfoss_day_of_week, tz.danfoss_trigger_time,
|
|
161
163
|
tz.danfoss_window_open_internal, tz.danfoss_window_open_external, tz.danfoss_load_estimate,
|
|
162
164
|
tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.thermostat_keypad_lockout,
|
|
163
|
-
tz.thermostat_system_mode],
|
|
165
|
+
tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
|
|
164
166
|
exposes: [e.battery(), e.keypad_lockout(),
|
|
165
167
|
exposes.binary('mounted_mode_active', ea.STATE_GET, true, false)
|
|
166
168
|
.withDescription('Is the unit in mounting mode. This is set to `false` for mounted (already on ' +
|
|
@@ -176,6 +178,8 @@ module.exports = [
|
|
|
176
178
|
.withDescription('Not clear how this affects operation. `false` No Heat Available or `true` Heat Available'),
|
|
177
179
|
exposes.binary('heat_required', ea.STATE_GET, true, false)
|
|
178
180
|
.withDescription('Whether or not the unit needs warm water. `false` No Heat Request or `true` Heat Request'),
|
|
181
|
+
exposes.enum('setpoint_change_source', ea.STATE, ['manual', 'schedule', 'externally'])
|
|
182
|
+
.withDescription('Values observed are `0` (manual), `1` (schedule) or `2` (externally)'),
|
|
179
183
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature().withPiHeatingDemand()
|
|
180
184
|
.withSystemMode(['heat']).withRunningState(['idle', 'heat'], ea.STATE),
|
|
181
185
|
exposes.numeric('external_measured_room_sensor', ea.ALL)
|
|
@@ -195,6 +199,11 @@ module.exports = [
|
|
|
195
199
|
exposes.numeric('algorithm_scale_factor', ea.ALL).withValueMin(1).withValueMax(10)
|
|
196
200
|
.withDescription('Scale factor of setpoint filter timeconstant ("aggressiveness" of control algorithm) '+
|
|
197
201
|
'1= Quick ... 5=Moderate ... 10=Slow'),
|
|
202
|
+
exposes.binary('load_balancing_enable', ea.ALL, true, false)
|
|
203
|
+
.withDescription('Whether or not the thermostat acts as standalone thermostat or shares load with other ' +
|
|
204
|
+
'thermostats in the room. The gateway must update load_room_mean if enabled.'),
|
|
205
|
+
exposes.numeric('load_room_mean', ea.ALL)
|
|
206
|
+
.withDescription('Mean radiator load for room calculated by gateway for load balancing purposes'),
|
|
198
207
|
exposes.numeric('load_estimate', ea.STATE_GET)
|
|
199
208
|
.withDescription('Load estimate on this radiator')],
|
|
200
209
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -243,6 +252,8 @@ module.exports = [
|
|
|
243
252
|
'danfossMountedModeControl',
|
|
244
253
|
'danfossMountedModeActive',
|
|
245
254
|
'danfossExternalMeasuredRoomSensor',
|
|
255
|
+
'danfossLoadBalancingEnable',
|
|
256
|
+
'danfossLoadRoomMean',
|
|
246
257
|
], options);
|
|
247
258
|
|
|
248
259
|
// read systemMode to have an initial value
|
package/devices/ledvance.js
CHANGED
|
@@ -47,7 +47,7 @@ module.exports = [
|
|
|
47
47
|
model: '4058075208414',
|
|
48
48
|
vendor: 'LEDVANCE',
|
|
49
49
|
description: 'SMART+ candle E14 tunable white',
|
|
50
|
-
extend: extend.ledvance.light_onoff_brightness_colortemp(),
|
|
50
|
+
extend: extend.ledvance.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
51
51
|
ota: ota.ledvance,
|
|
52
52
|
},
|
|
53
53
|
{
|
package/devices/osram.js
CHANGED
|
@@ -51,7 +51,7 @@ module.exports = [
|
|
|
51
51
|
model: 'AC10787',
|
|
52
52
|
vendor: 'OSRAM',
|
|
53
53
|
description: 'SMART+ classic E27 TW',
|
|
54
|
-
extend: extend.ledvance.light_onoff_brightness_colortemp(),
|
|
54
|
+
extend: extend.ledvance.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
55
55
|
ota: ota.ledvance,
|
|
56
56
|
},
|
|
57
57
|
{
|
|
@@ -385,8 +385,12 @@ module.exports = [
|
|
|
385
385
|
zigbeeModel: ['Zigbee 3.0 DALI CONV LI'],
|
|
386
386
|
model: '4062172044776',
|
|
387
387
|
vendor: 'OSRAM',
|
|
388
|
-
description: '
|
|
388
|
+
description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires',
|
|
389
389
|
extend: extend.ledvance.light_onoff_brightness(),
|
|
390
|
-
|
|
390
|
+
exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
|
|
391
|
+
endpoint: (device) => {
|
|
392
|
+
return {'l1': 10, 'l2': 11};
|
|
393
|
+
},
|
|
394
|
+
meta: {multiEndpoint: true},
|
|
391
395
|
},
|
|
392
396
|
];
|
package/devices/perenio.js
CHANGED
|
@@ -10,6 +10,7 @@ module.exports = [
|
|
|
10
10
|
vendor: 'Perenio',
|
|
11
11
|
description: 'Flood alarm device',
|
|
12
12
|
fromZigbee: [fz.ias_water_leak_alarm_1, fz.ignore_basic_report, fz.battery],
|
|
13
|
+
meta: {battery: {dontDividePercentage: true}},
|
|
13
14
|
toZigbee: [],
|
|
14
15
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
15
16
|
const endpoint = device.getEndpoint(1);
|
|
@@ -18,4 +19,18 @@ module.exports = [
|
|
|
18
19
|
},
|
|
19
20
|
exposes: [e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
|
|
20
21
|
},
|
|
22
|
+
{
|
|
23
|
+
zigbeeModel: ['ZHA-DoorLockSensor'],
|
|
24
|
+
model: 'PECWS01',
|
|
25
|
+
vendor: 'Perenio',
|
|
26
|
+
description: 'Door sensor',
|
|
27
|
+
fromZigbee: [fz.ias_contact_alarm_1, fz.battery, fz.ignore_basic_report, fz.ias_contact_alarm_1_report],
|
|
28
|
+
toZigbee: [],
|
|
29
|
+
exposes: [e.contact(), e.battery()],
|
|
30
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
31
|
+
const endpoint = device.getEndpoint(1);
|
|
32
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
33
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
34
|
+
},
|
|
35
|
+
},
|
|
21
36
|
];
|
package/devices/philips.js
CHANGED
|
@@ -1964,12 +1964,12 @@ module.exports = [
|
|
|
1964
1964
|
ota: ota.zigbeeOTA,
|
|
1965
1965
|
},
|
|
1966
1966
|
{
|
|
1967
|
-
zigbeeModel: ['5047131P9'],
|
|
1967
|
+
zigbeeModel: ['5047131P9', '5047131P6'],
|
|
1968
1968
|
model: '5047131P9',
|
|
1969
1969
|
vendor: 'Philips',
|
|
1970
|
-
description: 'Hue White ambiance Buckram',
|
|
1970
|
+
description: 'Hue White ambiance Buckram single spotlight with bluetooth',
|
|
1971
1971
|
meta: {turnsOffAtBrightness1: true},
|
|
1972
|
-
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1972
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1973
1973
|
ota: ota.zigbeeOTA,
|
|
1974
1974
|
},
|
|
1975
1975
|
{
|
|
@@ -2197,4 +2197,13 @@ module.exports = [
|
|
|
2197
2197
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2198
2198
|
ota: ota.zigbeeOTA,
|
|
2199
2199
|
},
|
|
2200
|
+
{
|
|
2201
|
+
zigbeeModel: ['5047131P8'],
|
|
2202
|
+
model: '5047131P8',
|
|
2203
|
+
vendor: 'Philips',
|
|
2204
|
+
description: 'Hue White ambiance Buckram single spotlight',
|
|
2205
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2206
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2207
|
+
ota: ota.zigbeeOTA,
|
|
2208
|
+
},
|
|
2200
2209
|
];
|
package/devices/popp.js
CHANGED
|
@@ -21,7 +21,7 @@ module.exports = [
|
|
|
21
21
|
tz.danfoss_heat_available, tz.danfoss_heat_required, tz.danfoss_day_of_week, tz.danfoss_trigger_time,
|
|
22
22
|
tz.danfoss_window_open_internal, tz.danfoss_window_open_external, tz.danfoss_load_estimate,
|
|
23
23
|
tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.thermostat_keypad_lockout,
|
|
24
|
-
tz.thermostat_system_mode],
|
|
24
|
+
tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
|
|
25
25
|
exposes: [e.battery(), e.keypad_lockout(),
|
|
26
26
|
exposes.binary('mounted_mode_active', ea.STATE_GET, true, false)
|
|
27
27
|
.withDescription('Is the unit in mounting mode. This is set to `false` for mounted (already on ' +
|
|
@@ -38,7 +38,7 @@ module.exports = [
|
|
|
38
38
|
exposes.binary('heat_required', ea.STATE_GET, true, false)
|
|
39
39
|
.withDescription('Whether or not the unit needs warm water. `false` No Heat Request or `true` Heat Request'),
|
|
40
40
|
exposes.enum('setpoint_change_source', ea.STATE, ['manual', 'schedule', 'externally'])
|
|
41
|
-
.withDescription('Values observed are `0` (
|
|
41
|
+
.withDescription('Values observed are `0` (manual), `1` (schedule) or `2` (externally)'),
|
|
42
42
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature().withPiHeatingDemand()
|
|
43
43
|
.withSystemMode(['heat']).withRunningState(['idle', 'heat'], ea.STATE),
|
|
44
44
|
exposes.numeric('external_measured_room_sensor', ea.ALL)
|
|
@@ -58,6 +58,11 @@ module.exports = [
|
|
|
58
58
|
exposes.numeric('algorithm_scale_factor', ea.ALL).withValueMin(1).withValueMax(10)
|
|
59
59
|
.withDescription('Scale factor of setpoint filter timeconstant ("aggressiveness" of control algorithm) '+
|
|
60
60
|
'1= Quick ... 5=Moderate ... 10=Slow'),
|
|
61
|
+
exposes.binary('load_balancing_enable', ea.ALL, true, false)
|
|
62
|
+
.withDescription('Whether or not the thermostat acts as standalone thermostat or shares load with other ' +
|
|
63
|
+
'thermostats in the room. The gateway must update load_room_mean if enabled.'),
|
|
64
|
+
exposes.numeric('load_room_mean', ea.ALL)
|
|
65
|
+
.withDescription('Mean radiator load for room calculated by gateway for load balancing purposes'),
|
|
61
66
|
exposes.numeric('load_estimate', ea.STATE_GET)
|
|
62
67
|
.withDescription('Load estimate on this radiator')],
|
|
63
68
|
ota: ota.zigbeeOTA,
|
|
@@ -67,10 +72,10 @@ module.exports = [
|
|
|
67
72
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
|
|
68
73
|
|
|
69
74
|
// standard ZCL attributes
|
|
70
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
71
|
-
await reporting.thermostatTemperature(endpoint, {min: 0, max: constants.repInterval.
|
|
72
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
73
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {min: 0, max: constants.repInterval.
|
|
75
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
76
|
+
await reporting.thermostatTemperature(endpoint, {min: 0, max: constants.repInterval.HOUR, change: 5});
|
|
77
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
78
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {min: 0, max: constants.repInterval.HOUR, change: 5});
|
|
74
79
|
|
|
75
80
|
// danfoss attributes
|
|
76
81
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -107,6 +112,8 @@ module.exports = [
|
|
|
107
112
|
'danfossMountedModeControl',
|
|
108
113
|
'danfossMountedModeActive',
|
|
109
114
|
'danfossExternalMeasuredRoomSensor',
|
|
115
|
+
'danfossLoadBalancingEnable',
|
|
116
|
+
'danfossLoadRoomMean',
|
|
110
117
|
], options);
|
|
111
118
|
|
|
112
119
|
// read systemMode to have an initial value
|
package/devices/tuya.js
CHANGED
|
@@ -705,6 +705,7 @@ module.exports = [
|
|
|
705
705
|
{modelID: 'TS0601', manufacturerName: '_TZE200_rddyvrci'},
|
|
706
706
|
{modelID: 'TS0601', manufacturerName: '_TZE200_nueqqe6k'},
|
|
707
707
|
{modelID: 'TS0601', manufacturerName: '_TZE200_xaabybja'},
|
|
708
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_rmymn92d'},
|
|
708
709
|
{modelID: 'zo2pocs\u0000', manufacturerName: '_TYST11_fzo2pocs'},
|
|
709
710
|
// Roller blinds:
|
|
710
711
|
{modelID: 'TS0601', manufacturerName: '_TZE200_sbordckq'},
|
|
@@ -7,6 +7,22 @@ const ea = exposes.access;
|
|
|
7
7
|
const globalStore = require('../lib/store');
|
|
8
8
|
|
|
9
9
|
module.exports = [
|
|
10
|
+
{
|
|
11
|
+
zigbeeModel: ['URC4470BC0-X-R'],
|
|
12
|
+
model: 'XHS1-UE',
|
|
13
|
+
vendor: 'Universal Electronics Inc',
|
|
14
|
+
description: 'Wireless digital pet resistant PIR detector',
|
|
15
|
+
fromZigbee: [fz.ias_occupancy_alarm_1, fz.temperature, fz.battery],
|
|
16
|
+
toZigbee: [],
|
|
17
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
18
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
19
|
+
const endpoint = device.getEndpoint(1);
|
|
20
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
21
|
+
await reporting.temperature(endpoint);
|
|
22
|
+
await reporting.batteryVoltage(endpoint);
|
|
23
|
+
},
|
|
24
|
+
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.temperature(), e.battery()],
|
|
25
|
+
},
|
|
10
26
|
{
|
|
11
27
|
zigbeeModel: ['URC4460BC0-X-R'],
|
|
12
28
|
model: 'XHS2-UE',
|
package/lib/exposes.js
CHANGED
package/lib/ota/tradfri.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const productionURL = 'http://fw.ota.homesmart.ikea.net/feed/version_info.json';
|
|
2
2
|
const testURL = 'http://fw.test.ota.homesmart.ikea.net/feed/version_info.json';
|
|
3
|
-
const assert = require('assert');
|
|
4
3
|
const common = require('./common');
|
|
5
4
|
const axios = common.getAxios();
|
|
6
5
|
let useTestURL = false;
|
|
@@ -14,7 +13,11 @@ async function getImageMeta(current, logger, device) {
|
|
|
14
13
|
const imageType = current.imageType;
|
|
15
14
|
const images = (await axios.get(url)).data;
|
|
16
15
|
const image = images.find((i) => i.fw_image_type === imageType);
|
|
17
|
-
|
|
16
|
+
|
|
17
|
+
if (!image) {
|
|
18
|
+
throw new Error(`No image available for imageType '${imageType}'`);
|
|
19
|
+
}
|
|
20
|
+
|
|
18
21
|
return {
|
|
19
22
|
fileVersion: (image.fw_file_version_MSB << 16) | image.fw_file_version_LSB,
|
|
20
23
|
url: image.fw_binary_url,
|