zigbee-herdsman-converters 14.0.248 → 14.0.249

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.
@@ -6483,6 +6483,20 @@ const converters = {
6483
6483
  }
6484
6484
  },
6485
6485
  },
6486
+ heiman_doorbell_button: {
6487
+ cluster: 'ssIasZone',
6488
+ type: 'commandStatusChangeNotification',
6489
+ convert: (model, msg, publish, options, meta) => {
6490
+ if (utils.hasAlreadyProcessedMessage(msg)) return;
6491
+ const lookup = {32768: 'pressed'};
6492
+ const zoneStatus = msg.data.zonestatus;
6493
+ return {
6494
+ action: lookup[zoneStatus],
6495
+ tamper: (zoneStatus & 1<<2) > 0,
6496
+ battery_low: (zoneStatus & 1<<3) > 0,
6497
+ };
6498
+ },
6499
+ },
6486
6500
  // #endregion
6487
6501
 
6488
6502
  // #region Ignore converters (these message dont need parsing).
@@ -195,4 +195,25 @@ module.exports = [
195
195
  },
196
196
  exposes: [e.soil_moisture(), e.battery(), e.temperature()],
197
197
  },
198
+ {
199
+ zigbeeModel: ['EFEKTA_THP_LR'],
200
+ model: 'EFEKTA_THP_LR',
201
+ vendor: 'Custom devices (DiY)',
202
+ description: 'DIY outdoor long-range sensor for temperature, humidity and atmospheric pressure',
203
+ fromZigbee: [fz.temperature, fz.humidity, fz.pressure, fz.battery],
204
+ toZigbee: [tz.factory_reset],
205
+ configure: async (device, coordinatorEndpoint, logger) => {
206
+ const endpoint = device.getEndpoint(1);
207
+ await reporting.bind(endpoint, coordinatorEndpoint, [
208
+ 'genPowerCfg', 'msTemperatureMeasurement', 'msRelativeHumidity', 'msPressureMeasurement']);
209
+ const overides = {min: 0, max: 64800, change: 0};
210
+ await reporting.batteryVoltage(endpoint, overides);
211
+ await reporting.batteryPercentageRemaining(endpoint, overides);
212
+ await reporting.temperature(endpoint, overides);
213
+ await reporting.humidity(endpoint, overides);
214
+ await reporting.pressureExtended(endpoint, overides);
215
+ await endpoint.read('msPressureMeasurement', ['scale']);
216
+ },
217
+ exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure()],
218
+ },
198
219
  ];
package/devices/heiman.js CHANGED
@@ -669,4 +669,18 @@ module.exports = [
669
669
  toZigbee: [],
670
670
  exposes: [e.occupancy(), e.battery_low(), e.tamper()],
671
671
  },
672
+ {
673
+ fingerprint: [{modelID: 'DoorBell-EM', manufacturerName: 'HEIMAN'}],
674
+ model: 'HS2DB',
675
+ vendor: 'HEIMAN',
676
+ description: 'Smart doorbell button',
677
+ fromZigbee: [fz.battery, fz.heiman_doorbell_button, fz.ignore_basic_report],
678
+ toZigbee: [],
679
+ configure: async (device, coordinatorEndpoint, logger) => {
680
+ const endpoint = device.getEndpoint(1);
681
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
682
+ await reporting.batteryPercentageRemaining(endpoint);
683
+ },
684
+ exposes: [e.battery(), e.action(['pressed']), e.battery_low(), e.tamper()],
685
+ },
672
686
  ];
package/devices/ikea.js CHANGED
@@ -340,7 +340,7 @@ module.exports = [
340
340
  fz.ikea_arrow_release],
341
341
  exposes: [e.battery(), e.action(['arrow_left_click', 'arrow_left_hold', 'arrow_left_release', 'arrow_right_click',
342
342
  'arrow_right_hold', 'arrow_right_release', 'brightness_down_click', 'brightness_down_hold', 'brightness_down_release',
343
- 'brightness_up_click', 'brightness_up_hold', 'brightness_up_release'])],
343
+ 'brightness_up_click', 'brightness_up_hold', 'brightness_up_release', 'toggle'])],
344
344
  toZigbee: [],
345
345
  ota: ota.tradfri,
346
346
  meta: {battery: {dontDividePercentage: true}},
@@ -611,8 +611,13 @@ module.exports = [
611
611
  model: 'E3007',
612
612
  vendor: 'IKEA',
613
613
  description: 'STARKVIND air purifier',
614
- exposes: [e.fan().withModes(['low', 'medium', 'high', 'on', 'auto'])],
614
+ exposes: [e.fan().withModes(['off', 'low', 'medium', 'high', 'on', 'auto'])],
615
615
  fromZigbee: [fz.fan],
616
616
  toZigbee: [tz.fan_mode],
617
+ configure: async (device, coordinatorEndpoint, logger) => {
618
+ const endpoint = device.getEndpoint(1);
619
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacFanCtrl']);
620
+ await reporting.fanMode(endpoint);
621
+ },
617
622
  },
618
623
  ];
@@ -5,8 +5,43 @@ const reporting = require('../lib/reporting');
5
5
  const extend = require('../lib/extend');
6
6
  const e = exposes.presets;
7
7
  const ea = exposes.access;
8
+ const globalStore = require('../lib/store');
8
9
 
9
10
  module.exports = [
11
+ {
12
+ zigbeeModel: ['ZB-KeypadGeneric-D0002'],
13
+ model: 'ZS130000078',
14
+ vendor: 'Linkind',
15
+ description: 'Security keypad battery',
16
+ meta: {battery: {voltageToPercentage: '3V_2100'}},
17
+ fromZigbee: [fz.command_arm_with_transaction, fz.battery, fz.ias_ace_occupancy_with_timeout,
18
+ fz.ias_smoke_alarm_1, fz.command_panic],
19
+ exposes: [e.battery(), e.battery_voltage(), e.battery_low(), e.occupancy(), e.tamper(),
20
+ exposes.numeric('action_code', ea.STATE).withDescription('Pin code introduced.'),
21
+ exposes.numeric('action_transaction', ea.STATE).withDescription('Last action transaction number.'),
22
+ exposes.text('action_zone', ea.STATE).withDescription('Alarm zone. Default value 23'),
23
+ e.action([
24
+ 'panic', 'disarm', 'arm_day_zones', 'arm_all_zones', 'exit_delay', 'entry_delay'])],
25
+ toZigbee: [tz.arm_mode],
26
+ configure: async (device, coordinatorEndpoint) => {
27
+ const endpoint = device.getEndpoint(1);
28
+ const clusters = ['genPowerCfg', 'ssIasZone', 'ssIasAce', 'genBasic', 'genIdentify'];
29
+ await reporting.bind(endpoint, coordinatorEndpoint, clusters);
30
+ await reporting.batteryVoltage(endpoint);
31
+ },
32
+ onEvent: async (type, data, device) => {
33
+ if (type === 'message' && data.type === 'commandGetPanelStatus' && data.cluster === 'ssIasAce' &&
34
+ globalStore.hasValue(device.getEndpoint(1), 'panelStatus')) {
35
+ const payload = {
36
+ panelstatus: globalStore.getValue(device.getEndpoint(1), 'panelStatus'),
37
+ secondsremain: 0x00, audiblenotif: 0x00, alarmstatus: 0x00,
38
+ };
39
+ await device.getEndpoint(1).commandResponse(
40
+ 'ssIasAce', 'getPanelStatusRsp', payload, {}, data.meta.zclTransactionSequenceNumber,
41
+ );
42
+ }
43
+ },
44
+ },
10
45
  {
11
46
  zigbeeModel: ['ZBT-RGBWSwitch-D0801'],
12
47
  model: 'ZS230002',
package/devices/moes.js CHANGED
@@ -99,8 +99,12 @@ module.exports = [
99
99
  exposes: [e.switch().setAccess('state', ea.STATE_SET)],
100
100
  fromZigbee: [fz.tuya_switch],
101
101
  toZigbee: [tz.tuya_switch_state],
102
+ onEvent: tuya.onEventSetLocalTime,
102
103
  configure: async (device, coordinatorEndpoint, logger) => {
103
104
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
105
+ // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
106
+ device.powerSource = 'Mains (single phase)';
107
+ device.save();
104
108
  },
105
109
  },
106
110
  {
@@ -112,6 +116,7 @@ module.exports = [
112
116
  e.switch().withEndpoint('l2').setAccess('state', ea.STATE_SET)],
113
117
  fromZigbee: [fz.ignore_basic_report, fz.tuya_switch],
114
118
  toZigbee: [tz.tuya_switch_state],
119
+ onEvent: tuya.onEventSetLocalTime,
115
120
  meta: {multiEndpoint: true},
116
121
  endpoint: (device) => {
117
122
  // Endpoint selection is made in tuya_switch_state
@@ -134,6 +139,7 @@ module.exports = [
134
139
  e.switch().withEndpoint('l2').setAccess('state', ea.STATE_SET), e.switch().withEndpoint('l3').setAccess('state', ea.STATE_SET)],
135
140
  fromZigbee: [fz.ignore_basic_report, fz.tuya_switch],
136
141
  toZigbee: [tz.tuya_switch_state],
142
+ onEvent: tuya.onEventSetLocalTime,
137
143
  meta: {multiEndpoint: true},
138
144
  endpoint: (device) => {
139
145
  // Endpoint selection is made in tuya_switch_state
@@ -1964,7 +1964,7 @@ module.exports = [
1964
1964
  vendor: 'Philips',
1965
1965
  description: 'Hue White and Color Ambiance A19 1100 lumen',
1966
1966
  meta: {turnsOffAtBrightness1: true},
1967
- extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1967
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1968
1968
  ota: ota.zigbeeOTA,
1969
1969
  },
1970
1970
  {
@@ -0,0 +1,23 @@
1
+ const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
2
+ const exposes = require('zigbee-herdsman-converters/lib/exposes');
3
+ const reporting = require('zigbee-herdsman-converters/lib/reporting');
4
+ const e = exposes.presets;
5
+
6
+ module.exports = [
7
+ {
8
+ fingerprint: [{modelID: 'PS-SPRZMS-SLP3', manufacturerName: 'PLAID SYSTEMS'}],
9
+ zigbeeModel: ['PS-SPRZMS-SLP3'],
10
+ model: 'PS-SPRZMS-SLP3',
11
+ vendor: 'PLAID SYSTEMS',
12
+ description: 'Spruce temperature and moisture sensor',
13
+ toZigbee: [],
14
+ fromZigbee: [fz.temperature, fz.humidity],
15
+ exposes: [e.humidity(), e.temperature()],
16
+ configure: async (device, coordinatorEndpoint, logger) => {
17
+ const endpoint = device.getEndpoint(1);
18
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
19
+ await reporting.temperature(endpoint);
20
+ await reporting.humidity(endpoint);
21
+ },
22
+ },
23
+ ];
package/devices/tuya.js CHANGED
@@ -132,7 +132,8 @@ module.exports = [
132
132
  meta: {applyRedFix: true},
133
133
  },
134
134
  {
135
- fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3000_4whigl8i'}],
135
+ fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3000_4whigl8i'},
136
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_4whigl8i'}],
136
137
  model: 'TS0501B',
137
138
  description: 'Zigbee light',
138
139
  vendor: 'TuYa',
@@ -881,14 +882,20 @@ module.exports = [
881
882
  exposes: [e.humidity(), e.temperature(), e.battery()],
882
883
  },
883
884
  {
885
+ fingerprint: [{modelID: 'TS0011', manufacturerName: '_TZ3000_l8fsgo6p'}],
884
886
  zigbeeModel: ['TS0011'],
885
887
  model: 'TS0011',
886
888
  vendor: 'TuYa',
887
889
  description: 'Smart light switch - 1 gang',
888
890
  extend: extend.switch(),
889
- whiteLabel: [{vendor: 'Vrey', model: 'VR-X712U-0013'}, {vendor: 'TUYATEC', model: 'GDKES-01TZXD'},
890
- {vendor: 'Lonsonho', model: 'QS-Zigbee-S05-L', description: '1 gang smart switch module without neutral wire'}],
891
+ whiteLabel: [
892
+ {vendor: 'Vrey', model: 'VR-X712U-0013'},
893
+ {vendor: 'TUYATEC', model: 'GDKES-01TZXD'},
894
+ {vendor: 'Lonsonho', model: 'QS-Zigbee-S05-L', description: '1 gang smart switch module without neutral wire'},
895
+ {vendor: 'Mercator ikuü', model: 'SSW01'},
896
+ ],
891
897
  configure: async (device, coordinatorEndpoint, logger) => {
898
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
892
899
  // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
893
900
  device.powerSource = 'Mains (single phase)';
894
901
  device.save();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.248",
3
+ "version": "14.0.249",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.248",
3
+ "version": "14.0.249",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [