zigbee-herdsman-converters 25.108.0 → 25.110.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 +52 -0
- package/dist/devices/custom_devices_diy.d.ts.map +1 -1
- package/dist/devices/custom_devices_diy.js +8 -0
- package/dist/devices/custom_devices_diy.js.map +1 -1
- package/dist/devices/danfoss.js +1 -1
- package/dist/devices/danfoss.js.map +1 -1
- package/dist/devices/domraem.d.ts.map +1 -1
- package/dist/devices/domraem.js +8 -1
- package/dist/devices/domraem.js.map +1 -1
- package/dist/devices/ikea.d.ts.map +1 -1
- package/dist/devices/ikea.js +108 -1
- package/dist/devices/ikea.js.map +1 -1
- package/dist/devices/lincukoo.d.ts.map +1 -1
- package/dist/devices/lincukoo.js +2 -1
- package/dist/devices/lincukoo.js.map +1 -1
- package/dist/devices/moes.d.ts.map +1 -1
- package/dist/devices/moes.js +251 -6
- package/dist/devices/moes.js.map +1 -1
- package/dist/devices/muller_licht.d.ts.map +1 -1
- package/dist/devices/muller_licht.js +7 -0
- package/dist/devices/muller_licht.js.map +1 -1
- package/dist/devices/nous.js +2 -2
- package/dist/devices/nous.js.map +1 -1
- package/dist/devices/onesti.d.ts.map +1 -1
- package/dist/devices/onesti.js +74 -16
- package/dist/devices/onesti.js.map +1 -1
- package/dist/devices/philips.d.ts.map +1 -1
- package/dist/devices/philips.js +63 -16
- package/dist/devices/philips.js.map +1 -1
- package/dist/devices/shelly.d.ts.map +1 -1
- package/dist/devices/shelly.js +18 -0
- package/dist/devices/shelly.js.map +1 -1
- package/dist/devices/slacky_diy.d.ts.map +1 -1
- package/dist/devices/slacky_diy.js +322 -9
- package/dist/devices/slacky_diy.js.map +1 -1
- package/dist/devices/somfy.js +1 -1
- package/dist/devices/somfy.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +58 -2
- package/dist/devices/tuya.js.map +1 -1
- package/dist/devices/yale.d.ts.map +1 -1
- package/dist/devices/yale.js +8 -1
- package/dist/devices/yale.js.map +1 -1
- package/dist/devices/yandex.d.ts.map +1 -1
- package/dist/devices/yandex.js +2 -4
- package/dist/devices/yandex.js.map +1 -1
- package/dist/devices/zemismart.d.ts.map +1 -1
- package/dist/devices/zemismart.js +34 -0
- package/dist/devices/zemismart.js.map +1 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +1 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/modernExtend.d.ts +2 -1
- package/dist/lib/modernExtend.d.ts.map +1 -1
- package/dist/lib/modernExtend.js +3 -2
- package/dist/lib/modernExtend.js.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +3 -3
package/dist/devices/moes.js
CHANGED
|
@@ -1285,7 +1285,7 @@ exports.definitions = [
|
|
|
1285
1285
|
whiteLabel: [tuya.whitelabel("Tuya", "iH-F8260", "Universal smart IR remote control", ["_TZ3290_gnl5a6a5xvql7c2a", "_TZ3290_785fbxik"])],
|
|
1286
1286
|
},
|
|
1287
1287
|
{
|
|
1288
|
-
fingerprint: tuya.fingerprint("TS0049", ["_TZ3000_cjfmu5he", "_TZ3000_mq4wujmp", "_TZ3000_5af5r192"]),
|
|
1288
|
+
fingerprint: tuya.fingerprint("TS0049", ["_TZ3000_cjfmu5he", "_TZ3000_mq4wujmp", "_TZ3000_5af5r192", "_TZ3000_ogjpfoyn"]),
|
|
1289
1289
|
model: "ZWV-YC",
|
|
1290
1290
|
vendor: "Moes",
|
|
1291
1291
|
description: "Water valve",
|
|
@@ -1608,11 +1608,12 @@ exports.definitions = [
|
|
|
1608
1608
|
},
|
|
1609
1609
|
},
|
|
1610
1610
|
{
|
|
1611
|
-
fingerprint: tuya.fingerprint("TS0601", ["_TZE204_xtrnjaoz", "_TZE200_xtrnjaoz"]),
|
|
1611
|
+
fingerprint: tuya.fingerprint("TS0601", ["_TZE204_xtrnjaoz", "_TZE200_xtrnjaoz", "_TZE284_8whfphjv"]),
|
|
1612
1612
|
model: "GM25TEQ-TYZ-2/25",
|
|
1613
1613
|
vendor: "Moes",
|
|
1614
1614
|
description: "Roller Shade Blinds Motor for 38mm Tube",
|
|
1615
1615
|
extend: [tuya.modernExtend.tuyaBase({ dp: true })],
|
|
1616
|
+
whiteLabel: [tuya.whitelabel("Tuya", "GM35TEQ-TYZ-2/25", "Roller Shade Blinds Motor for 38mm Tube", ["_TZE284_8whfphjv"])],
|
|
1616
1617
|
exposes: [
|
|
1617
1618
|
e.cover_position().setAccess("position", ea.STATE_SET),
|
|
1618
1619
|
e.enum("motor_direction", ea.STATE_SET, ["forward", "back"]).withDescription("Set the motor direction"),
|
|
@@ -1815,16 +1816,16 @@ exports.definitions = [
|
|
|
1815
1816
|
fromZigbee: [tuya.fz.on_off_action, fz.battery, tuya.fz.datapoints],
|
|
1816
1817
|
toZigbee: [],
|
|
1817
1818
|
configure: tuya.configureMagicPacket,
|
|
1818
|
-
exposes: [e.battery(), e.action(["
|
|
1819
|
+
exposes: [e.battery(), e.action(["single", "double", "hold"])],
|
|
1819
1820
|
meta: {
|
|
1820
1821
|
tuyaDatapoints: [
|
|
1821
1822
|
[
|
|
1822
1823
|
1,
|
|
1823
1824
|
"action",
|
|
1824
1825
|
tuya.valueConverterBasic.lookup({
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1826
|
+
single: 0,
|
|
1827
|
+
double: 1,
|
|
1828
|
+
hold: 2,
|
|
1828
1829
|
}),
|
|
1829
1830
|
],
|
|
1830
1831
|
],
|
|
@@ -1905,5 +1906,249 @@ exports.definitions = [
|
|
|
1905
1906
|
],
|
|
1906
1907
|
},
|
|
1907
1908
|
},
|
|
1909
|
+
{
|
|
1910
|
+
fingerprint: tuya.fingerprint("TS0601", ["_TZE284_rlytpmij"]),
|
|
1911
|
+
model: "ZHT-S01",
|
|
1912
|
+
vendor: "Moes",
|
|
1913
|
+
description: "Zigbee wall thermostat (air/internal temperature priority)",
|
|
1914
|
+
extend: [tuya.modernExtend.tuyaBase({ dp: true, forceTimeUpdates: true, timeStart: "1970" })],
|
|
1915
|
+
exposes: (device, options) => {
|
|
1916
|
+
// Helper for schedule exposes
|
|
1917
|
+
const exposesLocalSchedule = {
|
|
1918
|
+
hour: (name) => e.numeric(name, ea.STATE_SET).withValueMin(0).withValueMax(23),
|
|
1919
|
+
minute: (name) => e.numeric(name, ea.STATE_SET).withValueMin(0).withValueMax(59),
|
|
1920
|
+
program_temperature: (name) => e.numeric(name, ea.STATE_SET).withUnit("°C").withValueMin(5).withValueMax(35),
|
|
1921
|
+
};
|
|
1922
|
+
// Build weekly programming expose (6 weekday periods + 2 weekend periods)
|
|
1923
|
+
const weeklyProgramExpose = e
|
|
1924
|
+
.composite("weekly_programming", "weekly_programming", ea.STATE_SET)
|
|
1925
|
+
.withDescription("Time of day and setpoint in weekly programming mode");
|
|
1926
|
+
for (let i = 1; i <= 6; i++) {
|
|
1927
|
+
weeklyProgramExpose
|
|
1928
|
+
.withFeature(exposesLocalSchedule.hour(`weekdays_program_${i}_hour`))
|
|
1929
|
+
.withFeature(exposesLocalSchedule.minute(`weekdays_program_${i}_minute`))
|
|
1930
|
+
.withFeature(exposesLocalSchedule.program_temperature(`weekdays_program_${i}_temperature`));
|
|
1931
|
+
}
|
|
1932
|
+
for (let i = 1; i <= 2; i++) {
|
|
1933
|
+
weeklyProgramExpose
|
|
1934
|
+
.withFeature(exposesLocalSchedule.hour(`weekend_program_${i}_hour`))
|
|
1935
|
+
.withFeature(exposesLocalSchedule.minute(`weekend_program_${i}_minute`))
|
|
1936
|
+
.withFeature(exposesLocalSchedule.program_temperature(`weekend_program_${i}_temperature`));
|
|
1937
|
+
}
|
|
1938
|
+
return [
|
|
1939
|
+
// Child lock
|
|
1940
|
+
e.child_lock(),
|
|
1941
|
+
// System mode separate expose (clearer in UI)
|
|
1942
|
+
e
|
|
1943
|
+
.enum("system_mode", ea.STATE_SET, ["off", "heat"])
|
|
1944
|
+
.withDescription("Thermostat system mode (device enabled/disabled)"),
|
|
1945
|
+
// Main climate control
|
|
1946
|
+
e
|
|
1947
|
+
.climate()
|
|
1948
|
+
.withPreset(["manual", "auto", "eco"])
|
|
1949
|
+
.withRunningState(["idle", "heat"], ea.STATE)
|
|
1950
|
+
.withSystemMode(["off", "heat"], ea.STATE)
|
|
1951
|
+
.withSetpoint("current_heating_setpoint", 5, 35, 0.5, ea.STATE_SET)
|
|
1952
|
+
.withLocalTemperature(ea.STATE) // DP 117 (Air/Internal sensor)
|
|
1953
|
+
.withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET),
|
|
1954
|
+
// Floor temperature (secondary sensor)
|
|
1955
|
+
e
|
|
1956
|
+
.numeric("floor_temperature", ea.STATE)
|
|
1957
|
+
.withUnit("°C")
|
|
1958
|
+
.withDescription("Temperature from floor sensor (secondary)"),
|
|
1959
|
+
// Valve state
|
|
1960
|
+
e
|
|
1961
|
+
.binary("valve_state", ea.STATE, "OPEN", "CLOSED")
|
|
1962
|
+
.withDescription("Valve state"),
|
|
1963
|
+
// Sensor selection
|
|
1964
|
+
e
|
|
1965
|
+
.enum("sensor", ea.STATE_SET, ["internal", "external", "both"])
|
|
1966
|
+
.withDescription("Temperature sensor selection"),
|
|
1967
|
+
// Temperature scale
|
|
1968
|
+
e
|
|
1969
|
+
.enum("temperature_scale", ea.STATE_SET, ["celsius", "fahrenheit"])
|
|
1970
|
+
.withDescription("Temperature scale (WARNING: converter only supports Celsius datapoints)"),
|
|
1971
|
+
// Backlight - FIXED: Using numeric strings like working version
|
|
1972
|
+
e
|
|
1973
|
+
.enum("backlight_brightness", ea.STATE_SET, [0, 20, 50, 100])
|
|
1974
|
+
.withDescription("Backlight brightness percentage"),
|
|
1975
|
+
// Antifreeze
|
|
1976
|
+
e
|
|
1977
|
+
.binary("antifreeze", ea.STATE_SET, "OFF", "ON")
|
|
1978
|
+
.withDescription("Antifreeze mode"),
|
|
1979
|
+
// Temperature limits
|
|
1980
|
+
e
|
|
1981
|
+
.numeric("min_temperature_limit", ea.STATE_SET)
|
|
1982
|
+
.withValueMin(5)
|
|
1983
|
+
.withValueMax(20)
|
|
1984
|
+
.withValueStep(1)
|
|
1985
|
+
.withUnit("°C")
|
|
1986
|
+
.withDescription("Minimum temperature limit"),
|
|
1987
|
+
e
|
|
1988
|
+
.numeric("max_temperature_limit", ea.STATE_SET)
|
|
1989
|
+
.withValueMin(30)
|
|
1990
|
+
.withValueMax(70)
|
|
1991
|
+
.withValueStep(1)
|
|
1992
|
+
.withUnit("°C")
|
|
1993
|
+
.withDescription("Maximum temperature limit"),
|
|
1994
|
+
// Temperature hysteresis/deadzone
|
|
1995
|
+
e
|
|
1996
|
+
.numeric("deadzone_temperature", ea.STATE_SET)
|
|
1997
|
+
.withUnit("°C")
|
|
1998
|
+
.withValueMin(0.5)
|
|
1999
|
+
.withValueMax(3.0)
|
|
2000
|
+
.withValueStep(0.5)
|
|
2001
|
+
.withDescription("Temperature hysteresis/deadzone"),
|
|
2002
|
+
// ECO mode temperature
|
|
2003
|
+
e
|
|
2004
|
+
.numeric("eco_temperature", ea.STATE_SET)
|
|
2005
|
+
.withUnit("°C")
|
|
2006
|
+
.withValueMin(5)
|
|
2007
|
+
.withValueMax(35)
|
|
2008
|
+
.withValueStep(1)
|
|
2009
|
+
.withDescription("ECO mode temperature setting"),
|
|
2010
|
+
// Program mode
|
|
2011
|
+
e
|
|
2012
|
+
.enum("program_mode", ea.STATE_SET, ["off", "weekend", "single_break", "no_day_off"])
|
|
2013
|
+
.withDescription("Weekly programming mode type"),
|
|
2014
|
+
// Weekly schedule programming (at the end)
|
|
2015
|
+
weeklyProgramExpose,
|
|
2016
|
+
];
|
|
2017
|
+
},
|
|
2018
|
+
meta: {
|
|
2019
|
+
tuyaDatapoints: [
|
|
2020
|
+
[
|
|
2021
|
+
1,
|
|
2022
|
+
"system_mode",
|
|
2023
|
+
{
|
|
2024
|
+
from: (value) => (value === true ? "heat" : "off"),
|
|
2025
|
+
to: (value) => value === "heat",
|
|
2026
|
+
},
|
|
2027
|
+
],
|
|
2028
|
+
[
|
|
2029
|
+
2,
|
|
2030
|
+
"preset",
|
|
2031
|
+
tuya.valueConverterBasic.lookup({
|
|
2032
|
+
auto: tuya.enum(0),
|
|
2033
|
+
manual: tuya.enum(1),
|
|
2034
|
+
eco: tuya.enum(2),
|
|
2035
|
+
}),
|
|
2036
|
+
],
|
|
2037
|
+
[
|
|
2038
|
+
3,
|
|
2039
|
+
"backlight_brightness",
|
|
2040
|
+
tuya.valueConverterBasic.lookup({
|
|
2041
|
+
0: tuya.enum(0),
|
|
2042
|
+
20: tuya.enum(1),
|
|
2043
|
+
50: tuya.enum(2),
|
|
2044
|
+
100: tuya.enum(3),
|
|
2045
|
+
}),
|
|
2046
|
+
],
|
|
2047
|
+
[19, "local_temperature_calibration", tuya.valueConverter.localTemperatureCalibration],
|
|
2048
|
+
[
|
|
2049
|
+
32,
|
|
2050
|
+
"sensor",
|
|
2051
|
+
tuya.valueConverterBasic.lookup({
|
|
2052
|
+
internal: tuya.enum(0),
|
|
2053
|
+
external: tuya.enum(1),
|
|
2054
|
+
both: tuya.enum(2),
|
|
2055
|
+
}),
|
|
2056
|
+
],
|
|
2057
|
+
[39, "child_lock", tuya.valueConverter.lockUnlock],
|
|
2058
|
+
[
|
|
2059
|
+
46,
|
|
2060
|
+
"temperature_scale",
|
|
2061
|
+
tuya.valueConverterBasic.lookup({
|
|
2062
|
+
celsius: tuya.enum(0),
|
|
2063
|
+
fahrenheit: tuya.enum(1),
|
|
2064
|
+
}),
|
|
2065
|
+
],
|
|
2066
|
+
[
|
|
2067
|
+
47,
|
|
2068
|
+
"running_state",
|
|
2069
|
+
tuya.valueConverterBasic.lookup({
|
|
2070
|
+
heat: tuya.enum(0),
|
|
2071
|
+
idle: tuya.enum(1),
|
|
2072
|
+
}),
|
|
2073
|
+
],
|
|
2074
|
+
[
|
|
2075
|
+
47,
|
|
2076
|
+
"valve_state",
|
|
2077
|
+
tuya.valueConverterBasic.lookup({
|
|
2078
|
+
OPEN: tuya.enum(0),
|
|
2079
|
+
CLOSED: tuya.enum(1),
|
|
2080
|
+
}),
|
|
2081
|
+
],
|
|
2082
|
+
// === STANDARD SENSOR MAPPING (AIR/INTERNAL PRIORITY) ===
|
|
2083
|
+
[117, "local_temperature", tuya.valueConverter.divideBy10],
|
|
2084
|
+
[101, "floor_temperature", tuya.valueConverter.divideBy10],
|
|
2085
|
+
// ========================================================
|
|
2086
|
+
[
|
|
2087
|
+
103,
|
|
2088
|
+
"antifreeze",
|
|
2089
|
+
{
|
|
2090
|
+
from: (value) => (value === true ? "ON" : "OFF"),
|
|
2091
|
+
to: (value) => value === "ON",
|
|
2092
|
+
},
|
|
2093
|
+
],
|
|
2094
|
+
[
|
|
2095
|
+
104,
|
|
2096
|
+
"program_mode",
|
|
2097
|
+
tuya.valueConverterBasic.lookup({
|
|
2098
|
+
off: tuya.enum(0),
|
|
2099
|
+
weekend: tuya.enum(1),
|
|
2100
|
+
single_break: tuya.enum(2),
|
|
2101
|
+
no_day_off: tuya.enum(3),
|
|
2102
|
+
}),
|
|
2103
|
+
],
|
|
2104
|
+
[106, "deadzone_temperature", tuya.valueConverter.divideBy10],
|
|
2105
|
+
[107, "eco_temperature", tuya.valueConverter.raw],
|
|
2106
|
+
[111, "current_heating_setpoint", tuya.valueConverter.divideBy10],
|
|
2107
|
+
[114, "max_temperature_limit", tuya.valueConverter.divideBy10],
|
|
2108
|
+
[116, "min_temperature_limit", tuya.valueConverter.divideBy10],
|
|
2109
|
+
[
|
|
2110
|
+
108,
|
|
2111
|
+
"weekly_programming",
|
|
2112
|
+
{
|
|
2113
|
+
from: (value) => {
|
|
2114
|
+
// Decode schedule from device (24 bytes: 6 weekday periods + 2 weekend periods)
|
|
2115
|
+
const arr = Array.isArray(value) ? value : Array.from(value);
|
|
2116
|
+
const result = {};
|
|
2117
|
+
// 6 weekday periods (18 bytes)
|
|
2118
|
+
for (let i = 0; i < 6; i++) {
|
|
2119
|
+
result[`weekdays_program_${i + 1}_hour`] = arr[i * 3 + 0];
|
|
2120
|
+
result[`weekdays_program_${i + 1}_minute`] = arr[i * 3 + 1];
|
|
2121
|
+
result[`weekdays_program_${i + 1}_temperature`] = arr[i * 3 + 2];
|
|
2122
|
+
}
|
|
2123
|
+
// 2 weekend periods (6 bytes)
|
|
2124
|
+
for (let i = 0; i < 2; i++) {
|
|
2125
|
+
result[`weekend_program_${i + 1}_hour`] = arr[18 + i * 3 + 0];
|
|
2126
|
+
result[`weekend_program_${i + 1}_minute`] = arr[18 + i * 3 + 1];
|
|
2127
|
+
result[`weekend_program_${i + 1}_temperature`] = arr[18 + i * 3 + 2];
|
|
2128
|
+
}
|
|
2129
|
+
return result;
|
|
2130
|
+
},
|
|
2131
|
+
to: (entityValue) => {
|
|
2132
|
+
// Encode schedule to send to device
|
|
2133
|
+
const arr = [];
|
|
2134
|
+
// 6 weekday periods
|
|
2135
|
+
for (let i = 1; i <= 6; i++) {
|
|
2136
|
+
arr.push(entityValue[`weekdays_program_${i}_hour`] ?? 0);
|
|
2137
|
+
arr.push(entityValue[`weekdays_program_${i}_minute`] ?? 0);
|
|
2138
|
+
arr.push(entityValue[`weekdays_program_${i}_temperature`] ?? 16);
|
|
2139
|
+
}
|
|
2140
|
+
// 2 weekend periods
|
|
2141
|
+
for (let i = 1; i <= 2; i++) {
|
|
2142
|
+
arr.push(entityValue[`weekend_program_${i}_hour`] ?? 0);
|
|
2143
|
+
arr.push(entityValue[`weekend_program_${i}_minute`] ?? 0);
|
|
2144
|
+
arr.push(entityValue[`weekend_program_${i}_temperature`] ?? 16);
|
|
2145
|
+
}
|
|
2146
|
+
return arr;
|
|
2147
|
+
},
|
|
2148
|
+
},
|
|
2149
|
+
],
|
|
2150
|
+
],
|
|
2151
|
+
},
|
|
2152
|
+
},
|
|
1908
2153
|
];
|
|
1909
2154
|
//# sourceMappingURL=moes.js.map
|