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.
- package/CHANGELOG.md +42 -0
- package/dist/converters/fromZigbee.d.ts +5 -4
- package/dist/converters/fromZigbee.d.ts.map +1 -1
- package/dist/converters/fromZigbee.js +2 -1
- package/dist/converters/fromZigbee.js.map +1 -1
- package/dist/converters/toZigbee.d.ts.map +1 -1
- package/dist/converters/toZigbee.js +64 -97
- package/dist/converters/toZigbee.js.map +1 -1
- package/dist/devices/amina.d.ts.map +1 -1
- package/dist/devices/amina.js +12 -13
- package/dist/devices/amina.js.map +1 -1
- package/dist/devices/atlantic.d.ts.map +1 -1
- package/dist/devices/atlantic.js +0 -2
- package/dist/devices/atlantic.js.map +1 -1
- package/dist/devices/aurora_lighting.d.ts.map +1 -1
- package/dist/devices/aurora_lighting.js +1 -1
- package/dist/devices/aurora_lighting.js.map +1 -1
- package/dist/devices/bosch.js +50 -50
- package/dist/devices/bosch.js.map +1 -1
- package/dist/devices/candeo.js +4 -4
- package/dist/devices/candeo.js.map +1 -1
- package/dist/devices/ctm.d.ts.map +1 -1
- package/dist/devices/ctm.js +1 -1
- package/dist/devices/ctm.js.map +1 -1
- package/dist/devices/easyiot.js +10 -10
- package/dist/devices/easyiot.js.map +1 -1
- package/dist/devices/gledopto.d.ts.map +1 -1
- package/dist/devices/gledopto.js +0 -1
- package/dist/devices/gledopto.js.map +1 -1
- package/dist/devices/gmmts.js +1 -1
- package/dist/devices/heiman.d.ts.map +1 -1
- package/dist/devices/heiman.js +12 -5
- package/dist/devices/heiman.js.map +1 -1
- package/dist/devices/ikea.js +1 -1
- package/dist/devices/ikea.js.map +1 -1
- package/dist/devices/inovelli.d.ts.map +1 -1
- package/dist/devices/inovelli.js +117 -115
- package/dist/devices/inovelli.js.map +1 -1
- package/dist/devices/lightsolutions.js +1 -1
- package/dist/devices/lightsolutions.js.map +1 -1
- package/dist/devices/lixee.js +42 -42
- package/dist/devices/lixee.js.map +1 -1
- package/dist/devices/lytko.d.ts.map +1 -1
- package/dist/devices/lytko.js +43 -0
- package/dist/devices/lytko.js.map +1 -1
- package/dist/devices/mindy.js +1 -1
- package/dist/devices/mindy.js.map +1 -1
- package/dist/devices/multiterm.d.ts.map +1 -1
- package/dist/devices/multiterm.js +0 -1
- package/dist/devices/multiterm.js.map +1 -1
- package/dist/devices/niko.js +7 -7
- package/dist/devices/niko.js.map +1 -1
- package/dist/devices/onokom.js +12 -12
- package/dist/devices/orvibo.d.ts.map +1 -1
- package/dist/devices/orvibo.js +2 -4
- package/dist/devices/orvibo.js.map +1 -1
- package/dist/devices/owon.js +13 -13
- package/dist/devices/owon.js.map +1 -1
- package/dist/devices/perenio.js +2 -2
- package/dist/devices/perenio.js.map +1 -1
- package/dist/devices/philips.d.ts.map +1 -1
- package/dist/devices/philips.js +10 -3
- package/dist/devices/philips.js.map +1 -1
- package/dist/devices/plugwise.d.ts.map +1 -1
- package/dist/devices/plugwise.js +7 -2
- package/dist/devices/plugwise.js.map +1 -1
- package/dist/devices/salus_controls.js +16 -16
- package/dist/devices/salus_controls.js.map +1 -1
- package/dist/devices/sber.d.ts.map +1 -1
- package/dist/devices/sber.js +143 -25
- package/dist/devices/sber.js.map +1 -1
- package/dist/devices/schneider_electric.d.ts.map +1 -1
- package/dist/devices/schneider_electric.js +39 -39
- package/dist/devices/schneider_electric.js.map +1 -1
- package/dist/devices/sengled.js +4 -4
- package/dist/devices/sengled.js.map +1 -1
- package/dist/devices/shelly.js +14 -14
- package/dist/devices/shelly.js.map +1 -1
- package/dist/devices/shinasystem.d.ts.map +1 -1
- package/dist/devices/shinasystem.js +0 -1
- package/dist/devices/shinasystem.js.map +1 -1
- package/dist/devices/simon.d.ts.map +1 -1
- package/dist/devices/simon.js +42 -2
- package/dist/devices/simon.js.map +1 -1
- package/dist/devices/sinope.d.ts.map +1 -1
- package/dist/devices/sinope.js +43 -4
- package/dist/devices/sinope.js.map +1 -1
- package/dist/devices/slacky_diy.d.ts.map +1 -1
- package/dist/devices/slacky_diy.js +2 -2
- package/dist/devices/slacky_diy.js.map +1 -1
- package/dist/devices/sonoff.d.ts.map +1 -1
- package/dist/devices/sonoff.js +74 -69
- package/dist/devices/sonoff.js.map +1 -1
- package/dist/devices/sunricher.d.ts.map +1 -1
- package/dist/devices/sunricher.js +24 -7
- package/dist/devices/sunricher.js.map +1 -1
- package/dist/devices/third_reality.js +57 -57
- package/dist/devices/third_reality.js.map +1 -1
- package/dist/devices/trust.d.ts.map +1 -1
- package/dist/devices/trust.js +1 -0
- package/dist/devices/trust.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +304 -7
- package/dist/devices/tuya.js.map +1 -1
- package/dist/devices/ubisys.d.ts.map +1 -1
- package/dist/devices/ubisys.js +0 -2
- package/dist/devices/ubisys.js.map +1 -1
- package/dist/devices/wirenboard.d.ts.map +1 -1
- package/dist/devices/wirenboard.js +9 -11
- package/dist/devices/wirenboard.js.map +1 -1
- package/dist/devices/xyzroe.js +2 -2
- package/dist/devices/xyzroe.js.map +1 -1
- package/dist/devices/yandex.d.ts.map +1 -1
- package/dist/devices/yandex.js +18 -17
- package/dist/devices/yandex.js.map +1 -1
- package/dist/devices/zemismart.d.ts.map +1 -1
- package/dist/devices/zemismart.js +8 -1
- package/dist/devices/zemismart.js.map +1 -1
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +0 -1
- package/dist/indexer.js.map +1 -1
- package/dist/lib/bosch.d.ts.map +1 -1
- package/dist/lib/bosch.js +199 -55
- package/dist/lib/bosch.js.map +1 -1
- package/dist/lib/color.d.ts.map +1 -1
- package/dist/lib/color.js +0 -3
- package/dist/lib/color.js.map +1 -1
- package/dist/lib/develco.d.ts.map +1 -1
- package/dist/lib/develco.js +15 -9
- package/dist/lib/develco.js.map +1 -1
- package/dist/lib/exposes.d.ts.map +1 -1
- package/dist/lib/exposes.js +2 -2
- package/dist/lib/exposes.js.map +1 -1
- package/dist/lib/heiman.d.ts +82 -0
- package/dist/lib/heiman.d.ts.map +1 -1
- package/dist/lib/heiman.js +31 -31
- package/dist/lib/heiman.js.map +1 -1
- package/dist/lib/ikea.d.ts.map +1 -1
- package/dist/lib/ikea.js +16 -21
- package/dist/lib/ikea.js.map +1 -1
- package/dist/lib/ledvance.d.ts.map +1 -1
- package/dist/lib/ledvance.js +0 -2
- package/dist/lib/ledvance.js.map +1 -1
- package/dist/lib/legacy.d.ts.map +1 -1
- package/dist/lib/legacy.js +0 -44
- package/dist/lib/legacy.js.map +1 -1
- package/dist/lib/light.d.ts +1 -1
- package/dist/lib/lumi.d.ts.map +1 -1
- package/dist/lib/lumi.js +0 -23
- package/dist/lib/lumi.js.map +1 -1
- package/dist/lib/nodon.js +2 -2
- package/dist/lib/nodon.js.map +1 -1
- package/dist/lib/ota.d.ts.map +1 -1
- package/dist/lib/ota.js +0 -5
- package/dist/lib/ota.js.map +1 -1
- package/dist/lib/philips.d.ts.map +1 -1
- package/dist/lib/philips.js +4 -23
- package/dist/lib/philips.js.map +1 -1
- package/dist/lib/tuya.d.ts.map +1 -1
- package/dist/lib/tuya.js +3 -7
- package/dist/lib/tuya.js.map +1 -1
- package/dist/lib/ubisys.d.ts.map +1 -1
- package/dist/lib/ubisys.js +231 -35
- package/dist/lib/ubisys.js.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +0 -5
- package/dist/lib/utils.js.map +1 -1
- package/dist/models-index.json +1 -1
- 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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
931
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
2904
|
-
await entity.command("genLevelCtrl", "moveToLevel",
|
|
2905
|
-
globalStore.putValue(entity, "brightness",
|
|
2906
|
-
return { state: { brightness:
|
|
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
|
|
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",
|
|
2913
|
-
|
|
2914
|
-
|
|
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:
|
|
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
|
|
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",
|
|
2928
|
-
await entity.command("genLevelCtrl", "moveToLevel",
|
|
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:
|
|
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
|
-
|
|
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 } });
|