zigbee-herdsman-converters 25.85.0 → 25.87.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.
Files changed (169) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/converters/fromZigbee.d.ts +5 -4
  3. package/dist/converters/fromZigbee.d.ts.map +1 -1
  4. package/dist/converters/fromZigbee.js +2 -1
  5. package/dist/converters/fromZigbee.js.map +1 -1
  6. package/dist/converters/toZigbee.d.ts.map +1 -1
  7. package/dist/converters/toZigbee.js +64 -97
  8. package/dist/converters/toZigbee.js.map +1 -1
  9. package/dist/devices/amina.d.ts.map +1 -1
  10. package/dist/devices/amina.js +12 -13
  11. package/dist/devices/amina.js.map +1 -1
  12. package/dist/devices/atlantic.d.ts.map +1 -1
  13. package/dist/devices/atlantic.js +0 -2
  14. package/dist/devices/atlantic.js.map +1 -1
  15. package/dist/devices/aurora_lighting.d.ts.map +1 -1
  16. package/dist/devices/aurora_lighting.js +1 -1
  17. package/dist/devices/aurora_lighting.js.map +1 -1
  18. package/dist/devices/bosch.js +50 -50
  19. package/dist/devices/bosch.js.map +1 -1
  20. package/dist/devices/candeo.js +4 -4
  21. package/dist/devices/candeo.js.map +1 -1
  22. package/dist/devices/ctm.d.ts.map +1 -1
  23. package/dist/devices/ctm.js +1 -1
  24. package/dist/devices/ctm.js.map +1 -1
  25. package/dist/devices/easyiot.js +10 -10
  26. package/dist/devices/easyiot.js.map +1 -1
  27. package/dist/devices/gledopto.d.ts.map +1 -1
  28. package/dist/devices/gledopto.js +0 -1
  29. package/dist/devices/gledopto.js.map +1 -1
  30. package/dist/devices/gmmts.js +1 -1
  31. package/dist/devices/heiman.d.ts.map +1 -1
  32. package/dist/devices/heiman.js +12 -5
  33. package/dist/devices/heiman.js.map +1 -1
  34. package/dist/devices/ikea.js +1 -1
  35. package/dist/devices/ikea.js.map +1 -1
  36. package/dist/devices/inovelli.d.ts.map +1 -1
  37. package/dist/devices/inovelli.js +117 -115
  38. package/dist/devices/inovelli.js.map +1 -1
  39. package/dist/devices/lightsolutions.js +1 -1
  40. package/dist/devices/lightsolutions.js.map +1 -1
  41. package/dist/devices/lixee.js +42 -42
  42. package/dist/devices/lixee.js.map +1 -1
  43. package/dist/devices/lytko.d.ts.map +1 -1
  44. package/dist/devices/lytko.js +43 -0
  45. package/dist/devices/lytko.js.map +1 -1
  46. package/dist/devices/mindy.js +1 -1
  47. package/dist/devices/mindy.js.map +1 -1
  48. package/dist/devices/multiterm.d.ts.map +1 -1
  49. package/dist/devices/multiterm.js +0 -1
  50. package/dist/devices/multiterm.js.map +1 -1
  51. package/dist/devices/niko.js +7 -7
  52. package/dist/devices/niko.js.map +1 -1
  53. package/dist/devices/onokom.js +12 -12
  54. package/dist/devices/orvibo.d.ts.map +1 -1
  55. package/dist/devices/orvibo.js +2 -4
  56. package/dist/devices/orvibo.js.map +1 -1
  57. package/dist/devices/owon.js +13 -13
  58. package/dist/devices/owon.js.map +1 -1
  59. package/dist/devices/perenio.js +2 -2
  60. package/dist/devices/perenio.js.map +1 -1
  61. package/dist/devices/philips.d.ts.map +1 -1
  62. package/dist/devices/philips.js +10 -3
  63. package/dist/devices/philips.js.map +1 -1
  64. package/dist/devices/plugwise.d.ts.map +1 -1
  65. package/dist/devices/plugwise.js +7 -2
  66. package/dist/devices/plugwise.js.map +1 -1
  67. package/dist/devices/salus_controls.js +16 -16
  68. package/dist/devices/salus_controls.js.map +1 -1
  69. package/dist/devices/sber.d.ts.map +1 -1
  70. package/dist/devices/sber.js +143 -25
  71. package/dist/devices/sber.js.map +1 -1
  72. package/dist/devices/schneider_electric.d.ts.map +1 -1
  73. package/dist/devices/schneider_electric.js +39 -39
  74. package/dist/devices/schneider_electric.js.map +1 -1
  75. package/dist/devices/sengled.js +4 -4
  76. package/dist/devices/sengled.js.map +1 -1
  77. package/dist/devices/shelly.js +14 -14
  78. package/dist/devices/shelly.js.map +1 -1
  79. package/dist/devices/shinasystem.d.ts.map +1 -1
  80. package/dist/devices/shinasystem.js +0 -1
  81. package/dist/devices/shinasystem.js.map +1 -1
  82. package/dist/devices/simon.d.ts.map +1 -1
  83. package/dist/devices/simon.js +42 -2
  84. package/dist/devices/simon.js.map +1 -1
  85. package/dist/devices/sinope.d.ts.map +1 -1
  86. package/dist/devices/sinope.js +43 -4
  87. package/dist/devices/sinope.js.map +1 -1
  88. package/dist/devices/slacky_diy.d.ts.map +1 -1
  89. package/dist/devices/slacky_diy.js +2 -2
  90. package/dist/devices/slacky_diy.js.map +1 -1
  91. package/dist/devices/sonoff.d.ts.map +1 -1
  92. package/dist/devices/sonoff.js +74 -69
  93. package/dist/devices/sonoff.js.map +1 -1
  94. package/dist/devices/sunricher.d.ts.map +1 -1
  95. package/dist/devices/sunricher.js +24 -7
  96. package/dist/devices/sunricher.js.map +1 -1
  97. package/dist/devices/third_reality.js +57 -57
  98. package/dist/devices/third_reality.js.map +1 -1
  99. package/dist/devices/trust.d.ts.map +1 -1
  100. package/dist/devices/trust.js +1 -0
  101. package/dist/devices/trust.js.map +1 -1
  102. package/dist/devices/tuya.d.ts.map +1 -1
  103. package/dist/devices/tuya.js +304 -7
  104. package/dist/devices/tuya.js.map +1 -1
  105. package/dist/devices/ubisys.d.ts.map +1 -1
  106. package/dist/devices/ubisys.js +0 -2
  107. package/dist/devices/ubisys.js.map +1 -1
  108. package/dist/devices/wirenboard.d.ts.map +1 -1
  109. package/dist/devices/wirenboard.js +9 -11
  110. package/dist/devices/wirenboard.js.map +1 -1
  111. package/dist/devices/xyzroe.js +2 -2
  112. package/dist/devices/xyzroe.js.map +1 -1
  113. package/dist/devices/yandex.d.ts.map +1 -1
  114. package/dist/devices/yandex.js +18 -17
  115. package/dist/devices/yandex.js.map +1 -1
  116. package/dist/devices/zemismart.d.ts.map +1 -1
  117. package/dist/devices/zemismart.js +8 -1
  118. package/dist/devices/zemismart.js.map +1 -1
  119. package/dist/indexer.d.ts.map +1 -1
  120. package/dist/indexer.js +0 -1
  121. package/dist/indexer.js.map +1 -1
  122. package/dist/lib/bosch.d.ts.map +1 -1
  123. package/dist/lib/bosch.js +199 -55
  124. package/dist/lib/bosch.js.map +1 -1
  125. package/dist/lib/color.d.ts.map +1 -1
  126. package/dist/lib/color.js +0 -3
  127. package/dist/lib/color.js.map +1 -1
  128. package/dist/lib/develco.d.ts.map +1 -1
  129. package/dist/lib/develco.js +15 -9
  130. package/dist/lib/develco.js.map +1 -1
  131. package/dist/lib/exposes.d.ts.map +1 -1
  132. package/dist/lib/exposes.js +2 -2
  133. package/dist/lib/exposes.js.map +1 -1
  134. package/dist/lib/heiman.d.ts +82 -0
  135. package/dist/lib/heiman.d.ts.map +1 -1
  136. package/dist/lib/heiman.js +31 -31
  137. package/dist/lib/heiman.js.map +1 -1
  138. package/dist/lib/ikea.d.ts.map +1 -1
  139. package/dist/lib/ikea.js +16 -21
  140. package/dist/lib/ikea.js.map +1 -1
  141. package/dist/lib/ledvance.d.ts.map +1 -1
  142. package/dist/lib/ledvance.js +0 -2
  143. package/dist/lib/ledvance.js.map +1 -1
  144. package/dist/lib/legacy.d.ts.map +1 -1
  145. package/dist/lib/legacy.js +0 -44
  146. package/dist/lib/legacy.js.map +1 -1
  147. package/dist/lib/light.d.ts +1 -1
  148. package/dist/lib/lumi.d.ts.map +1 -1
  149. package/dist/lib/lumi.js +0 -23
  150. package/dist/lib/lumi.js.map +1 -1
  151. package/dist/lib/nodon.js +2 -2
  152. package/dist/lib/nodon.js.map +1 -1
  153. package/dist/lib/ota.d.ts.map +1 -1
  154. package/dist/lib/ota.js +0 -5
  155. package/dist/lib/ota.js.map +1 -1
  156. package/dist/lib/philips.d.ts.map +1 -1
  157. package/dist/lib/philips.js +4 -23
  158. package/dist/lib/philips.js.map +1 -1
  159. package/dist/lib/tuya.d.ts.map +1 -1
  160. package/dist/lib/tuya.js +3 -7
  161. package/dist/lib/tuya.js.map +1 -1
  162. package/dist/lib/ubisys.d.ts.map +1 -1
  163. package/dist/lib/ubisys.js +231 -35
  164. package/dist/lib/ubisys.js.map +1 -1
  165. package/dist/lib/utils.d.ts.map +1 -1
  166. package/dist/lib/utils.js +0 -5
  167. package/dist/lib/utils.js.map +1 -1
  168. package/dist/models-index.json +1 -1
  169. package/package.json +2 -2
@@ -70,10 +70,10 @@ exports.on_off = {
70
70
  const onTime = meta.message.on_time != null ? meta.message.on_time : 0;
71
71
  const offWaitTime = meta.message.off_wait_time != null ? meta.message.off_wait_time : 0;
72
72
  if (typeof onTime !== "number") {
73
- throw Error("The on_time value must be a number!");
73
+ throw new Error("The on_time value must be a number!");
74
74
  }
75
75
  if (typeof offWaitTime !== "number") {
76
- throw Error("The off_wait_time value must be a number!");
76
+ throw new Error("The off_wait_time value must be a number!");
77
77
  }
78
78
  const payload = meta.converterOptions
79
79
  ? // TODO: better typing? currently used in a single place??
@@ -122,7 +122,7 @@ exports.light_color = {
122
122
  newState.color = xy.toObject();
123
123
  const colorx = utils.mapNumberRange(xy.x, 0, 1, 0, 65535);
124
124
  const colory = utils.mapNumberRange(xy.y, 0, 1, 0, 65535);
125
- await entity.command("lightingColorCtrl", "moveToColor", { transtime, colorx, colory }, utils.getOptions(meta.mapped, entity));
125
+ await entity.command("lightingColorCtrl", "moveToColor", { transtime, colorx, colory, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
126
126
  }
127
127
  else if (newColor.isHSV()) {
128
128
  const hsv = newColor.hsv;
@@ -130,33 +130,33 @@ exports.light_color = {
130
130
  newState.color_mode = constants.colorModeLookup[0];
131
131
  newState.color = hsv.toObject(false);
132
132
  if (hsv.value !== null && utils.isObject(value)) {
133
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: utils.mapNumberRange(hsvCorrected.value, 0, 100, 0, 254), transtime }, utils.getOptions(meta.mapped, entity));
133
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: utils.mapNumberRange(hsvCorrected.value, 0, 100, 0, 254), transtime, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
134
134
  }
135
135
  if (hsv.hue !== null && hsv.saturation !== null) {
136
136
  const saturation = utils.mapNumberRange(hsvCorrected.saturation, 0, 100, 0, 254);
137
137
  if (supportsEnhancedHue) {
138
138
  const enhancehue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535);
139
- await entity.command("lightingColorCtrl", "enhancedMoveToHueAndSaturation", { transtime, enhancehue, saturation }, utils.getOptions(meta.mapped, entity));
139
+ await entity.command("lightingColorCtrl", "enhancedMoveToHueAndSaturation", { transtime, enhancehue, saturation, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
140
140
  }
141
141
  else {
142
142
  const hue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 254);
143
- await entity.command("lightingColorCtrl", "moveToHueAndSaturation", { transtime, hue, saturation }, utils.getOptions(meta.mapped, entity));
143
+ await entity.command("lightingColorCtrl", "moveToHueAndSaturation", { transtime, hue, saturation, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
144
144
  }
145
145
  }
146
146
  else if (hsv.hue !== null) {
147
147
  const direction = value.direction || 0;
148
148
  if (supportsEnhancedHue) {
149
149
  const enhancehue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535);
150
- await entity.command("lightingColorCtrl", "enhancedMoveToHue", { transtime, enhancehue, direction }, utils.getOptions(meta.mapped, entity));
150
+ await entity.command("lightingColorCtrl", "enhancedMoveToHue", { transtime, enhancehue, direction, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
151
151
  }
152
152
  else {
153
153
  const hue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 254);
154
- await entity.command("lightingColorCtrl", "moveToHue", { transtime, hue, direction }, utils.getOptions(meta.mapped, entity));
154
+ await entity.command("lightingColorCtrl", "moveToHue", { transtime, hue, direction, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
155
155
  }
156
156
  }
157
157
  else if (hsv.saturation !== null) {
158
158
  const saturation = utils.mapNumberRange(hsvCorrected.saturation, 0, 100, 0, 254);
159
- await entity.command("lightingColorCtrl", "moveToSaturation", { transtime, saturation }, utils.getOptions(meta.mapped, entity));
159
+ await entity.command("lightingColorCtrl", "moveToSaturation", { transtime, saturation, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
160
160
  }
161
161
  }
162
162
  else {
@@ -176,23 +176,18 @@ exports.light_colortemp = {
176
176
  const preset = { warmest: colorTempMax, warm: 454, neutral: 370, cool: 250, coolest: colorTempMin };
177
177
  if (key === "color_temp_percent") {
178
178
  utils.assertNumber(value);
179
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
180
179
  value = utils
181
180
  .mapNumberRange(value, 0, 100, colorTempMin != null ? colorTempMin : 154, colorTempMax != null ? colorTempMax : 500)
182
181
  .toString();
183
182
  }
184
183
  if (utils.isString(value) && value in preset) {
185
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
186
184
  value = utils.getFromLookup(value, preset);
187
185
  }
188
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
189
186
  value = Number(value);
190
187
  // ensure value within range
191
188
  utils.assertNumber(value);
192
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
193
189
  value = light.clampColorTemp(value, colorTempMin, colorTempMax);
194
- const payload = { colortemp: value, transtime: utils.getTransition(entity, key, meta).time };
195
- await entity.command("lightingColorCtrl", "moveToColorTemp", payload, utils.getOptions(meta.mapped, entity));
190
+ await entity.command("lightingColorCtrl", "moveToColorTemp", { colortemp: value, transtime: utils.getTransition(entity, key, meta).time, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
196
191
  return {
197
192
  state: libColor.syncColorState({ color_mode: constants.colorModeLookup[2], color_temp: value }, meta.state, entity, meta.options),
198
193
  };
@@ -317,7 +312,6 @@ exports.power_on_behavior = {
317
312
  key: ["power_on_behavior"],
318
313
  convertSet: async (entity, key, value, meta) => {
319
314
  utils.assertString(value, key);
320
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
321
315
  value = value.toLowerCase();
322
316
  const lookup = { off: 0, on: 1, toggle: 2, previous: 255 };
323
317
  try {
@@ -369,7 +363,7 @@ exports.lock = {
369
363
  }
370
364
  }
371
365
  utils.validateValue(state, ["LOCK", "UNLOCK", "TOGGLE"]);
372
- await entity.command("closuresDoorLock", `${state.toLowerCase()}Door`, { pincodevalue: pincode }, utils.getOptions(meta.mapped, entity));
366
+ await entity.command("closuresDoorLock", `${state.toLowerCase()}Door`, { pincodevalue: Buffer.from(pincode, "ascii") }, utils.getOptions(meta.mapped, entity));
373
367
  },
374
368
  convertGet: async (entity, key, meta) => {
375
369
  await entity.read("closuresDoorLock", ["lockState"]);
@@ -499,14 +493,12 @@ exports.cover_via_brightness = {
499
493
  convertSet: async (entity, key, value, meta) => {
500
494
  if (typeof value !== "number") {
501
495
  utils.assertString(value, key);
502
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
503
496
  value = value.toLowerCase();
504
497
  if (value === "stop") {
505
- await entity.command("genLevelCtrl", "stop", {}, utils.getOptions(meta.mapped, entity));
498
+ await entity.command("genLevelCtrl", "stop", { optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
506
499
  return;
507
500
  }
508
501
  const lookup = { open: 100, close: 0 };
509
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
510
502
  value = utils.getFromLookup(value, lookup);
511
503
  }
512
504
  const invert = utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
@@ -514,7 +506,7 @@ exports.cover_via_brightness = {
514
506
  : meta.options.invert_cover;
515
507
  utils.assertNumber(value);
516
508
  const position = invert ? 100 - value : value;
517
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: utils.mapNumberRange(Number(position), 0, 100, 0, 255), transtime: 0 }, utils.getOptions(meta.mapped, entity));
509
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: utils.mapNumberRange(Number(position), 0, 100, 0, 255), transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
518
510
  return { state: { position: value } };
519
511
  },
520
512
  convertGet: async (entity, key, meta) => {
@@ -546,7 +538,7 @@ exports.warning = {
546
538
  // https://github.com/Koenkk/zigbee2mqtt/issues/8310 some devices require the info to be reversed.
547
539
  if (Array.isArray(meta.mapped))
548
540
  throw new Error("Not supported for groups");
549
- if (["SIRZB-110", "SRAC-23B-ZBSR", "AV2010/29A", "AV2010/24A"].includes(meta.mapped.model)) {
541
+ if (["SIRZB-110", "SIRZB-111", "SRAC-23B-ZBSR", "AV2010/29A", "AV2010/24A"].includes(meta.mapped.model)) {
550
542
  info = utils.getFromLookup(values.mode, mode) + ((values.strobe ? 1 : 0) << 4) + (utils.getFromLookup(values.level, level) << 6);
551
543
  }
552
544
  else {
@@ -656,7 +648,6 @@ exports.occupancy_timeout = {
656
648
  key: ["occupancy_timeout"],
657
649
  convertSet: async (entity, key, value, meta) => {
658
650
  utils.assertNumber(value);
659
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
660
651
  value *= 1;
661
652
  await entity.write("msOccupancySensing", { pirOToUDelay: value }, utils.getOptions(meta.mapped, entity));
662
653
  return { state: { occupancy_timeout: value } };
@@ -672,7 +663,6 @@ exports.level_config = {
672
663
  // parse payload to grab the keys
673
664
  if (typeof value === "string") {
674
665
  try {
675
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
676
666
  value = JSON.parse(value);
677
667
  }
678
668
  catch {
@@ -814,7 +804,6 @@ exports.ballast_config = {
814
804
  // zcl attribute names are camel case, but we want to use snake case in the outside communication
815
805
  convertSet: async (entity, key, value, meta) => {
816
806
  if (key === "ballast_config") {
817
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
818
807
  value = utils.toCamelCase(value);
819
808
  for (const [attrName, attrValue] of Object.entries(value)) {
820
809
  const attributes = { [attrName]: attrValue };
@@ -868,13 +857,11 @@ exports.light_brightness_step = {
868
857
  convertSet: async (entity, key, value, meta) => {
869
858
  const onOff = key.endsWith("_onoff");
870
859
  const command = onOff ? "stepWithOnOff" : "step";
871
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
872
860
  value = Number(value);
873
861
  utils.assertNumber(value, key);
874
862
  const mode = value > 0 ? 0 : 1;
875
863
  const transition = utils.getTransition(entity, key, meta).time;
876
- const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition };
877
- await entity.command("genLevelCtrl", command, payload, utils.getOptions(meta.mapped, entity));
864
+ await entity.command("genLevelCtrl", command, { stepmode: mode, stepsize: Math.abs(value), transtime: transition, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
878
865
  if (meta.state.brightness !== undefined) {
879
866
  utils.assertNumber(meta.state.brightness);
880
867
  let brightness = onOff || meta.state.state === "ON" ? meta.state.brightness + value : meta.state.brightness;
@@ -902,7 +889,7 @@ exports.light_brightness_move = {
902
889
  key: ["brightness_move", "brightness_move_onoff"],
903
890
  convertSet: async (entity, key, value, meta) => {
904
891
  if (value === "stop" || value === 0) {
905
- await entity.command("genLevelCtrl", "stop", {}, utils.getOptions(meta.mapped, entity));
892
+ await entity.command("genLevelCtrl", "stop", { optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
906
893
  // As we cannot determine the new brightness state, we read it from the device
907
894
  await utils.sleep(500);
908
895
  const target = utils.getEntityOrFirstGroupMember(entity);
@@ -910,25 +897,29 @@ exports.light_brightness_move = {
910
897
  const brightness = (await target.read("genLevelCtrl", ["currentLevel"])).currentLevel;
911
898
  return { state: { brightness, state: onOff === 1 ? "ON" : "OFF" } };
912
899
  }
913
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
914
900
  value = Number(value);
915
901
  utils.assertNumber(value, key);
916
- const payload = { movemode: value > 0 ? 0 : 1, rate: Math.abs(value) };
917
902
  const command = key.endsWith("onoff") ? "moveWithOnOff" : "move";
918
- await entity.command("genLevelCtrl", command, payload, utils.getOptions(meta.mapped, entity));
903
+ await entity.command("genLevelCtrl", command, { movemode: value > 0 ? 0 : 1, rate: Math.abs(value), optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
919
904
  },
920
905
  };
921
906
  exports.light_colortemp_step = {
922
907
  key: ["color_temp_step"],
923
908
  options: [exposes.options.transition()],
924
909
  convertSet: async (entity, key, value, meta) => {
925
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
926
910
  value = Number(value);
927
911
  utils.assertNumber(value, key);
928
912
  const mode = value > 0 ? 1 : 3;
929
913
  const transition = utils.getTransition(entity, key, meta).time;
930
- const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition, minimum: 0, maximum: 600 };
931
- await entity.command("lightingColorCtrl", "stepColorTemp", payload, utils.getOptions(meta.mapped, entity));
914
+ await entity.command("lightingColorCtrl", "stepColorTemp", {
915
+ stepmode: mode,
916
+ stepsize: Math.abs(value),
917
+ transtime: transition,
918
+ minimum: 0,
919
+ maximum: 600,
920
+ optionsMask: 0,
921
+ optionsOverride: 0,
922
+ }, utils.getOptions(meta.mapped, entity));
932
923
  // We cannot determine the color temperature from the current state so we read it, because
933
924
  // - We don't know the max/min values
934
925
  // - Color mode could have been switched (x/y or hue/saturation)
@@ -1022,7 +1013,7 @@ exports.light_colortemp_move = {
1022
1013
  throw new Error(`${key}: invalid value type. Expected number, string, or object with rate property`);
1023
1014
  }
1024
1015
  // Send command
1025
- await entity.command("lightingColorCtrl", "moveColorTemp", { minimum, maximum, rate, movemode }, utils.getOptions(meta.mapped, entity));
1016
+ await entity.command("lightingColorCtrl", "moveColorTemp", { minimum, maximum, rate, movemode, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1026
1017
  // Read current color temperature if stopping
1027
1018
  if (movemode === 0) {
1028
1019
  const entityToRead = utils.getEntityOrFirstGroupMember(entity);
@@ -1043,12 +1034,13 @@ exports.light_color_and_colortemp_via_color = {
1043
1034
  if (key === "color_temp" || key === "color_temp_percent") {
1044
1035
  utils.assertNumber(value);
1045
1036
  const xy = libColor.ColorXY.fromMireds(value);
1046
- const payload = {
1037
+ await entity.command("lightingColorCtrl", "moveToColor", {
1047
1038
  transtime: utils.getTransition(entity, key, meta).time,
1048
1039
  colorx: utils.mapNumberRange(xy.x, 0, 1, 0, 65535),
1049
1040
  colory: utils.mapNumberRange(xy.y, 0, 1, 0, 65535),
1050
- };
1051
- await entity.command("lightingColorCtrl", "moveToColor", payload, utils.getOptions(meta.mapped, entity));
1041
+ optionsMask: 0,
1042
+ optionsOverride: 0,
1043
+ }, utils.getOptions(meta.mapped, entity));
1052
1044
  return {
1053
1045
  state: libColor.syncColorState({ color_mode: constants.colorModeLookup[2], color_temp: value }, meta.state, entity, meta.options),
1054
1046
  };
@@ -1062,15 +1054,13 @@ exports.light_hue_saturation_step = {
1062
1054
  key: ["hue_step", "saturation_step"],
1063
1055
  options: [exposes.options.transition()],
1064
1056
  convertSet: async (entity, key, value, meta) => {
1065
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1066
1057
  value = Number(value);
1067
1058
  utils.assertNumber(value, key);
1068
1059
  const command = key === "hue_step" ? "stepHue" : "stepSaturation";
1069
1060
  const attribute = key === "hue_step" ? "currentHue" : "currentSaturation";
1070
1061
  const mode = value > 0 ? 1 : 3;
1071
1062
  const transition = utils.getTransition(entity, key, meta).time;
1072
- const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition };
1073
- await entity.command("lightingColorCtrl", command, payload, utils.getOptions(meta.mapped, entity));
1063
+ await entity.command("lightingColorCtrl", command, { stepmode: mode, stepsize: Math.abs(value), transtime: transition, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1074
1064
  // We cannot determine the hue/saturation from the current state so we read it, because
1075
1065
  // - Color mode could have been switched (x/y or colortemp)
1076
1066
  const entityToRead = utils.getEntityOrFirstGroupMember(entity);
@@ -1083,7 +1073,6 @@ exports.light_hue_saturation_step = {
1083
1073
  exports.light_hue_saturation_move = {
1084
1074
  key: ["hue_move", "saturation_move"],
1085
1075
  convertSet: async (entity, key, value, meta) => {
1086
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1087
1076
  value = value === "stop" ? value : Number(value);
1088
1077
  const command = key === "hue_move" ? "moveHue" : "moveSaturation";
1089
1078
  const attribute = key === "hue_move" ? "currentHue" : "currentSaturation";
@@ -1098,7 +1087,7 @@ exports.light_hue_saturation_move = {
1098
1087
  rate = Math.abs(value);
1099
1088
  movemode = value > 0 ? 1 : 3;
1100
1089
  }
1101
- await entity.command("lightingColorCtrl", command, { rate, movemode }, utils.getOptions(meta.mapped, entity));
1090
+ await entity.command("lightingColorCtrl", command, { rate, movemode, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1102
1091
  // We cannot determine the hue/saturation from the current state so we read it, because
1103
1092
  // - Color mode could have been switched (x/y or colortemp)
1104
1093
  if (value === "stop" || value === 0) {
@@ -1240,16 +1229,16 @@ exports.light_onoff_brightness = {
1240
1229
  // use "moveToLevel" with explicit On and Off when the state changes.
1241
1230
  if (typeof meta.state.state === "string" && meta.state.state.toLowerCase() !== targetState) {
1242
1231
  if (targetState === "on") {
1243
- await entity.command("genLevelCtrl", "moveToLevel", { level: Number(brightness), transtime: transition.time }, utils.getOptions(meta.mapped, entity));
1232
+ await entity.command("genLevelCtrl", "moveToLevel", { level: Number(brightness), transtime: transition.time, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1244
1233
  }
1245
1234
  await exports.on_off.convertSet(entity, "state", state, meta);
1246
1235
  }
1247
1236
  else {
1248
- await entity.command("genLevelCtrl", "moveToLevel", { level: Number(brightness), transtime: transition.time }, utils.getOptions(meta.mapped, entity));
1237
+ await entity.command("genLevelCtrl", "moveToLevel", { level: Number(brightness), transtime: transition.time, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1249
1238
  }
1250
1239
  }
1251
1240
  else {
1252
- await entity.command("genLevelCtrl", state === null ? "moveToLevel" : "moveToLevelWithOnOff", { level: Number(brightness), transtime: transition.time }, utils.getOptions(meta.mapped, entity));
1241
+ await entity.command("genLevelCtrl", state === null ? "moveToLevel" : "moveToLevelWithOnOff", { level: Number(brightness), transtime: transition.time, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1253
1242
  }
1254
1243
  const result = { state: {} };
1255
1244
  if (publishBrightness) {
@@ -1275,16 +1264,13 @@ exports.light_colortemp_startup = {
1275
1264
  const [colorTempMin, colorTempMax] = light.findColorTempRange(entity);
1276
1265
  const preset = { warmest: colorTempMax, warm: 454, neutral: 370, cool: 250, coolest: colorTempMin, previous: 65535 };
1277
1266
  if (utils.isString(value) && value in preset) {
1278
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1279
1267
  value = utils.getFromLookup(value, preset);
1280
1268
  }
1281
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1282
1269
  value = Number(value);
1283
1270
  utils.assertNumber(value);
1284
1271
  // ensure value within range
1285
1272
  // we do allow one exception for 0xffff, which is to restore the previous value
1286
1273
  if (value !== 65535) {
1287
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1288
1274
  value = light.clampColorTemp(value, colorTempMin, colorTempMax);
1289
1275
  }
1290
1276
  await entity.write("lightingColorCtrl", { startUpColorTemperature: value /* type failure? */ }, utils.getOptions(meta.mapped, entity));
@@ -1329,7 +1315,6 @@ exports.effect = {
1329
1315
  if (key === "effect") {
1330
1316
  utils.assertString(value, key);
1331
1317
  const lookup = { blink: 0, breathe: 1, okay: 2, channel_change: 11, finish_effect: 254, stop_effect: 255 };
1332
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1333
1318
  value = value.toLowerCase();
1334
1319
  if (value === "colorloop") {
1335
1320
  const transition = meta.message.transition ?? 15;
@@ -1351,11 +1336,9 @@ exports.effect = {
1351
1336
  const lookup = { select: 0x00, lselect: 0x01, none: 0xff };
1352
1337
  if (key === "flash") {
1353
1338
  if (value === 2) {
1354
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1355
1339
  value = "select";
1356
1340
  }
1357
1341
  else if (value === 10) {
1358
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
1359
1342
  value = "lselect";
1360
1343
  }
1361
1344
  }
@@ -1612,7 +1595,7 @@ exports.fan_speed = {
1612
1595
  key: ["speed"],
1613
1596
  convertSet: async (entity, key, value, meta) => {
1614
1597
  utils.assertNumber(value);
1615
- await entity.command("genLevelCtrl", "moveToLevel", { level: value, transtime: 0 }, utils.getOptions(meta.mapped, entity));
1598
+ await entity.command("genLevelCtrl", "moveToLevel", { level: value, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1616
1599
  return { state: { speed: value } };
1617
1600
  },
1618
1601
  convertGet: async (entity, key, meta) => {
@@ -2055,7 +2038,7 @@ exports.livolo_socket_switch_on_off = {
2055
2038
  const payloadOnBottomRight = { 1: { value: Buffer.from([8, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
2056
2039
  const payloadOffBottomRight = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
2057
2040
  if (postfix === "left") {
2058
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel });
2041
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel, optionsMask: 0, optionsOverride: 0 });
2059
2042
  await entity.write("genPowerCfg", state === "on" ? payloadOn : payloadOff, {
2060
2043
  manufacturerCode: 0x1ad2,
2061
2044
  disableDefaultResponse: true,
@@ -2068,7 +2051,7 @@ exports.livolo_socket_switch_on_off = {
2068
2051
  }
2069
2052
  if (postfix === "right") {
2070
2053
  channel = 2.0;
2071
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel });
2054
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel, optionsMask: 0, optionsOverride: 0 });
2072
2055
  await entity.write("genPowerCfg", state === "on" ? payloadOnRight : payloadOffRight, {
2073
2056
  manufacturerCode: 0x1ad2,
2074
2057
  disableDefaultResponse: true,
@@ -2123,7 +2106,7 @@ exports.livolo_switch_on_off = {
2123
2106
  else {
2124
2107
  return;
2125
2108
  }
2126
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: state, transtime: channel });
2109
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: state, transtime: channel, optionsMask: 0, optionsOverride: 0 });
2127
2110
  return { state: { state: value.toUpperCase() } };
2128
2111
  },
2129
2112
  convertGet: async (entity, key, meta) => {
@@ -2134,7 +2117,6 @@ exports.livolo_dimmer_level = {
2134
2117
  key: ["brightness", "brightness_percent", "level"],
2135
2118
  convertSet: async (entity, key, value, meta) => {
2136
2119
  // upscale to 100
2137
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
2138
2120
  value = Number(value);
2139
2121
  utils.assertNumber(value, key);
2140
2122
  // biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
@@ -2294,7 +2276,7 @@ exports.ZigUP_lock = {
2294
2276
  key: ["led"],
2295
2277
  convertSet: async (entity, key, value, meta) => {
2296
2278
  const lookup = { off: "lockDoor", on: "unlockDoor", toggle: "toggleDoor" };
2297
- await entity.command("closuresDoorLock", utils.getFromLookup(value, lookup), { pincodevalue: "" });
2279
+ await entity.command("closuresDoorLock", utils.getFromLookup(value, lookup), { pincodevalue: Buffer.alloc(0) });
2298
2280
  },
2299
2281
  };
2300
2282
  // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
@@ -2325,7 +2307,6 @@ exports.tuya_relay_din_led_indicator = {
2325
2307
  key: ["indicator_mode"],
2326
2308
  convertSet: async (entity, key, value, meta) => {
2327
2309
  utils.assertString(value, key);
2328
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
2329
2310
  value = value.toLowerCase();
2330
2311
  const lookup = { off: 0x00, on_off: 0x01, off_on: 0x02 };
2331
2312
  const payload = utils.getFromLookup(value, lookup);
@@ -2338,7 +2319,6 @@ exports.kmpcil_res005_on_off = {
2338
2319
  convertSet: async (entity, key, value, meta) => {
2339
2320
  utils.assertString(value, key);
2340
2321
  const options = { disableDefaultResponse: true };
2341
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
2342
2322
  value = value.toLowerCase();
2343
2323
  utils.assertString(value, key);
2344
2324
  utils.validateValue(value, ["toggle", "off", "on"]);
@@ -2900,20 +2880,24 @@ exports.tuya_led_control = {
2900
2880
  meta.state.color_mode === constants.colorModeLookup[2] &&
2901
2881
  meta.message.color == null &&
2902
2882
  meta.message.color_temp == null) {
2903
- const zclData = { level: Number(value), transtime: 0 };
2904
- await entity.command("genLevelCtrl", "moveToLevel", zclData, utils.getOptions(meta.mapped, entity));
2905
- globalStore.putValue(entity, "brightness", zclData.level);
2906
- return { state: { brightness: zclData.level } };
2883
+ const level = Number(value);
2884
+ await entity.command("genLevelCtrl", "moveToLevel", { level, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
2885
+ globalStore.putValue(entity, "brightness", level);
2886
+ return { state: { brightness: level } };
2907
2887
  }
2908
2888
  if (key === "brightness" && utils.isNumber(meta.message.color_temp)) {
2909
- const zclData = { colortemp: utils.mapNumberRange(meta.message.color_temp, 500, 154, 0, 254), transtime: 0 };
2910
- const zclDataBrightness = { level: Number(value), transtime: 0 };
2889
+ const level = Number(value);
2911
2890
  await entity.command("lightingColorCtrl", "tuyaRgbMode", { enable: 0 });
2912
- await entity.command("lightingColorCtrl", "moveToColorTemp", zclData, utils.getOptions(meta.mapped, entity));
2913
- await entity.command("genLevelCtrl", "moveToLevel", zclDataBrightness, utils.getOptions(meta.mapped, entity));
2914
- globalStore.putValue(entity, "brightness", zclDataBrightness.level);
2891
+ await entity.command("lightingColorCtrl", "moveToColorTemp", {
2892
+ colortemp: utils.mapNumberRange(meta.message.color_temp, 500, 154, 0, 254),
2893
+ transtime: 0,
2894
+ optionsMask: 0,
2895
+ optionsOverride: 0,
2896
+ }, utils.getOptions(meta.mapped, entity));
2897
+ await entity.command("genLevelCtrl", "moveToLevel", { level, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
2898
+ globalStore.putValue(entity, "brightness", level);
2915
2899
  const newState = {
2916
- brightness: zclDataBrightness.level,
2900
+ brightness: level,
2917
2901
  color_mode: constants.colorModeLookup[2],
2918
2902
  color_temp: meta.message.color_temp,
2919
2903
  };
@@ -2921,13 +2905,12 @@ exports.tuya_led_control = {
2921
2905
  }
2922
2906
  if (key === "color_temp") {
2923
2907
  utils.assertNumber(value, key);
2924
- const zclData = { colortemp: utils.mapNumberRange(value, 500, 154, 0, 254), transtime: 0 };
2925
- const zclDataBrightness = { level: globalStore.getValue(entity, "brightness") || 100, transtime: 0 };
2908
+ const level = globalStore.getValue(entity, "brightness") || 100;
2926
2909
  await entity.command("lightingColorCtrl", "tuyaRgbMode", { enable: 0 });
2927
- await entity.command("lightingColorCtrl", "moveToColorTemp", zclData, utils.getOptions(meta.mapped, entity));
2928
- await entity.command("genLevelCtrl", "moveToLevel", zclDataBrightness, utils.getOptions(meta.mapped, entity));
2910
+ await entity.command("lightingColorCtrl", "moveToColorTemp", { colortemp: utils.mapNumberRange(value, 500, 154, 0, 254), transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
2911
+ await entity.command("genLevelCtrl", "moveToLevel", { level, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
2929
2912
  const newState = {
2930
- brightness: zclDataBrightness.level,
2913
+ brightness: level,
2931
2914
  color_mode: constants.colorModeLookup[2],
2932
2915
  color_temp: value,
2933
2916
  };
@@ -3008,8 +2991,7 @@ exports.tuya_led_controller = {
3008
2991
  await entity.command("genOnOff", "offWithEffect", { effectid: 0x01, effectvariant: 0x01 }, utils.getOptions(meta.mapped, entity));
3009
2992
  }
3010
2993
  else {
3011
- const payload = { level: 255, transtime: 0 };
3012
- await entity.command("genLevelCtrl", "moveToLevelWithOnOff", payload, utils.getOptions(meta.mapped, entity));
2994
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: 255, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
3013
2995
  }
3014
2996
  return { state: { state: value.toUpperCase() } };
3015
2997
  }
@@ -3019,8 +3001,8 @@ exports.tuya_led_controller = {
3019
3001
  const saturation = utils.mapNumberRange(value.s, 0, 100, 0, 254);
3020
3002
  const transtime = 0;
3021
3003
  const direction = 0;
3022
- await entity.command("lightingColorCtrl", "moveToHue", { hue, transtime, direction }, utils.getOptions(meta.mapped, entity));
3023
- await entity.command("lightingColorCtrl", "moveToSaturation", { saturation, transtime }, utils.getOptions(meta.mapped, entity));
3004
+ await entity.command("lightingColorCtrl", "moveToHue", { hue, transtime, direction, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
3005
+ await entity.command("lightingColorCtrl", "moveToSaturation", { saturation, transtime, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
3024
3006
  }
3025
3007
  },
3026
3008
  convertGet: async (entity, key, meta) => {
@@ -3081,7 +3063,6 @@ exports.eurotronic_host_flags = {
3081
3063
  if (meta.state.child_lock === "LOCK") {
3082
3064
  bitValue |= 0x80;
3083
3065
  }
3084
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3085
3066
  value = bitValue;
3086
3067
  const payload = { 16392: { value, type: 0x22 } };
3087
3068
  await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
@@ -3156,7 +3137,6 @@ exports.eurotronic_child_lock = {
3156
3137
  bitValue |= 0x80;
3157
3138
  }
3158
3139
  const origValue = value;
3159
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3160
3140
  value = bitValue;
3161
3141
  const payload = { 16392: { value, type: 0x22 } };
3162
3142
  await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
@@ -3188,7 +3168,6 @@ exports.eurotronic_mirror_display = {
3188
3168
  bitValue |= 0x80;
3189
3169
  }
3190
3170
  const origValue = value;
3191
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3192
3171
  value = bitValue;
3193
3172
  const payload = { 16392: { value, type: 0x22 } };
3194
3173
  await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
@@ -3211,18 +3190,15 @@ exports.DTB190502A1_LED = {
3211
3190
  key: ["LED"],
3212
3191
  convertSet: async (entity, key, value, meta) => {
3213
3192
  if (value === "default") {
3214
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3215
3193
  value = 1;
3216
3194
  }
3217
3195
  const lookup = {
3218
3196
  OFF: 0,
3219
3197
  ON: 1,
3220
3198
  };
3221
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3222
3199
  value = utils.getFromLookup(value, lookup);
3223
3200
  // Check for valid data
3224
3201
  utils.assertNumber(value, key);
3225
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3226
3202
  if ((value >= 0 && value < 2) === false)
3227
3203
  value = 0;
3228
3204
  const payload = {
@@ -3340,7 +3316,6 @@ exports.bticino_4027C_cover_state = {
3340
3316
  const lookup = invert
3341
3317
  ? { open: "upOpen", close: "downClose", stop: "stop", on: "upOpen", off: "downClose" }
3342
3318
  : { open: "downClose", close: "upOpen", stop: "stop", on: "downClose", off: "upOpen" };
3343
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3344
3319
  value = value.toLowerCase();
3345
3320
  utils.validateValue(value, Object.keys(lookup));
3346
3321
  let position = 50;
@@ -3394,7 +3369,6 @@ exports.legrand_device_mode = {
3394
3369
  pilot_on: 0x0002,
3395
3370
  pilot_off: 0x0001,
3396
3371
  };
3397
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
3398
3372
  value = value.toLowerCase();
3399
3373
  utils.validateValue(value, Object.keys(lookup));
3400
3374
  const payload = { 0: { value: utils.getFromLookup(value, lookup), type: 9 } };
@@ -3491,7 +3465,7 @@ exports.TYZB01_on_off = {
3491
3465
  }
3492
3466
  const timeInSeconds = Number(timeInSecondsValue);
3493
3467
  if (!Number.isInteger(timeInSeconds) || timeInSeconds < 0 || timeInSeconds > 0xfffe) {
3494
- throw Error("The time_in_seconds value must be convertible to an integer in the range: <0x0000, 0xFFFE>");
3468
+ throw new Error("The time_in_seconds value must be convertible to an integer in the range: <0x0000, 0xFFFE>");
3495
3469
  }
3496
3470
  const on = lowerCaseValue === "on";
3497
3471
  await entity.command("genOnOff", "onWithTimedOff", {
@@ -3725,7 +3699,7 @@ exports.scene_recall = {
3725
3699
  const groupid = utils.isGroup(entity) ? entity.groupID : 0;
3726
3700
  utils.assertNumber(value);
3727
3701
  const sceneid = value;
3728
- await entity.command("genScenes", "recall", { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3702
+ await entity.command("genScenes", "recall", { groupid, sceneid, transitionTime: 0xffff }, utils.getOptions(meta.mapped, entity));
3729
3703
  const addColorMode = (newState) => {
3730
3704
  if (newState.color_temp !== undefined) {
3731
3705
  newState.color_mode = constants.colorModeLookup[2];
@@ -4002,7 +3976,6 @@ exports.TS0003_curtain_switch = {
4002
3976
  utils.assertString(value, key);
4003
3977
  utils.assertEndpoint(entity);
4004
3978
  const lookup = { close: 1, stop: 2, open: 1 };
4005
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4006
3979
  value = value.toLowerCase();
4007
3980
  utils.validateValue(value, Object.keys(lookup));
4008
3981
  const endpointID = utils.getFromLookup(value, lookup);
@@ -4060,7 +4033,6 @@ exports.tuya_cover_calibration = {
4060
4033
  }
4061
4034
  utils.assertString(value, key);
4062
4035
  const lookup = { ON: 0, OFF: 1 };
4063
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4064
4036
  value = value.toUpperCase();
4065
4037
  const calibration = utils.getFromLookup(value, lookup);
4066
4038
  if (key === "calibration" || key === "calibration_to_open") {
@@ -4091,7 +4063,6 @@ exports.tuya_cover_reversal = {
4091
4063
  convertSet: async (entity, key, value, meta) => {
4092
4064
  utils.assertString(value, key);
4093
4065
  const lookup = { ON: 1, OFF: 0 };
4094
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4095
4066
  value = value.toUpperCase();
4096
4067
  const reversal = utils.getFromLookup(value, lookup);
4097
4068
  await entity.write("closuresWindowCovering", { tuyaMotorReversal: reversal });
@@ -4138,7 +4109,6 @@ exports.ZM35HQ_attr = {
4138
4109
  exports.TS0210_sensitivity = {
4139
4110
  key: ["sensitivity"],
4140
4111
  convertSet: async (entity, key, value, meta) => {
4141
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4142
4112
  value = utils.toNumber(value, "sensitivity");
4143
4113
  await entity.write("ssIasZone", { currentZoneSensitivityLevel: value });
4144
4114
  return { state: { sensitivity: value } };
@@ -4238,7 +4208,6 @@ exports.schneider_pilot_mode = {
4238
4208
  convertSet: async (entity, key, value, meta) => {
4239
4209
  utils.assertString(value, key);
4240
4210
  const lookup = { contactor: 1, pilot: 3 };
4241
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4242
4211
  value = value.toLowerCase();
4243
4212
  const mode = utils.getFromLookup(value, lookup);
4244
4213
  await entity.write("schneiderSpecificPilotMode", { pilotMode: mode }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
@@ -4331,7 +4300,6 @@ exports.wiser_fip_setting = {
4331
4300
  const zoneLookup = { manual: 1, schedule: 2, energy_saver: 3, holiday: 6 };
4332
4301
  const zonemodeNum = utils.getFromLookup(meta.state.zone_mode, zoneLookup);
4333
4302
  const fipLookup = { comfort: 0, "comfort_-1": 1, "comfort_-2": 2, energy_saving: 3, frost_protection: 4, off: 5 };
4334
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4335
4303
  value = value.toLowerCase();
4336
4304
  utils.validateValue(value, Object.keys(fipLookup));
4337
4305
  const fipmodeNum = utils.getFromLookup(value, fipLookup);
@@ -4352,7 +4320,6 @@ exports.wiser_hact_config = {
4352
4320
  convertSet: async (entity, key, value, meta) => {
4353
4321
  utils.assertString(value, key);
4354
4322
  const lookup = { unconfigured: 0x00, setpoint_switch: 0x80, setpoint_fip: 0x82, fip_fip: 0x83 };
4355
- // biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
4356
4323
  value = value.toLowerCase();
4357
4324
  const mode = utils.getFromLookup(value, lookup);
4358
4325
  await entity.write("hvacThermostat", { 57361: { value: mode, type: 0x18 } });