zigbee-herdsman-converters 15.0.91 → 15.0.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/devices/climax.js CHANGED
@@ -82,14 +82,14 @@ module.exports = [
82
82
  vendor: 'Climax',
83
83
  description: 'Smart siren',
84
84
  fromZigbee: [fz.battery, fz.ias_wd, fz.ias_enroll, fz.ias_siren],
85
- toZigbee: [tz.warning_simple, tz.ias_max_duration, tz.warning],
85
+ toZigbee: [tz.warning_simple, tz.ias_max_duration, tz.warning, tz.squawk],
86
86
  configure: async (device, coordinatorEndpoint, logger) => {
87
87
  const endpoint = device.getEndpoint(1);
88
88
  await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'ssIasZone', 'ssIasWd']);
89
89
  await endpoint.read('ssIasZone', ['zoneState', 'iasCieAddr', 'zoneId']);
90
90
  await endpoint.read('ssIasWd', ['maxDuration']);
91
91
  },
92
- exposes: [e.battery_low(), e.tamper(), e.warning(),
92
+ exposes: [e.battery_low(), e.tamper(), e.warning(), e.squawk(),
93
93
  exposes.numeric('max_duration', ea.ALL).withUnit('s').withValueMin(0).withValueMax(600).withDescription('Duration of Siren'),
94
94
  exposes.binary('alarm', ea.SET, 'START', 'OFF').withDescription('Manual start of siren')],
95
95
  },
package/devices/niko.js CHANGED
@@ -1,6 +1,7 @@
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 utils = require('../lib/utils');
4
5
  const reporting = require('../lib/reporting');
5
6
  const e = exposes.presets;
6
7
  const ea = exposes.access;
@@ -13,9 +14,8 @@ const local = {
13
14
  convert: (model, msg, publish, options, meta) => {
14
15
  const state = {};
15
16
  if (msg.data.hasOwnProperty('switchOperationMode')) {
16
- const operationModeProperty = `operation_mode${meta.endpoint_name ? `_${meta.endpoint_name}` : ''}`;
17
17
  const operationModeMap = {0x02: 'control_relay', 0x01: 'decoupled', 0x00: 'unknown'};
18
- state[operationModeProperty] = operationModeMap[msg.data.switchOperationMode];
18
+ state['operation_mode'] = operationModeMap[msg.data.switchOperationMode];
19
19
  }
20
20
  return state;
21
21
  },
@@ -29,9 +29,22 @@ const local = {
29
29
  if (msg.data.hasOwnProperty('switchAction')) {
30
30
  // NOTE: a single press = two seperate values reported, 16 followed by 64
31
31
  // a hold/release cyle = three seperate values, 16, 32, and 48
32
- const actionProperty = `action${meta.endpoint_name ? `_${meta.endpoint_name}` : ''}`;
33
- const actionMap = {16: null, 64: 'single', 32: 'hold', 48: 'release'};
34
- state[actionProperty] = actionMap[msg.data.switchAction];
32
+ const actionMap = (model.model == '552-721X1') ? {
33
+ 16: null,
34
+ 64: 'single',
35
+ 32: 'hold',
36
+ 48: 'release',
37
+ } : {
38
+ 16: null,
39
+ 64: 'single_left',
40
+ 32: 'hold_left',
41
+ 48: 'release_left',
42
+ 4096: 'single_right',
43
+ 8192: 'hold_right',
44
+ 12288: 'release_right',
45
+ };
46
+
47
+ state['action'] = actionMap[msg.data.switchAction];
35
48
  }
36
49
  return state;
37
50
  },
@@ -75,12 +88,18 @@ const local = {
75
88
  if (!operationModeLookup.hasOwnProperty(value)) {
76
89
  throw new Error(`operation_mode was called with an invalid value (${value})`);
77
90
  } else {
78
- await entity.write('manuSpecificNiko1', {'switchOperationMode': operationModeLookup[value]});
91
+ await utils.enforceEndpoint(entity, key, meta).write(
92
+ 'manuSpecificNiko1',
93
+ {'switchOperationMode': operationModeLookup[value]},
94
+ );
79
95
  return {state: {operation_mode: value.toLowerCase()}};
80
96
  }
81
97
  },
82
98
  convertGet: async (entity, key, meta) => {
83
- await entity.read('manuSpecificNiko1', ['switchOperationMode']);
99
+ await utils.enforceEndpoint(entity, key, meta).read(
100
+ 'manuSpecificNiko1',
101
+ ['switchOperationMode'],
102
+ );
84
103
  },
85
104
  },
86
105
  switch_led_enable: {
@@ -259,7 +278,7 @@ module.exports = [
259
278
  endpoint: (device) => {
260
279
  return {'l1': 1, 'l2': 2};
261
280
  },
262
- meta: {multiEndpoint: true},
281
+ meta: {multiEndpointEnforce: {'operation_mode': 1}},
263
282
  configure: async (device, coordinatorEndpoint, logger) => {
264
283
  const ep1 = device.getEndpoint(1);
265
284
  const ep2 = device.getEndpoint(2);
@@ -272,10 +291,11 @@ module.exports = [
272
291
  },
273
292
  exposes: [
274
293
  e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
275
- e.action(['single', 'hold', 'release']).withEndpoint('l1'),
276
- e.action(['single', 'hold', 'release']).withEndpoint('l2'),
277
- exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withEndpoint('l1'),
278
- exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withEndpoint('l2'),
294
+ e.action([
295
+ 'single_left', 'hold_left', 'release_left',
296
+ 'single_right', 'hold_right', 'release_right',
297
+ ]),
298
+ exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']),
279
299
  exposes.binary('led_enable', ea.ALL, true, false).withEndpoint('l1').withDescription('Enable LED'),
280
300
  exposes.binary('led_enable', ea.ALL, true, false).withEndpoint('l2').withDescription('Enable LED'),
281
301
  exposes.binary('led_state', ea.ALL, 'ON', 'OFF').withEndpoint('l1').withDescription('LED State'),
package/devices/tuya.js CHANGED
@@ -805,6 +805,7 @@ module.exports = [
805
805
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bq5c8xfe'},
806
806
  {modelID: 'TS0601', manufacturerName: '_TZE200_bjawzodf'},
807
807
  {modelID: 'TS0601', manufacturerName: '_TZE200_qyflbnbj'},
808
+ {modelID: 'TS0601', manufacturerName: '_TZE200_vs0skpuc'},
808
809
  {modelID: 'TS0601', manufacturerName: '_TZE200_9yapgbuv'},
809
810
  {modelID: 'TS0601', manufacturerName: '_TZE200_zl1kmjqx'}],
810
811
  model: 'TS0601_temperature_humidity_sensor',
@@ -199,7 +199,7 @@ module.exports = [
199
199
  exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
200
200
  },
201
201
  {
202
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}],
202
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}, {modelID: 'TS0601', manufacturerName: '_TZE200_shkxsgis'}],
203
203
  model: 'TB26-4',
204
204
  vendor: 'Zemismart',
205
205
  description: '4-gang smart wall switch',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "15.0.91",
3
+ "version": "15.0.92",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [