zigbee-herdsman-converters 15.0.15 → 15.0.17
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 +4 -4
- package/converters/toZigbee.js +1 -0
- package/devices/danfoss.js +3 -3
- package/devices/dawon_dns.js +3 -3
- package/devices/dlink.js +37 -0
- package/devices/gidealed.js +1 -1
- package/devices/heiman.js +2 -2
- package/devices/hilux.js +11 -0
- package/devices/ikea.js +7 -0
- package/devices/inovelli.js +2 -2
- package/devices/iris.js +1 -1
- package/devices/legrand.js +24 -1
- package/devices/lidl.js +1 -1
- package/devices/m/303/274ller_licht.js +1 -1
- package/devices/nodon.js +3 -0
- package/devices/philips.js +20 -6
- package/devices/sinope.js +21 -34
- package/devices/sonoff.js +6 -6
- package/devices/sunricher.js +2 -0
- package/devices/tuya.js +28 -5
- package/devices/ubisys.js +6 -4
- package/lib/reporting.js +4 -0
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -2622,10 +2622,10 @@ const converters = {
|
|
|
2622
2622
|
result.current_heating_setpoint = precisionRound(msg.data[0x4003], 2) / 100;
|
|
2623
2623
|
}
|
|
2624
2624
|
if (typeof msg.data[0x4008] == 'number') {
|
|
2625
|
-
result.child_protection = (
|
|
2626
|
-
result.mirror_display = (
|
|
2627
|
-
result.boost = (
|
|
2628
|
-
result.window_open = (
|
|
2625
|
+
result.child_protection = (msg.data[0x4008] & (1 << 7)) != 0;
|
|
2626
|
+
result.mirror_display = (msg.data[0x4008] & (1 << 1)) != 0;
|
|
2627
|
+
result.boost = (msg.data[0x4008] & 1 << 2) != 0;
|
|
2628
|
+
result.window_open = (msg.data[0x4008] & (1 << 4)) != 0;
|
|
2629
2629
|
|
|
2630
2630
|
if (result.boost) result.system_mode = constants.thermostatSystemModes[4];
|
|
2631
2631
|
else if (result.window_open) result.system_mode = constants.thermostatSystemModes[0];
|
package/converters/toZigbee.js
CHANGED
|
@@ -4166,6 +4166,7 @@ const converters = {
|
|
|
4166
4166
|
convertSet: async (entity, key, value, meta) => {
|
|
4167
4167
|
const payload = {0x4001: {value, type: 0x20}};
|
|
4168
4168
|
await entity.write('hvacThermostat', payload, manufacturerOptions.eurotronic);
|
|
4169
|
+
return {state: {[key]: value}};
|
|
4169
4170
|
},
|
|
4170
4171
|
convertGet: async (entity, key, meta) => {
|
|
4171
4172
|
await entity.read('hvacThermostat', [0x4001], manufacturerOptions.eurotronic);
|
package/devices/danfoss.js
CHANGED
|
@@ -63,12 +63,12 @@ module.exports = [
|
|
|
63
63
|
'from the `local_temperature` measured by the TRV by 5°C to 8°C. In this case you might choose to use an external ' +
|
|
64
64
|
'room sensor and send the measured value of the external room sensor to the `External_measured_room_sensor` property.' +
|
|
65
65
|
'The way the TRV operates on the `External_measured_room_sensor` depends on the setting of the `Radiator_covered` ' +
|
|
66
|
-
'property: If `Radiator_covered` is `
|
|
66
|
+
'property: If `Radiator_covered` is `false` (Auto Offset Mode): You *must* set the `External_measured_room_sensor` ' +
|
|
67
67
|
'property *at least* every 3 hours. After 3 hours the TRV disables this function and resets the value of the ' +
|
|
68
68
|
'`External_measured_room_sensor` property to -8000 (disabled). You *should* set the `External_measured_room_sensor` ' +
|
|
69
69
|
'property *at most* every 30 minutes or every 0.1K change in measured room temperature.' +
|
|
70
|
-
'If `Radiator_covered` is `
|
|
71
|
-
'least every 30 minutes. After 35 minutes the TRV disables this function and resets the value of the ' +
|
|
70
|
+
'If `Radiator_covered` is `true` (Room Sensor Mode): You *must* set the `External_measured_room_sensor` property *at ' +
|
|
71
|
+
'least* every 30 minutes. After 35 minutes the TRV disables this function and resets the value of the ' +
|
|
72
72
|
'`External_measured_room_sensor` property to -8000 (disabled). You *should* set the `External_measured_room_sensor` ' +
|
|
73
73
|
'property *at most* every 5 minutes or every 0.1K change in measured room temperature.')
|
|
74
74
|
.withValueMin(-8000).withValueMax(3500),
|
package/devices/dawon_dns.js
CHANGED
|
@@ -109,7 +109,7 @@ module.exports = [
|
|
|
109
109
|
model: 'PM-S140-ZB',
|
|
110
110
|
vendor: 'Dawon DNS',
|
|
111
111
|
description: 'IOT smart switch 1 gang without neutral wire',
|
|
112
|
-
extend: extend.switch(),
|
|
112
|
+
extend: extend.switch({disablePowerOnBehavior: true}),
|
|
113
113
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
114
114
|
const endpoint = device.getEndpoint(1);
|
|
115
115
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
@@ -159,7 +159,7 @@ module.exports = [
|
|
|
159
159
|
model: 'PM-S140R-ZB',
|
|
160
160
|
vendor: 'Dawon DNS',
|
|
161
161
|
description: 'IOT smart switch 1 gang router without neutral wire',
|
|
162
|
-
extend: extend.switch(),
|
|
162
|
+
extend: extend.switch({disablePowerOnBehavior: true}),
|
|
163
163
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
164
164
|
const endpoint = device.getEndpoint(1);
|
|
165
165
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
@@ -209,7 +209,7 @@ module.exports = [
|
|
|
209
209
|
model: 'PM-S150-ZB',
|
|
210
210
|
vendor: 'Dawon DNS',
|
|
211
211
|
description: 'IOT smart switch 1 gang router without neutral wire',
|
|
212
|
-
extend: extend.switch(),
|
|
212
|
+
extend: extend.switch({disablePowerOnBehavior: true}),
|
|
213
213
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
214
214
|
const endpoint = device.getEndpoint(1);
|
|
215
215
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
package/devices/dlink.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const fz = require('../converters/fromZigbee');
|
|
2
|
+
const exposes = require('../lib/exposes');
|
|
3
|
+
const reporting = require('../lib/reporting');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
const fzLocal = {
|
|
7
|
+
DCH_B112: {
|
|
8
|
+
cluster: 'ssIasZone',
|
|
9
|
+
type: 'commandStatusChangeNotification',
|
|
10
|
+
convert: (model, msg, publish, options, meta) => {
|
|
11
|
+
const zoneStatus = msg.data.zonestatus;
|
|
12
|
+
return {
|
|
13
|
+
contact: !((zoneStatus & 1) > 0),
|
|
14
|
+
vibration: (zoneStatus & 1<<1) > 0,
|
|
15
|
+
tamper: (zoneStatus & 1<<2) > 0,
|
|
16
|
+
battery_low: (zoneStatus & 1<<3) > 0,
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
module.exports = [
|
|
23
|
+
{
|
|
24
|
+
zigbeeModel: ['DCH-B112'],
|
|
25
|
+
model: 'DCH-B112',
|
|
26
|
+
vendor: 'D-Link',
|
|
27
|
+
description: 'Wireless smart door window sensor with vibration',
|
|
28
|
+
fromZigbee: [fzLocal.DCH_B112, fz.battery],
|
|
29
|
+
toZigbee: [],
|
|
30
|
+
exposes: [e.battery_low(), e.contact(), e.vibration(), e.tamper(), e.battery()],
|
|
31
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
32
|
+
const endpoint = device.getEndpoint(1);
|
|
33
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
34
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
];
|
package/devices/gidealed.js
CHANGED
|
@@ -6,6 +6,6 @@ module.exports = [
|
|
|
6
6
|
model: 'ZC05M',
|
|
7
7
|
vendor: 'GIDEALED',
|
|
8
8
|
description: 'Smart Zigbee RGB LED strip controller',
|
|
9
|
-
extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153,
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153, 370]}),
|
|
10
10
|
},
|
|
11
11
|
];
|
package/devices/heiman.js
CHANGED
|
@@ -122,7 +122,7 @@ module.exports = [
|
|
|
122
122
|
{
|
|
123
123
|
zigbeeModel: ['RH3070'],
|
|
124
124
|
model: 'HS1CG',
|
|
125
|
-
vendor: '
|
|
125
|
+
vendor: 'HEIMAN',
|
|
126
126
|
description: 'Smart combustible gas sensor',
|
|
127
127
|
fromZigbee: [fz.ias_gas_alarm_1],
|
|
128
128
|
toZigbee: [],
|
|
@@ -403,7 +403,7 @@ module.exports = [
|
|
|
403
403
|
zigbeeModel: ['STHM-I1H'],
|
|
404
404
|
model: 'STHM-I1H',
|
|
405
405
|
vendor: 'HEIMAN',
|
|
406
|
-
description: '
|
|
406
|
+
description: 'Temperature & humidity sensor',
|
|
407
407
|
fromZigbee: [fz.temperature, fz.humidity, fz.battery],
|
|
408
408
|
toZigbee: [],
|
|
409
409
|
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
package/devices/hilux.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['Hilux DZ8'],
|
|
6
|
+
model: 'DZ8',
|
|
7
|
+
vendor: 'Hilux',
|
|
8
|
+
description: 'Spot 7W',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370], disablePowerOnBehavior: true}),
|
|
10
|
+
},
|
|
11
|
+
];
|
package/devices/ikea.js
CHANGED
|
@@ -977,4 +977,11 @@ module.exports = [
|
|
|
977
977
|
description: 'TRADFRI E26 PAR38 LED bulb 900 lumen, dimmable, white spectrum, downlight',
|
|
978
978
|
extend: tradfriExtend.light_onoff_brightness_colortemp(),
|
|
979
979
|
},
|
|
980
|
+
{
|
|
981
|
+
zigbeeModel: ['Floor lamp WW'],
|
|
982
|
+
model: 'G2015',
|
|
983
|
+
vendor: 'IKEA',
|
|
984
|
+
description: 'PILSKOTT LED floor lamp',
|
|
985
|
+
extend: tradfriExtend.light_onoff_brightness(),
|
|
986
|
+
},
|
|
980
987
|
];
|
package/devices/inovelli.js
CHANGED
|
@@ -1304,9 +1304,9 @@ module.exports = [
|
|
|
1304
1304
|
]);
|
|
1305
1305
|
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
1306
1306
|
|
|
1307
|
-
await reporting.activePower(endpoint, {min:
|
|
1307
|
+
await reporting.activePower(endpoint, {min: 15, max: 3600, change: 1});
|
|
1308
1308
|
await reporting.currentSummDelivered(endpoint, {
|
|
1309
|
-
min:
|
|
1309
|
+
min: 15,
|
|
1310
1310
|
max: 3600,
|
|
1311
1311
|
change: 0,
|
|
1312
1312
|
});
|
package/devices/iris.js
CHANGED
|
@@ -111,7 +111,7 @@ module.exports = [
|
|
|
111
111
|
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
112
112
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
113
113
|
const endpoint = device.getEndpoint(1);
|
|
114
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['
|
|
114
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'msTemperatureMeasurement']);
|
|
115
115
|
await reporting.onOff(endpoint);
|
|
116
116
|
await reporting.batteryVoltage(endpoint);
|
|
117
117
|
await reporting.temperature(endpoint);
|
package/devices/legrand.js
CHANGED
|
@@ -253,6 +253,7 @@ module.exports = [
|
|
|
253
253
|
await reporting.onOff(endpoint);
|
|
254
254
|
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
255
255
|
await reporting.activePower(endpoint);
|
|
256
|
+
await reporting.apparentPower(endpoint);
|
|
256
257
|
},
|
|
257
258
|
},
|
|
258
259
|
{
|
|
@@ -303,13 +304,14 @@ module.exports = [
|
|
|
303
304
|
description: 'DIN power consumption module',
|
|
304
305
|
fromZigbee: [fz.identify, fz.metering, fz.electrical_measurement, fz.ignore_basic_report, fz.ignore_genOta, fz.legrand_power_alarm],
|
|
305
306
|
toZigbee: [tz.legrand_settingEnableLedInDark, tz.legrand_identify, tz.electrical_measurement_power, tz.legrand_powerAlarm],
|
|
306
|
-
exposes: [e.power().withAccess(ea.STATE_GET), exposes.binary('power_alarm_active', ea.STATE, true, false),
|
|
307
|
+
exposes: [e.power().withAccess(ea.STATE_GET), e.power_apparent(), exposes.binary('power_alarm_active', ea.STATE, true, false),
|
|
307
308
|
exposes.binary('power_alarm', ea.ALL, true, false).withDescription('Enable/disable the power alarm')],
|
|
308
309
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
309
310
|
const endpoint = device.getEndpoint(1);
|
|
310
311
|
await reporting.bind(endpoint, coordinatorEndpoint, ['haElectricalMeasurement', 'genIdentify']);
|
|
311
312
|
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
312
313
|
await reporting.activePower(endpoint);
|
|
314
|
+
await reporting.apparentPower(endpoint);
|
|
313
315
|
// Read configuration values that are not sent periodically as well as current power (activePower).
|
|
314
316
|
await endpoint.read('haElectricalMeasurement', ['activePower', 0xf000, 0xf001, 0xf002]);
|
|
315
317
|
},
|
|
@@ -377,6 +379,7 @@ module.exports = [
|
|
|
377
379
|
exposes.enum('cable_outlet_mode', ea.ALL, ['comfort', 'comfort-1', 'comfort-2', 'eco', 'frost_protection', 'off']),
|
|
378
380
|
exposes.switch().withState('state', true, 'Works only when the pilot wire is deactivated'),
|
|
379
381
|
e.power().withAccess(ea.STATE_GET),
|
|
382
|
+
e.power_apparent(),
|
|
380
383
|
e.power_on_behavior().withDescription(`Controls the behavior when the device is powered on. Works only when the pilot wire is
|
|
381
384
|
deactivated`)],
|
|
382
385
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -385,6 +388,7 @@ module.exports = [
|
|
|
385
388
|
await reporting.onOff(endpoint);
|
|
386
389
|
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
387
390
|
await reporting.activePower(endpoint);
|
|
391
|
+
await reporting.apparentPower(endpoint);
|
|
388
392
|
},
|
|
389
393
|
},
|
|
390
394
|
{
|
|
@@ -447,4 +451,23 @@ module.exports = [
|
|
|
447
451
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff', 'genLevelCtrl']);
|
|
448
452
|
},
|
|
449
453
|
},
|
|
454
|
+
{
|
|
455
|
+
zigbeeModel: [' Centralized ventilation SW', ' Centralized ventilation SW\u0000\u0000\u0000\u0000'],
|
|
456
|
+
model: '067766',
|
|
457
|
+
vendor: 'Legrand',
|
|
458
|
+
description: 'Centralized ventilation switch',
|
|
459
|
+
fromZigbee: [fz.identify, fz.on_off, fz.power_on_behavior],
|
|
460
|
+
toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_identify, tz.legrand_settingEnableLedIfOn,
|
|
461
|
+
tz.power_on_behavior],
|
|
462
|
+
exposes: [e.switch(), e.action(['identify']),
|
|
463
|
+
exposes.binary('led_in_dark', ea.ALL, 'ON', 'OFF').withDescription(`Enables the LED when the power socket is turned off,
|
|
464
|
+
allowing to see it in the dark`),
|
|
465
|
+
exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the device is turned on'),
|
|
466
|
+
e.power_on_behavior()],
|
|
467
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
468
|
+
const endpoint = device.getEndpoint(1);
|
|
469
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff']);
|
|
470
|
+
await reporting.onOff(endpoint);
|
|
471
|
+
},
|
|
472
|
+
},
|
|
450
473
|
];
|
package/devices/lidl.js
CHANGED
|
@@ -510,7 +510,7 @@ module.exports = [
|
|
|
510
510
|
model: 'HG06104A',
|
|
511
511
|
vendor: 'Lidl',
|
|
512
512
|
description: 'Livarno Lux smart LED light strip 2.5m',
|
|
513
|
-
...extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true}),
|
|
513
|
+
...extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, disablePowerOnBehavior: true}),
|
|
514
514
|
meta: {applyRedFix: true, enhancedHue: false},
|
|
515
515
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
516
516
|
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
@@ -8,7 +8,7 @@ const e = exposes.presets;
|
|
|
8
8
|
module.exports = [
|
|
9
9
|
{
|
|
10
10
|
zigbeeModel: ['tint-ExtendedColor'],
|
|
11
|
-
model: '404036/45327/45317',
|
|
11
|
+
model: '404036/45327/45317/45328',
|
|
12
12
|
vendor: 'Müller Licht',
|
|
13
13
|
description: 'Tint LED white+color',
|
|
14
14
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556]}),
|
package/devices/nodon.js
CHANGED
package/devices/philips.js
CHANGED
|
@@ -458,7 +458,7 @@ module.exports = [
|
|
|
458
458
|
model: '929002994901',
|
|
459
459
|
vendor: 'Philips',
|
|
460
460
|
description: 'Hue gradient lightstrip',
|
|
461
|
-
extend: hueExtend.light_onoff_brightness_colortemp_color_gradient({colorTempRange: [153, 500]}),
|
|
461
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color_gradient({disableHueEffects: false, colorTempRange: [153, 500]}),
|
|
462
462
|
},
|
|
463
463
|
{
|
|
464
464
|
zigbeeModel: ['929003045401'],
|
|
@@ -738,14 +738,14 @@ module.exports = [
|
|
|
738
738
|
model: '4090331P9',
|
|
739
739
|
vendor: 'Philips',
|
|
740
740
|
description: 'Hue Ensis (white)',
|
|
741
|
-
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
741
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({disableHueEffects: false, colorTempRange: [153, 500]}),
|
|
742
742
|
},
|
|
743
743
|
{
|
|
744
744
|
zigbeeModel: ['4090330P9_01', '4090330P9_02', '929003052501_01', '929003052501_02'],
|
|
745
745
|
model: '4090330P9',
|
|
746
746
|
vendor: 'Philips',
|
|
747
747
|
description: 'Hue Ensis (black)',
|
|
748
|
-
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
748
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({disableHueEffects: false, colorTempRange: [153, 500]}),
|
|
749
749
|
},
|
|
750
750
|
{
|
|
751
751
|
zigbeeModel: ['929003055901', '929003055901_01', '929003055901_02', '929003055901_03'],
|
|
@@ -1379,14 +1379,14 @@ module.exports = [
|
|
|
1379
1379
|
model: '8718696598283',
|
|
1380
1380
|
vendor: 'Philips',
|
|
1381
1381
|
description: 'Hue white ambiance GU10',
|
|
1382
|
-
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1382
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1383
1383
|
},
|
|
1384
1384
|
{
|
|
1385
1385
|
zigbeeModel: ['LTG002'],
|
|
1386
1386
|
model: '929001953301',
|
|
1387
1387
|
vendor: 'Philips',
|
|
1388
1388
|
description: 'Hue white ambiance GU10 with Bluetooth',
|
|
1389
|
-
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153,
|
|
1389
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454], disableHueEffects: false}),
|
|
1390
1390
|
},
|
|
1391
1391
|
{
|
|
1392
1392
|
zigbeeModel: ['LTD005'],
|
|
@@ -1400,7 +1400,7 @@ module.exports = [
|
|
|
1400
1400
|
model: '9290019534',
|
|
1401
1401
|
vendor: 'Philips',
|
|
1402
1402
|
description: 'Hue white ambiance GU10 with Bluetooth',
|
|
1403
|
-
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1403
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1404
1404
|
},
|
|
1405
1405
|
{
|
|
1406
1406
|
zigbeeModel: ['3417831P6', '929003056101'],
|
|
@@ -1955,6 +1955,13 @@ module.exports = [
|
|
|
1955
1955
|
description: 'Hue Gradient Signe floor lamp (white)',
|
|
1956
1956
|
extend: hueExtend.light_onoff_brightness_colortemp_color_gradient({colorTempRange: [153, 500]}),
|
|
1957
1957
|
},
|
|
1958
|
+
{
|
|
1959
|
+
zigbeeModel: ['915005987701'],
|
|
1960
|
+
model: '915005987701',
|
|
1961
|
+
vendor: 'Philips',
|
|
1962
|
+
description: 'Hue Gradient Signe floor lamp (wood)',
|
|
1963
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color_gradient({colorTempRange: [153, 500]}),
|
|
1964
|
+
},
|
|
1958
1965
|
{
|
|
1959
1966
|
zigbeeModel: ['LCT020'],
|
|
1960
1967
|
model: '4080148P7',
|
|
@@ -3105,6 +3112,13 @@ module.exports = [
|
|
|
3105
3112
|
description: 'Hue Bluetooth white & color ambiance ceiling lamp Infuse large',
|
|
3106
3113
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
3107
3114
|
},
|
|
3115
|
+
{
|
|
3116
|
+
zigbeeModel: ['929003531702'],
|
|
3117
|
+
model: '929003531702',
|
|
3118
|
+
vendor: 'Philips',
|
|
3119
|
+
description: 'Hue Bluetooth white & color ambiance ceiling lamp Infuse medium',
|
|
3120
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
3121
|
+
},
|
|
3108
3122
|
{
|
|
3109
3123
|
zigbeeModel: ['929003045001_01', '929003045001_02', '929003045001_03'],
|
|
3110
3124
|
model: '9290019533',
|
package/devices/sinope.js
CHANGED
|
@@ -724,19 +724,25 @@ module.exports = [
|
|
|
724
724
|
description: 'Zigbee low volt thermostat',
|
|
725
725
|
fromZigbee: [fzLocal.thermostat, fzLocal.sinope, fz.legacy.hvac_user_interface,
|
|
726
726
|
fz.electrical_measurement, fz.metering, fz.ignore_temperature_report],
|
|
727
|
-
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.
|
|
728
|
-
tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tzLocal.backlight_autodim,
|
|
729
|
-
tzLocal.
|
|
730
|
-
tzLocal.
|
|
731
|
-
|
|
732
|
-
|
|
727
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
|
|
728
|
+
tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tzLocal.backlight_autodim,
|
|
729
|
+
tzLocal.thermostat_time, tzLocal.time_format, tzLocal.enable_outdoor_temperature, tzLocal.outdoor_temperature,
|
|
730
|
+
tzLocal.thermostat_occupancy, tzLocal.floor_control_mode, tzLocal.ambiant_max_heat_setpoint, tzLocal.floor_min_heat_setpoint,
|
|
731
|
+
tzLocal.floor_max_heat_setpoint, tzLocal.temperature_sensor, tz.thermostat_min_heat_setpoint_limit,
|
|
732
|
+
tz.thermostat_max_heat_setpoint_limit, tzLocal.connected_load, tzLocal.aux_connected_load, tzLocal.main_cycle_output,
|
|
733
|
+
tzLocal.aux_cycle_output, tzLocal.pump_protection],
|
|
733
734
|
exposes: [
|
|
734
735
|
exposes.climate()
|
|
735
736
|
.withSetpoint('occupied_heating_setpoint', 5, 36, 0.5)
|
|
737
|
+
.withSetpoint('unoccupied_heating_setpoint', 5, 36, 0.5)
|
|
736
738
|
.withLocalTemperature()
|
|
737
739
|
.withSystemMode(['off', 'heat'])
|
|
738
740
|
.withPiHeatingDemand()
|
|
739
741
|
.withRunningState(['idle', 'heat'], ea.STATE),
|
|
742
|
+
e.max_heat_setpoint_limit(5, 36, 0.5),
|
|
743
|
+
e.min_heat_setpoint_limit(5, 36, 0.5),
|
|
744
|
+
exposes.enum('thermostat_occupancy', ea.ALL, ['unoccupied', 'occupied'])
|
|
745
|
+
.withDescription('Occupancy state of the thermostat'),
|
|
740
746
|
exposes.binary('enable_outdoor_temperature', ea.ALL, 'ON', 'OFF')
|
|
741
747
|
.withDescription('Showing outdoor temperature on secondary display'),
|
|
742
748
|
exposes.enum('temperature_display_mode', ea.ALL, ['celsius', 'fahrenheit'])
|
|
@@ -747,34 +753,21 @@ module.exports = [
|
|
|
747
753
|
.withDescription('The display backlight behavior'),
|
|
748
754
|
exposes.enum('keypad_lockout', ea.ALL, ['unlock', 'lock1'])
|
|
749
755
|
.withDescription('Enables or disables the device’s buttons'),
|
|
750
|
-
exposes.presets.max_heat_setpoint_limit(5, 36, 0.5),
|
|
751
|
-
exposes.presets.min_heat_setpoint_limit(5, 36, 0.5),
|
|
752
756
|
exposes.numeric('connected_load', ea.ALL)
|
|
753
|
-
.withUnit('W')
|
|
754
|
-
.withValueMin(1)
|
|
755
|
-
.withValueMax(20000)
|
|
757
|
+
.withUnit('W').withValueMin(1).withValueMax(20000)
|
|
756
758
|
.withDescription('The power in watts of the electrical load connected to the device'),
|
|
757
759
|
exposes.enum('floor_control_mode', ea.ALL, ['ambiant', 'floor'])
|
|
758
760
|
.withDescription('Control mode using floor or ambient temperature'),
|
|
759
761
|
exposes.numeric('floor_max_heat_setpoint', ea.ALL)
|
|
760
|
-
.withUnit('°C')
|
|
761
|
-
.withValueMin(7)
|
|
762
|
-
.withValueMax(36)
|
|
763
|
-
.withValueStep(0.5)
|
|
762
|
+
.withUnit('°C').withValueMin(7).withValueMax(36).withValueStep(0.5)
|
|
764
763
|
.withPreset('off', 'off', 'Use minimum permitted value')
|
|
765
764
|
.withDescription('The maximum floor temperature limit of the floor when in ambient control mode'),
|
|
766
765
|
exposes.numeric('floor_min_heat_setpoint', ea.ALL)
|
|
767
|
-
.withUnit('°C')
|
|
768
|
-
.withValueMin(5)
|
|
769
|
-
.withValueMax(34)
|
|
770
|
-
.withValueStep(0.5)
|
|
766
|
+
.withUnit('°C').withValueMin(5).withValueMax(34).withValueStep(0.5)
|
|
771
767
|
.withPreset('off', 'off', 'Use minimum permitted value')
|
|
772
768
|
.withDescription('The minimum floor temperature limit of the floor when in ambient control mode'),
|
|
773
769
|
exposes.numeric('ambiant_max_heat_setpoint', ea.ALL)
|
|
774
|
-
.withUnit('°C')
|
|
775
|
-
.withValueMin(5)
|
|
776
|
-
.withValueMax(36)
|
|
777
|
-
.withValueStep(0.5)
|
|
770
|
+
.withUnit('°C').withValueMin(5).withValueMax(36).withValueStep(0.5)
|
|
778
771
|
.withPreset('off', 'off', 'Use minimum permitted value')
|
|
779
772
|
.withDescription('The maximum ambient temperature limit when in floor control mode'),
|
|
780
773
|
exposes.enum('floor_temperature_sensor', ea.ALL, ['10k', '12k'])
|
|
@@ -786,9 +779,7 @@ module.exports = [
|
|
|
786
779
|
exposes.binary('pump_protection', ea.ALL, 'ON', 'OFF')
|
|
787
780
|
.withDescription('This function prevents the seizure of the pump'),
|
|
788
781
|
exposes.numeric('aux_connected_load', ea.ALL)
|
|
789
|
-
.withUnit('W')
|
|
790
|
-
.withValueMin(0)
|
|
791
|
-
.withValueMax(20000)
|
|
782
|
+
.withUnit('W').withValueMin(0).withValueMax(20000)
|
|
792
783
|
.withDescription('The power in watts of the heater connected to the auxiliary output of the thermostat'),
|
|
793
784
|
],
|
|
794
785
|
|
|
@@ -929,18 +920,16 @@ module.exports = [
|
|
|
929
920
|
description: 'Zigbee smart plug',
|
|
930
921
|
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering],
|
|
931
922
|
toZigbee: [tz.on_off, tz.frequency],
|
|
932
|
-
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()
|
|
923
|
+
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()],
|
|
933
924
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
934
925
|
const endpoint = device.getEndpoint(1);
|
|
935
926
|
const binds = ['genBasic', 'genIdentify', 'genOnOff', 'haElectricalMeasurement', 'seMetering'];
|
|
936
927
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
937
|
-
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint
|
|
928
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
938
929
|
await reporting.onOff(endpoint);
|
|
939
930
|
await reporting.activePower(endpoint, {min: 10, max: 305, change: 1}); // divider 10 : 0.1W
|
|
940
931
|
await reporting.rmsCurrent(endpoint, {min: 10, max: 306, change: 10}); // divider 100: 0.1Arms
|
|
941
932
|
await reporting.rmsVoltage(endpoint, {min: 10, max: 307, change: 10}); // divider 100: 0.1Vrms
|
|
942
|
-
await reporting.acFrequency(endpoint, {min: 10, max: 308, change: 100}); // divider 100: 1Hz
|
|
943
|
-
await endpoint.read('haElectricalMeasurement', ['acFrequency']); // get a first read
|
|
944
933
|
await reporting.currentSummDelivered(endpoint, {min: 10, max: 303, change: [1, 1]});
|
|
945
934
|
},
|
|
946
935
|
},
|
|
@@ -951,18 +940,16 @@ module.exports = [
|
|
|
951
940
|
description: 'Zigbee smart plug',
|
|
952
941
|
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering],
|
|
953
942
|
toZigbee: [tz.on_off, tz.frequency],
|
|
954
|
-
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()
|
|
943
|
+
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()],
|
|
955
944
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
956
945
|
const endpoint = device.getEndpoint(1);
|
|
957
946
|
const binds = ['genBasic', 'genIdentify', 'genOnOff', 'haElectricalMeasurement', 'seMetering'];
|
|
958
947
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
959
|
-
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint
|
|
948
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
960
949
|
await reporting.onOff(endpoint);
|
|
961
950
|
await reporting.activePower(endpoint, {min: 10, max: 305, change: 1}); // divider 10 : 0.1W
|
|
962
951
|
await reporting.rmsCurrent(endpoint, {min: 10, max: 306, change: 10}); // divider 100: 0.1Arms
|
|
963
952
|
await reporting.rmsVoltage(endpoint, {min: 10, max: 307, change: 10}); // divider 100: 0.1Vrms
|
|
964
|
-
await reporting.acFrequency(endpoint, {min: 10, max: 308, change: 100}); // divider 100: 1Hz
|
|
965
|
-
await endpoint.read('haElectricalMeasurement', ['acFrequency']); // get a first read
|
|
966
953
|
await reporting.currentSummDelivered(endpoint, {min: 10, max: 303, change: [1, 1]});
|
|
967
954
|
},
|
|
968
955
|
},
|
package/devices/sonoff.js
CHANGED
|
@@ -116,8 +116,8 @@ module.exports = [
|
|
|
116
116
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
117
117
|
const endpoint = device.getEndpoint(1);
|
|
118
118
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
119
|
-
await reporting.batteryVoltage(endpoint);
|
|
120
|
-
await reporting.batteryPercentageRemaining(endpoint);
|
|
119
|
+
await reporting.batteryVoltage(endpoint, {min: 3600, max: 7200});
|
|
120
|
+
await reporting.batteryPercentageRemaining(endpoint, {min: 3600, max: 7200});
|
|
121
121
|
},
|
|
122
122
|
},
|
|
123
123
|
{
|
|
@@ -132,8 +132,8 @@ module.exports = [
|
|
|
132
132
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
133
133
|
const endpoint = device.getEndpoint(1);
|
|
134
134
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
|
|
135
|
-
await reporting.batteryVoltage(endpoint);
|
|
136
|
-
await reporting.batteryPercentageRemaining(endpoint);
|
|
135
|
+
await reporting.batteryVoltage(endpoint, {min: 3600, max: 7200});
|
|
136
|
+
await reporting.batteryPercentageRemaining(endpoint, {min: 3600, max: 7200});
|
|
137
137
|
},
|
|
138
138
|
},
|
|
139
139
|
{
|
|
@@ -165,8 +165,8 @@ module.exports = [
|
|
|
165
165
|
await reporting.bind(endpoint, coordinatorEndpoint, bindClusters);
|
|
166
166
|
await reporting.temperature(endpoint, {min: 5, max: constants.repInterval.MINUTES_30, change: 20});
|
|
167
167
|
await reporting.humidity(endpoint);
|
|
168
|
-
await reporting.batteryVoltage(endpoint);
|
|
169
|
-
await reporting.batteryPercentageRemaining(endpoint);
|
|
168
|
+
await reporting.batteryVoltage(endpoint, {min: 3600, max: 7200});
|
|
169
|
+
await reporting.batteryPercentageRemaining(endpoint, {min: 3600, max: 7200});
|
|
170
170
|
} catch (e) {/* Not required for all: https://github.com/Koenkk/zigbee2mqtt/issues/5562 */
|
|
171
171
|
logger.error(`Configure failed: ${e}`);
|
|
172
172
|
}
|
package/devices/sunricher.js
CHANGED
|
@@ -359,6 +359,8 @@ module.exports = [
|
|
|
359
359
|
{
|
|
360
360
|
fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x000000005d5.....$/},
|
|
361
361
|
{modelID: 'GreenPower_2', ieeeAddr: /^0x0000000057e.....$/},
|
|
362
|
+
{modelID: 'GreenPower_2', ieeeAddr: /^0x000000001fa.....$/},
|
|
363
|
+
{modelID: 'GreenPower_2', ieeeAddr: /^0x0000000034b.....$/},
|
|
362
364
|
{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000f12.....$/}],
|
|
363
365
|
model: 'SR-ZGP2801K4-DIM',
|
|
364
366
|
vendor: 'Sunricher',
|
package/devices/tuya.js
CHANGED
|
@@ -1253,10 +1253,10 @@ module.exports = [
|
|
|
1253
1253
|
fromZigbee: [tuya.fz.datapoints],
|
|
1254
1254
|
toZigbee: [tuya.tz.datapoints],
|
|
1255
1255
|
configure: tuya.configureMagicPacket,
|
|
1256
|
-
exposes: [e.temperature(), e.
|
|
1256
|
+
exposes: [e.temperature(), e.soil_moisture(), tuya.exposes.temperatureUnit(), e.battery(), tuya.exposes.batteryState()],
|
|
1257
1257
|
meta: {
|
|
1258
1258
|
tuyaDatapoints: [
|
|
1259
|
-
[3, '
|
|
1259
|
+
[3, 'soil_moisture', tuya.valueConverter.raw],
|
|
1260
1260
|
[5, 'temperature', tuya.valueConverter.raw],
|
|
1261
1261
|
[9, 'temperature_unit', tuya.valueConverter.temperatureUnit],
|
|
1262
1262
|
[14, 'battery_state', tuya.valueConverter.batteryState],
|
|
@@ -1881,6 +1881,30 @@ module.exports = [
|
|
|
1881
1881
|
exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.energy(), tuya.exposes.switchType(),
|
|
1882
1882
|
exposes.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore']).withDescription('Recover state after power outage')],
|
|
1883
1883
|
},
|
|
1884
|
+
{
|
|
1885
|
+
fingerprint: [{modelID: 'TS0002', manufacturerName: '_TZ3000_irrmjcgi'}],
|
|
1886
|
+
model: 'TS0002_power',
|
|
1887
|
+
vendor: 'TuYa',
|
|
1888
|
+
description: '2 gang switch with power monitoring',
|
|
1889
|
+
extend: tuya.extend.switch({switchType: true, endpoints: ['l1', 'l2'], electricalMeasurements: true}),
|
|
1890
|
+
endpoint: (device) => {
|
|
1891
|
+
return {'l1': 1, 'l2': 2};
|
|
1892
|
+
},
|
|
1893
|
+
meta: {multiEndpoint: true, multiEndpointSkip: ['energy', 'current', 'voltage', 'power']},
|
|
1894
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1895
|
+
const endpoint = device.getEndpoint(1);
|
|
1896
|
+
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
1897
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
|
|
1898
|
+
await reporting.rmsVoltage(endpoint, {change: 5});
|
|
1899
|
+
await reporting.rmsCurrent(endpoint, {change: 50});
|
|
1900
|
+
await reporting.activePower(endpoint, {change: 10});
|
|
1901
|
+
await reporting.currentSummDelivered(endpoint);
|
|
1902
|
+
endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
|
|
1903
|
+
endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
|
|
1904
|
+
device.save();
|
|
1905
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
1906
|
+
},
|
|
1907
|
+
},
|
|
1884
1908
|
{
|
|
1885
1909
|
fingerprint: tuya.fingerprint('TS000F', ['_TZ3000_xkap8wtb']),
|
|
1886
1910
|
model: 'TS000F_power',
|
|
@@ -1935,7 +1959,7 @@ module.exports = [
|
|
|
1935
1959
|
},
|
|
1936
1960
|
},
|
|
1937
1961
|
{
|
|
1938
|
-
fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_tqlv4ug4'}],
|
|
1962
|
+
fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_tqlv4ug4'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_gjrubzje'}],
|
|
1939
1963
|
model: 'TS0001_switch_module',
|
|
1940
1964
|
vendor: 'TuYa',
|
|
1941
1965
|
description: '1 gang switch module',
|
|
@@ -3493,7 +3517,7 @@ module.exports = [
|
|
|
3493
3517
|
exposes: [e.contact(), e.battery(), e.vibration()],
|
|
3494
3518
|
},
|
|
3495
3519
|
{
|
|
3496
|
-
fingerprint: [{modelID: `TS0601`, manufacturerName: `_TZE200_yi4jtqq1`}],
|
|
3520
|
+
fingerprint: [{modelID: `TS0601`, manufacturerName: `_TZE200_yi4jtqq1`}, {modelID: `TS0601`, manufacturerName: `_TZE200_khx7nnka`}],
|
|
3497
3521
|
model: `XFY-CGQ-ZIGB`,
|
|
3498
3522
|
vendor: `TuYa`,
|
|
3499
3523
|
description: `Illuminance sensor`,
|
|
@@ -3769,7 +3793,6 @@ module.exports = [
|
|
|
3769
3793
|
.fromZigbee.concat([tuya.fz.power_on_behavior, fzLocal.TS110E_switch_type, fzLocal.TS110E]),
|
|
3770
3794
|
toZigbee: extend.light_onoff_brightness({disablePowerOnBehavior: true, disableMoveStep: true, disableTransition: true})
|
|
3771
3795
|
.toZigbee.concat([tuya.tz.power_on_behavior, tzLocal.TS110E_options]),
|
|
3772
|
-
meta: {multiEndpoint: true},
|
|
3773
3796
|
exposes: [e.light_brightness(), e.power_on_behavior(), tuya.exposes.switchType()],
|
|
3774
3797
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
3775
3798
|
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
package/devices/ubisys.js
CHANGED
|
@@ -86,7 +86,7 @@ const ubisys = {
|
|
|
86
86
|
cluster: 'manuSpecificUbisysDeviceSetup',
|
|
87
87
|
type: ['attributeReport', 'readResponse'],
|
|
88
88
|
convert: (model, msg, publish, options, meta) => {
|
|
89
|
-
const result = {};
|
|
89
|
+
const result = meta.state.hasOwnProperty('configure_device_setup') ? meta.state.configure_device_setup : {};
|
|
90
90
|
if (msg.data['inputConfigurations'] != null) {
|
|
91
91
|
result['input_configurations'] = msg.data['inputConfigurations'];
|
|
92
92
|
}
|
|
@@ -501,7 +501,7 @@ const ubisys = {
|
|
|
501
501
|
endpoint += 1;
|
|
502
502
|
}
|
|
503
503
|
|
|
504
|
-
meta.logger.debug(`ubisys: input_actions to be sent to '${meta.options.
|
|
504
|
+
meta.logger.debug(`ubisys: input_actions to be sent to '${meta.options.friendly_name}': ` +
|
|
505
505
|
JSON.stringify(resultingInputActions));
|
|
506
506
|
await devMgmtEp.write(
|
|
507
507
|
'manuSpecificUbisysDeviceSetup',
|
|
@@ -511,12 +511,14 @@ const ubisys = {
|
|
|
511
511
|
}
|
|
512
512
|
|
|
513
513
|
// re-read effective settings and dump them to the log
|
|
514
|
-
ubisys.tz.configure_device_setup.convertGet(entity, key, meta);
|
|
514
|
+
await ubisys.tz.configure_device_setup.convertGet(entity, key, meta);
|
|
515
515
|
},
|
|
516
516
|
|
|
517
517
|
convertGet: async (entity, key, meta) => {
|
|
518
518
|
const devMgmtEp = meta.device.getEndpoint(232);
|
|
519
|
-
await devMgmtEp.read('manuSpecificUbisysDeviceSetup', ['inputConfigurations'
|
|
519
|
+
await devMgmtEp.read('manuSpecificUbisysDeviceSetup', ['inputConfigurations'],
|
|
520
|
+
manufacturerOptions.ubisysNull);
|
|
521
|
+
await devMgmtEp.read('manuSpecificUbisysDeviceSetup', ['inputActions'],
|
|
520
522
|
manufacturerOptions.ubisysNull);
|
|
521
523
|
},
|
|
522
524
|
},
|
package/lib/reporting.js
CHANGED
|
@@ -202,6 +202,10 @@ module.exports = {
|
|
|
202
202
|
const p = payload('activePower', 5, repInterval.HOUR, 1, overrides);
|
|
203
203
|
await endpoint.configureReporting('haElectricalMeasurement', p);
|
|
204
204
|
},
|
|
205
|
+
apparentPower: async (endpoint, overrides) => {
|
|
206
|
+
const p = payload('apparentPower', 5, repInterval.HOUR, 1, overrides);
|
|
207
|
+
await endpoint.configureReporting('haElectricalMeasurement', p);
|
|
208
|
+
},
|
|
205
209
|
rmsCurrent: async (endpoint, overrides) => {
|
|
206
210
|
const p = payload('rmsCurrent', 5, repInterval.HOUR, 1, overrides);
|
|
207
211
|
await endpoint.configureReporting('haElectricalMeasurement', p);
|