zigbee-herdsman-converters 25.89.0 → 25.91.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 +50 -0
- package/dist/devices/bubendorff.d.ts +3 -0
- package/dist/devices/bubendorff.d.ts.map +1 -0
- package/dist/devices/bubendorff.js +47 -0
- package/dist/devices/bubendorff.js.map +1 -0
- package/dist/devices/easyiot.js +5 -2
- package/dist/devices/easyiot.js.map +1 -1
- package/dist/devices/envilar.d.ts.map +1 -1
- package/dist/devices/envilar.js +7 -0
- package/dist/devices/envilar.js.map +1 -1
- package/dist/devices/ewelink.d.ts.map +1 -1
- package/dist/devices/ewelink.js +2 -1
- package/dist/devices/ewelink.js.map +1 -1
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +2 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/innr.d.ts.map +1 -1
- package/dist/devices/innr.js +7 -0
- package/dist/devices/innr.js.map +1 -1
- package/dist/devices/lincukoo.d.ts.map +1 -1
- package/dist/devices/lincukoo.js +8 -0
- package/dist/devices/lincukoo.js.map +1 -1
- package/dist/devices/lumi.d.ts.map +1 -1
- package/dist/devices/lumi.js +32 -12
- package/dist/devices/lumi.js.map +1 -1
- package/dist/devices/philips.d.ts.map +1 -1
- package/dist/devices/philips.js +63 -30
- package/dist/devices/philips.js.map +1 -1
- package/dist/devices/schneider_electric.d.ts.map +1 -1
- package/dist/devices/schneider_electric.js +5 -1
- package/dist/devices/schneider_electric.js.map +1 -1
- package/dist/devices/sinope.d.ts.map +1 -1
- package/dist/devices/sinope.js +3 -2
- package/dist/devices/sinope.js.map +1 -1
- package/dist/devices/somfy.d.ts.map +1 -1
- package/dist/devices/somfy.js +7 -0
- package/dist/devices/somfy.js.map +1 -1
- package/dist/devices/third_reality.d.ts.map +1 -1
- package/dist/devices/third_reality.js +196 -26
- package/dist/devices/third_reality.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +241 -116
- package/dist/devices/tuya.js.map +1 -1
- package/dist/lib/lumi.d.ts +3 -0
- package/dist/lib/lumi.d.ts.map +1 -1
- package/dist/lib/lumi.js +113 -0
- package/dist/lib/lumi.js.map +1 -1
- package/dist/lib/tuya.d.ts +4 -4
- package/dist/lib/tuya.d.ts.map +1 -1
- package/dist/lib/tuya.js +28 -15
- package/dist/lib/tuya.js.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +2 -2
package/dist/devices/tuya.js
CHANGED
|
@@ -2580,6 +2580,7 @@ exports.definitions = [
|
|
|
2580
2580
|
exposes: [e.power_on_behavior(["off", "on", "toggle", "previous"])],
|
|
2581
2581
|
meta: {
|
|
2582
2582
|
moveToLevelWithOnOffDisable: true,
|
|
2583
|
+
noOffTransitionWhenOff: true,
|
|
2583
2584
|
},
|
|
2584
2585
|
configure: async (device, coordinatorEndpoint) => {
|
|
2585
2586
|
const endpoint = device.getEndpoint(1);
|
|
@@ -3919,6 +3920,42 @@ exports.definitions = [
|
|
|
3919
3920
|
extend: [m.battery(), m.windowCovering({ controls: ["lift"] })],
|
|
3920
3921
|
whiteLabel: [tuya.whitelabel("Yookee", "D10110_1", "Smart blind", ["_TZE200_9caxna4s"])],
|
|
3921
3922
|
},
|
|
3923
|
+
{
|
|
3924
|
+
fingerprint: tuya.fingerprint("TS0301", ["_TZE210_m6lwazh9"]),
|
|
3925
|
+
model: "TS0301_cover_1",
|
|
3926
|
+
vendor: "Tuya",
|
|
3927
|
+
description: "Cover motor",
|
|
3928
|
+
extend: [tuya.modernExtend.tuyaBase({ dp: true })],
|
|
3929
|
+
options: [exposes.options.invert_cover()],
|
|
3930
|
+
exposes: [
|
|
3931
|
+
e.battery(),
|
|
3932
|
+
e.cover_position().setAccess("position", ea.STATE_SET),
|
|
3933
|
+
e.enum("reverse_direction", ea.STATE_SET, ["forward", "back"]).withDescription("Reverse the motor direction"),
|
|
3934
|
+
],
|
|
3935
|
+
meta: {
|
|
3936
|
+
tuyaDatapoints: [
|
|
3937
|
+
[
|
|
3938
|
+
1,
|
|
3939
|
+
"state",
|
|
3940
|
+
tuya.valueConverterBasic.lookup({
|
|
3941
|
+
OPEN: tuya.enum(0),
|
|
3942
|
+
STOP: tuya.enum(1),
|
|
3943
|
+
CLOSE: tuya.enum(2),
|
|
3944
|
+
}),
|
|
3945
|
+
],
|
|
3946
|
+
[2, "position", tuya.valueConverter.coverPosition],
|
|
3947
|
+
[3, "position", tuya.valueConverter.coverPosition],
|
|
3948
|
+
[
|
|
3949
|
+
5,
|
|
3950
|
+
"reverse_direction",
|
|
3951
|
+
tuya.valueConverterBasic.lookup({
|
|
3952
|
+
forward: tuya.enum(0),
|
|
3953
|
+
back: tuya.enum(1),
|
|
3954
|
+
}),
|
|
3955
|
+
],
|
|
3956
|
+
],
|
|
3957
|
+
},
|
|
3958
|
+
},
|
|
3922
3959
|
{
|
|
3923
3960
|
fingerprint: tuya.fingerprint("TS0601", [
|
|
3924
3961
|
"_TZE200_aqnazj70",
|
|
@@ -4816,56 +4853,34 @@ exports.definitions = [
|
|
|
4816
4853
|
},
|
|
4817
4854
|
{
|
|
4818
4855
|
fingerprint: tuya.fingerprint("TS0601", ["_TZE200_dzuqwsyg", "_TZE204_dzuqwsyg"]),
|
|
4819
|
-
model: "BAC-
|
|
4856
|
+
model: "BAC-002",
|
|
4820
4857
|
vendor: "Tuya",
|
|
4821
4858
|
description: "FCU thermostat temperature controller",
|
|
4822
4859
|
extend: [tuya.modernExtend.tuyaBase({ dp: true, forceTimeUpdates: true, timeStart: "1970" })],
|
|
4823
4860
|
options: [
|
|
4861
|
+
e.enum("control_sequence_of_operation", ea.SET, ["cooling_only", "cooling_and_heating_4-pipes"]),
|
|
4862
|
+
e.binary("expose_device_state", ea.SET, true, false),
|
|
4863
|
+
],
|
|
4864
|
+
exposes: [
|
|
4824
4865
|
e
|
|
4825
|
-
.
|
|
4826
|
-
.
|
|
4827
|
-
|
|
4866
|
+
.climate()
|
|
4867
|
+
.withLocalTemperature(ea.STATE)
|
|
4868
|
+
.withSystemMode(["off", "cool", "heat", "fan_only"], ea.STATE_SET)
|
|
4869
|
+
.withFanMode(["low", "medium", "high", "auto"], ea.STATE_SET)
|
|
4870
|
+
.withSetpoint("current_heating_setpoint", 5, 35, 1, ea.STATE_SET)
|
|
4871
|
+
.withPreset(["auto", "manual"])
|
|
4872
|
+
.withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET),
|
|
4873
|
+
e.child_lock(),
|
|
4874
|
+
e.max_temperature().withValueMin(35).withValueMax(45),
|
|
4875
|
+
e.numeric("deadzone_temperature", ea.STATE_SET).withUnit("°C").withValueMax(5).withValueMin(1),
|
|
4876
|
+
e.text("schedule_text", ea.STATE_SET).withDescription(`Weekly schedule in the format "HH:MM/TT HH:MM/TT ...".
|
|
4877
|
+
Example for 12 segments:
|
|
4878
|
+
"06:00/20 11:30/21 13:30/22 17:30/23 06:00/24 12:00/23 14:30/22 17:30/21 06:00/19 12:30/20 14:30/21 18:30/20".
|
|
4879
|
+
Each segment contains:
|
|
4880
|
+
- HH:MM: Time in 24-hour format.
|
|
4881
|
+
- TT: Temperature in °C.
|
|
4882
|
+
Ensure all 12 segments are defined and separated by spaces.`),
|
|
4828
4883
|
],
|
|
4829
|
-
exposes: (device, options) => {
|
|
4830
|
-
const system_modes = ["off", "cool", "heat", "fan_only"];
|
|
4831
|
-
// Device can operate either in 2-pipe or 4-pipe configuration
|
|
4832
|
-
// For 2-pipe configurations remove 'heat' mode
|
|
4833
|
-
switch (options?.control_sequence_of_operation) {
|
|
4834
|
-
case "cooling_only":
|
|
4835
|
-
system_modes.splice(2, 1);
|
|
4836
|
-
break;
|
|
4837
|
-
}
|
|
4838
|
-
const exposes = [
|
|
4839
|
-
e
|
|
4840
|
-
.climate()
|
|
4841
|
-
.withLocalTemperature(ea.STATE)
|
|
4842
|
-
.withSystemMode(system_modes, ea.STATE_SET)
|
|
4843
|
-
.withFanMode(["low", "medium", "high", "auto"], ea.STATE_SET)
|
|
4844
|
-
.withSetpoint("current_heating_setpoint", 5, 35, 1, ea.STATE_SET)
|
|
4845
|
-
.withPreset(["auto", "manual"])
|
|
4846
|
-
.withLocalTemperatureCalibration(-3, 3, 1, ea.STATE_SET),
|
|
4847
|
-
e.child_lock(),
|
|
4848
|
-
e
|
|
4849
|
-
.composite("schedule", "schedule", ea.STATE_SET)
|
|
4850
|
-
.withFeature(e.text("weekdays", ea.SET).withDescription('Schedule (1-5), 4 periods in format "hh:mm/tt".'))
|
|
4851
|
-
.withFeature(e.text("saturday", ea.SET).withDescription('Schedule (6), 4 periods in format "hh:mm/tt".'))
|
|
4852
|
-
.withFeature(e.text("sunday", ea.SET).withDescription('Schedule (7), 4 periods in format "hh:mm/tt".'))
|
|
4853
|
-
.withDescription('Auto-mode schedule, 4 periods each per category. Example: "06:00/20 11:30/21 13:30/22 17:30/23.5".'),
|
|
4854
|
-
e.max_temperature().withValueMin(35).withValueMax(45).withPreset("default", 35, "Default value"),
|
|
4855
|
-
e
|
|
4856
|
-
.numeric("deadzone_temperature", ea.STATE_SET)
|
|
4857
|
-
.withUnit("°C")
|
|
4858
|
-
.withValueMax(5)
|
|
4859
|
-
.withValueMin(1)
|
|
4860
|
-
.withValueStep(1)
|
|
4861
|
-
.withPreset("default", 1, "Default value")
|
|
4862
|
-
.withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity"),
|
|
4863
|
-
];
|
|
4864
|
-
if (options?.expose_device_state === true) {
|
|
4865
|
-
exposes.unshift(e.binary("state", ea.STATE_SET, "ON", "OFF").withDescription("Turn the thermostat ON or OFF"));
|
|
4866
|
-
}
|
|
4867
|
-
return exposes;
|
|
4868
|
-
},
|
|
4869
4884
|
meta: {
|
|
4870
4885
|
publishDuplicateTransaction: true,
|
|
4871
4886
|
tuyaDatapoints: [
|
|
@@ -4880,9 +4895,8 @@ exports.definitions = [
|
|
|
4880
4895
|
},
|
|
4881
4896
|
from: (v, meta, options) => {
|
|
4882
4897
|
meta.state.system_mode = v === true ? (meta.state.system_mode_device ?? "cool") : "off";
|
|
4883
|
-
if (options?.expose_device_state === true)
|
|
4898
|
+
if (options?.expose_device_state === true)
|
|
4884
4899
|
return v === true ? "ON" : "OFF";
|
|
4885
|
-
}
|
|
4886
4900
|
delete meta.state.state;
|
|
4887
4901
|
},
|
|
4888
4902
|
},
|
|
@@ -4891,22 +4905,22 @@ exports.definitions = [
|
|
|
4891
4905
|
2,
|
|
4892
4906
|
"system_mode",
|
|
4893
4907
|
{
|
|
4894
|
-
// Extend system_mode to support 'off' in addition to 'cool', 'heat' and 'fan_only'
|
|
4895
4908
|
to: async (v, meta) => {
|
|
4896
|
-
const
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
case "heat":
|
|
4904
|
-
await tuya.sendDataPointEnum(entity, 2, 1, "dataRequest", 1);
|
|
4905
|
-
break;
|
|
4906
|
-
case "fan_only":
|
|
4907
|
-
await tuya.sendDataPointEnum(entity, 2, 2, "dataRequest", 1);
|
|
4908
|
-
break;
|
|
4909
|
+
const ep = meta.device.endpoints[0];
|
|
4910
|
+
if (v === "off") {
|
|
4911
|
+
await tuya.sendDataPointBool(ep, 1, true, "dataRequest", 1);
|
|
4912
|
+
await new Promise((r) => setTimeout(r, 120));
|
|
4913
|
+
await tuya.sendDataPointBool(ep, 1, false, "dataRequest", 1);
|
|
4914
|
+
await tuya.sendDataPointEnum(ep, 2, 0, "dataRequest", 1);
|
|
4915
|
+
return;
|
|
4909
4916
|
}
|
|
4917
|
+
await tuya.sendDataPointBool(ep, 1, true, "dataRequest", 1);
|
|
4918
|
+
if (v === "cool")
|
|
4919
|
+
await tuya.sendDataPointEnum(ep, 2, 0, "dataRequest", 1);
|
|
4920
|
+
if (v === "heat")
|
|
4921
|
+
await tuya.sendDataPointEnum(ep, 2, 1, "dataRequest", 1);
|
|
4922
|
+
if (v === "fan_only")
|
|
4923
|
+
await tuya.sendDataPointEnum(ep, 2, 2, "dataRequest", 1);
|
|
4910
4924
|
},
|
|
4911
4925
|
from: (v, meta) => {
|
|
4912
4926
|
const modes = ["cool", "heat", "fan_only"];
|
|
@@ -4915,7 +4929,21 @@ exports.definitions = [
|
|
|
4915
4929
|
},
|
|
4916
4930
|
},
|
|
4917
4931
|
],
|
|
4918
|
-
[
|
|
4932
|
+
[
|
|
4933
|
+
4,
|
|
4934
|
+
"preset",
|
|
4935
|
+
{
|
|
4936
|
+
to: async (v, meta) => {
|
|
4937
|
+
const ep = meta.device.endpoints[0];
|
|
4938
|
+
await tuya.sendDataPointBool(ep, 4, v === "manual");
|
|
4939
|
+
},
|
|
4940
|
+
from: (v, meta) => {
|
|
4941
|
+
const preset = v ? "manual" : "auto";
|
|
4942
|
+
meta.state.preset = preset;
|
|
4943
|
+
return preset;
|
|
4944
|
+
},
|
|
4945
|
+
},
|
|
4946
|
+
],
|
|
4919
4947
|
[16, "current_heating_setpoint", tuya.valueConverter.raw],
|
|
4920
4948
|
[19, "max_temperature", tuya.valueConverter.raw],
|
|
4921
4949
|
[24, "local_temperature", tuya.valueConverter.divideBy10],
|
|
@@ -4936,46 +4964,39 @@ exports.definitions = [
|
|
|
4936
4964
|
101,
|
|
4937
4965
|
"schedule",
|
|
4938
4966
|
{
|
|
4939
|
-
to: (v, meta) => {
|
|
4940
|
-
const periods = (value) => {
|
|
4941
|
-
const regex = /((?<h>[01][0-9]|2[0-3]):(?<m>[0-5][0-9])\/(?<t>[0-3][0-9](\.[0,5]|)))/gm;
|
|
4942
|
-
const matches = [...value.matchAll(regex)];
|
|
4943
|
-
if (matches.length === 4) {
|
|
4944
|
-
return matches.reduce((arr, m) => {
|
|
4945
|
-
arr.push(Number.parseInt(m.groups.h, 10));
|
|
4946
|
-
arr.push(Number.parseInt(m.groups.m, 10));
|
|
4947
|
-
arr.push(Number.parseFloat(m.groups.t) * 2);
|
|
4948
|
-
return arr;
|
|
4949
|
-
}, []);
|
|
4950
|
-
}
|
|
4951
|
-
logger_1.logger.warning("Ignoring invalid or incomplete schedule", NS);
|
|
4952
|
-
};
|
|
4953
|
-
const schedule = [...periods(v.weekdays), ...periods(v.saturday), ...periods(v.sunday)];
|
|
4954
|
-
return schedule;
|
|
4955
|
-
},
|
|
4956
4967
|
from: (v, meta) => {
|
|
4957
|
-
const format = (data) => {
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
4961
|
-
|
|
4962
|
-
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
|
|
4978
|
-
|
|
4968
|
+
const format = (data) => data.reduce((txt, val, i) => {
|
|
4969
|
+
if (i % 3 === 0)
|
|
4970
|
+
return `${txt}${i > 0 ? " " : ""}${val.toString().padStart(2, "0")}`;
|
|
4971
|
+
if (i % 3 === 1)
|
|
4972
|
+
return `${txt}:${val.toString().padStart(2, "0")}`;
|
|
4973
|
+
return `${txt}/${val / 2}`;
|
|
4974
|
+
}, "");
|
|
4975
|
+
const weekdays = format(v.slice(0, 12));
|
|
4976
|
+
const saturday = format(v.slice(12, 24));
|
|
4977
|
+
const sunday = format(v.slice(24, 36));
|
|
4978
|
+
const full = `${weekdays} ${saturday} ${sunday}`.trim();
|
|
4979
|
+
meta.state.schedule_text = full;
|
|
4980
|
+
return full;
|
|
4981
|
+
},
|
|
4982
|
+
},
|
|
4983
|
+
],
|
|
4984
|
+
[
|
|
4985
|
+
202,
|
|
4986
|
+
"schedule_text",
|
|
4987
|
+
{
|
|
4988
|
+
to: async (v, meta) => {
|
|
4989
|
+
const regex = /((?<h>[01][0-9]|2[0-3]):(?<m>[0-5][0-9])\/(?<t>[0-3]?[0-9](\.[0,5])?))/gm;
|
|
4990
|
+
const matches = [...v.matchAll(regex)];
|
|
4991
|
+
if (matches.length !== 12)
|
|
4992
|
+
return;
|
|
4993
|
+
const result = [];
|
|
4994
|
+
for (const m of matches) {
|
|
4995
|
+
result.push(Number(m.groups?.h));
|
|
4996
|
+
result.push(Number(m.groups?.m));
|
|
4997
|
+
result.push(Number(m.groups?.t) * 2);
|
|
4998
|
+
}
|
|
4999
|
+
await tuya.sendDataPointRaw(meta.device.endpoints[0], 101, Buffer.from(result));
|
|
4979
5000
|
},
|
|
4980
5001
|
},
|
|
4981
5002
|
],
|
|
@@ -5372,17 +5393,17 @@ exports.definitions = [
|
|
|
5372
5393
|
vendor: "Tuya",
|
|
5373
5394
|
description: "3-Gang switch with backlight",
|
|
5374
5395
|
extend: [
|
|
5396
|
+
tuya.modernExtend.tuyaMagicPacket(),
|
|
5397
|
+
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3 } }),
|
|
5375
5398
|
tuya.modernExtend.tuyaOnOff({
|
|
5376
|
-
powerOnBehavior2:
|
|
5377
|
-
indicatorMode:
|
|
5399
|
+
powerOnBehavior2: (m) => m !== "_TZ3000_nwidmc4n",
|
|
5400
|
+
indicatorMode: (m) => m !== "_TZ3000_nwidmc4n",
|
|
5378
5401
|
backlightModeOffOn: true,
|
|
5379
5402
|
endpoints: ["l1", "l2", "l3"],
|
|
5403
|
+
powerOutageMemory: (m) => m === "_TZ3000_nwidmc4n",
|
|
5404
|
+
switchType: (m) => m === "_TZ3000_nwidmc4n",
|
|
5380
5405
|
}),
|
|
5381
5406
|
],
|
|
5382
|
-
endpoint: (device) => {
|
|
5383
|
-
return { l1: 1, l2: 2, l3: 3 };
|
|
5384
|
-
},
|
|
5385
|
-
meta: { multiEndpoint: true },
|
|
5386
5407
|
configure: async (device, coordinatorEndpoint) => {
|
|
5387
5408
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
5388
5409
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -5394,6 +5415,7 @@ exports.definitions = [
|
|
|
5394
5415
|
tuya.whitelabel("Zemismart", "ZM-L03E-Z", "3 gang switch with neutral", ["_TZ3000_empogkya", "_TZ3000_lsunm46z"]),
|
|
5395
5416
|
tuya.whitelabel("Zemismart", "KES-606US-L3", "3 gang switch with neutral", ["_TZ3000_uilitwsy"]),
|
|
5396
5417
|
tuya.whitelabel("AVATTO", "ZWOT16-W2", "2 gang switch and 1 socket", ["_TZ3000_66fekqhh"]),
|
|
5418
|
+
tuya.whitelabel("AVATTO", "ZBTS60-03", "3 gang switch module with backlight", ["_TZ3000_nwidmc4n"]),
|
|
5397
5419
|
tuya.whitelabel("Tuya", "M10Z", "2 gang switch with 20A power socket", ["_TZ3000_lubfc1t5"]),
|
|
5398
5420
|
tuya.whitelabel("Zemismart", "ZMO-606-S2", "Smart 2 gangs switch with outlet", ["_TZ3000_aknpkt02"]),
|
|
5399
5421
|
],
|
|
@@ -5588,8 +5610,18 @@ exports.definitions = [
|
|
|
5588
5610
|
{ vendor: "OXT", model: "SWTZ21" },
|
|
5589
5611
|
{ vendor: "Moes", model: "ZM-104-M" },
|
|
5590
5612
|
tuya.whitelabel("AVATTO", "ZWSM16-1-Zigbee", "1 gang switch module", ["_TZ3000_4rbqgcuv"]),
|
|
5613
|
+
tuya.whitelabel("AVATTO", "ZBTS60-01", "1 gang switch module with backlight", ["_TZ3000_xfxpoxe0"]),
|
|
5614
|
+
],
|
|
5615
|
+
extend: [
|
|
5616
|
+
tuya.modernExtend.tuyaMagicPacket(),
|
|
5617
|
+
tuya.modernExtend.tuyaOnOff({
|
|
5618
|
+
switchType: true,
|
|
5619
|
+
onOffCountdown: (m) => m !== "_TZ3000_xfxpoxe0",
|
|
5620
|
+
indicatorMode: (m) => m !== "_TZ3000_xfxpoxe0",
|
|
5621
|
+
powerOutageMemory: (m) => m === "_TZ3000_xfxpoxe0",
|
|
5622
|
+
backlightModeOffOn: (m) => m === "_TZ3000_xfxpoxe0",
|
|
5623
|
+
}),
|
|
5591
5624
|
],
|
|
5592
|
-
extend: [tuya.modernExtend.tuyaOnOff({ switchType: true, onOffCountdown: true, indicatorMode: true })],
|
|
5593
5625
|
configure: async (device, coordinatorEndpoint) => {
|
|
5594
5626
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
5595
5627
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -6506,6 +6538,7 @@ exports.definitions = [
|
|
|
6506
6538
|
"_TZE204_ejh6owwz",
|
|
6507
6539
|
"_TZE200_ba69l9ol",
|
|
6508
6540
|
"_TZE200_68nvbi09",
|
|
6541
|
+
"_TZE200_vexa5o82",
|
|
6509
6542
|
]),
|
|
6510
6543
|
model: "TS0601_cover_3",
|
|
6511
6544
|
vendor: "Tuya",
|
|
@@ -6525,6 +6558,7 @@ exports.definitions = [
|
|
|
6525
6558
|
tuya.whitelabel("Zemismart", "ZM25EL", "Cover motor", ["_TZE200_pw7mji0l"]),
|
|
6526
6559
|
tuya.whitelabel("Zemismart", "ZM85EL-2Z", "Roman Rod I type U curtains track", ["_TZE200_cf1sl3tj", "_TZE200_nw1r9hp6"]),
|
|
6527
6560
|
tuya.whitelabel("Hiladuo", "B09M3R35GC", "Motorized roller shade", ["_TZE200_9p5xmj5r"]),
|
|
6561
|
+
tuya.whitelabel("Tuya", "MYQ-RM25-1.3/25-BZ", "Tubular roller blind motor", ["_TZE200_vexa5o82"]),
|
|
6528
6562
|
],
|
|
6529
6563
|
meta: {
|
|
6530
6564
|
// All datapoints go in here
|
|
@@ -9171,22 +9205,22 @@ exports.definitions = [
|
|
|
9171
9205
|
vendor: "Tuya",
|
|
9172
9206
|
description: "Smart light switch - 4 gang with neutral wire",
|
|
9173
9207
|
extend: [
|
|
9208
|
+
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3, l4: 4 } }),
|
|
9174
9209
|
tuya.modernExtend.tuyaOnOff({
|
|
9175
|
-
powerOnBehavior2:
|
|
9210
|
+
powerOnBehavior2: (m) => m !== "_TZ3000_r9e2w7dn",
|
|
9176
9211
|
backlightModeOffOn: true,
|
|
9177
9212
|
endpoints: ["l1", "l2", "l3", "l4"],
|
|
9213
|
+
powerOutageMemory: (m) => m === "_TZ3000_r9e2w7dn",
|
|
9214
|
+
switchType: (m) => m === "_TZ3000_r9e2w7dn",
|
|
9178
9215
|
}),
|
|
9179
9216
|
],
|
|
9180
|
-
endpoint: (device) => {
|
|
9181
|
-
return { l1: 1, l2: 2, l3: 3, l4: 4 };
|
|
9182
|
-
},
|
|
9183
9217
|
whiteLabel: [
|
|
9184
9218
|
tuya.whitelabel("Tuya", "DS-111", "Smart light switch - 4 gang with neutral wire", ["_TZ3000_mdj7kra9"]),
|
|
9185
9219
|
tuya.whitelabel("MHCOZY", "TYWB 4ch-RF", "4 channel relay", ["_TZ3000_u3oupgdy", "_TZ3000_imaccztn"]),
|
|
9186
9220
|
tuya.whitelabel("AVATTO", "TS0004_1", "Smart light switch - 4 gang with neutral wire", ["_TZ3000_nivavasg", "_TZ3000_gexniqbq"]),
|
|
9187
9221
|
tuya.whitelabel("Nova Digital", "SA-4", "Safira smart light switch - 4 gang", ["_TZ3000_iymfxdis"]),
|
|
9222
|
+
tuya.whitelabel("AVATTO", "ZBTS60-04", "4 gang switch module with backlight", ["_TZ3000_r9e2w7dn"]),
|
|
9188
9223
|
],
|
|
9189
|
-
meta: { multiEndpoint: true },
|
|
9190
9224
|
configure: async (device, coordinatorEndpoint) => {
|
|
9191
9225
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
9192
9226
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -9343,7 +9377,7 @@ exports.definitions = [
|
|
|
9343
9377
|
},
|
|
9344
9378
|
},
|
|
9345
9379
|
{
|
|
9346
|
-
fingerprint: tuya.fingerprint("TS0726", ["_TZ3002_iedhxgyi"]),
|
|
9380
|
+
fingerprint: tuya.fingerprint("TS0726", ["_TZ3002_iedhxgyi", "_TZ3000_lcjsewlo"]),
|
|
9347
9381
|
model: "TS0726_3_gang",
|
|
9348
9382
|
vendor: "Tuya",
|
|
9349
9383
|
description: "3 gang switch with neutral wire",
|
|
@@ -11381,6 +11415,7 @@ exports.definitions = [
|
|
|
11381
11415
|
"_TZ3290_uc8lwbi2",
|
|
11382
11416
|
"_TZ3290_nba3knpsarkawgnt",
|
|
11383
11417
|
"_TZ3290_8xzb2ghn",
|
|
11418
|
+
"_TZ3290_s6ezpa3j",
|
|
11384
11419
|
]),
|
|
11385
11420
|
model: "ZS06",
|
|
11386
11421
|
vendor: "Tuya",
|
|
@@ -11404,6 +11439,7 @@ exports.definitions = [
|
|
|
11404
11439
|
]),
|
|
11405
11440
|
tuya.whitelabel("Zemismart", "ZM-18-USB", "Universal smart IR remote control", ["_TZ3290_uc8lwbi2"]),
|
|
11406
11441
|
tuya.whitelabel("Zemismart", "ZXMIR-02", "Universal smart IR remote control", ["_TZ3290_8xzb2ghn"]),
|
|
11442
|
+
tuya.whitelabel("Ekaza", "EKAT-T304Z", "Universal smart IR remote control", ["_TZ3290_s6ezpa3j"]),
|
|
11407
11443
|
],
|
|
11408
11444
|
},
|
|
11409
11445
|
{
|
|
@@ -19279,7 +19315,7 @@ exports.definitions = [
|
|
|
19279
19315
|
},
|
|
19280
19316
|
},
|
|
19281
19317
|
{
|
|
19282
|
-
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_ezqbvrqz", "_TZ3002_ymv5vytn", "_TZ3002_6ahhkwyh", "_TZ3002_zjuvw9zf"]),
|
|
19318
|
+
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_ezqbvrqz", "_TZ3002_ymv5vytn", "_TZ3002_6ahhkwyh", "_TZ3002_zjuvw9zf", "_TZ3002_a4kvf6zd"]),
|
|
19283
19319
|
model: "TS0726_2_gang_scene_switch",
|
|
19284
19320
|
vendor: "Tuya",
|
|
19285
19321
|
description: "2 gang switch with scene and backlight",
|
|
@@ -19308,7 +19344,7 @@ exports.definitions = [
|
|
|
19308
19344
|
},
|
|
19309
19345
|
},
|
|
19310
19346
|
{
|
|
19311
|
-
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_noru9tix", "_TZ3002_rbnycsav", "_TZ3002_kq3kqwjt"]),
|
|
19347
|
+
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_noru9tix", "_TZ3002_rbnycsav", "_TZ3002_kq3kqwjt", "_TZ3002_ybtqbyk3"]),
|
|
19312
19348
|
model: "TS0726_3_gang_scene_switch",
|
|
19313
19349
|
vendor: "Tuya",
|
|
19314
19350
|
description: "3 gang switch with scene and backlight",
|
|
@@ -19336,7 +19372,7 @@ exports.definitions = [
|
|
|
19336
19372
|
},
|
|
19337
19373
|
},
|
|
19338
19374
|
{
|
|
19339
|
-
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_rsylfthg", "_TZ3002_umdkr64x"]),
|
|
19375
|
+
fingerprint: tuya.fingerprint("TS0726", ["_TZ3000_rsylfthg", "_TZ3002_umdkr64x", "_TZ3002_hkaktryd"]),
|
|
19340
19376
|
model: "TS0726_4_gang_scene_switch",
|
|
19341
19377
|
vendor: "Tuya",
|
|
19342
19378
|
description: "4 gang switch with scene and backlight",
|
|
@@ -20652,6 +20688,35 @@ exports.definitions = [
|
|
|
20652
20688
|
],
|
|
20653
20689
|
},
|
|
20654
20690
|
},
|
|
20691
|
+
{
|
|
20692
|
+
fingerprint: tuya.fingerprint("TS0601", ["_TZE200_mlglxwp3"]),
|
|
20693
|
+
model: "TS0601_cover_12",
|
|
20694
|
+
vendor: "Tuya",
|
|
20695
|
+
description: "Curtain motor",
|
|
20696
|
+
extend: [tuya.modernExtend.tuyaBase({ dp: true })],
|
|
20697
|
+
exposes: [
|
|
20698
|
+
e.cover_position().setAccess("position", ea.STATE_SET),
|
|
20699
|
+
e.enum("motor_direction", ea.STATE_SET, ["forward", "back"]).withDescription("Motor direction"),
|
|
20700
|
+
e.enum("work_state", ea.STATE, ["opening", "closing"]).withDescription("Current work state"),
|
|
20701
|
+
e.numeric("total_time", ea.STATE).withUnit("ms").withDescription("Total running time in milliseconds"),
|
|
20702
|
+
e.enum("situation_set", ea.STATE_SET, ["fully_close", "fully_open"]).withDescription("Set fully open or fully close position"),
|
|
20703
|
+
e.text("fault", ea.STATE).withDescription("Fault details"),
|
|
20704
|
+
e.battery(),
|
|
20705
|
+
],
|
|
20706
|
+
meta: {
|
|
20707
|
+
tuyaDatapoints: [
|
|
20708
|
+
[1, "state", tuya.valueConverterBasic.lookup({ OPEN: tuya.enum(0), STOP: tuya.enum(1), CLOSE: tuya.enum(2) })],
|
|
20709
|
+
[2, "position", tuya.valueConverter.coverPosition],
|
|
20710
|
+
[3, "position", tuya.valueConverter.coverPosition],
|
|
20711
|
+
[5, "motor_direction", tuya.valueConverterBasic.lookup({ forward: tuya.enum(0), back: tuya.enum(1) })],
|
|
20712
|
+
[7, "work_state", tuya.valueConverterBasic.lookup({ opening: tuya.enum(0), closing: tuya.enum(1) })],
|
|
20713
|
+
[10, "total_time", tuya.valueConverter.raw],
|
|
20714
|
+
[11, "situation_set", tuya.valueConverterBasic.lookup({ fully_close: tuya.enum(0), fully_open: tuya.enum(1) })],
|
|
20715
|
+
[12, "fault", tuya.valueConverter.raw],
|
|
20716
|
+
[103, "battery", tuya.valueConverter.raw],
|
|
20717
|
+
],
|
|
20718
|
+
},
|
|
20719
|
+
},
|
|
20655
20720
|
{
|
|
20656
20721
|
zigbeeModel: ["ZS-304Z"],
|
|
20657
20722
|
fingerprint: tuya.fingerprint("TS0601", ["_TZE284_k7p2q5d9", "_TZE284_65gzcss7", "_TZE284_0ints6wl", "_TZE284_yzr43ayq"]),
|
|
@@ -21942,5 +22007,65 @@ exports.definitions = [
|
|
|
21942
22007
|
],
|
|
21943
22008
|
},
|
|
21944
22009
|
},
|
|
22010
|
+
{
|
|
22011
|
+
fingerprint: [{ modelID: "Arteco", manufacturerName: "A89G12C" }],
|
|
22012
|
+
model: "ZS-SF00",
|
|
22013
|
+
vendor: "Arteco",
|
|
22014
|
+
description: "Soil fertility sensor",
|
|
22015
|
+
extend: [tuya.modernExtend.tuyaBase({ dp: true })],
|
|
22016
|
+
exposes: [
|
|
22017
|
+
e.enum("water_warning", ea.STATE, ["none", "alarm"]).withDescription("Water shortage warning"),
|
|
22018
|
+
e.enum("soil_fertility_warning", ea.STATE, ["none", "alarm"]).withDescription("Soil fertility warning"),
|
|
22019
|
+
e.battery(),
|
|
22020
|
+
e.soil_moisture(),
|
|
22021
|
+
e
|
|
22022
|
+
.numeric("soil_fertility", ea.STATE)
|
|
22023
|
+
.withUnit("μS/cm")
|
|
22024
|
+
.withValueMin(0)
|
|
22025
|
+
.withValueMax(5000)
|
|
22026
|
+
.withDescription("Soil fertility value,between 0-5000"),
|
|
22027
|
+
e.temperature(),
|
|
22028
|
+
e.humidity(),
|
|
22029
|
+
e.illuminance(),
|
|
22030
|
+
tuya.exposes.soilSampling(),
|
|
22031
|
+
tuya.exposes.soilCalibration(),
|
|
22032
|
+
tuya.exposes.humidityCalibration(),
|
|
22033
|
+
e
|
|
22034
|
+
.numeric("illuminance_calibration", ea.STATE_SET)
|
|
22035
|
+
.withValueMin(-15)
|
|
22036
|
+
.withValueMax(1000)
|
|
22037
|
+
.withValueStep(1)
|
|
22038
|
+
.withUnit("lux")
|
|
22039
|
+
.withDescription("Illuminance calibration"),
|
|
22040
|
+
tuya.exposes.temperatureCalibration(),
|
|
22041
|
+
tuya.exposes.soilWarning(),
|
|
22042
|
+
e
|
|
22043
|
+
.numeric("soil_fertility_warning_setting", ea.STATE_SET)
|
|
22044
|
+
.withValueMin(100)
|
|
22045
|
+
.withValueMax(1800)
|
|
22046
|
+
.withValueStep(1)
|
|
22047
|
+
.withUnit("μS/cm")
|
|
22048
|
+
.withDescription("When the soil fertility value is lower than what threshold should a warning be issued"),
|
|
22049
|
+
],
|
|
22050
|
+
meta: {
|
|
22051
|
+
tuyaDatapoints: [
|
|
22052
|
+
[3, "soil_moisture", tuya.valueConverter.raw],
|
|
22053
|
+
[5, "temperature", tuya.valueConverter.divideBy10],
|
|
22054
|
+
[14, "battery", tuya.valueConverter.raw],
|
|
22055
|
+
[101, "humidity", tuya.valueConverter.raw],
|
|
22056
|
+
[102, "illuminance", tuya.valueConverter.raw],
|
|
22057
|
+
[103, "soil_sampling", tuya.valueConverter.raw],
|
|
22058
|
+
[104, "soil_calibration", tuya.valueConverter.raw],
|
|
22059
|
+
[105, "humidity_calibration", tuya.valueConverter.raw],
|
|
22060
|
+
[106, "illuminance_calibration", tuya.valueConverter.raw],
|
|
22061
|
+
[107, "temperature_calibration", tuya.valueConverter.divideBy10],
|
|
22062
|
+
[110, "soil_warning", tuya.valueConverter.raw],
|
|
22063
|
+
[111, "water_warning", tuya.valueConverterBasic.lookup({ none: tuya.enum(0), alarm: tuya.enum(1) })],
|
|
22064
|
+
[112, "soil_fertility", tuya.valueConverter.raw],
|
|
22065
|
+
[114, "soil_fertility_warning_setting", tuya.valueConverter.raw],
|
|
22066
|
+
[115, "soil_fertility_warning", tuya.valueConverterBasic.lookup({ none: tuya.enum(0), alarm: tuya.enum(1) })],
|
|
22067
|
+
],
|
|
22068
|
+
},
|
|
22069
|
+
},
|
|
21945
22070
|
];
|
|
21946
22071
|
//# sourceMappingURL=tuya.js.map
|