zigbee-herdsman-converters 14.0.308 → 14.0.309
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 +6 -11
- package/converters/toZigbee.js +2 -2
- package/devices/bitron.js +1 -2
- package/devices/candeo.js +1 -1
- package/devices/danfoss.js +4 -4
- package/devices/eurotronic.js +5 -5
- package/devices/heiman.js +13 -13
- package/devices/hive.js +38 -38
- package/devices/moes.js +3 -1
- package/devices/philips.js +9 -0
- package/devices/popp.js +4 -4
- package/devices/schneider_electric.js +8 -9
- package/devices/sinope.js +15 -15
- package/devices/stelpro.js +43 -28
- package/devices/tuya.js +2 -2
- package/devices/viessmann.js +4 -4
- package/devices/xiaomi.js +7 -16
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -4752,6 +4752,10 @@ const converters = {
|
|
|
4752
4752
|
const lookup = {4: 'anti_flicker_mode', 1: 'quick_mode'};
|
|
4753
4753
|
payload.mode_switch = lookup[msg.data['4']];
|
|
4754
4754
|
}
|
|
4755
|
+
if (msg.data.hasOwnProperty('10')) {
|
|
4756
|
+
const lookup = {1: 'toggle', 2: 'momentary'};
|
|
4757
|
+
payload.switch_type = lookup[msg.data['10']];
|
|
4758
|
+
}
|
|
4755
4759
|
if (msg.data.hasOwnProperty('512')) {
|
|
4756
4760
|
if (['ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM'].includes(model.model)) {
|
|
4757
4761
|
payload.button_lock = msg.data['512'] === 1 ? 'OFF' : 'ON';
|
|
@@ -4986,15 +4990,6 @@ const converters = {
|
|
|
4986
4990
|
}
|
|
4987
4991
|
},
|
|
4988
4992
|
},
|
|
4989
|
-
WSDCGQ11LM_pressure: {
|
|
4990
|
-
cluster: 'msPressureMeasurement',
|
|
4991
|
-
type: ['attributeReport', 'readResponse'],
|
|
4992
|
-
options: [exposes.options.precision('pressure'), exposes.options.calibration('pressure')],
|
|
4993
|
-
convert: (model, msg, publish, options, meta) => {
|
|
4994
|
-
const pressure = msg.data.hasOwnProperty('16') ? parseFloat(msg.data['16']) / 10 : parseFloat(msg.data['measuredValue']);
|
|
4995
|
-
return {pressure: calibrateAndPrecisionRoundOptions(pressure, options, 'pressure')};
|
|
4996
|
-
},
|
|
4997
|
-
},
|
|
4998
4993
|
W2_module_carbon_monoxide: {
|
|
4999
4994
|
cluster: 'ssIasZone',
|
|
5000
4995
|
type: 'commandStatusChangeNotification',
|
|
@@ -7179,10 +7174,10 @@ const converters = {
|
|
|
7179
7174
|
result.voltage_rms = (value[1] | value[0] << 8) / 10;
|
|
7180
7175
|
}
|
|
7181
7176
|
if (dp === tuya.dataPoints.hochCurrent) {
|
|
7182
|
-
result.current = value[2] | value[1] << 8;
|
|
7177
|
+
result.current = (value[2] | value[1] << 8) / 1000;
|
|
7183
7178
|
}
|
|
7184
7179
|
if (dp === tuya.dataPoints.hochHistoricalCurrent) {
|
|
7185
|
-
result.current_average = value[2] | value[1] << 8;
|
|
7180
|
+
result.current_average = (value[2] | value[1] << 8) / 1000;
|
|
7186
7181
|
}
|
|
7187
7182
|
if (dp === tuya.dataPoints.hochActivePower) {
|
|
7188
7183
|
result.power = (value[2] | value[1] << 8) / 10;
|
package/converters/toZigbee.js
CHANGED
|
@@ -2078,7 +2078,7 @@ const converters = {
|
|
|
2078
2078
|
xiaomi_led_disabled_night: {
|
|
2079
2079
|
key: ['led_disabled_night'],
|
|
2080
2080
|
convertSet: async (entity, key, value, meta) => {
|
|
2081
|
-
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM', 'QBKG19LM',
|
|
2081
|
+
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM', 'QBKG19LM', 'DLKZMK11LM',
|
|
2082
2082
|
'QBKG34LM'].includes(meta.mapped.model)) {
|
|
2083
2083
|
await entity.write('aqaraOpple', {0x0203: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
|
|
2084
2084
|
} else if (['ZNCZ11LM'].includes(meta.mapped.model)) {
|
|
@@ -2093,7 +2093,7 @@ const converters = {
|
|
|
2093
2093
|
return {state: {led_disabled_night: value}};
|
|
2094
2094
|
},
|
|
2095
2095
|
convertGet: async (entity, key, meta) => {
|
|
2096
|
-
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM', 'QBKG19LM',
|
|
2096
|
+
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM', 'QBKG19LM', 'DLKZMK11LM',
|
|
2097
2097
|
'QBKG34LM'].includes(meta.mapped.model)) {
|
|
2098
2098
|
await entity.read('aqaraOpple', [0x0203], manufacturerOptions.xiaomi);
|
|
2099
2099
|
} else {
|
package/devices/bitron.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const exposes = require('../lib/exposes');
|
|
2
2
|
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
|
-
const constants = require('../lib/constants');
|
|
5
4
|
const reporting = require('../lib/reporting');
|
|
6
5
|
const extend = require('../lib/extend');
|
|
7
6
|
const e = exposes.presets;
|
|
@@ -199,7 +198,7 @@ module.exports = [
|
|
|
199
198
|
'genBasic', 'genPowerCfg', 'genIdentify', 'genPollCtrl', 'hvacThermostat', 'hvacUserInterfaceCfg',
|
|
200
199
|
];
|
|
201
200
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
202
|
-
await reporting.thermostatTemperature(endpoint
|
|
201
|
+
await reporting.thermostatTemperature(endpoint);
|
|
203
202
|
await reporting.thermostatTemperatureCalibration(endpoint);
|
|
204
203
|
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
205
204
|
await reporting.thermostatRunningState(endpoint);
|
package/devices/candeo.js
CHANGED
|
@@ -13,7 +13,7 @@ module.exports = [
|
|
|
13
13
|
const endpoint = device.getEndpoint(1);
|
|
14
14
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
15
15
|
await reporting.onOff(endpoint);
|
|
16
|
-
await reporting.brightness(endpoint
|
|
16
|
+
await reporting.brightness(endpoint);
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
19
|
];
|
package/devices/danfoss.js
CHANGED
|
@@ -73,15 +73,15 @@ module.exports = [
|
|
|
73
73
|
|
|
74
74
|
// standard ZCL attributes
|
|
75
75
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
76
|
-
await reporting.thermostatTemperature(endpoint
|
|
76
|
+
await reporting.thermostatTemperature(endpoint);
|
|
77
77
|
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
78
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
78
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
79
79
|
|
|
80
80
|
// danfoss attributes
|
|
81
81
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
82
82
|
attribute: 'danfossMountedModeActive',
|
|
83
83
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
84
|
-
maximumReportInterval:
|
|
84
|
+
maximumReportInterval: constants.repInterval.MAX,
|
|
85
85
|
reportableChange: 1,
|
|
86
86
|
}], options);
|
|
87
87
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -93,7 +93,7 @@ module.exports = [
|
|
|
93
93
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
94
94
|
attribute: 'danfossHeatRequired',
|
|
95
95
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
96
|
-
maximumReportInterval: constants.repInterval.
|
|
96
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
97
97
|
reportableChange: 1,
|
|
98
98
|
}], options);
|
|
99
99
|
await endpoint.configureReporting('hvacThermostat', [{
|
package/devices/eurotronic.js
CHANGED
|
@@ -34,12 +34,12 @@ module.exports = [
|
|
|
34
34
|
const endpoint = device.getEndpoint(1);
|
|
35
35
|
const options = {manufacturerCode: 4151};
|
|
36
36
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
|
|
37
|
-
await reporting.thermostatTemperature(endpoint
|
|
38
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
39
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
40
|
-
await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint
|
|
37
|
+
await reporting.thermostatTemperature(endpoint);
|
|
38
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
39
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
40
|
+
await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
|
|
41
41
|
await endpoint.configureReporting('hvacThermostat', [{attribute: {ID: 0x4003, type: 41}, minimumReportInterval: 0,
|
|
42
|
-
maximumReportInterval: constants.repInterval.
|
|
42
|
+
maximumReportInterval: constants.repInterval.HOUR, reportableChange: 25}], options);
|
|
43
43
|
await endpoint.configureReporting('hvacThermostat', [{attribute: {ID: 0x4008, type: 34}, minimumReportInterval: 0,
|
|
44
44
|
maximumReportInterval: constants.repInterval.HOUR, reportableChange: 1}], options);
|
|
45
45
|
},
|
package/devices/heiman.js
CHANGED
|
@@ -149,7 +149,7 @@ module.exports = [
|
|
|
149
149
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
150
150
|
const endpoint = device.getEndpoint(1);
|
|
151
151
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
152
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
152
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
153
153
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
154
154
|
},
|
|
155
155
|
exposes: [e.contact(), e.battery(), e.battery_low(), e.tamper()],
|
|
@@ -164,7 +164,7 @@ module.exports = [
|
|
|
164
164
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
165
165
|
const endpoint = device.getEndpoint(1);
|
|
166
166
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
167
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
167
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
168
168
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
169
169
|
},
|
|
170
170
|
exposes: [e.contact(), e.battery_low(), e.tamper(), e.battery()],
|
|
@@ -188,7 +188,7 @@ module.exports = [
|
|
|
188
188
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
189
189
|
const endpoint = device.getEndpoint(1);
|
|
190
190
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
191
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
191
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
192
192
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
193
193
|
},
|
|
194
194
|
exposes: [e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
|
|
@@ -204,7 +204,7 @@ module.exports = [
|
|
|
204
204
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
205
205
|
const endpoint = device.getEndpoint(1);
|
|
206
206
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
207
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
207
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
208
208
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
209
209
|
},
|
|
210
210
|
},
|
|
@@ -219,7 +219,7 @@ module.exports = [
|
|
|
219
219
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
220
220
|
const endpoint = device.getEndpoint(1);
|
|
221
221
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
222
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
222
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
223
223
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
224
224
|
},
|
|
225
225
|
onEvent: async (type, data, device) => {
|
|
@@ -241,7 +241,7 @@ module.exports = [
|
|
|
241
241
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
242
242
|
const endpoint = device.getEndpoint(1);
|
|
243
243
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
244
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
244
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
245
245
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
246
246
|
},
|
|
247
247
|
},
|
|
@@ -334,7 +334,7 @@ module.exports = [
|
|
|
334
334
|
const endpoint1 = device.getEndpoint(1);
|
|
335
335
|
await reporting.bind(endpoint1, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
336
336
|
await reporting.temperature(endpoint1);
|
|
337
|
-
await reporting.batteryPercentageRemaining(endpoint1
|
|
337
|
+
await reporting.batteryPercentageRemaining(endpoint1);
|
|
338
338
|
await endpoint1.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
339
339
|
|
|
340
340
|
const endpoint2 = device.getEndpoint(2);
|
|
@@ -405,7 +405,7 @@ module.exports = [
|
|
|
405
405
|
const bindClusters = ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg'];
|
|
406
406
|
await reporting.bind(endpoint, coordinatorEndpoint, bindClusters);
|
|
407
407
|
await reporting.temperature(endpoint);
|
|
408
|
-
await reporting.humidity(endpoint
|
|
408
|
+
await reporting.humidity(endpoint);
|
|
409
409
|
await reporting.batteryVoltage(endpoint);
|
|
410
410
|
},
|
|
411
411
|
exposes: [e.temperature(), e.humidity(), e.battery()],
|
|
@@ -421,7 +421,7 @@ module.exports = [
|
|
|
421
421
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
422
422
|
const endpoint = device.getEndpoint(1);
|
|
423
423
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
424
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
424
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
425
425
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
426
426
|
},
|
|
427
427
|
},
|
|
@@ -436,7 +436,7 @@ module.exports = [
|
|
|
436
436
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
437
437
|
const endpoint = device.getEndpoint(1);
|
|
438
438
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'heimanSpecificScenes']);
|
|
439
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
439
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
440
440
|
},
|
|
441
441
|
},
|
|
442
442
|
{
|
|
@@ -468,7 +468,7 @@ module.exports = [
|
|
|
468
468
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
469
469
|
const endpoint = device.getEndpoint(1);
|
|
470
470
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
471
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
471
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
472
472
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
473
473
|
},
|
|
474
474
|
exposes: [e.vibration(), e.battery_low(), e.tamper(), e.battery()],
|
|
@@ -483,7 +483,7 @@ module.exports = [
|
|
|
483
483
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
484
484
|
const endpoint = device.getEndpoint(1);
|
|
485
485
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
486
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
486
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
487
487
|
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
488
488
|
},
|
|
489
489
|
exposes: [e.vibration(), e.battery_low(), e.tamper(), e.battery()],
|
|
@@ -564,7 +564,7 @@ module.exports = [
|
|
|
564
564
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
565
565
|
const endpoint = device.getEndpoint(1);
|
|
566
566
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'heimanSpecificInfraRedRemote']);
|
|
567
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
567
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
568
568
|
},
|
|
569
569
|
},
|
|
570
570
|
{
|
package/devices/hive.js
CHANGED
|
@@ -213,15 +213,15 @@ module.exports = [
|
|
|
213
213
|
|
|
214
214
|
// standard ZCL attributes
|
|
215
215
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
216
|
-
await reporting.thermostatTemperature(endpoint
|
|
216
|
+
await reporting.thermostatTemperature(endpoint);
|
|
217
217
|
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
218
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
218
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
219
219
|
|
|
220
220
|
// danfoss attributes
|
|
221
221
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
222
222
|
attribute: 'danfossMountedModeActive',
|
|
223
223
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
224
|
-
maximumReportInterval:
|
|
224
|
+
maximumReportInterval: constants.repInterval.MAX,
|
|
225
225
|
reportableChange: 1,
|
|
226
226
|
}], options);
|
|
227
227
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -233,7 +233,7 @@ module.exports = [
|
|
|
233
233
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
234
234
|
attribute: 'danfossHeatRequired',
|
|
235
235
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
236
|
-
maximumReportInterval: constants.repInterval.
|
|
236
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
237
237
|
reportableChange: 1,
|
|
238
238
|
}], options);
|
|
239
239
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -293,12 +293,12 @@ module.exports = [
|
|
|
293
293
|
const endpoint = device.getEndpoint(5);
|
|
294
294
|
const binds = ['genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat'];
|
|
295
295
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
296
|
-
await reporting.thermostatTemperature(endpoint
|
|
297
|
-
await reporting.thermostatRunningState(endpoint
|
|
298
|
-
await reporting.thermostatSystemMode(endpoint
|
|
299
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
300
|
-
await reporting.thermostatTemperatureSetpointHold(endpoint
|
|
301
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint
|
|
296
|
+
await reporting.thermostatTemperature(endpoint);
|
|
297
|
+
await reporting.thermostatRunningState(endpoint);
|
|
298
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
299
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
300
|
+
await reporting.thermostatTemperatureSetpointHold(endpoint);
|
|
301
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint);
|
|
302
302
|
},
|
|
303
303
|
},
|
|
304
304
|
{
|
|
@@ -324,12 +324,12 @@ module.exports = [
|
|
|
324
324
|
const endpoint = device.getEndpoint(5);
|
|
325
325
|
const binds = ['genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat'];
|
|
326
326
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
327
|
-
await reporting.thermostatTemperature(endpoint
|
|
328
|
-
await reporting.thermostatRunningState(endpoint
|
|
329
|
-
await reporting.thermostatSystemMode(endpoint
|
|
330
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
331
|
-
await reporting.thermostatTemperatureSetpointHold(endpoint
|
|
332
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint
|
|
327
|
+
await reporting.thermostatTemperature(endpoint);
|
|
328
|
+
await reporting.thermostatRunningState(endpoint);
|
|
329
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
330
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
331
|
+
await reporting.thermostatTemperatureSetpointHold(endpoint);
|
|
332
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint);
|
|
333
333
|
},
|
|
334
334
|
},
|
|
335
335
|
{
|
|
@@ -352,18 +352,18 @@ module.exports = [
|
|
|
352
352
|
'genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat',
|
|
353
353
|
];
|
|
354
354
|
await reporting.bind(heatEndpoint, coordinatorEndpoint, binds);
|
|
355
|
-
await reporting.thermostatTemperature(heatEndpoint
|
|
356
|
-
await reporting.thermostatRunningState(heatEndpoint
|
|
357
|
-
await reporting.thermostatSystemMode(heatEndpoint
|
|
358
|
-
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint
|
|
359
|
-
await reporting.thermostatTemperatureSetpointHold(heatEndpoint
|
|
360
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint
|
|
355
|
+
await reporting.thermostatTemperature(heatEndpoint);
|
|
356
|
+
await reporting.thermostatRunningState(heatEndpoint);
|
|
357
|
+
await reporting.thermostatSystemMode(heatEndpoint);
|
|
358
|
+
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint);
|
|
359
|
+
await reporting.thermostatTemperatureSetpointHold(heatEndpoint);
|
|
360
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint);
|
|
361
361
|
await reporting.bind(waterEndpoint, coordinatorEndpoint, binds);
|
|
362
|
-
await reporting.thermostatRunningState(waterEndpoint
|
|
363
|
-
await reporting.thermostatSystemMode(waterEndpoint
|
|
364
|
-
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint
|
|
365
|
-
await reporting.thermostatTemperatureSetpointHold(waterEndpoint
|
|
366
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint
|
|
362
|
+
await reporting.thermostatRunningState(waterEndpoint);
|
|
363
|
+
await reporting.thermostatSystemMode(waterEndpoint);
|
|
364
|
+
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint);
|
|
365
|
+
await reporting.thermostatTemperatureSetpointHold(waterEndpoint);
|
|
366
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint);
|
|
367
367
|
},
|
|
368
368
|
exposes: [
|
|
369
369
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
@@ -403,18 +403,18 @@ module.exports = [
|
|
|
403
403
|
'genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat',
|
|
404
404
|
];
|
|
405
405
|
await reporting.bind(heatEndpoint, coordinatorEndpoint, binds);
|
|
406
|
-
await reporting.thermostatTemperature(heatEndpoint
|
|
407
|
-
await reporting.thermostatRunningState(heatEndpoint
|
|
408
|
-
await reporting.thermostatSystemMode(heatEndpoint
|
|
409
|
-
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint
|
|
410
|
-
await reporting.thermostatTemperatureSetpointHold(heatEndpoint
|
|
411
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint
|
|
406
|
+
await reporting.thermostatTemperature(heatEndpoint);
|
|
407
|
+
await reporting.thermostatRunningState(heatEndpoint);
|
|
408
|
+
await reporting.thermostatSystemMode(heatEndpoint);
|
|
409
|
+
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint);
|
|
410
|
+
await reporting.thermostatTemperatureSetpointHold(heatEndpoint);
|
|
411
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint);
|
|
412
412
|
await reporting.bind(waterEndpoint, coordinatorEndpoint, binds);
|
|
413
|
-
await reporting.thermostatRunningState(waterEndpoint
|
|
414
|
-
await reporting.thermostatSystemMode(waterEndpoint
|
|
415
|
-
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint
|
|
416
|
-
await reporting.thermostatTemperatureSetpointHold(waterEndpoint
|
|
417
|
-
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint
|
|
413
|
+
await reporting.thermostatRunningState(waterEndpoint);
|
|
414
|
+
await reporting.thermostatSystemMode(waterEndpoint);
|
|
415
|
+
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint);
|
|
416
|
+
await reporting.thermostatTemperatureSetpointHold(waterEndpoint);
|
|
417
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint);
|
|
418
418
|
},
|
|
419
419
|
exposes: [
|
|
420
420
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
package/devices/moes.js
CHANGED
|
@@ -288,11 +288,13 @@ module.exports = [
|
|
|
288
288
|
exposes.binary('motor_reversal', ea.ALL, 'ON', 'OFF')],
|
|
289
289
|
},
|
|
290
290
|
{
|
|
291
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e9ba97vf'}
|
|
291
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e9ba97vf'},
|
|
292
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_husqqvux'}],
|
|
292
293
|
model: 'TV01-ZB',
|
|
293
294
|
vendor: 'Moes',
|
|
294
295
|
description: 'Thermostat radiator valve',
|
|
295
296
|
fromZigbee: [fz.moes_thermostat_tv, fz.ignore_tuya_set_time],
|
|
297
|
+
whiteLabel: [{vendor: 'Tesla Smart', model: 'TSL-TRV-TV01ZG'}],
|
|
296
298
|
toZigbee: [tz.moes_thermostat_tv],
|
|
297
299
|
exposes: [
|
|
298
300
|
e.battery(), e.child_lock(), e.window_detection(),
|
package/devices/philips.js
CHANGED
|
@@ -564,6 +564,15 @@ module.exports = [
|
|
|
564
564
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
565
565
|
ota: ota.zigbeeOTA,
|
|
566
566
|
},
|
|
567
|
+
{
|
|
568
|
+
zigbeeModel: ['LTA010'],
|
|
569
|
+
model: '9290024683',
|
|
570
|
+
vendor: 'Philips',
|
|
571
|
+
description: 'Hue white ambiance A19 1100lm with Bluetooth',
|
|
572
|
+
meta: {turnsOffAtBrightness1: true},
|
|
573
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
574
|
+
ota: ota.zigbeeOTA,
|
|
575
|
+
},
|
|
567
576
|
{
|
|
568
577
|
zigbeeModel: ['LTA008'],
|
|
569
578
|
model: '9290022267A',
|
package/devices/popp.js
CHANGED
|
@@ -73,15 +73,15 @@ module.exports = [
|
|
|
73
73
|
|
|
74
74
|
// standard ZCL attributes
|
|
75
75
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
76
|
-
await reporting.thermostatTemperature(endpoint
|
|
76
|
+
await reporting.thermostatTemperature(endpoint);
|
|
77
77
|
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
78
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
78
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
79
79
|
|
|
80
80
|
// danfoss attributes
|
|
81
81
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
82
82
|
attribute: 'danfossMountedModeActive',
|
|
83
83
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
84
|
-
maximumReportInterval:
|
|
84
|
+
maximumReportInterval: constants.repInterval.MAX,
|
|
85
85
|
reportableChange: 1,
|
|
86
86
|
}], options);
|
|
87
87
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -93,7 +93,7 @@ module.exports = [
|
|
|
93
93
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
94
94
|
attribute: 'danfossHeatRequired',
|
|
95
95
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
96
|
-
maximumReportInterval: constants.repInterval.
|
|
96
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
97
97
|
reportableChange: 1,
|
|
98
98
|
}], options);
|
|
99
99
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
@@ -23,9 +23,9 @@ module.exports = [
|
|
|
23
23
|
const binds = ['genBasic', 'genPowerCfg', 'hvacThermostat', 'haDiagnostic'];
|
|
24
24
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
25
25
|
await reporting.batteryVoltage(endpoint);
|
|
26
|
-
await reporting.thermostatTemperature(endpoint
|
|
27
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
28
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
26
|
+
await reporting.thermostatTemperature(endpoint);
|
|
27
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
28
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
29
29
|
// bind of hvacUserInterfaceCfg fails with 'Table Full', does this have any effect?
|
|
30
30
|
await endpoint.configureReporting('hvacUserInterfaceCfg', [{attribute: 'keypadLockout', reportableChange: 1,
|
|
31
31
|
minimumReportInterval: constants.repInterval.MINUTE, maximumReportInterval: constants.repInterval.HOUR}]);
|
|
@@ -354,8 +354,8 @@ module.exports = [
|
|
|
354
354
|
const endpoint1 = device.getEndpoint(1);
|
|
355
355
|
const endpoint2 = device.getEndpoint(2);
|
|
356
356
|
await reporting.bind(endpoint1, coordinatorEndpoint, ['hvacThermostat']);
|
|
357
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint1
|
|
358
|
-
await reporting.thermostatPIHeatingDemand(endpoint1
|
|
357
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint1);
|
|
358
|
+
await reporting.thermostatPIHeatingDemand(endpoint1);
|
|
359
359
|
await reporting.bind(endpoint2, coordinatorEndpoint, ['seMetering']);
|
|
360
360
|
await reporting.instantaneousDemand(endpoint2, {min: 0, max: 60, change: 1});
|
|
361
361
|
await reporting.currentSummDelivered(endpoint2, {min: 0, max: 60, change: 1});
|
|
@@ -458,9 +458,8 @@ module.exports = [
|
|
|
458
458
|
const binds = ['genBasic', 'genPowerCfg', 'hvacThermostat'];
|
|
459
459
|
await reporting.bind(endpoint, coordinatorEndpointB, binds);
|
|
460
460
|
await reporting.batteryVoltage(endpoint);
|
|
461
|
-
await reporting.thermostatTemperature(endpoint
|
|
462
|
-
|
|
463
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {min: 0, max: constants.repInterval.MINUTES_15, change: 25});
|
|
461
|
+
await reporting.thermostatTemperature(endpoint);
|
|
462
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
464
463
|
await endpoint.configureReporting('hvacUserInterfaceCfg', [{attribute: 'keypadLockout',
|
|
465
464
|
minimumReportInterval: constants.repInterval.MINUTE,
|
|
466
465
|
maximumReportInterval: constants.repInterval.HOUR,
|
|
@@ -514,7 +513,7 @@ module.exports = [
|
|
|
514
513
|
const endpoint = device.getEndpoint(11);
|
|
515
514
|
const binds = ['genBasic', 'genPowerCfg', 'hvacThermostat', 'msTemperatureMeasurement'];
|
|
516
515
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
517
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
516
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
518
517
|
},
|
|
519
518
|
},
|
|
520
519
|
{
|
package/devices/sinope.js
CHANGED
|
@@ -29,12 +29,12 @@ module.exports = [
|
|
|
29
29
|
'haElectricalMeasurement', 'seMetering', 'manuSpecificSinope'];
|
|
30
30
|
|
|
31
31
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
32
|
-
await reporting.thermostatTemperature(endpoint
|
|
33
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
34
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
32
|
+
await reporting.thermostatTemperature(endpoint);
|
|
33
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
34
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
35
35
|
|
|
36
36
|
try {
|
|
37
|
-
await reporting.thermostatSystemMode(endpoint
|
|
37
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
38
38
|
await reporting.thermostatRunningState(endpoint);
|
|
39
39
|
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
40
40
|
await reporting.currentSummDelivered(endpoint, {min: 10, max: 303, change: [1, 1]});
|
|
@@ -71,9 +71,9 @@ module.exports = [
|
|
|
71
71
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'msTemperatureMeasurement',
|
|
72
72
|
'haElectricalMeasurement', 'seMetering', 'manuSpecificSinope'];
|
|
73
73
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
74
|
-
await reporting.thermostatTemperature(endpoint
|
|
75
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
76
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
74
|
+
await reporting.thermostatTemperature(endpoint);
|
|
75
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
76
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
77
77
|
|
|
78
78
|
try {
|
|
79
79
|
await reporting.thermostatRunningState(endpoint);
|
|
@@ -97,7 +97,7 @@ module.exports = [
|
|
|
97
97
|
} catch (error) {/* Do nothing*/}
|
|
98
98
|
|
|
99
99
|
try {
|
|
100
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
100
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
101
101
|
} catch (error) {
|
|
102
102
|
// Not all support this: https://github.com/Koenkk/zigbee2mqtt/issues/3760
|
|
103
103
|
}
|
|
@@ -130,16 +130,16 @@ module.exports = [
|
|
|
130
130
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg',
|
|
131
131
|
'msTemperatureMeasurement', 'manuSpecificSinope'];
|
|
132
132
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
133
|
-
await reporting.thermostatTemperature(endpoint
|
|
134
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
135
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
133
|
+
await reporting.thermostatTemperature(endpoint);
|
|
134
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
135
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
136
136
|
|
|
137
137
|
try {
|
|
138
138
|
await reporting.thermostatRunningState(endpoint);
|
|
139
139
|
} catch (error) {/* Not all support this */}
|
|
140
140
|
|
|
141
141
|
try {
|
|
142
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
142
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
143
143
|
} catch (error) {
|
|
144
144
|
// Not all support this: https://github.com/Koenkk/zigbee2mqtt/issues/3760
|
|
145
145
|
}
|
|
@@ -156,14 +156,14 @@ module.exports = [
|
|
|
156
156
|
model: 'TH1400ZB',
|
|
157
157
|
vendor: 'Sinopé',
|
|
158
158
|
description: 'Zigbee low volt thermostat',
|
|
159
|
-
fromZigbee: [fz.legacy.sinope_thermostat_att_report],
|
|
159
|
+
fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.sinope_thermostat_state],
|
|
160
160
|
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_temperature_display_mode,
|
|
161
161
|
tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
162
162
|
tz.sinope_thermostat_backlight_autodim_param, tz.sinope_thermostat_time, tz.sinope_thermostat_enable_outdoor_temperature,
|
|
163
163
|
tz.sinope_thermostat_outdoor_temperature],
|
|
164
164
|
exposes: [exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
|
|
165
|
-
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']), exposes.enum(
|
|
166
|
-
ea.SET, ['on demand', 'sensing']).withDescription('Control backlight dimming behavior')],
|
|
165
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withPiHeatingDemand(), exposes.enum(
|
|
166
|
+
'backlight_auto_dim', ea.SET, ['on demand', 'sensing']).withDescription('Control backlight dimming behavior')],
|
|
167
167
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
168
168
|
const endpoint = device.getEndpoint(1);
|
|
169
169
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'msTemperatureMeasurement'];
|
package/devices/stelpro.js
CHANGED
|
@@ -3,6 +3,7 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
|
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
4
|
const reporting = require('../lib/reporting');
|
|
5
5
|
const e = exposes.presets;
|
|
6
|
+
const constants = require('../lib/constants');
|
|
6
7
|
|
|
7
8
|
module.exports = [
|
|
8
9
|
{
|
|
@@ -23,14 +24,18 @@ module.exports = [
|
|
|
23
24
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
24
25
|
|
|
25
26
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Ki
|
|
26
|
-
await reporting.thermostatTemperature(endpoint
|
|
27
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
28
|
-
await reporting.thermostatSystemMode(endpoint
|
|
29
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
30
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
27
|
+
await reporting.thermostatTemperature(endpoint);
|
|
28
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
29
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
30
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
31
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
31
32
|
// cluster 0x0201 attribute 0x401c
|
|
32
|
-
await endpoint.configureReporting('hvacThermostat', [{
|
|
33
|
-
|
|
33
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
34
|
+
attribute: 'StelproSystemMode',
|
|
35
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
36
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
37
|
+
reportableChange: 1,
|
|
38
|
+
}]);
|
|
34
39
|
},
|
|
35
40
|
},
|
|
36
41
|
{
|
|
@@ -51,14 +56,18 @@ module.exports = [
|
|
|
51
56
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
52
57
|
|
|
53
58
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Ki
|
|
54
|
-
await reporting.thermostatTemperature(endpoint
|
|
55
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
56
|
-
await reporting.thermostatSystemMode(endpoint
|
|
57
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
58
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
59
|
+
await reporting.thermostatTemperature(endpoint);
|
|
60
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
61
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
62
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
63
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
59
64
|
// cluster 0x0201 attribute 0x401c
|
|
60
|
-
await endpoint.configureReporting('hvacThermostat', [{
|
|
61
|
-
|
|
65
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
66
|
+
attribute: 'StelproSystemMode',
|
|
67
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
68
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
69
|
+
reportableChange: 1,
|
|
70
|
+
}]);
|
|
62
71
|
},
|
|
63
72
|
},
|
|
64
73
|
{
|
|
@@ -80,15 +89,18 @@ module.exports = [
|
|
|
80
89
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
81
90
|
|
|
82
91
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Maestro
|
|
83
|
-
await reporting.thermostatTemperature(endpoint
|
|
84
|
-
await reporting.humidity(endpoint
|
|
85
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
86
|
-
await reporting.thermostatSystemMode(endpoint
|
|
87
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
88
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
92
|
+
await reporting.thermostatTemperature(endpoint);
|
|
93
|
+
await reporting.humidity(endpoint);
|
|
94
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
95
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
96
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
97
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
89
98
|
// cluster 0x0201 attribute 0x401c
|
|
90
99
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
91
|
-
attribute: 'StelproSystemMode',
|
|
100
|
+
attribute: 'StelproSystemMode',
|
|
101
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
102
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
103
|
+
reportableChange: 1}]);
|
|
92
104
|
},
|
|
93
105
|
},
|
|
94
106
|
{
|
|
@@ -110,15 +122,18 @@ module.exports = [
|
|
|
110
122
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
111
123
|
|
|
112
124
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Maestro
|
|
113
|
-
await reporting.thermostatTemperature(endpoint
|
|
114
|
-
await reporting.humidity(endpoint
|
|
115
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
116
|
-
await reporting.thermostatSystemMode(endpoint
|
|
117
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
118
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
125
|
+
await reporting.thermostatTemperature(endpoint);
|
|
126
|
+
await reporting.humidity(endpoint);
|
|
127
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
128
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
129
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
130
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
119
131
|
// cluster 0x0201 attribute 0x401c
|
|
120
132
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
121
|
-
attribute: 'StelproSystemMode',
|
|
133
|
+
attribute: 'StelproSystemMode',
|
|
134
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
135
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
136
|
+
reportableChange: 1}]);
|
|
122
137
|
},
|
|
123
138
|
},
|
|
124
139
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -1503,8 +1503,8 @@ module.exports = [
|
|
|
1503
1503
|
exposes.numeric('countdown_timer', ea.STATE_SET).withValueMin(0).withValueMax(86400).withUnit('s'),
|
|
1504
1504
|
exposes.numeric('voltage', ea.STATE).withUnit('V'),
|
|
1505
1505
|
exposes.numeric('voltage_rms', ea.STATE).withUnit('V'),
|
|
1506
|
-
exposes.numeric('current', ea.STATE).withUnit('
|
|
1507
|
-
exposes.numeric('current_average', ea.STATE).withUnit('
|
|
1506
|
+
exposes.numeric('current', ea.STATE).withUnit('A'),
|
|
1507
|
+
exposes.numeric('current_average', ea.STATE).withUnit('A'),
|
|
1508
1508
|
exposes.numeric('power', ea.STATE).withUnit('W'),
|
|
1509
1509
|
exposes.numeric('energy_consumed', ea.STATE).withUnit('kWh'),
|
|
1510
1510
|
exposes.numeric('temperature', ea.STATE).withUnit('°C'),
|
package/devices/viessmann.js
CHANGED
|
@@ -31,10 +31,10 @@ module.exports = [
|
|
|
31
31
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg', 'genIdentify', 'genTime', 'hvacThermostat']);
|
|
32
32
|
|
|
33
33
|
// standard ZCL attributes
|
|
34
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
35
|
-
await reporting.thermostatTemperature(endpoint
|
|
36
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
37
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
34
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
35
|
+
await reporting.thermostatTemperature(endpoint);
|
|
36
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
37
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
38
38
|
|
|
39
39
|
// manufacturer attributes
|
|
40
40
|
await endpoint.configureReporting('hvacThermostat', [{attribute: 'viessmannWindowOpenInternal', minimumReportInterval: 60,
|
package/devices/xiaomi.js
CHANGED
|
@@ -801,7 +801,7 @@ module.exports = [
|
|
|
801
801
|
vendor: 'Xiaomi',
|
|
802
802
|
description: 'Aqara temperature, humidity and pressure sensor',
|
|
803
803
|
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
804
|
-
fromZigbee: [fz.xiaomi_battery, fz.xiaomi_temperature, fz.humidity, fz.
|
|
804
|
+
fromZigbee: [fz.xiaomi_battery, fz.xiaomi_temperature, fz.humidity, fz.pressure, fz.WSDCGQ01LM_WSDCGQ11LM_interval],
|
|
805
805
|
toZigbee: [],
|
|
806
806
|
exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure(), e.battery_voltage()],
|
|
807
807
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -1401,23 +1401,14 @@ module.exports = [
|
|
|
1401
1401
|
model: 'DLKZMK11LM',
|
|
1402
1402
|
vendor: 'Xiaomi',
|
|
1403
1403
|
description: 'Aqara single switch module T1 (with neutral)',
|
|
1404
|
-
fromZigbee: [fz.on_off, fz.
|
|
1405
|
-
|
|
1406
|
-
exposes: [e.switch(), e.
|
|
1407
|
-
|
|
1404
|
+
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_switch_type, fz.xiaomi_switch_opple_basic],
|
|
1405
|
+
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_type, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night],
|
|
1406
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
|
|
1407
|
+
e.voltage().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(), e.switch_type()],
|
|
1408
1408
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1409
|
-
|
|
1410
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'genDeviceTempCfg']);
|
|
1411
|
-
await reporting.onOff(endpoint);
|
|
1412
|
-
// Gives UNSUPPORTED_ATTRIBUTE on reporting.readEletricalMeasurementMultiplierDivisors.
|
|
1413
|
-
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
1414
|
-
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
1415
|
-
await reporting.currentSummDelivered(endpoint);
|
|
1416
|
-
await reporting.activePower(endpoint, {min: 5, max: 600, change: 10});
|
|
1417
|
-
await reporting.deviceTemperature(endpoint);
|
|
1418
|
-
device.powerSource = 'Mains (single phase)';
|
|
1419
|
-
device.save();
|
|
1409
|
+
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
1420
1410
|
},
|
|
1411
|
+
ota: ota.zigbeeOTA,
|
|
1421
1412
|
},
|
|
1422
1413
|
{
|
|
1423
1414
|
zigbeeModel: ['lumi.switch.l0agl1'],
|
package/npm-shrinkwrap.json
CHANGED