zigbee-herdsman-converters 14.0.585 → 14.0.588

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.
@@ -8445,6 +8445,9 @@ const converters = {
8445
8445
  break;
8446
8446
  }
8447
8447
  break;
8448
+ case tuya.dataPoints.AM02AddRemoter: // DP 101: Ignore until need is defined
8449
+ case tuya.dataPoints.AM02TimeTotal: // DP 10: Ignore until need is defined
8450
+ break;
8448
8451
  default: // Unknown code
8449
8452
  meta.logger.warn(`ZMAM02_cover: Unhandled DP #${dp} for ${meta.device.manufacturerName}:
8450
8453
  ${JSON.stringify(dpValue)}`);
@@ -2562,15 +2562,15 @@ const converters = {
2562
2562
  },
2563
2563
  lidl_watering_timer: {
2564
2564
  key: ['timer'],
2565
- convertSet: (entity, key, value, meta) => {
2566
- tuya.sendDataPointRaw(entity, tuya.dataPoints.lidlTimer, tuya.convertDecimalValueTo4ByteHexArray(value));
2565
+ convertSet: async (entity, key, value, meta) => {
2566
+ await tuya.sendDataPointRaw(entity, tuya.dataPoints.lidlTimer, tuya.convertDecimalValueTo4ByteHexArray(value));
2567
2567
  },
2568
2568
  },
2569
2569
  matsee_garage_door_opener: {
2570
2570
  key: ['trigger'],
2571
- convertSet: (entity, key, value, meta) => {
2571
+ convertSet: async (entity, key, value, meta) => {
2572
2572
  const state = meta.message.hasOwnProperty('trigger') ? meta.message.trigger : true;
2573
- tuya.sendDataPointBool(entity, tuya.dataPoints.garageDoorTrigger, state);
2573
+ await tuya.sendDataPointBool(entity, tuya.dataPoints.garageDoorTrigger, state);
2574
2574
  return {state: {trigger: state}};
2575
2575
  },
2576
2576
  },
@@ -4927,7 +4927,7 @@ const converters = {
4927
4927
  payload[i * 3 + 2] = value[prob][i].temperature;
4928
4928
  }
4929
4929
  }
4930
- tuya.sendDataPointRaw(entity, dpId, payload);
4930
+ await tuya.sendDataPointRaw(entity, dpId, payload);
4931
4931
  }
4932
4932
  },
4933
4933
  },
@@ -4956,7 +4956,7 @@ const converters = {
4956
4956
  payload[i*3+1] = minute;
4957
4957
  payload[i*3+2] = temperature;
4958
4958
  }
4959
- tuya.sendDataPointRaw(entity, dpId, payload);
4959
+ await tuya.sendDataPointRaw(entity, dpId, payload);
4960
4960
  },
4961
4961
  },
4962
4962
  tuya_thermostat_week: {
@@ -6613,7 +6613,7 @@ const converters = {
6613
6613
  },
6614
6614
  wiser_sed_thermostat_local_temperature_calibration: {
6615
6615
  key: ['local_temperature_calibration'],
6616
- convertSet: (entity, key, value, meta) => {
6616
+ convertSet: async (entity, key, value, meta) => {
6617
6617
  entity.write('hvacThermostat', {localTemperatureCalibration: Math.round(value * 10)},
6618
6618
  {srcEndpoint: 11, disableDefaultResponse: true, sendWhen: 'active'});
6619
6619
  return {state: {local_temperature_calibration: value}};
@@ -6762,7 +6762,7 @@ const converters = {
6762
6762
  await tuya.sendDataPointRaw(entity, 102, [value]);
6763
6763
  break;
6764
6764
  } else {
6765
- tuya.sendDataPointRaw(entity, 105, [value]);
6765
+ await tuya.sendDataPointRaw(entity, 105, [value]);
6766
6766
  break;
6767
6767
  }
6768
6768
  case 'led_enable':// OK (value true/false or 1/0)
package/devices/adeo.js CHANGED
@@ -5,7 +5,37 @@ const extend = require('../lib/extend');
5
5
  const tz = require('../converters/toZigbee');
6
6
  const e = exposes.presets;
7
7
 
8
+ const fzLocal = {
9
+ LDSENK08: {
10
+ cluster: 'ssIasZone',
11
+ type: 'commandStatusChangeNotification',
12
+ convert: (model, msg, publish, options, meta) => {
13
+ const zoneStatus = msg.data.zonestatus;
14
+ return {
15
+ contact: !((zoneStatus & 1) > 0),
16
+ vibration: (zoneStatus & 1<<1) > 0,
17
+ tamper: (zoneStatus & 1<<2) > 0,
18
+ battery_low: (zoneStatus & 1<<3) > 0,
19
+ };
20
+ },
21
+ },
22
+ };
23
+
8
24
  module.exports = [
25
+ {
26
+ zigbeeModel: ['LDSENK08'],
27
+ model: 'LDSENK08',
28
+ vendor: 'ADEO',
29
+ description: 'ENKI LEXMAN wireless smart door window sensor with vibration',
30
+ fromZigbee: [fzLocal.LDSENK08, fz.battery],
31
+ toZigbee: [],
32
+ exposes: [e.battery_low(), e.contact(), e.vibration(), e.tamper(), e.battery()],
33
+ configure: async (device, coordinatorEndpoint, logger) => {
34
+ const endpoint = device.getEndpoint(1);
35
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
36
+ await reporting.batteryPercentageRemaining(endpoint);
37
+ },
38
+ },
9
39
  {
10
40
  zigbeeModel: ['LDSENK09'],
11
41
  model: 'LDSENK09',
package/devices/awox.js CHANGED
@@ -72,25 +72,9 @@ module.exports = [
72
72
  {
73
73
  fingerprint: [
74
74
  {
75
- type: 'EndDevice',
76
- manufacturerName: 'AwoX',
77
- modelID: 'TLSR82xx',
78
- powerSource: 'Battery',
79
- endpoints: [
80
- {
81
- ID: 1,
82
- profileID: 260,
83
- deviceID: 2048,
84
- inputClusters: [0, 3, 4, 4096],
85
- outputClusters: [0, 3, 4, 5, 6, 8, 768, 4096],
86
- },
87
- {
88
- ID: 3,
89
- profileID: 4751,
90
- deviceID: 2048,
91
- inputClusters: [65360, 65361],
92
- outputClusters: [65360, 65361],
93
- },
75
+ type: 'EndDevice', manufacturerName: 'AwoX', modelID: 'TLSR82xx', powerSource: 'Battery', endpoints: [
76
+ {ID: 1, profileID: 260, deviceID: 2048, inputClusters: [0, 3, 4, 4096], outputClusters: [0, 3, 4, 5, 6, 8, 768, 4096]},
77
+ {ID: 3, profileID: 4751, deviceID: 2048, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
94
78
  ],
95
79
  },
96
80
  ],
@@ -108,76 +92,35 @@ module.exports = [
108
92
  fingerprint: [
109
93
  {
110
94
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
111
- {
112
- ID: 1,
113
- profileID: 260,
114
- deviceID: 269,
115
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10],
116
- outputClusters: [6],
117
- },
118
- {
119
- ID: 3,
120
- profileID: 4751,
121
- deviceID: 269,
122
- inputClusters: [65360, 65361],
123
- outputClusters: [65360, 65361],
124
- },
95
+ {ID: 1, profileID: 260, deviceID: 269, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10], outputClusters: [6]},
96
+ {ID: 3, profileID: 4751, deviceID: 269, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
125
97
  {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
126
98
  ],
127
99
  },
128
100
  {
129
101
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
130
- {
131
- ID: 1,
132
- profileID: 260,
133
- deviceID: 258,
134
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096],
135
- outputClusters: [6, 25],
136
- },
137
- {
138
- ID: 3,
139
- profileID: 49152,
140
- deviceID: 258,
141
- inputClusters: [65360, 65361],
142
- outputClusters: [65360, 65361],
143
- },
102
+ {ID: 1, profileID: 260, deviceID: 269, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10], outputClusters: [6]},
103
+ {ID: 3, profileID: 4751, deviceID: 269, inputClusters: [65360, 65361, 4], outputClusters: [65360, 65361]},
104
+ {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
105
+ ],
106
+ },
107
+ {
108
+ type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
109
+ {ID: 1, profileID: 260, deviceID: 258, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096], outputClusters: [6, 25]},
110
+ {ID: 3, profileID: 49152, deviceID: 258, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
144
111
  ],
145
112
  },
146
113
  {
147
114
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
148
- {
149
- ID: 1,
150
- profileID: 260,
151
- deviceID: 269,
152
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599],
153
- outputClusters: [6],
154
- },
155
- {
156
- ID: 3,
157
- profileID: 4751,
158
- deviceID: 269,
159
- inputClusters: [65360, 65361],
160
- outputClusters: [65360, 65361],
161
- },
115
+ {ID: 1, profileID: 260, deviceID: 269, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599], outputClusters: [6]},
116
+ {ID: 3, profileID: 4751, deviceID: 269, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
162
117
  {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
163
118
  ],
164
119
  },
165
120
  {
166
121
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
167
- {
168
- ID: 1,
169
- profileID: 260,
170
- deviceID: 269,
171
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599],
172
- outputClusters: [6],
173
- },
174
- {
175
- ID: 3,
176
- profileID: 4751,
177
- deviceID: 269,
178
- inputClusters: [65360, 65361],
179
- outputClusters: [65360, 65361],
180
- },
122
+ {ID: 1, profileID: 260, deviceID: 269, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599], outputClusters: [6]},
123
+ {ID: 3, profileID: 4751, deviceID: 269, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
181
124
  ],
182
125
  },
183
126
  ],
@@ -190,58 +133,22 @@ module.exports = [
190
133
  fingerprint: [
191
134
  {
192
135
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
193
- {
194
- ID: 1,
195
- profileID: 260,
196
- deviceID: 268,
197
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599],
198
- outputClusters: [6],
199
- },
200
- {
201
- ID: 3,
202
- profileID: 4751,
203
- deviceID: 268,
204
- inputClusters: [65360, 65361],
205
- outputClusters: [65360, 65361],
206
- },
136
+ {ID: 1, profileID: 260, deviceID: 268, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599], outputClusters: [6]},
137
+ {ID: 3, profileID: 4751, deviceID: 268, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
207
138
  ],
208
139
  },
209
140
  {
210
141
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
211
- {
212
- ID: 1,
213
- profileID: 260,
214
- deviceID: 268,
215
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599],
216
- outputClusters: [6],
217
- },
142
+ {ID: 1, profileID: 260, deviceID: 268, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599], outputClusters: [6]},
218
143
  {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
219
- {
220
- ID: 3,
221
- profileID: 4751,
222
- deviceID: 268,
223
- inputClusters: [65360, 65361],
224
- outputClusters: [65360, 65361],
225
- },
144
+ {ID: 3, profileID: 4751, deviceID: 268, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
226
145
  ],
227
146
  },
228
147
  {
229
148
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
230
- {
231
- ID: 1,
232
- profileID: 260,
233
- deviceID: 268,
234
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10],
235
- outputClusters: [6],
236
- },
149
+ {ID: 1, profileID: 260, deviceID: 268, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10], outputClusters: [6]},
237
150
  {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
238
- {
239
- ID: 3,
240
- profileID: 4751,
241
- deviceID: 268,
242
- inputClusters: [65360, 65361],
243
- outputClusters: [65360, 65361],
244
- },
151
+ {ID: 3, profileID: 4751, deviceID: 268, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
245
152
  ],
246
153
  },
247
154
  ],
@@ -255,20 +162,8 @@ module.exports = [
255
162
  fingerprint: [
256
163
  {
257
164
  type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
258
- {
259
- ID: 1,
260
- profileID: 260,
261
- deviceID: 268,
262
- inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096],
263
- outputClusters: [6, 25],
264
- },
265
- {
266
- ID: 3,
267
- profileID: 49152,
268
- deviceID: 268,
269
- inputClusters: [65360, 65361],
270
- outputClusters: [65360, 65361],
271
- },
165
+ {ID: 1, profileID: 260, deviceID: 268, inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096], outputClusters: [6, 25]},
166
+ {ID: 3, profileID: 49152, deviceID: 268, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
272
167
  ],
273
168
  },
274
169
  ],
@@ -7,7 +7,7 @@ const e = exposes.presets;
7
7
 
8
8
  module.exports = [
9
9
  {
10
- zigbeeModel: ['5j6ifxj'],
10
+ zigbeeModel: ['5j6ifxj', '5j6ifxj\u0000'],
11
11
  model: 'BW-IS3',
12
12
  vendor: 'BlitzWolf',
13
13
  description: 'Rechargeable Zigbee PIR motion sensor',
@@ -16,6 +16,8 @@ module.exports = [
16
16
  {vendor: 'Niko', description: 'Dimmer switch for Hue system', model: '91004'},
17
17
  {vendor: 'NodOn', description: 'Smart switch for Philips Hue', model: 'CWS-4-1-01_HUE'},
18
18
  {vendor: 'Vimar', description: 'Zigbee Friends of Hue RF switch', model: '03906'},
19
+ {vendor: 'Sunricher', model: 'SR-ZGP2801K4-FOH-E'},
20
+ {vendor: 'LED Trading', model: '9125'},
19
21
  ],
20
22
  },
21
23
  {
package/devices/ikea.js CHANGED
@@ -5,7 +5,9 @@ const ota = require('../lib/ota');
5
5
  const constants = require('../lib/constants');
6
6
  const reporting = require('../lib/reporting');
7
7
  const {repInterval} = require('../lib/constants');
8
+ const utils = require('../lib/utils');
8
9
  const extend = require('../lib/extend');
10
+ const globalStore = require('../lib/store');
9
11
  const e = exposes.presets;
10
12
  const ea = exposes.access;
11
13
  const herdsman = require('zigbee-herdsman');
@@ -58,6 +60,39 @@ const configureRemote = async (device, coordinatorEndpoint, logger) => {
58
60
  await reporting.batteryPercentageRemaining(endpoint);
59
61
  };
60
62
 
63
+ const fzLocal = {
64
+ // The STYRBAR sends an on +- 500ms after the arrow release. We don't want to send the ON action in this case.
65
+ // https://github.com/Koenkk/zigbee2mqtt/issues/13335
66
+ STYRBAR_on: {
67
+ cluster: 'genOnOff',
68
+ type: 'commandOn',
69
+ convert: (model, msg, publish, options, meta) => {
70
+ if (utils.hasAlreadyProcessedMessage(msg)) return;
71
+ const arrowReleaseAgo = Date.now() - globalStore.getValue(msg.endpoint, 'arrow_release', 0);
72
+ if (arrowReleaseAgo > 700) {
73
+ return {action: 'on'};
74
+ }
75
+ },
76
+ },
77
+ STYRBAR_arrow_release: {
78
+ cluster: 'genScenes',
79
+ type: 'commandTradfriArrowRelease',
80
+ options: [exposes.options.legacy()],
81
+ convert: (model, msg, publish, options, meta) => {
82
+ if (utils.hasAlreadyProcessedMessage(msg)) return;
83
+ globalStore.putValue(msg.endpoint, 'arrow_release', Date.now());
84
+ const direction = globalStore.getValue(msg.endpoint, 'direction');
85
+ if (direction) {
86
+ globalStore.clearValue(msg.endpoint, 'direction');
87
+ const duration = msg.data.value / 1000;
88
+ const result = {action: `arrow_${direction}_release`, duration, action_duration: duration};
89
+ if (!utils.isLegacyEnabled(options)) delete result.duration;
90
+ return result;
91
+ }
92
+ },
93
+ },
94
+ };
95
+
61
96
  const tradfriExtend = {
62
97
  light_onoff_brightness: (options = {}) => ({
63
98
  ...extend.light_onoff_brightness(options),
@@ -571,9 +606,9 @@ module.exports = [
571
606
  zigbeeModel: ['Remote Control N2'],
572
607
  model: 'E2001/E2002',
573
608
  vendor: 'IKEA',
574
- description: 'STYRBAR remote control N2',
575
- fromZigbee: [fz.battery, fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.ikea_arrow_click,
576
- fz.ikea_arrow_hold, fz.ikea_arrow_release],
609
+ description: 'STYRBAR remote control',
610
+ fromZigbee: [fz.battery, fzLocal.STYRBAR_on, fz.command_off, fz.command_move, fz.command_stop, fz.ikea_arrow_click,
611
+ fz.ikea_arrow_hold, fzLocal.STYRBAR_arrow_release],
577
612
  exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_up', 'brightness_move_down',
578
613
  'brightness_stop', 'arrow_left_click', 'arrow_right_click', 'arrow_left_hold',
579
614
  'arrow_right_hold', 'arrow_left_release', 'arrow_right_release'])],
@@ -21,31 +21,6 @@ const fzLocal = {
21
21
  }
22
22
  },
23
23
  },
24
- led_trading_9125: {
25
- cluster: 'greenPower',
26
- type: ['commandNotification', 'commandCommisioningNotification'],
27
- convert: (model, msg, publish, options, meta) => {
28
- const commandID = msg.data.commandID;
29
- if (utils.hasAlreadyProcessedMessage(msg, msg.data.frameCounter, `${msg.device.ieeeAddr}_${commandID}`)) return;
30
- if (commandID === 104) return; // Skip commisioning command.
31
-
32
- // Button 1: A0 (top left)
33
- // Button 2: A1 (bottom left)
34
- // Button 3: B0 (top right)
35
- // Button 4: B1 (bottom right)
36
- const lookup = {
37
- 0x10: 'press_1', 0x14: 'release_1', 0x11: 'press_2', 0x15: 'release_2', 0x13: 'press_3', 0x17: 'release_3',
38
- 0x12: 'press_4', 0x16: 'release_4', 0x64: 'press_1_and_3', 0x65: 'release_1_and_3', 0x62: 'press_2_and_4',
39
- 0x63: 'release_2_and_4',
40
- };
41
-
42
- if (!lookup.hasOwnProperty(commandID)) {
43
- meta.logger.error(`LED Trading 9125: missing command '${commandID}'`);
44
- } else {
45
- return {action: lookup[commandID]};
46
- }
47
- },
48
- },
49
24
  };
50
25
 
51
26
  module.exports = [
@@ -91,15 +66,4 @@ module.exports = [
91
66
  await reporting.bind(device.getEndpoint(5), coordinatorEndpoint, ['genOnOff']);
92
67
  },
93
68
  },
94
- {
95
- fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000017.....$/, manufId: null}],
96
- model: '9125',
97
- vendor: 'LED Trading',
98
- description: 'FOH smart switch',
99
- whiteLabel: [{vendor: 'Sunricher', model: 'SR-ZGP2801K4-FOH-E'}],
100
- fromZigbee: [fzLocal.led_trading_9125],
101
- toZigbee: [],
102
- exposes: [e.action(['press_1', 'release_1', 'press_2', 'release_2', 'press_3', 'release_3', 'press_4', 'release_4',
103
- 'press_1_and_3', 'release_1_and_3', 'press_2_and_4', 'release_2_and_4'])],
104
- },
105
69
  ];
@@ -100,7 +100,8 @@ module.exports = [
100
100
  toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
101
101
  },
102
102
  {
103
- fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_mntza0sw'}],
103
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_mntza0sw'},
104
+ {modelID: 'TS0505B', manufacturerName: '_TZ3210_r0vzq1oj'}],
104
105
  model: '404062',
105
106
  vendor: 'Müller Licht',
106
107
  description: 'Kea RGB+CCT',
package/devices/namron.js CHANGED
@@ -8,6 +8,13 @@ const ea = exposes.access;
8
8
  const e = exposes.presets;
9
9
 
10
10
  module.exports = [
11
+ {
12
+ zigbeeModel: ['3308431'],
13
+ model: '3308431',
14
+ vendor: 'Namron',
15
+ description: 'Luna ceiling light',
16
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
17
+ },
11
18
  {
12
19
  zigbeeModel: ['3802967'],
13
20
  model: '3802967',
@@ -146,11 +146,11 @@ module.exports = [
146
146
  model: 'E11-N1EA',
147
147
  vendor: 'Sengled',
148
148
  description: 'Element plus color (A19)',
149
- fromZigbee: sengledExtend.light_onoff_brightness().fromZigbee.concat([fz.metering]),
150
- toZigbee: sengledExtend.light_onoff_brightness().toZigbee,
149
+ fromZigbee: sengledExtend.light_onoff_brightness_colortemp_color().fromZigbee.concat([fz.metering]),
150
+ toZigbee: sengledExtend.light_onoff_brightness_colortemp_color().toZigbee,
151
151
  ota: ota.zigbeeOTA,
152
152
  configure: async (device, coordinatorEndpoint, logger) => {
153
- await sengledExtend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
153
+ await sengledExtend.light_onoff_brightness_colortemp_color().configure(device, coordinatorEndpoint, logger);
154
154
  device.powerSource = 'Mains (single phase)';
155
155
  device.save();
156
156
 
@@ -160,7 +160,7 @@ module.exports = [
160
160
  await reporting.currentSummDelivered(endpoint);
161
161
  await reporting.instantaneousDemand(endpoint);
162
162
  },
163
- exposes: sengledExtend.light_onoff_brightness().exposes.concat([e.power(), e.energy()]),
163
+ exposes: sengledExtend.light_onoff_brightness_colortemp_color().exposes.concat([e.power(), e.energy()]),
164
164
  },
165
165
  {
166
166
  zigbeeModel: ['E11-U2E'],
package/devices/tuya.js CHANGED
@@ -794,7 +794,9 @@ module.exports = [
794
794
  {modelID: 'TS0503B', manufacturerName: '_TZ3210_778drfdt'},
795
795
  {modelID: 'TS0503B', manufacturerName: '_TZ3000_g5xawfcq'},
796
796
  {modelID: 'TS0503B', manufacturerName: '_TZ3210_trm3l2aw'},
797
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_odlghna1'}],
797
+ {modelID: 'TS0503B', manufacturerName: '_TZ3210_95txyzbx'},
798
+ {modelID: 'TS0503B', manufacturerName: '_TZ3210_odlghna1'},
799
+ {modelID: 'TS0503B', manufacturerName: '_TZ3220_wp1k8xws'}],
798
800
  model: 'TS0503B',
799
801
  vendor: 'TuYa',
800
802
  description: 'Zigbee RGB light',
@@ -1161,6 +1163,7 @@ module.exports = [
1161
1163
  },
1162
1164
  {
1163
1165
  fingerprint: [{modelID: 'TS0215A', manufacturerName: '_TZ3000_p6ju8myv'},
1166
+ {modelID: 'TS0215A', manufacturerName: '_TZ3000_0zrccfgx'},
1164
1167
  {modelID: 'TS0215A', manufacturerName: '_TZ3000_fsiepnrh'}],
1165
1168
  model: 'TS0215A_remote',
1166
1169
  vendor: 'TuYa',
@@ -1477,7 +1480,11 @@ module.exports = [
1477
1480
  meta: {multiEndpoint: true},
1478
1481
  configure: async (device, coordinatorEndpoint, logger) => {
1479
1482
  const ep1 = device.getEndpoint(1);
1480
- await ep1.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1483
+ try {
1484
+ await ep1.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1485
+ } catch (e) {
1486
+ // Fails for some: https://github.com/Koenkk/zigbee2mqtt/discussions/13368
1487
+ }
1481
1488
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
1482
1489
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
1483
1490
  },
@@ -154,10 +154,7 @@ module.exports = [
154
154
  },
155
155
  },
156
156
  {
157
- fingerprint: [
158
- {modelID: 'TS0601', manufacturerName: '_TZE200_iossyxra'},
159
- {modelID: 'TS0601', manufacturerName: '_TZE200_gubdgai2'},
160
- ],
157
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_iossyxra'}],
161
158
  model: 'ZM-AM02_cover',
162
159
  vendor: 'Zemismart',
163
160
  description: 'Zigbee/RF curtain converter',
@@ -183,6 +180,18 @@ module.exports = [
183
180
  // exposes.enum('situation_set', ea.STATE, Object.values(tuya.ZMAM02.AM02Situation)),
184
181
  ],
185
182
  },
183
+ {
184
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_gubdgai2'}],
185
+ model: 'M515EGBZTN',
186
+ vendor: 'Zemismart',
187
+ description: 'Roller shade driver',
188
+ fromZigbee: [fz.ZMAM02_cover],
189
+ toZigbee: [tz.ZMAM02_cover],
190
+ exposes: [e.cover_position().setAccess('position', ea.STATE_SET),
191
+ exposes.enum('motor_direction', ea.STATE_SET, Object.values(tuya.ZMLookups.AM02Direction)),
192
+ exposes.enum('border', ea.STATE_SET, Object.values(tuya.ZMLookups.AM02Border)),
193
+ ],
194
+ },
186
195
  {
187
196
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_fzo2pocs'}],
188
197
  model: 'ZM25TQ',
package/lib/reporting.js CHANGED
@@ -171,7 +171,7 @@ module.exports = {
171
171
  await endpoint.configureReporting('hvacThermostat', p);
172
172
  },
173
173
  thermostatRunningMode: async (endpoint, overrides) => {
174
- const p = payload('runningMode', 0, repInterval.HOUR, 0, overrides);
174
+ const p = payload('runningMode', 10, repInterval.HOUR, null, overrides);
175
175
  await endpoint.configureReporting('hvacThermostat', p);
176
176
  },
177
177
  thermostatOcupancy: async (endpoint, overrides) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.585",
3
+ "version": "14.0.588",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [