zigbee-herdsman-converters 23.61.0 → 23.63.0

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.
@@ -96,7 +96,15 @@ const individualLedEffects = {
96
96
  aurora: 8,
97
97
  clear_effect: 255,
98
98
  };
99
+ const mmWaveControlCommands = {
100
+ set_interference: 1,
101
+ clear_interference: 3,
102
+ reset_detection_area: 4,
103
+ reset_mmwave_module: 0,
104
+ reset_mmwave_fw_2: 255,
105
+ };
99
106
  const INOVELLI_CLUSTER_NAME = "manuSpecificInovelli";
107
+ const INOVELLI_MMWAVE_CLUSTER_NAME = "manuSpecificInovelliMMWave";
100
108
  const inovelliExtend = {
101
109
  addCustomClusterInovelli: () => m.deviceAddCustomCluster(INOVELLI_CLUSTER_NAME, {
102
110
  ID: 64561,
@@ -171,6 +179,8 @@ const inovelliExtend = {
171
179
  ledIntensityWhenOn: { ID: 0x0061, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
172
180
  ledIntensityWhenOff: { ID: 0x0062, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
173
181
  ledBarScaling: { ID: 0x0064, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
182
+ mmwaveControlWiredDevice: { ID: 0x006e, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
183
+ mmWaveRoomSizePreset: { ID: 0x0075, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
174
184
  singleTapBehavior: { ID: 0x0078, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
175
185
  fanTimerMode: { ID: 0x0079, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
176
186
  auxSwitchUniqueScenes: { ID: 0x007b, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
@@ -213,6 +223,41 @@ const inovelliExtend = {
213
223
  },
214
224
  commandsResponse: {},
215
225
  }),
226
+ addCustomMMWaveClusterInovelli: () => m.deviceAddCustomCluster(INOVELLI_MMWAVE_CLUSTER_NAME, {
227
+ ID: 64562, // 0xfc32
228
+ manufacturerCode: 0x122f,
229
+ attributes: {
230
+ mmWaveHoldTime: { ID: 0x0072, type: zigbee_herdsman_1.Zcl.DataType.UINT32 },
231
+ mmWaveDetectSensitivity: { ID: 0x0070, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
232
+ mmWaveDetectTrigger: { ID: 0x0071, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
233
+ mmWaveTargetInfoReport: { ID: 0x006b, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
234
+ mmWaveStayLife: { ID: 0x006c, type: zigbee_herdsman_1.Zcl.DataType.UINT32 },
235
+ mmWaveVersion: { ID: 0x0073, type: zigbee_herdsman_1.Zcl.DataType.UINT32 },
236
+ mmWaveHeightMin: { ID: 0x0065, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
237
+ mmWaveHeightMax: { ID: 0x0066, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
238
+ mmWaveWidthMin: { ID: 0x0067, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
239
+ mmWaveWidthMax: { ID: 0x0068, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
240
+ mmWaveDepthMin: { ID: 0x0069, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
241
+ mmWaveDepthMax: { ID: 0x006a, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
242
+ },
243
+ commands: {
244
+ mmWaveControl: {
245
+ ID: 0,
246
+ parameters: [{ name: "controlID", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }],
247
+ },
248
+ },
249
+ commandsResponse: {
250
+ anyoneInReportingArea: {
251
+ ID: 0,
252
+ parameters: [
253
+ { name: "area1", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
254
+ { name: "area2", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
255
+ { name: "area3", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
256
+ { name: "area4", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
257
+ ],
258
+ },
259
+ },
260
+ }),
216
261
  };
217
262
  const fanModes = { off: 0, low: 2, smart: 4, medium: 86, high: 170, on: 255 };
218
263
  const breezemodes = ["off", "low", "medium", "high"];
@@ -1053,6 +1098,157 @@ const VZM31_ATTRIBUTES = {
1053
1098
  displayType: "enum",
1054
1099
  },
1055
1100
  };
1101
+ const VZM32_ATTRIBUTES = {
1102
+ ...COMMON_DIMMER_ATTRIBUTES,
1103
+ ...COMMON_DIMMER_ON_OFF_ATTRIBUTES,
1104
+ ...COMMON_DIMMABLE_LIGHT_ATTRIBUTES,
1105
+ switchType: {
1106
+ ...COMMON_ATTRIBUTES.switchType,
1107
+ values: { "Single Pole": 0, "Aux Switch": 1 },
1108
+ max: 1,
1109
+ },
1110
+ mmwaveControlWiredDevice: {
1111
+ ID: 110,
1112
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT8,
1113
+ displayType: "enum",
1114
+ values: {
1115
+ Disabled: 0,
1116
+ "Occupancy (default)": 1,
1117
+ Vacancy: 2,
1118
+ "Wasteful Occupancy": 3,
1119
+ "Mirrored Occupancy": 4,
1120
+ "Mirrored Vacancy": 5,
1121
+ "Mirrored Wasteful Occupancy": 6,
1122
+ },
1123
+ min: 0,
1124
+ max: 6,
1125
+ description: "Controls whether the wired load is automatically turned on / off by the presence detector. " +
1126
+ "0 = Disabled (manual control of the load), " +
1127
+ "1 = Occupancy (default; turn on automatically with presence; turn off automatically without presence), " +
1128
+ "2 = Vacancy (does not turn on automatically; turn off automatically without presence), " +
1129
+ "3 = Wasteful Occupancy (turn on automatically with presence; does not turn off automatically), " +
1130
+ "4 = Mirrored Occupancy (turn on automatically without presence; turn off automatically with presence), " +
1131
+ "5 = Mirrored Vacancy (turn on automatically without presence; does not turn off automatically), " +
1132
+ "6 = Mirrored Wasteful Occupancy (does not turn on automatically; turns off automatically with presence).",
1133
+ },
1134
+ mmWaveRoomSizePreset: {
1135
+ ID: 117,
1136
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT8,
1137
+ displayType: "enum",
1138
+ values: {
1139
+ Custom: 0,
1140
+ Small: 1,
1141
+ Medium: 2,
1142
+ Large: 3,
1143
+ },
1144
+ min: 0,
1145
+ max: 3,
1146
+ description: "Allows selection of predefined room dimensions for mmWave sensor processing. Useful for optimizing " +
1147
+ "detection zones based on installation environment. Defaults to Custom which allows for manual dimension configuration " +
1148
+ "via other parameters. \nOptions: 0=Custom (User-defined), 1=Small (X: −100 to 100, Y: 0 to 200, Z: −100 to 100), " +
1149
+ "2=Medium (X: −160 to 160, Y: 0 to 280, Z: −100 to 100), 3=Large (X: −210 to 210, Y: 0 to 360, Z: −100 to 100)",
1150
+ },
1151
+ };
1152
+ const VZM32_MMWAVE_ATTRIBUTES = {
1153
+ mmWaveHoldTime: {
1154
+ ID: 114,
1155
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT32,
1156
+ min: 0,
1157
+ max: 4294967295,
1158
+ description: "This changes the duration, measured in seconds, after the mmWave radar detects transition from " +
1159
+ "the presence of a person to their absence. Default = 10 (seconds).",
1160
+ },
1161
+ mmWaveDetectSensitivity: {
1162
+ ID: 112,
1163
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT8,
1164
+ displayType: "enum",
1165
+ values: { Low: 0, Medium: 1, "High (default)": 2 },
1166
+ min: 0,
1167
+ max: 2,
1168
+ description: "The sensitivity of the mmWave sensor.",
1169
+ },
1170
+ mmWaveDetectTrigger: {
1171
+ ID: 113,
1172
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT8,
1173
+ displayType: "enum",
1174
+ values: { "Slow (5s)": 0, "Medium (1s)": 1, "Fast (0.2s, default)": 2 },
1175
+ min: 0,
1176
+ max: 2,
1177
+ description: "The time from detecting a person to triggering an action.",
1178
+ },
1179
+ mmWaveTargetInfoReport: {
1180
+ ID: 107,
1181
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT8,
1182
+ displayType: "enum",
1183
+ values: { "Disable (default)": 0, Enable: 1 },
1184
+ min: 0,
1185
+ max: 1,
1186
+ description: "Send target info report when bound to mmWave cluster.",
1187
+ },
1188
+ mmWaveStayLife: {
1189
+ ID: 108,
1190
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT32,
1191
+ min: 0,
1192
+ max: 4294967295,
1193
+ description: "The delay time of the stay area is set to 50ms when it is set to 1, to 1 second when it is set to 20, and the default value is 300, that is, 15 seconds",
1194
+ },
1195
+ mmWaveVersion: {
1196
+ ID: 115,
1197
+ dataType: zigbee_herdsman_1.Zcl.DataType.UINT32,
1198
+ min: 0,
1199
+ max: 4294967295,
1200
+ readOnly: true,
1201
+ description: "The firmware version number of the mmWave module.",
1202
+ },
1203
+ mmWaveHeightMin: {
1204
+ ID: 101,
1205
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1206
+ min: -600,
1207
+ max: 600,
1208
+ readOnly: false,
1209
+ description: "Defines the detection area (negative values are below the switch, positive values are above)",
1210
+ },
1211
+ mmWaveHeightMax: {
1212
+ ID: 102,
1213
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1214
+ min: -600,
1215
+ max: 600,
1216
+ readOnly: false,
1217
+ description: "Defines the detection area (negative values are below the switch, positive values are above)",
1218
+ },
1219
+ mmWaveWidthMin: {
1220
+ ID: 103,
1221
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1222
+ min: -600,
1223
+ max: 600,
1224
+ readOnly: false,
1225
+ description: "Defines the detection area (negative values are left of the switch facing away from the wall, positive values are right)",
1226
+ },
1227
+ mmWaveWidthMax: {
1228
+ ID: 104,
1229
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1230
+ min: -600,
1231
+ max: 600,
1232
+ readOnly: false,
1233
+ description: "Defines the detection area (negative values are left of the switch facing away from the wall, positive values are right)",
1234
+ },
1235
+ mmWaveDepthMin: {
1236
+ ID: 105,
1237
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1238
+ min: 0,
1239
+ max: 600,
1240
+ readOnly: false,
1241
+ description: "Defines the detection area in front of the switch)",
1242
+ },
1243
+ mmWaveDepthMax: {
1244
+ ID: 106,
1245
+ dataType: zigbee_herdsman_1.Zcl.DataType.INT16,
1246
+ min: 0,
1247
+ max: 600,
1248
+ readOnly: false,
1249
+ description: "Defines the detection area in front of the switch)",
1250
+ },
1251
+ };
1056
1252
  const VZM35_ATTRIBUTES = {
1057
1253
  ...COMMON_DIMMER_ATTRIBUTES,
1058
1254
  minimumLevel: {
@@ -1340,6 +1536,16 @@ const tzLocal = {
1340
1536
  return { state: { [key]: values } };
1341
1537
  },
1342
1538
  },
1539
+ inovelli_mmwave_control_commands: {
1540
+ key: ["mmwave_control_commands"],
1541
+ convertSet: async (entity, key, values, meta) => {
1542
+ await entity.command(INOVELLI_MMWAVE_CLUSTER_NAME, "mmWaveControl", {
1543
+ // @ts-expect-error ignore
1544
+ controlID: mmWaveControlCommands[values.controlID],
1545
+ }, { disableResponse: true, disableDefaultResponse: true });
1546
+ return { state: { [key]: values } };
1547
+ },
1548
+ },
1343
1549
  /**
1344
1550
  * Inovelli VZM31SN has a default transition property that the device should
1345
1551
  * fallback to if a transition is not specified by passing 0xffff
@@ -1798,8 +2004,15 @@ const exposeBreezeMode = () => {
1798
2004
  .withFeature(e.numeric("time5", ea.STATE_SET).withValueMin(1).withValueMax(80).withDescription("Duration (s) for fan in Step 5 "))
1799
2005
  .withCategory("config");
1800
2006
  };
2007
+ const exposeMMWaveControl = () => {
2008
+ return e
2009
+ .composite("mmwave_control_commands", "mmwave_control_commands", ea.STATE_SET)
2010
+ .withFeature(e.enum("controlID", ea.STATE_SET, Object.keys(mmWaveControlCommands)).withDescription("Which mmWave Control command to send"))
2011
+ .withCategory("config");
2012
+ };
1801
2013
  const exposesListVZM30 = [e.light_brightness(), exposeLedEffects(), exposeIndividualLedEffects()];
1802
2014
  const exposesListVZM31 = [e.light_brightness(), exposeLedEffects(), exposeIndividualLedEffects()];
2015
+ const exposesListVZM32 = [e.light_brightness(), exposeLedEffects(), exposeIndividualLedEffects(), exposeMMWaveControl()];
1803
2016
  const exposesListVZM35 = [
1804
2017
  e.fan().withState("fan_state").withModes(Object.keys(fanModes)),
1805
2018
  exposeLedEffects(),
@@ -1810,6 +2023,8 @@ const exposesListVZM36 = [e.light_brightness(), e.fan().withState("fan_state").w
1810
2023
  // Populate exposes list from the attributes description
1811
2024
  attributesToExposeList(VZM30_ATTRIBUTES, exposesListVZM30);
1812
2025
  attributesToExposeList(VZM31_ATTRIBUTES, exposesListVZM31);
2026
+ attributesToExposeList(VZM32_ATTRIBUTES, exposesListVZM32);
2027
+ attributesToExposeList(VZM32_MMWAVE_ATTRIBUTES, exposesListVZM32);
1813
2028
  attributesToExposeList(VZM35_ATTRIBUTES, exposesListVZM35);
1814
2029
  attributesToExposeList(VZM36_ATTRIBUTES, exposesListVZM36);
1815
2030
  // Put actions at the bottom of ui
@@ -1838,6 +2053,7 @@ const buttonTapSequences = [
1838
2053
  ];
1839
2054
  exposesListVZM30.push(e.action(buttonTapSequences));
1840
2055
  exposesListVZM31.push(e.action(buttonTapSequences));
2056
+ exposesListVZM32.push(e.action(buttonTapSequences));
1841
2057
  exposesListVZM35.push(e.action(buttonTapSequences));
1842
2058
  /*
1843
2059
  * Inovelli devices have a huge number of attributes. Calling endpoint.read() in a single call
@@ -1947,6 +2163,59 @@ exports.definitions = [
1947
2163
  await reporting.bind(endpoint2, coordinatorEndpoint, [INOVELLI_CLUSTER_NAME]);
1948
2164
  },
1949
2165
  },
2166
+ {
2167
+ zigbeeModel: ["VZM32-SN"],
2168
+ model: "VZM32-SN",
2169
+ vendor: "Inovelli",
2170
+ description: "mmWave Zigbee Dimmer",
2171
+ exposes: exposesListVZM32.concat(m.identify().exposes),
2172
+ extend: [
2173
+ m.deviceEndpoints({
2174
+ endpoints: { "1": 1, "2": 2, "3": 3 },
2175
+ multiEndpointSkip: ["state", "voltage", "power", "current", "energy", "brightness", "illuminance", "occupancy"],
2176
+ }),
2177
+ inovelliExtend.addCustomClusterInovelli(),
2178
+ inovelliExtend.addCustomMMWaveClusterInovelli(),
2179
+ m.electricityMeter(),
2180
+ m.illuminance(),
2181
+ m.occupancy(),
2182
+ ],
2183
+ toZigbee: [
2184
+ tzLocal.light_onoff_brightness_inovelli,
2185
+ tz.power_on_behavior,
2186
+ tz.ignore_transition,
2187
+ tz.identify,
2188
+ tz.light_brightness_move,
2189
+ tz.light_brightness_step,
2190
+ tzLocal.inovelli_led_effect,
2191
+ tzLocal.inovelli_individual_led_effect,
2192
+ tzLocal.inovelli_mmwave_control_commands,
2193
+ tzLocal.inovelli_parameters(VZM32_ATTRIBUTES, INOVELLI_CLUSTER_NAME),
2194
+ tzLocal.inovelli_parameters_readOnly(VZM32_ATTRIBUTES, INOVELLI_CLUSTER_NAME),
2195
+ tzLocal.inovelli_parameters(VZM32_MMWAVE_ATTRIBUTES, INOVELLI_MMWAVE_CLUSTER_NAME),
2196
+ tzLocal.inovelli_parameters_readOnly(VZM32_MMWAVE_ATTRIBUTES, INOVELLI_MMWAVE_CLUSTER_NAME),
2197
+ ],
2198
+ fromZigbee: [
2199
+ fz.on_off,
2200
+ fz.brightness,
2201
+ fz.level_config,
2202
+ fz.power_on_behavior,
2203
+ fz.ignore_basic_report,
2204
+ fzLocal.inovelli(VZM32_ATTRIBUTES, INOVELLI_CLUSTER_NAME),
2205
+ fzLocal.inovelli(VZM32_MMWAVE_ATTRIBUTES, INOVELLI_MMWAVE_CLUSTER_NAME),
2206
+ ],
2207
+ ota: true,
2208
+ configure: async (device, coordinatorEndpoint) => {
2209
+ const endpoint = device.getEndpoint(1);
2210
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genOnOff", "genLevelCtrl"]);
2211
+ await reporting.onOff(endpoint);
2212
+ await chunkedRead(endpoint, Object.keys(VZM32_ATTRIBUTES), INOVELLI_CLUSTER_NAME);
2213
+ await chunkedRead(endpoint, Object.keys(VZM32_MMWAVE_ATTRIBUTES), INOVELLI_MMWAVE_CLUSTER_NAME);
2214
+ // Bind for Button Event Reporting
2215
+ const endpoint2 = device.getEndpoint(2);
2216
+ await reporting.bind(endpoint2, coordinatorEndpoint, [INOVELLI_CLUSTER_NAME]);
2217
+ },
2218
+ },
1950
2219
  {
1951
2220
  zigbeeModel: ["VZM35-SN"],
1952
2221
  model: "VZM35-SN",