zigbee-herdsman-converters 14.0.682 → 14.0.684
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 -39
- package/converters/toZigbee.js +4 -180
- package/devices/ecodim.js +2 -0
- package/devices/ewelink.js +15 -0
- package/devices/gledopto.js +1 -0
- package/devices/immax.js +19 -1
- package/devices/iris.js +16 -0
- package/devices/philips.js +24 -3
- package/devices/saswell.js +4 -1
- package/devices/schneider_electric.js +1 -1
- package/devices/sinope.js +548 -91
- package/devices/siterwell.js +6 -4
- package/devices/smartthings.js +1 -2
- package/devices/third_reality.js +7 -2
- package/devices/tuya.js +141 -10
- package/devices/xiaomi.js +18 -0
- package/lib/legacy.js +15 -15
- package/lib/ota/common.js +3 -0
- package/lib/tuya.js +27 -3
- package/package.json +2 -2
package/converters/fromZigbee.js
CHANGED
|
@@ -184,6 +184,10 @@ const converters = {
|
|
|
184
184
|
result.keypad_lockout = constants.keypadLockoutMode.hasOwnProperty(msg.data['keypadLockout']) ?
|
|
185
185
|
constants.keypadLockoutMode[msg.data['keypadLockout']] : msg.data['keypadLockout'];
|
|
186
186
|
}
|
|
187
|
+
if (msg.data.hasOwnProperty('tempDisplayMode')) {
|
|
188
|
+
result.temperature_display_mode = constants.temperatureDisplayMode.hasOwnProperty(msg.data['tempDisplayMode']) ?
|
|
189
|
+
constants.temperatureDisplayMode[msg.data['tempDisplayMode']] : msg.data['tempDisplayMode'];
|
|
190
|
+
}
|
|
187
191
|
return result;
|
|
188
192
|
},
|
|
189
193
|
},
|
|
@@ -2805,6 +2809,8 @@ const converters = {
|
|
|
2805
2809
|
buttonMapping = {1: '1', 2: '2', 3: '3'};
|
|
2806
2810
|
} else if (['TS0044', 'YSR-MINI-Z', 'TS004F'].includes(model.model)) {
|
|
2807
2811
|
buttonMapping = {1: '1', 2: '2', 3: '3', 4: '4'};
|
|
2812
|
+
} else if (['TS0046'].includes(model.model)) {
|
|
2813
|
+
buttonMapping = {1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6'};
|
|
2808
2814
|
}
|
|
2809
2815
|
const button = buttonMapping ? `${buttonMapping[msg.endpoint.ID]}_` : '';
|
|
2810
2816
|
// Since it is a non standard ZCL command, no default response is send from zigbee-herdsman
|
|
@@ -3416,45 +3422,6 @@ const converters = {
|
|
|
3416
3422
|
return result;
|
|
3417
3423
|
},
|
|
3418
3424
|
},
|
|
3419
|
-
sinope_TH1300ZB_specific: {
|
|
3420
|
-
cluster: 'manuSpecificSinope',
|
|
3421
|
-
type: ['attributeReport', 'readResponse'],
|
|
3422
|
-
convert: (model, msg, publish, options, meta) => {
|
|
3423
|
-
const lookup = {0: 'off', 1: 'on'};
|
|
3424
|
-
const result = {};
|
|
3425
|
-
if (msg.data.hasOwnProperty('GFCiStatus')) {
|
|
3426
|
-
result.gfci_status = lookup[msg.data['GFCiStatus']];
|
|
3427
|
-
}
|
|
3428
|
-
if (msg.data.hasOwnProperty('floorLimitStatus')) {
|
|
3429
|
-
result.floor_limit_status = lookup[msg.data['floorLimitStatus']];
|
|
3430
|
-
}
|
|
3431
|
-
return result;
|
|
3432
|
-
},
|
|
3433
|
-
},
|
|
3434
|
-
sinope_thermostat: {
|
|
3435
|
-
cluster: 'hvacThermostat',
|
|
3436
|
-
type: ['readResponse'],
|
|
3437
|
-
convert: (model, msg, publish, options, meta) => {
|
|
3438
|
-
const result = {};
|
|
3439
|
-
const cycleOutputLookup = {15: '15_sec', 300: '5_min', 600: '10_min',
|
|
3440
|
-
900: '15_min', 1200: '20_min', 1800: '30_min', 65535: 'off'};
|
|
3441
|
-
if (msg.data.hasOwnProperty('1024')) {
|
|
3442
|
-
const lookup = {0: 'unoccupied', 1: 'occupied'};
|
|
3443
|
-
result.thermostat_occupancy = lookup[msg.data['1024']];
|
|
3444
|
-
}
|
|
3445
|
-
if (msg.data.hasOwnProperty('1025')) {
|
|
3446
|
-
result.main_cycle_output = cycleOutputLookup[msg.data['1025']];
|
|
3447
|
-
}
|
|
3448
|
-
if (msg.data.hasOwnProperty('1026')) {
|
|
3449
|
-
const lookup = {0: 'on_demand', 1: 'sensing'};
|
|
3450
|
-
result.backlight_auto_dim = lookup[msg.data['1026']];
|
|
3451
|
-
}
|
|
3452
|
-
if (msg.data.hasOwnProperty('1028')) {
|
|
3453
|
-
result.aux_cycle_output = cycleOutputLookup[msg.data['1028']];
|
|
3454
|
-
}
|
|
3455
|
-
return result;
|
|
3456
|
-
},
|
|
3457
|
-
},
|
|
3458
3425
|
danfoss_thermostat: {
|
|
3459
3426
|
cluster: 'hvacThermostat',
|
|
3460
3427
|
type: ['attributeReport', 'readResponse'],
|
package/converters/toZigbee.js
CHANGED
|
@@ -1247,6 +1247,10 @@ const converters = {
|
|
|
1247
1247
|
convertSet: async (entity, key, value, meta) => {
|
|
1248
1248
|
const tempDisplayMode = utils.getKey(constants.temperatureDisplayMode, value, value, Number);
|
|
1249
1249
|
await entity.write('hvacUserInterfaceCfg', {tempDisplayMode});
|
|
1250
|
+
return {readAfterWriteTime: 250, state: {temperature_display_mode: value}};
|
|
1251
|
+
},
|
|
1252
|
+
convertGet: async (entity, key, meta) => {
|
|
1253
|
+
await entity.read('hvacUserInterfaceCfg', ['tempDisplayMode']);
|
|
1250
1254
|
},
|
|
1251
1255
|
},
|
|
1252
1256
|
thermostat_keypad_lockout: {
|
|
@@ -4252,186 +4256,6 @@ const converters = {
|
|
|
4252
4256
|
await entity.read('hvacThermostat', [0x4000], manufacturerOptions.eurotronic);
|
|
4253
4257
|
},
|
|
4254
4258
|
},
|
|
4255
|
-
sinope_thermostat_occupancy: {
|
|
4256
|
-
key: ['thermostat_occupancy'],
|
|
4257
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4258
|
-
const sinopeOccupancy = {0: 'unoccupied', 1: 'occupied'};
|
|
4259
|
-
const SinopeOccupancy = utils.getKey(sinopeOccupancy, value, value, Number);
|
|
4260
|
-
await entity.write('hvacThermostat', {SinopeOccupancy});
|
|
4261
|
-
return {state: {'thermostat_occupancy': value}};
|
|
4262
|
-
},
|
|
4263
|
-
convertGet: async (entity, key, meta) => {
|
|
4264
|
-
await entity.read('hvacThermostat', ['SinopeOccupancy']);
|
|
4265
|
-
},
|
|
4266
|
-
},
|
|
4267
|
-
sinope_thermostat_backlight_autodim_param: {
|
|
4268
|
-
key: ['backlight_auto_dim'],
|
|
4269
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4270
|
-
const sinopeBacklightParam = {0: 'on_demand', 1: 'sensing'};
|
|
4271
|
-
const SinopeBacklight = utils.getKey(sinopeBacklightParam, value, value, Number);
|
|
4272
|
-
await entity.write('hvacThermostat', {SinopeBacklight});
|
|
4273
|
-
return {state: {'backlight_auto_dim': value}};
|
|
4274
|
-
},
|
|
4275
|
-
convertGet: async (entity, key, meta) => {
|
|
4276
|
-
await entity.read('hvacThermostat', ['SinopeBacklight']);
|
|
4277
|
-
},
|
|
4278
|
-
},
|
|
4279
|
-
sinope_thermostat_enable_outdoor_temperature: {
|
|
4280
|
-
key: ['enable_outdoor_temperature'],
|
|
4281
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4282
|
-
if (value.toLowerCase() == 'on') {
|
|
4283
|
-
await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: 10800});
|
|
4284
|
-
} else if (value.toLowerCase() == 'off') {
|
|
4285
|
-
// set timer to 30sec in order to disable outdoor temperature
|
|
4286
|
-
await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: 30});
|
|
4287
|
-
}
|
|
4288
|
-
},
|
|
4289
|
-
},
|
|
4290
|
-
sinope_thermostat_outdoor_temperature: {
|
|
4291
|
-
key: ['thermostat_outdoor_temperature'],
|
|
4292
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4293
|
-
if (value > -100 && value < 100) {
|
|
4294
|
-
await entity.write('manuSpecificSinope', {outdoorTempToDisplay: value * 100});
|
|
4295
|
-
}
|
|
4296
|
-
},
|
|
4297
|
-
},
|
|
4298
|
-
sinope_thermostat_time: {
|
|
4299
|
-
key: ['thermostat_time'],
|
|
4300
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4301
|
-
if (value === '') {
|
|
4302
|
-
const thermostatDate = new Date();
|
|
4303
|
-
const thermostatTimeSec = thermostatDate.getTime() / 1000;
|
|
4304
|
-
const thermostatTimezoneOffsetSec = thermostatDate.getTimezoneOffset() * 60;
|
|
4305
|
-
const currentTimeToDisplay = Math.round(thermostatTimeSec - thermostatTimezoneOffsetSec - 946684800);
|
|
4306
|
-
await entity.write('manuSpecificSinope', {currentTimeToDisplay});
|
|
4307
|
-
} else if (value !== '') {
|
|
4308
|
-
await entity.write('manuSpecificSinope', {currentTimeToDisplay: value});
|
|
4309
|
-
}
|
|
4310
|
-
},
|
|
4311
|
-
},
|
|
4312
|
-
sinope_floor_control_mode: {
|
|
4313
|
-
// TH1300ZB specific
|
|
4314
|
-
key: ['floor_control_mode'],
|
|
4315
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4316
|
-
if (typeof value !== 'string') {
|
|
4317
|
-
return;
|
|
4318
|
-
}
|
|
4319
|
-
const lookup = {'ambiant': 1, 'floor': 2};
|
|
4320
|
-
value = value.toLowerCase();
|
|
4321
|
-
if (lookup.hasOwnProperty(value)) {
|
|
4322
|
-
await entity.write('manuSpecificSinope', {floorControlMode: lookup[value]});
|
|
4323
|
-
}
|
|
4324
|
-
},
|
|
4325
|
-
},
|
|
4326
|
-
sinope_ambiant_max_heat_setpoint: {
|
|
4327
|
-
// TH1300ZB specific
|
|
4328
|
-
key: ['ambiant_max_heat_setpoint'],
|
|
4329
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4330
|
-
if (value >= 5 && value <= 36) {
|
|
4331
|
-
await entity.write('manuSpecificSinope', {ambiantMaxHeatSetpointLimit: value * 100});
|
|
4332
|
-
}
|
|
4333
|
-
},
|
|
4334
|
-
},
|
|
4335
|
-
sinope_floor_min_heat_setpoint: {
|
|
4336
|
-
// TH1300ZB specific
|
|
4337
|
-
key: ['floor_min_heat_setpoint'],
|
|
4338
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4339
|
-
if (value >= 5 && value <= 36) {
|
|
4340
|
-
await entity.write('manuSpecificSinope', {floorMinHeatSetpointLimit: value * 100});
|
|
4341
|
-
}
|
|
4342
|
-
},
|
|
4343
|
-
},
|
|
4344
|
-
sinope_floor_max_heat_setpoint: {
|
|
4345
|
-
// TH1300ZB specific
|
|
4346
|
-
key: ['floor_max_heat_setpoint'],
|
|
4347
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4348
|
-
if (value >= 5 && value <= 36) {
|
|
4349
|
-
await entity.write('manuSpecificSinope', {floorMaxHeatSetpointLimit: value * 100});
|
|
4350
|
-
}
|
|
4351
|
-
},
|
|
4352
|
-
},
|
|
4353
|
-
sinope_temperature_sensor: {
|
|
4354
|
-
// TH1300ZB specific
|
|
4355
|
-
key: ['floor_temperature_sensor'],
|
|
4356
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4357
|
-
if (typeof value !== 'string') {
|
|
4358
|
-
return;
|
|
4359
|
-
}
|
|
4360
|
-
const lookup = {'10k': 0, '12k': 1};
|
|
4361
|
-
value = value.toLowerCase();
|
|
4362
|
-
if (lookup.hasOwnProperty(value)) {
|
|
4363
|
-
await entity.write('manuSpecificSinope', {temperatureSensor: lookup[value]});
|
|
4364
|
-
}
|
|
4365
|
-
},
|
|
4366
|
-
convertGet: async (entity, key, meta) => {
|
|
4367
|
-
await entity.read('manuSpecificSinope', ['temperatureSensor']);
|
|
4368
|
-
},
|
|
4369
|
-
},
|
|
4370
|
-
sinope_time_format: {
|
|
4371
|
-
// TH1300ZB specific
|
|
4372
|
-
key: ['time_format'],
|
|
4373
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4374
|
-
if (typeof value !== 'string') {
|
|
4375
|
-
return;
|
|
4376
|
-
}
|
|
4377
|
-
const lookup = {'24h': 0, '12h': 1};
|
|
4378
|
-
value = value.toLowerCase();
|
|
4379
|
-
if (lookup.hasOwnProperty(value)) {
|
|
4380
|
-
await entity.write('manuSpecificSinope', {timeFormatToDisplay: lookup[value]});
|
|
4381
|
-
}
|
|
4382
|
-
},
|
|
4383
|
-
},
|
|
4384
|
-
sinope_led_intensity_on: {
|
|
4385
|
-
// DM2500ZB and SW2500ZB
|
|
4386
|
-
key: ['led_intensity_on'],
|
|
4387
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4388
|
-
if (value >= 0 && value <= 100) {
|
|
4389
|
-
await entity.write('manuSpecificSinope', {ledIntensityOn: value});
|
|
4390
|
-
}
|
|
4391
|
-
},
|
|
4392
|
-
},
|
|
4393
|
-
sinope_led_intensity_off: {
|
|
4394
|
-
// DM2500ZB and SW2500ZB
|
|
4395
|
-
key: ['led_intensity_off'],
|
|
4396
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4397
|
-
if (value >= 0 && value <= 100) {
|
|
4398
|
-
await entity.write('manuSpecificSinope', {ledIntensityOff: value});
|
|
4399
|
-
}
|
|
4400
|
-
},
|
|
4401
|
-
},
|
|
4402
|
-
sinope_led_color_on: {
|
|
4403
|
-
// DM2500ZB and SW2500ZB
|
|
4404
|
-
key: ['led_color_on'],
|
|
4405
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4406
|
-
const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
|
|
4407
|
-
const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
|
|
4408
|
-
const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
|
|
4409
|
-
|
|
4410
|
-
const valueHex = r + g * 256 + (b * 256 ** 2);
|
|
4411
|
-
await entity.write('manuSpecificSinope', {ledColorOn: valueHex});
|
|
4412
|
-
},
|
|
4413
|
-
},
|
|
4414
|
-
sinope_led_color_off: {
|
|
4415
|
-
// DM2500ZB and SW2500ZB
|
|
4416
|
-
key: ['led_color_off'],
|
|
4417
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4418
|
-
const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
|
|
4419
|
-
const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
|
|
4420
|
-
const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
|
|
4421
|
-
|
|
4422
|
-
const valueHex = r + g * 256 + b * 256 ** 2;
|
|
4423
|
-
await entity.write('manuSpecificSinope', {ledColorOff: valueHex});
|
|
4424
|
-
},
|
|
4425
|
-
},
|
|
4426
|
-
sinope_minimum_brightness: {
|
|
4427
|
-
// DM2500ZB
|
|
4428
|
-
key: ['minimum_brightness'],
|
|
4429
|
-
convertSet: async (entity, key, value, meta) => {
|
|
4430
|
-
if (value >= 0 && value <= 3000) {
|
|
4431
|
-
await entity.write('manuSpecificSinope', {minimumBrightness: value});
|
|
4432
|
-
}
|
|
4433
|
-
},
|
|
4434
|
-
},
|
|
4435
4259
|
stelpro_thermostat_outdoor_temperature: {
|
|
4436
4260
|
key: ['thermostat_outdoor_temperature'],
|
|
4437
4261
|
convertSet: async (entity, key, value, meta) => {
|
package/devices/ecodim.js
CHANGED
|
@@ -3,6 +3,7 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
|
|
|
3
3
|
const e = exposes.presets;
|
|
4
4
|
const reporting = require('../lib/reporting');
|
|
5
5
|
const extend = require('../lib/extend');
|
|
6
|
+
const ota = require('../lib/ota');
|
|
6
7
|
|
|
7
8
|
module.exports = [
|
|
8
9
|
{
|
|
@@ -48,6 +49,7 @@ module.exports = [
|
|
|
48
49
|
model: 'Eco-Dim.07/Eco-Dim.10',
|
|
49
50
|
vendor: 'EcoDim',
|
|
50
51
|
description: 'Zigbee & Z-wave dimmer',
|
|
52
|
+
ota: ota.zigbeeOTA,
|
|
51
53
|
extend: extend.light_onoff_brightness({noConfigure: true, disableEffect: true}),
|
|
52
54
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
53
55
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
package/devices/ewelink.js
CHANGED
|
@@ -35,6 +35,21 @@ module.exports = [
|
|
|
35
35
|
device.skipDefaultResponse = true;
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
|
+
{
|
|
39
|
+
zigbeeModel: ['SWITCH-ZR03-1'],
|
|
40
|
+
model: 'SWITCH-ZR03-1',
|
|
41
|
+
vendor: 'eWeLink',
|
|
42
|
+
description: 'Zigbee smart switch',
|
|
43
|
+
extend: extend.switch(),
|
|
44
|
+
fromZigbee: [fz.on_off_skip_duplicate_transaction],
|
|
45
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
46
|
+
const endpoint = device.getEndpoint(1);
|
|
47
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
48
|
+
},
|
|
49
|
+
onEvent: async (type, data, device) => {
|
|
50
|
+
device.skipDefaultResponse = true;
|
|
51
|
+
},
|
|
52
|
+
},
|
|
38
53
|
{
|
|
39
54
|
zigbeeModel: ['ZB-SW01'],
|
|
40
55
|
model: 'ZB-SW01',
|
package/devices/gledopto.js
CHANGED
|
@@ -335,6 +335,7 @@ module.exports = [
|
|
|
335
335
|
zigbeeModel: ['GL-S-006P'],
|
|
336
336
|
model: 'GL-S-006P',
|
|
337
337
|
vendor: 'Gledopto',
|
|
338
|
+
ota: ota.zigbeeOTA,
|
|
338
339
|
description: 'Zigbee GU10 LED lamp',
|
|
339
340
|
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [158, 495]}),
|
|
340
341
|
},
|
package/devices/immax.js
CHANGED
|
@@ -34,7 +34,7 @@ module.exports = [
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
zigbeeModel: ['IM-Z3.0-DIM'],
|
|
37
|
-
model: '07005B',
|
|
37
|
+
model: '07001L/07005B',
|
|
38
38
|
vendor: 'Immax',
|
|
39
39
|
description: 'Neo SMART LED E14 5W warm white, dimmable, Zigbee 3.0',
|
|
40
40
|
extend: extend.light_onoff_brightness(),
|
|
@@ -182,4 +182,22 @@ module.exports = [
|
|
|
182
182
|
// eslint-disable-next-line
|
|
183
183
|
exposes.enum('keep_time', ea.STATE_SET, ['0', '30', '60', '120', '240']).withDescription('PIR keep time in seconds')],
|
|
184
184
|
},
|
|
185
|
+
{
|
|
186
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_n9clpsht']),
|
|
187
|
+
model: '07505L',
|
|
188
|
+
vendor: 'Immax',
|
|
189
|
+
description: 'Neo smart keypad',
|
|
190
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
191
|
+
toZigbee: [],
|
|
192
|
+
exposes: [e.action(['disarm', 'arm_home', 'arm_away', 'sos']), e.tamper()],
|
|
193
|
+
meta: {
|
|
194
|
+
tuyaDatapoints: [
|
|
195
|
+
[24, 'tamper', tuya.valueConverter.trueFalse],
|
|
196
|
+
[26, 'action', tuya.valueConverter.static('disarm')],
|
|
197
|
+
[27, 'action', tuya.valueConverter.static('arm_away')],
|
|
198
|
+
[28, 'action', tuya.valueConverter.static('arm_home')],
|
|
199
|
+
[29, 'action', tuya.valueConverter.static('sos')],
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
185
203
|
];
|
package/devices/iris.js
CHANGED
|
@@ -177,4 +177,20 @@ module.exports = [
|
|
|
177
177
|
await reporting.batteryVoltage(endpoint);
|
|
178
178
|
},
|
|
179
179
|
},
|
|
180
|
+
{
|
|
181
|
+
zigbeeModel: ['3315-Geu'],
|
|
182
|
+
model: '3315-Geu',
|
|
183
|
+
vendor: 'Iris',
|
|
184
|
+
description: 'Water sensor',
|
|
185
|
+
fromZigbee: [fz.temperature, fz.ias_water_leak_alarm_1, fz.battery],
|
|
186
|
+
exposes: [e.temperature(), e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
|
|
187
|
+
toZigbee: [],
|
|
188
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
189
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
190
|
+
const endpoint = device.getEndpoint(1);
|
|
191
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
192
|
+
await reporting.temperature(endpoint);
|
|
193
|
+
await reporting.batteryVoltage(endpoint);
|
|
194
|
+
},
|
|
195
|
+
},
|
|
180
196
|
];
|
package/devices/philips.js
CHANGED
|
@@ -330,7 +330,7 @@ module.exports = [
|
|
|
330
330
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
|
-
zigbeeModel: ['929003046001'],
|
|
333
|
+
zigbeeModel: ['929003046001', '929003045801'],
|
|
334
334
|
model: '5309031P8',
|
|
335
335
|
vendor: 'Philips',
|
|
336
336
|
description: 'Hue White ambiance Runner spot white (1 spot)',
|
|
@@ -662,9 +662,16 @@ module.exports = [
|
|
|
662
662
|
zigbeeModel: ['1740193P0'],
|
|
663
663
|
model: '1740193P0',
|
|
664
664
|
vendor: 'Philips',
|
|
665
|
-
description: 'Hue Lucca wall light',
|
|
665
|
+
description: 'Hue White Lucca wall light',
|
|
666
666
|
extend: hueExtend.light_onoff_brightness(),
|
|
667
667
|
},
|
|
668
|
+
{
|
|
669
|
+
zigbeeModel: ['929003089301'],
|
|
670
|
+
model: '929003089301',
|
|
671
|
+
vendor: 'Philips',
|
|
672
|
+
description: 'Hue White and Color Ambiance Lucca wall light',
|
|
673
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
674
|
+
},
|
|
668
675
|
{
|
|
669
676
|
zigbeeModel: ['1740293P0'],
|
|
670
677
|
model: '1740293P0',
|
|
@@ -2372,7 +2379,7 @@ module.exports = [
|
|
|
2372
2379
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2373
2380
|
},
|
|
2374
2381
|
{
|
|
2375
|
-
zigbeeModel: ['5041131P9', '5041148P9'],
|
|
2382
|
+
zigbeeModel: ['5041131P9', '5041148P9', '929003047301'],
|
|
2376
2383
|
model: '5041131P9',
|
|
2377
2384
|
vendor: 'Philips',
|
|
2378
2385
|
description: 'Hue White ambiance Milliskin',
|
|
@@ -2955,4 +2962,18 @@ module.exports = [
|
|
|
2955
2962
|
...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).exposes],
|
|
2956
2963
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2957
2964
|
},
|
|
2965
|
+
{
|
|
2966
|
+
zigbeeModel: ['929003526301'],
|
|
2967
|
+
model: '929003526301',
|
|
2968
|
+
vendor: 'Philips',
|
|
2969
|
+
description: 'Hue White & Color Ambiance Xamento M',
|
|
2970
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2971
|
+
},
|
|
2972
|
+
{
|
|
2973
|
+
zigbeeModel: ['LWE008'],
|
|
2974
|
+
model: '929003021301',
|
|
2975
|
+
vendor: 'Philips',
|
|
2976
|
+
description: 'Hue White E17 470 lumen',
|
|
2977
|
+
extend: hueExtend.light_onoff_brightness(),
|
|
2978
|
+
},
|
|
2958
2979
|
];
|
package/devices/saswell.js
CHANGED
|
@@ -15,18 +15,21 @@ module.exports = [
|
|
|
15
15
|
{modelID: 'w7cahqs', manufacturerName: '_TYST11_yw7cahqs'},
|
|
16
16
|
{modelID: 'TS0601', manufacturerName: '_TZE200_c88teujp'},
|
|
17
17
|
{modelID: 'TS0601', manufacturerName: '_TZE200_yw7cahqs'},
|
|
18
|
+
{modelID: 'aj4jz0i\u0000', manufacturerName: '_TYST11_caj4jz0i'},
|
|
18
19
|
{modelID: 'TS0601', manufacturerName: '_TZE200_azqp6ssj'},
|
|
19
20
|
{modelID: 'TS0601', manufacturerName: '_TZE200_zuhszj9s'},
|
|
20
21
|
{modelID: 'TS0601', manufacturerName: '_TZE200_9gvruqf5'},
|
|
21
22
|
{modelID: 'TS0601', manufacturerName: '_TZE200_zr9c0day'},
|
|
22
23
|
{modelID: 'TS0601', manufacturerName: '_TZE200_0dvm9mva'},
|
|
23
24
|
{modelID: 'TS0601', manufacturerName: '_TZE200_h4cgnbzg'},
|
|
25
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_exfrnlow'},
|
|
26
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_9m4kmbfu'},
|
|
24
27
|
],
|
|
25
28
|
model: 'SEA801-Zigbee/SEA802-Zigbee',
|
|
26
29
|
vendor: 'Saswell',
|
|
27
30
|
description: 'Thermostatic radiator valve',
|
|
28
31
|
whiteLabel: [{vendor: 'HiHome', model: 'WZB-TRVL'}, {vendor: 'Hama', model: '00176592'},
|
|
29
|
-
{vendor: 'RTX', model: 'ZB-RT1'}],
|
|
32
|
+
{vendor: 'RTX', model: 'ZB-RT1'}, {vendor: 'SETTI+', model: 'TRV001'}],
|
|
30
33
|
fromZigbee: [fz.saswell_thermostat, fz.ignore_tuya_set_time, fz.ignore_basic_report, fz.legacy.tuya_thermostat_weekly_schedule],
|
|
31
34
|
toZigbee: [tz.saswell_thermostat_current_heating_setpoint, tz.saswell_thermostat_mode, tz.saswell_thermostat_away,
|
|
32
35
|
tz.saswell_thermostat_child_lock, tz.saswell_thermostat_window_detection, tz.saswell_thermostat_frost_detection,
|
|
@@ -423,7 +423,7 @@ module.exports = [
|
|
|
423
423
|
description: 'Odace connectable relay switch 10A',
|
|
424
424
|
extend: extend.switch(),
|
|
425
425
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
426
|
-
const endpoint = device.getEndpoint(
|
|
426
|
+
const endpoint = device.getEndpoint(21);
|
|
427
427
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
428
428
|
await reporting.onOff(endpoint);
|
|
429
429
|
},
|