- #10975 BITUO TECHNIK SPM01-U01: support OTA (@mrmaximas)
- #30065 Remove extra
>in onboarding (@Bi11) - #10967 Onokom: various updates (@zwg3)
- #10968 Third Reality 3RSB01085Z: various updates (@3reality-support)
- #10959 Bosch BTH-R*: Tweak attribute reporting config (@burmistrzak)
- #30058 SONOFF S60ZBTPF: add missing energy expose (@Koenkk)
- #29833 Sunricher SR-ZG9092A: fix configure failing (@Koenkk)
- #23155 Tuya
_TZ3000_x3ewpzyr: disable unecessary polling for some versions (@Koenkk) - #30054 Tuya TRV602Z: fix invalid time (@Koenkk)
- #1583 Ember: ASH layer optimizations (@Nerivec)
- #1582 Ember: tweak error logging (@Nerivec)
- #1580 Guard against a
undefineddevice on data receipt (@bobrippling)
- #357 fix: better handle
last_seen: "disable"(@Nerivec) - fix: enforce device tile height to avoid grid weirdness
- fix: initial activity for multi-instance
- fix: "Coordinator - Device left" display bug
This release adds support for 12 devices:
- #10979
6254380CTM Lyng 2.0 Stove guard (@HenrikHills) - #10963
9290012574Philips Hue White and Color Ambiance B22/E27 806lm (@neyzm) - #10970
P2-WTTCL Water leak detector (@devkaiwang) - #10978
PIMS3028KnockautX Cover plug-in receiver multi STAK 3/STAS 3 (@phiphi060) - #10908
SR-ZG9001T2-SWSunricher Zigbee 2-gang touch panel (@niracler) - #10941
SRP-ZG9105-CVSunricher Constant voltage Zigbee LED driver (@jabe93) - #10980
X99-G-kbFan-1g-ZG-LN-11Coswall Fan & light switch (@rftafas) - #10964
067767Legrand Wireless Color Ambiance Switch 067767/68/69 - 077710L (@arnauddeslandes) - #10962
929003853404Philips Hue white ambiance and color 810lm A60 E27 (@chris-1243) - #10962
929003853803Philips Hue white ambiance and color 1100lm A19 E26 (@chris-1243) - #10958
ZM4LT3Moes 3-gang switch module (@andrei-lazarov) - #10961
ZMS-208US-3Zemismart Smart screen switch 3 gang (@Rod-Persky)







I've managed to get it working with zigbee2mqtt using an external converter
I named to file "_TZE284_zjhoqbrd.js"
then put it in /homeassistant/zigbee2mqtt/external_converters/
Below is the contents of the .js file
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const modernExtend = require('zigbee-herdsman-converters/lib/modernExtend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const definition = {
// Since a lot of Tuya devices use the same modelID, but use different datapoints
// it's necessary to provide a fingerprint instead of a zigbeeModel
fingerprint: [
{
// The model ID from: Device with modelID 'TS0601' is not supported
// You may need to add \u0000 at the end of the name in some cases
modelID: 'TS0601',
// The manufacturer name from: Device with modelID 'TS0601' is not supported.
manufacturerName: '_TZE284_zjhoqbrd',
},
],
model: 'TS0601_ZWT198',
vendor: 'Tuya',
icon: '/icons/ts0601_zwt198.jpg',
description: 'Central Heating Thermostat',
fromZigbee: [tuya.fz.datapoints],
toZigbee: [tuya.tz.datapoints],
onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
configure: tuya.configureMagicPacket,
exposes: [
e.binary("factory_reset", ea.STATE_SET, "ON", "OFF").withDescription("Full factory reset, use with caution!"),
e.child_lock(),
e.temperature_sensor_select(["internal", "external", "both"]),
e
.climate()
.withSystemMode(["off", "heat"], ea.STATE_SET)
.withPreset(["manual", "auto", "temporary_manual"])
.withSetpoint("current_heating_setpoint", 5, 35, 0.5, ea.STATE_SET)
.withRunningState(["idle", "heat"], ea.STATE)
.withLocalTemperature(ea.STATE)
.withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET),
e.binary("frost_protection", ea.STATE_SET, "ON", "OFF").withDescription("Antifreeze function"),
e
.max_temperature_limit()
.withUnit("°C")
.withValueMin(15)
.withValueMax(90)
.withValueStep(0.5)
.withPreset("default", 60, "Default value")
.withDescription("Maximum upper temperature"),
e
.numeric("deadzone_temperature", ea.STATE_SET)
.withUnit("°C")
.withValueMax(10)
.withValueMin(0.1)
.withValueStep(0.1)
.withPreset("default", 1, "Default value")
.withDescription("The delta between local_temperature (5<t<35)and current_heating_setpoint to trigger Heat"),
e.enum("backlight_mode", ea.STATE_SET, ["off", "low", "medium", "high"]).withDescription("Intensity of the backlight"),
e.enum("working_day", ea.STATE_SET, ["disabled", "6-1", "5-2", "7"]).withDescription("Workday setting"),
e.text("schedule_weekday", ea.STATE_SET).withDescription("Workdays (6 times
hh:mm/cc.c°C)"),e
.text("schedule_holiday", ea.STATE_SET)
.withDescription("Holidays (2 times
hh:mm/cc.c°C)"),// ============== exposes for found, but not functional datapoints:
/*
e.min_temperature_limit() // dp 16
.withValueMin(5)
.withValueMax(15)
.withValueStep(0.5)
.withPreset('default', 10, 'Default value')
.withDescription('dp16 is listed in Tuya, but no communication from device'),
};
module.exports = definition;