zigbee-herdsman-converters 14.0.636 → 14.0.638
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/toZigbee.js +6 -0
- package/devices/candeo.js +25 -0
- package/devices/develco.js +15 -12
- package/devices/moes.js +2 -2
- package/devices/nyce.js +0 -1
- package/devices/philips.js +1 -1
- package/devices/tuya.js +22 -4
- package/devices/ynoa.js +7 -0
- package/lib/exposes.js +2 -1
- package/lib/tuya.js +7 -6
- package/lib/utils.js +5 -3
- package/package.json +1 -1
package/converters/toZigbee.js
CHANGED
|
@@ -3327,6 +3327,12 @@ const converters = {
|
|
|
3327
3327
|
await tuya.sendDataPointValue(entity, tuya.dataPoints.moesTempCalibration, value);
|
|
3328
3328
|
},
|
|
3329
3329
|
},
|
|
3330
|
+
moes_thermostat_min_temperature_limit: {
|
|
3331
|
+
key: ['min_temperature_limit'],
|
|
3332
|
+
convertSet: async (entity, key, value, meta) => {
|
|
3333
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.moesMinTempLimit, value);
|
|
3334
|
+
},
|
|
3335
|
+
},
|
|
3330
3336
|
moes_thermostat_max_temperature_limit: {
|
|
3331
3337
|
key: ['max_temperature_limit'],
|
|
3332
3338
|
convertSet: async (entity, key, value, meta) => {
|
package/devices/candeo.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
1
3
|
const reporting = require('../lib/reporting');
|
|
2
4
|
const extend = require('../lib/extend');
|
|
5
|
+
const e = exposes.presets;
|
|
3
6
|
|
|
4
7
|
module.exports = [
|
|
5
8
|
{
|
|
@@ -21,4 +24,26 @@ module.exports = [
|
|
|
21
24
|
await reporting.brightness(endpoint, {min: 1});
|
|
22
25
|
},
|
|
23
26
|
},
|
|
27
|
+
{
|
|
28
|
+
zigbeeModel: ['C204'],
|
|
29
|
+
model: 'C204',
|
|
30
|
+
vendor: 'Candeo',
|
|
31
|
+
description: 'Zigbee micro smart dimmer',
|
|
32
|
+
fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([fz.electrical_measurement, fz.metering, fz.ignore_genOta]),
|
|
33
|
+
toZigbee: extend.light_onoff_brightness().toZigbee,
|
|
34
|
+
exposes: [e.light_brightness(), e.power(), e.voltage(), e.current(), e.energy()],
|
|
35
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
36
|
+
const endpoint = device.getEndpoint(1);
|
|
37
|
+
const binds = ['genOnOff', 'genLevelCtrl', 'haElectricalMeasurement', 'seMetering'];
|
|
38
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
39
|
+
await reporting.onOff(endpoint);
|
|
40
|
+
await reporting.brightness(endpoint);
|
|
41
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
42
|
+
await reporting.activePower(endpoint);
|
|
43
|
+
await reporting.rmsCurrent(endpoint, {min: 10, change: 10});
|
|
44
|
+
await reporting.rmsVoltage(endpoint, {min: 10});
|
|
45
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
46
|
+
await reporting.currentSummDelivered(endpoint);
|
|
47
|
+
},
|
|
48
|
+
},
|
|
24
49
|
];
|
package/devices/develco.js
CHANGED
|
@@ -516,20 +516,23 @@ module.exports = [
|
|
|
516
516
|
return {default: 35};
|
|
517
517
|
},
|
|
518
518
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
519
|
-
const
|
|
520
|
-
await reporting.bind(
|
|
521
|
-
await reporting.batteryVoltage(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
519
|
+
const endpoint35 = device.getEndpoint(35);
|
|
520
|
+
await reporting.bind(endpoint35, coordinatorEndpoint, ['genPowerCfg']);
|
|
521
|
+
await reporting.batteryVoltage(endpoint35, {min: constants.repInterval.HOUR, max: 43200, change: 100});
|
|
522
|
+
try {
|
|
523
|
+
await endpoint35.read('ssIasZone', ['develcoAlarmOffDelay'], manufacturerOptions);
|
|
524
|
+
await endpoint35.read('genBasic', ['develcoLedControl'], manufacturerOptions);
|
|
525
|
+
} catch (error) {/* some reports of timeouts on reading these */}
|
|
525
526
|
|
|
526
|
-
const
|
|
527
|
-
await reporting.bind(
|
|
528
|
-
await reporting.temperature(
|
|
527
|
+
const endpoint38 = device.getEndpoint(38);
|
|
528
|
+
await reporting.bind(endpoint38, coordinatorEndpoint, ['msTemperatureMeasurement']);
|
|
529
|
+
await reporting.temperature(endpoint38,
|
|
530
|
+
{min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 100});
|
|
529
531
|
|
|
530
|
-
const
|
|
531
|
-
await reporting.bind(
|
|
532
|
-
await reporting.illuminance(
|
|
532
|
+
const endpoint39 = device.getEndpoint(39);
|
|
533
|
+
await reporting.bind(endpoint39, coordinatorEndpoint, ['msIlluminanceMeasurement']);
|
|
534
|
+
await reporting.illuminance(endpoint39,
|
|
535
|
+
{min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 500});
|
|
533
536
|
},
|
|
534
537
|
},
|
|
535
538
|
{
|
package/devices/moes.js
CHANGED
|
@@ -181,8 +181,8 @@ module.exports = [
|
|
|
181
181
|
fromZigbee: [fz.moes_thermostat],
|
|
182
182
|
toZigbee: [tz.moes_thermostat_child_lock, tz.moes_thermostat_current_heating_setpoint, tz.moes_thermostat_mode,
|
|
183
183
|
tz.moes_thermostat_standby, tz.moes_thermostat_sensor, tz.moes_thermostat_calibration,
|
|
184
|
-
tz.moes_thermostat_deadzone_temperature, tz.moes_thermostat_max_temperature_limit],
|
|
185
|
-
exposes: [e.child_lock(), e.deadzone_temperature(), e.max_temperature_limit(),
|
|
184
|
+
tz.moes_thermostat_deadzone_temperature, tz.moes_thermostat_max_temperature_limit, tz.moes_thermostat_min_temperature_limit],
|
|
185
|
+
exposes: [e.child_lock(), e.deadzone_temperature(), e.max_temperature_limit(), e.min_temperature_limit(),
|
|
186
186
|
exposes.climate().withSetpoint('current_heating_setpoint', 5, 30, 1, ea.STATE_SET)
|
|
187
187
|
.withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
|
|
188
188
|
.withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat', 'cool'], ea.STATE)
|
package/devices/nyce.js
CHANGED
|
@@ -40,7 +40,6 @@ module.exports = [
|
|
|
40
40
|
fromZigbee: [fz.occupancy, fz.humidity, fz.temperature, fz.ignore_basic_report, fz.ignore_genIdentify, fz.ignore_poll_ctrl,
|
|
41
41
|
fz.battery, fz.ignore_iaszone_report, fz.ias_occupancy_alarm_2],
|
|
42
42
|
toZigbee: [],
|
|
43
|
-
meta: {battery: {dontDividePercentage: true}},
|
|
44
43
|
exposes: [e.occupancy(), e.humidity(), e.temperature(), e.battery(), e.battery_low(), e.tamper()],
|
|
45
44
|
},
|
|
46
45
|
{
|
package/devices/philips.js
CHANGED
|
@@ -687,7 +687,7 @@ module.exports = [
|
|
|
687
687
|
extend: hueExtend.light_onoff_brightness_colortemp_color(),
|
|
688
688
|
},
|
|
689
689
|
{
|
|
690
|
-
zigbeeModel: ['4090531P9', '929003053601'],
|
|
690
|
+
zigbeeModel: ['4090531P9', '929003053601', '929003053501'],
|
|
691
691
|
model: '4090531P9',
|
|
692
692
|
vendor: 'Philips',
|
|
693
693
|
description: 'Hue Flourish white and color ambiance ceiling light with Bluetooth',
|
package/devices/tuya.js
CHANGED
|
@@ -2229,6 +2229,23 @@ module.exports = [
|
|
|
2229
2229
|
.withDescription('Plug LED indicator mode'), e.child_lock()],
|
|
2230
2230
|
onEvent: tuya.onEventMeasurementPoll,
|
|
2231
2231
|
},
|
|
2232
|
+
{
|
|
2233
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ntcy3xu1']),
|
|
2234
|
+
model: 'TS0601_smoke_1',
|
|
2235
|
+
vendor: 'TuYa',
|
|
2236
|
+
description: 'Smoke sensor',
|
|
2237
|
+
fromZigbee: [tuya.fzDataPoints],
|
|
2238
|
+
toZigbee: [tuya.tzDataPoints],
|
|
2239
|
+
configure: tuya.configureMagicPacket,
|
|
2240
|
+
exposes: [e.smoke(), e.tamper(), e.battery_low()],
|
|
2241
|
+
meta: {
|
|
2242
|
+
tuyaDatapoints: [
|
|
2243
|
+
[1, 'smoke', tuya.valueConverter.true0ElseFalse],
|
|
2244
|
+
[4, 'tamper', tuya.valueConverter.raw],
|
|
2245
|
+
[14, 'battery_low', tuya.valueConverter.true0ElseFalse],
|
|
2246
|
+
],
|
|
2247
|
+
},
|
|
2248
|
+
},
|
|
2232
2249
|
{
|
|
2233
2250
|
zigbeeModel: ['5p1vj8r'],
|
|
2234
2251
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t5p1vj8r'}, {modelID: 'TS0601', manufacturerName: '_TZE200_uebojraa'}],
|
|
@@ -2240,7 +2257,7 @@ module.exports = [
|
|
|
2240
2257
|
exposes: [e.smoke(), e.battery()],
|
|
2241
2258
|
},
|
|
2242
2259
|
{
|
|
2243
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}
|
|
2260
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}],
|
|
2244
2261
|
model: 'SA12IZL',
|
|
2245
2262
|
vendor: 'TuYa',
|
|
2246
2263
|
description: 'Smart smoke alarm',
|
|
@@ -2255,7 +2272,7 @@ module.exports = [
|
|
|
2255
2272
|
onEvent: tuya.onEventsetTime,
|
|
2256
2273
|
},
|
|
2257
2274
|
{
|
|
2258
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lsanae15', '_TZE200_bkkmqmyo']),
|
|
2275
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lsanae15', '_TZE200_bkkmqmyo', '_TZE200_eaac7dkw']),
|
|
2259
2276
|
model: 'TS0601_din_1',
|
|
2260
2277
|
vendor: 'TuYa',
|
|
2261
2278
|
description: 'Zigbee DIN energy meter',
|
|
@@ -2266,9 +2283,9 @@ module.exports = [
|
|
|
2266
2283
|
meta: {
|
|
2267
2284
|
tuyaDatapoints: [
|
|
2268
2285
|
[1, 'energy', tuya.valueConverter.divideBy100],
|
|
2269
|
-
[6, null, tuya.
|
|
2286
|
+
[6, null, tuya.valueConverter.phaseA], // voltage and current
|
|
2270
2287
|
[16, 'state', tuya.valueConverter.onOff],
|
|
2271
|
-
[103, 'power', tuya.
|
|
2288
|
+
[103, 'power', tuya.valueConverter.raw],
|
|
2272
2289
|
[105, 'ac_frequency', tuya.valueConverter.divideBy100],
|
|
2273
2290
|
[111, 'power_factor', tuya.valueConverter.divideBy10],
|
|
2274
2291
|
// Ignored for now; we don't know what the values mean
|
|
@@ -3165,6 +3182,7 @@ module.exports = [
|
|
|
3165
3182
|
{
|
|
3166
3183
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
|
|
3167
3184
|
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
|
|
3185
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_jva8ink8'},
|
|
3168
3186
|
{modelID: 'TS0601', manufacturerName: '_TZE200_wukb7rhc'},
|
|
3169
3187
|
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
|
|
3170
3188
|
model: 'TS0601_smart_human_presense_sensor',
|
package/devices/ynoa.js
CHANGED
|
@@ -6,6 +6,13 @@ const e = exposes.presets;
|
|
|
6
6
|
const extend = require('..//lib/extend');
|
|
7
7
|
|
|
8
8
|
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['ZBT-CCTLight-GU100001'],
|
|
11
|
+
model: '8718801528273',
|
|
12
|
+
vendor: 'Ynoa',
|
|
13
|
+
description: 'Smart LED GU10 CCT',
|
|
14
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
15
|
+
},
|
|
9
16
|
{
|
|
10
17
|
zigbeeModel: ['ZBT-DIMSwitch-D0000'],
|
|
11
18
|
model: '8718801528334',
|
package/lib/exposes.js
CHANGED
|
@@ -588,7 +588,8 @@ module.exports = {
|
|
|
588
588
|
max_heat_setpoint_limit: (min, max, step) => new Numeric('max_heat_setpoint_limit', access.ALL).withUnit('°C').withDescription('Maximum Heating set point limit').withValueMin(min).withValueMax(max).withValueStep(step),
|
|
589
589
|
min_heat_setpoint_limit: (min, max, step) => new Numeric('min_heat_setpoint_limit', access.ALL).withUnit('°C').withDescription('Minimum Heating set point limit').withValueMin(min).withValueMax(max).withValueStep(step),
|
|
590
590
|
max_temperature: () => new Numeric('max_temperature', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature').withValueMin(15).withValueMax(35),
|
|
591
|
-
max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit').withValueMin(
|
|
591
|
+
max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit. Cuts the thermostat out regardless of air temperature if the external floor sensor exceeds this temperature. Only used by the thermostat when in AL sensor mode.').withValueMin(20).withValueMax(70),
|
|
592
|
+
min_temperature_limit: () => new Numeric('min_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature limit for frost protection. Turns the thermostat on regardless of setpoint if the tempreature drops below this.').withValueMin(1).withValueMax(5),
|
|
592
593
|
min_temperature: () => new Numeric('min_temperature', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature').withValueMin(1).withValueMax(15),
|
|
593
594
|
noise: () => new Numeric('noise', access.STATE).withUnit('dBA').withDescription('The measured noise value'),
|
|
594
595
|
noise_detected: () => new Binary('noise_detected', access.STATE, true, false).withDescription('Indicates whether the device detected noise'),
|
package/lib/tuya.js
CHANGED
|
@@ -446,6 +446,7 @@ const dataPoints = {
|
|
|
446
446
|
moesMaxTemp: 19,
|
|
447
447
|
moesDeadZoneTemp: 20,
|
|
448
448
|
moesLocalTemp: 24,
|
|
449
|
+
moesMinTempLimit: 26,
|
|
449
450
|
moesTempCalibration: 27,
|
|
450
451
|
moesValve: 36,
|
|
451
452
|
moesChildLock: 40,
|
|
@@ -1183,7 +1184,9 @@ const valueConverterBasic = {
|
|
|
1183
1184
|
scale: (min1, max1, min2, max2) => {
|
|
1184
1185
|
return {to: (v) => utils.mapNumberRange(v, min1, max1, min2, max2), from: (v) => utils.mapNumberRange(v, min2, max2, min1, max1)};
|
|
1185
1186
|
},
|
|
1186
|
-
raw:
|
|
1187
|
+
raw: () => {
|
|
1188
|
+
return {to: (v) => v, from: (v) => v};
|
|
1189
|
+
},
|
|
1187
1190
|
divideBy: (value) => {
|
|
1188
1191
|
return {to: (v) => v * value, from: (v) => v / value};
|
|
1189
1192
|
},
|
|
@@ -1199,15 +1202,14 @@ const valueConverter = {
|
|
|
1199
1202
|
scale0_1to0_1000: valueConverterBasic.scale(0, 1, 0, 1000),
|
|
1200
1203
|
divideBy100: valueConverterBasic.divideBy(100),
|
|
1201
1204
|
divideBy10: valueConverterBasic.divideBy(10),
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
const valueConverterMultiProperty = {
|
|
1205
|
+
raw: valueConverterBasic.raw(),
|
|
1205
1206
|
phaseA: {
|
|
1206
1207
|
from: (v) => {
|
|
1207
1208
|
const buffer = Buffer.from(v, 'base64');
|
|
1208
1209
|
return {voltage: (buffer[14] | buffer[13] << 8) / 10, current: (buffer[12] | buffer[11] << 8) / 1000};
|
|
1209
1210
|
},
|
|
1210
1211
|
},
|
|
1212
|
+
true0ElseFalse: {from: (v) => v === 0},
|
|
1211
1213
|
};
|
|
1212
1214
|
|
|
1213
1215
|
const tzDataPoints = {
|
|
@@ -1270,9 +1272,8 @@ module.exports = {
|
|
|
1270
1272
|
skip,
|
|
1271
1273
|
configureMagicPacket,
|
|
1272
1274
|
fingerprint,
|
|
1273
|
-
valueConverterMultiProperty,
|
|
1274
|
-
valueConverterBasic,
|
|
1275
1275
|
valueConverter,
|
|
1276
|
+
valueConverterBasic,
|
|
1276
1277
|
tzDataPoints,
|
|
1277
1278
|
fzDataPoints,
|
|
1278
1279
|
sendDataPoint,
|
package/lib/utils.js
CHANGED
|
@@ -121,10 +121,12 @@ function postfixWithEndpointName(value, msg, definition, meta) {
|
|
|
121
121
|
if (definition.meta && definition.meta.multiEndpoint) {
|
|
122
122
|
const endpointName = definition.hasOwnProperty('endpoint') ?
|
|
123
123
|
getKey(definition.endpoint(meta.device), msg.endpoint.ID) : msg.endpoint.ID;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
|
|
125
|
+
// NOTE: endpointName can be undefined if we have a definition.endpoint and the endpoint is
|
|
126
|
+
// not listed.
|
|
127
|
+
if (endpointName) return `${value}_${endpointName}`;
|
|
127
128
|
}
|
|
129
|
+
return value;
|
|
128
130
|
}
|
|
129
131
|
|
|
130
132
|
function getKey(object, value, fallback, convertTo) {
|