zigbee-herdsman-converters 25.89.0 → 25.90.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 +27 -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/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/lumi.d.ts.map +1 -1
- package/dist/devices/lumi.js +9 -1
- 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/third_reality.d.ts.map +1 -1
- package/dist/devices/third_reality.js +111 -5
- package/dist/devices/third_reality.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +170 -112
- package/dist/devices/tuya.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
|
@@ -3006,6 +3006,7 @@ exports.definitions = [
|
|
|
3006
3006
|
"_TZ3000_wmlc9p9z",
|
|
3007
3007
|
"_TZ3000_shopg9ss",
|
|
3008
3008
|
"_TZ3000_n0lphcok",
|
|
3009
|
+
"_TZ3000_hgm6k8ku",
|
|
3009
3010
|
"_TZ3000_r80pzsb9",
|
|
3010
3011
|
]),
|
|
3011
3012
|
...tuya.fingerprint("TS0001", ["_TZ3000_n0lphcok", "_TZ3000_wn65ixz9"]),
|
|
@@ -4816,56 +4817,34 @@ exports.definitions = [
|
|
|
4816
4817
|
},
|
|
4817
4818
|
{
|
|
4818
4819
|
fingerprint: tuya.fingerprint("TS0601", ["_TZE200_dzuqwsyg", "_TZE204_dzuqwsyg"]),
|
|
4819
|
-
model: "BAC-
|
|
4820
|
+
model: "BAC-002",
|
|
4820
4821
|
vendor: "Tuya",
|
|
4821
4822
|
description: "FCU thermostat temperature controller",
|
|
4822
4823
|
extend: [tuya.modernExtend.tuyaBase({ dp: true, forceTimeUpdates: true, timeStart: "1970" })],
|
|
4823
4824
|
options: [
|
|
4825
|
+
e.enum("control_sequence_of_operation", ea.SET, ["cooling_only", "cooling_and_heating_4-pipes"]),
|
|
4826
|
+
e.binary("expose_device_state", ea.SET, true, false),
|
|
4827
|
+
],
|
|
4828
|
+
exposes: [
|
|
4824
4829
|
e
|
|
4825
|
-
.
|
|
4826
|
-
.
|
|
4827
|
-
|
|
4830
|
+
.climate()
|
|
4831
|
+
.withLocalTemperature(ea.STATE)
|
|
4832
|
+
.withSystemMode(["off", "cool", "heat", "fan_only"], ea.STATE_SET)
|
|
4833
|
+
.withFanMode(["low", "medium", "high", "auto"], ea.STATE_SET)
|
|
4834
|
+
.withSetpoint("current_heating_setpoint", 5, 35, 1, ea.STATE_SET)
|
|
4835
|
+
.withPreset(["auto", "manual"])
|
|
4836
|
+
.withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET),
|
|
4837
|
+
e.child_lock(),
|
|
4838
|
+
e.max_temperature().withValueMin(35).withValueMax(45),
|
|
4839
|
+
e.numeric("deadzone_temperature", ea.STATE_SET).withUnit("°C").withValueMax(5).withValueMin(1),
|
|
4840
|
+
e.text("schedule_text", ea.STATE_SET).withDescription(`Weekly schedule in the format "HH:MM/TT HH:MM/TT ...".
|
|
4841
|
+
Example for 12 segments:
|
|
4842
|
+
"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".
|
|
4843
|
+
Each segment contains:
|
|
4844
|
+
- HH:MM: Time in 24-hour format.
|
|
4845
|
+
- TT: Temperature in °C.
|
|
4846
|
+
Ensure all 12 segments are defined and separated by spaces.`),
|
|
4828
4847
|
],
|
|
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
4848
|
meta: {
|
|
4870
4849
|
publishDuplicateTransaction: true,
|
|
4871
4850
|
tuyaDatapoints: [
|
|
@@ -4880,9 +4859,8 @@ exports.definitions = [
|
|
|
4880
4859
|
},
|
|
4881
4860
|
from: (v, meta, options) => {
|
|
4882
4861
|
meta.state.system_mode = v === true ? (meta.state.system_mode_device ?? "cool") : "off";
|
|
4883
|
-
if (options?.expose_device_state === true)
|
|
4862
|
+
if (options?.expose_device_state === true)
|
|
4884
4863
|
return v === true ? "ON" : "OFF";
|
|
4885
|
-
}
|
|
4886
4864
|
delete meta.state.state;
|
|
4887
4865
|
},
|
|
4888
4866
|
},
|
|
@@ -4891,22 +4869,22 @@ exports.definitions = [
|
|
|
4891
4869
|
2,
|
|
4892
4870
|
"system_mode",
|
|
4893
4871
|
{
|
|
4894
|
-
// Extend system_mode to support 'off' in addition to 'cool', 'heat' and 'fan_only'
|
|
4895
4872
|
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;
|
|
4873
|
+
const ep = meta.device.endpoints[0];
|
|
4874
|
+
if (v === "off") {
|
|
4875
|
+
await tuya.sendDataPointBool(ep, 1, true, "dataRequest", 1);
|
|
4876
|
+
await new Promise((r) => setTimeout(r, 120));
|
|
4877
|
+
await tuya.sendDataPointBool(ep, 1, false, "dataRequest", 1);
|
|
4878
|
+
await tuya.sendDataPointEnum(ep, 2, 0, "dataRequest", 1);
|
|
4879
|
+
return;
|
|
4909
4880
|
}
|
|
4881
|
+
await tuya.sendDataPointBool(ep, 1, true, "dataRequest", 1);
|
|
4882
|
+
if (v === "cool")
|
|
4883
|
+
await tuya.sendDataPointEnum(ep, 2, 0, "dataRequest", 1);
|
|
4884
|
+
if (v === "heat")
|
|
4885
|
+
await tuya.sendDataPointEnum(ep, 2, 1, "dataRequest", 1);
|
|
4886
|
+
if (v === "fan_only")
|
|
4887
|
+
await tuya.sendDataPointEnum(ep, 2, 2, "dataRequest", 1);
|
|
4910
4888
|
},
|
|
4911
4889
|
from: (v, meta) => {
|
|
4912
4890
|
const modes = ["cool", "heat", "fan_only"];
|
|
@@ -4915,7 +4893,21 @@ exports.definitions = [
|
|
|
4915
4893
|
},
|
|
4916
4894
|
},
|
|
4917
4895
|
],
|
|
4918
|
-
[
|
|
4896
|
+
[
|
|
4897
|
+
4,
|
|
4898
|
+
"preset",
|
|
4899
|
+
{
|
|
4900
|
+
to: async (v, meta) => {
|
|
4901
|
+
const ep = meta.device.endpoints[0];
|
|
4902
|
+
await tuya.sendDataPointBool(ep, 4, v === "manual");
|
|
4903
|
+
},
|
|
4904
|
+
from: (v, meta) => {
|
|
4905
|
+
const preset = v ? "manual" : "auto";
|
|
4906
|
+
meta.state.preset = preset;
|
|
4907
|
+
return preset;
|
|
4908
|
+
},
|
|
4909
|
+
},
|
|
4910
|
+
],
|
|
4919
4911
|
[16, "current_heating_setpoint", tuya.valueConverter.raw],
|
|
4920
4912
|
[19, "max_temperature", tuya.valueConverter.raw],
|
|
4921
4913
|
[24, "local_temperature", tuya.valueConverter.divideBy10],
|
|
@@ -4936,46 +4928,39 @@ exports.definitions = [
|
|
|
4936
4928
|
101,
|
|
4937
4929
|
"schedule",
|
|
4938
4930
|
{
|
|
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
4931
|
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
|
-
|
|
4932
|
+
const format = (data) => data.reduce((txt, val, i) => {
|
|
4933
|
+
if (i % 3 === 0)
|
|
4934
|
+
return `${txt}${i > 0 ? " " : ""}${val.toString().padStart(2, "0")}`;
|
|
4935
|
+
if (i % 3 === 1)
|
|
4936
|
+
return `${txt}:${val.toString().padStart(2, "0")}`;
|
|
4937
|
+
return `${txt}/${val / 2}`;
|
|
4938
|
+
}, "");
|
|
4939
|
+
const weekdays = format(v.slice(0, 12));
|
|
4940
|
+
const saturday = format(v.slice(12, 24));
|
|
4941
|
+
const sunday = format(v.slice(24, 36));
|
|
4942
|
+
const full = `${weekdays} ${saturday} ${sunday}`.trim();
|
|
4943
|
+
meta.state.schedule_text = full;
|
|
4944
|
+
return full;
|
|
4945
|
+
},
|
|
4946
|
+
},
|
|
4947
|
+
],
|
|
4948
|
+
[
|
|
4949
|
+
202,
|
|
4950
|
+
"schedule_text",
|
|
4951
|
+
{
|
|
4952
|
+
to: async (v, meta) => {
|
|
4953
|
+
const regex = /((?<h>[01][0-9]|2[0-3]):(?<m>[0-5][0-9])\/(?<t>[0-3]?[0-9](\.[0,5])?))/gm;
|
|
4954
|
+
const matches = [...v.matchAll(regex)];
|
|
4955
|
+
if (matches.length !== 12)
|
|
4956
|
+
return;
|
|
4957
|
+
const result = [];
|
|
4958
|
+
for (const m of matches) {
|
|
4959
|
+
result.push(Number(m.groups?.h));
|
|
4960
|
+
result.push(Number(m.groups?.m));
|
|
4961
|
+
result.push(Number(m.groups?.t) * 2);
|
|
4962
|
+
}
|
|
4963
|
+
await tuya.sendDataPointRaw(meta.device.endpoints[0], 101, Buffer.from(result));
|
|
4979
4964
|
},
|
|
4980
4965
|
},
|
|
4981
4966
|
],
|
|
@@ -5372,17 +5357,17 @@ exports.definitions = [
|
|
|
5372
5357
|
vendor: "Tuya",
|
|
5373
5358
|
description: "3-Gang switch with backlight",
|
|
5374
5359
|
extend: [
|
|
5360
|
+
tuya.modernExtend.tuyaMagicPacket(),
|
|
5361
|
+
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3 } }),
|
|
5375
5362
|
tuya.modernExtend.tuyaOnOff({
|
|
5376
|
-
powerOnBehavior2:
|
|
5377
|
-
indicatorMode:
|
|
5363
|
+
powerOnBehavior2: (m) => m !== "_TZ3000_nwidmc4n",
|
|
5364
|
+
indicatorMode: (m) => m !== "_TZ3000_nwidmc4n",
|
|
5378
5365
|
backlightModeOffOn: true,
|
|
5379
5366
|
endpoints: ["l1", "l2", "l3"],
|
|
5367
|
+
powerOutageMemory: (m) => m === "_TZ3000_nwidmc4n",
|
|
5368
|
+
switchType: (m) => m === "_TZ3000_nwidmc4n",
|
|
5380
5369
|
}),
|
|
5381
5370
|
],
|
|
5382
|
-
endpoint: (device) => {
|
|
5383
|
-
return { l1: 1, l2: 2, l3: 3 };
|
|
5384
|
-
},
|
|
5385
|
-
meta: { multiEndpoint: true },
|
|
5386
5371
|
configure: async (device, coordinatorEndpoint) => {
|
|
5387
5372
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
5388
5373
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -5394,6 +5379,7 @@ exports.definitions = [
|
|
|
5394
5379
|
tuya.whitelabel("Zemismart", "ZM-L03E-Z", "3 gang switch with neutral", ["_TZ3000_empogkya", "_TZ3000_lsunm46z"]),
|
|
5395
5380
|
tuya.whitelabel("Zemismart", "KES-606US-L3", "3 gang switch with neutral", ["_TZ3000_uilitwsy"]),
|
|
5396
5381
|
tuya.whitelabel("AVATTO", "ZWOT16-W2", "2 gang switch and 1 socket", ["_TZ3000_66fekqhh"]),
|
|
5382
|
+
tuya.whitelabel("AVATTO", "ZBTS60-03", "3 gang switch module with backlight", ["_TZ3000_nwidmc4n"]),
|
|
5397
5383
|
tuya.whitelabel("Tuya", "M10Z", "2 gang switch with 20A power socket", ["_TZ3000_lubfc1t5"]),
|
|
5398
5384
|
tuya.whitelabel("Zemismart", "ZMO-606-S2", "Smart 2 gangs switch with outlet", ["_TZ3000_aknpkt02"]),
|
|
5399
5385
|
],
|
|
@@ -5588,8 +5574,18 @@ exports.definitions = [
|
|
|
5588
5574
|
{ vendor: "OXT", model: "SWTZ21" },
|
|
5589
5575
|
{ vendor: "Moes", model: "ZM-104-M" },
|
|
5590
5576
|
tuya.whitelabel("AVATTO", "ZWSM16-1-Zigbee", "1 gang switch module", ["_TZ3000_4rbqgcuv"]),
|
|
5577
|
+
tuya.whitelabel("AVATTO", "ZBTS60-01", "1 gang switch module with backlight", ["_TZ3000_xfxpoxe0"]),
|
|
5578
|
+
],
|
|
5579
|
+
extend: [
|
|
5580
|
+
tuya.modernExtend.tuyaMagicPacket(),
|
|
5581
|
+
tuya.modernExtend.tuyaOnOff({
|
|
5582
|
+
switchType: true,
|
|
5583
|
+
onOffCountdown: (m) => m !== "_TZ3000_xfxpoxe0",
|
|
5584
|
+
indicatorMode: (m) => m !== "_TZ3000_xfxpoxe0",
|
|
5585
|
+
powerOutageMemory: (m) => m === "_TZ3000_xfxpoxe0",
|
|
5586
|
+
backlightModeOffOn: (m) => m === "_TZ3000_xfxpoxe0",
|
|
5587
|
+
}),
|
|
5591
5588
|
],
|
|
5592
|
-
extend: [tuya.modernExtend.tuyaOnOff({ switchType: true, onOffCountdown: true, indicatorMode: true })],
|
|
5593
5589
|
configure: async (device, coordinatorEndpoint) => {
|
|
5594
5590
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
5595
5591
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -6506,6 +6502,7 @@ exports.definitions = [
|
|
|
6506
6502
|
"_TZE204_ejh6owwz",
|
|
6507
6503
|
"_TZE200_ba69l9ol",
|
|
6508
6504
|
"_TZE200_68nvbi09",
|
|
6505
|
+
"_TZE200_vexa5o82",
|
|
6509
6506
|
]),
|
|
6510
6507
|
model: "TS0601_cover_3",
|
|
6511
6508
|
vendor: "Tuya",
|
|
@@ -6525,6 +6522,7 @@ exports.definitions = [
|
|
|
6525
6522
|
tuya.whitelabel("Zemismart", "ZM25EL", "Cover motor", ["_TZE200_pw7mji0l"]),
|
|
6526
6523
|
tuya.whitelabel("Zemismart", "ZM85EL-2Z", "Roman Rod I type U curtains track", ["_TZE200_cf1sl3tj", "_TZE200_nw1r9hp6"]),
|
|
6527
6524
|
tuya.whitelabel("Hiladuo", "B09M3R35GC", "Motorized roller shade", ["_TZE200_9p5xmj5r"]),
|
|
6525
|
+
tuya.whitelabel("Tuya", "MYQ-RM25-1.3/25-BZ", "Tubular roller blind motor", ["_TZE200_vexa5o82"]),
|
|
6528
6526
|
],
|
|
6529
6527
|
meta: {
|
|
6530
6528
|
// All datapoints go in here
|
|
@@ -9171,22 +9169,22 @@ exports.definitions = [
|
|
|
9171
9169
|
vendor: "Tuya",
|
|
9172
9170
|
description: "Smart light switch - 4 gang with neutral wire",
|
|
9173
9171
|
extend: [
|
|
9172
|
+
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3, l4: 4 } }),
|
|
9174
9173
|
tuya.modernExtend.tuyaOnOff({
|
|
9175
|
-
powerOnBehavior2:
|
|
9174
|
+
powerOnBehavior2: (m) => m !== "_TZ3000_r9e2w7dn",
|
|
9176
9175
|
backlightModeOffOn: true,
|
|
9177
9176
|
endpoints: ["l1", "l2", "l3", "l4"],
|
|
9177
|
+
powerOutageMemory: (m) => m === "_TZ3000_r9e2w7dn",
|
|
9178
|
+
switchType: (m) => m === "_TZ3000_r9e2w7dn",
|
|
9178
9179
|
}),
|
|
9179
9180
|
],
|
|
9180
|
-
endpoint: (device) => {
|
|
9181
|
-
return { l1: 1, l2: 2, l3: 3, l4: 4 };
|
|
9182
|
-
},
|
|
9183
9181
|
whiteLabel: [
|
|
9184
9182
|
tuya.whitelabel("Tuya", "DS-111", "Smart light switch - 4 gang with neutral wire", ["_TZ3000_mdj7kra9"]),
|
|
9185
9183
|
tuya.whitelabel("MHCOZY", "TYWB 4ch-RF", "4 channel relay", ["_TZ3000_u3oupgdy", "_TZ3000_imaccztn"]),
|
|
9186
9184
|
tuya.whitelabel("AVATTO", "TS0004_1", "Smart light switch - 4 gang with neutral wire", ["_TZ3000_nivavasg", "_TZ3000_gexniqbq"]),
|
|
9187
9185
|
tuya.whitelabel("Nova Digital", "SA-4", "Safira smart light switch - 4 gang", ["_TZ3000_iymfxdis"]),
|
|
9186
|
+
tuya.whitelabel("AVATTO", "ZBTS60-04", "4 gang switch module with backlight", ["_TZ3000_r9e2w7dn"]),
|
|
9188
9187
|
],
|
|
9189
|
-
meta: { multiEndpoint: true },
|
|
9190
9188
|
configure: async (device, coordinatorEndpoint) => {
|
|
9191
9189
|
await tuya.configureMagicPacket(device, coordinatorEndpoint);
|
|
9192
9190
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ["genOnOff"]);
|
|
@@ -21942,5 +21940,65 @@ exports.definitions = [
|
|
|
21942
21940
|
],
|
|
21943
21941
|
},
|
|
21944
21942
|
},
|
|
21943
|
+
{
|
|
21944
|
+
fingerprint: [{ modelID: "Arteco", manufacturerName: "A89G12C" }],
|
|
21945
|
+
model: "ZS-SF00",
|
|
21946
|
+
vendor: "Arteco",
|
|
21947
|
+
description: "Soil fertility sensor",
|
|
21948
|
+
extend: [tuya.modernExtend.tuyaBase({ dp: true })],
|
|
21949
|
+
exposes: [
|
|
21950
|
+
e.enum("water_warning", ea.STATE, ["none", "alarm"]).withDescription("Water shortage warning"),
|
|
21951
|
+
e.enum("soil_fertility_warning", ea.STATE, ["none", "alarm"]).withDescription("Soil fertility warning"),
|
|
21952
|
+
e.battery(),
|
|
21953
|
+
e.soil_moisture(),
|
|
21954
|
+
e
|
|
21955
|
+
.numeric("soil_fertility", ea.STATE)
|
|
21956
|
+
.withUnit("μS/cm")
|
|
21957
|
+
.withValueMin(0)
|
|
21958
|
+
.withValueMax(5000)
|
|
21959
|
+
.withDescription("Soil fertility value,between 0-5000"),
|
|
21960
|
+
e.temperature(),
|
|
21961
|
+
e.humidity(),
|
|
21962
|
+
e.illuminance(),
|
|
21963
|
+
tuya.exposes.soilSampling(),
|
|
21964
|
+
tuya.exposes.soilCalibration(),
|
|
21965
|
+
tuya.exposes.humidityCalibration(),
|
|
21966
|
+
e
|
|
21967
|
+
.numeric("illuminance_calibration", ea.STATE_SET)
|
|
21968
|
+
.withValueMin(-15)
|
|
21969
|
+
.withValueMax(1000)
|
|
21970
|
+
.withValueStep(1)
|
|
21971
|
+
.withUnit("lux")
|
|
21972
|
+
.withDescription("Illuminance calibration"),
|
|
21973
|
+
tuya.exposes.temperatureCalibration(),
|
|
21974
|
+
tuya.exposes.soilWarning(),
|
|
21975
|
+
e
|
|
21976
|
+
.numeric("soil_fertility_warning_setting", ea.STATE_SET)
|
|
21977
|
+
.withValueMin(100)
|
|
21978
|
+
.withValueMax(1800)
|
|
21979
|
+
.withValueStep(1)
|
|
21980
|
+
.withUnit("μS/cm")
|
|
21981
|
+
.withDescription("When the soil fertility value is lower than what threshold should a warning be issued"),
|
|
21982
|
+
],
|
|
21983
|
+
meta: {
|
|
21984
|
+
tuyaDatapoints: [
|
|
21985
|
+
[3, "soil_moisture", tuya.valueConverter.raw],
|
|
21986
|
+
[5, "temperature", tuya.valueConverter.divideBy10],
|
|
21987
|
+
[14, "battery", tuya.valueConverter.raw],
|
|
21988
|
+
[101, "humidity", tuya.valueConverter.raw],
|
|
21989
|
+
[102, "illuminance", tuya.valueConverter.raw],
|
|
21990
|
+
[103, "soil_sampling", tuya.valueConverter.raw],
|
|
21991
|
+
[104, "soil_calibration", tuya.valueConverter.raw],
|
|
21992
|
+
[105, "humidity_calibration", tuya.valueConverter.raw],
|
|
21993
|
+
[106, "illuminance_calibration", tuya.valueConverter.raw],
|
|
21994
|
+
[107, "temperature_calibration", tuya.valueConverter.divideBy10],
|
|
21995
|
+
[110, "soil_warning", tuya.valueConverter.raw],
|
|
21996
|
+
[111, "water_warning", tuya.valueConverterBasic.lookup({ none: tuya.enum(0), alarm: tuya.enum(1) })],
|
|
21997
|
+
[112, "soil_fertility", tuya.valueConverter.raw],
|
|
21998
|
+
[114, "soil_fertility_warning_setting", tuya.valueConverter.raw],
|
|
21999
|
+
[115, "soil_fertility_warning", tuya.valueConverterBasic.lookup({ none: tuya.enum(0), alarm: tuya.enum(1) })],
|
|
22000
|
+
],
|
|
22001
|
+
},
|
|
22002
|
+
},
|
|
21945
22003
|
];
|
|
21946
22004
|
//# sourceMappingURL=tuya.js.map
|