Zigbee radiator TRV RTX ZB-RT1

Hello
I want to create, in my flat, system that will allow automatic control for heating. The only option I have are TRV mounted on each radiator I have in flat.
For first test I pick RTX ZB-RT1 device but I'm unable to get data from and send to device. I'm able to pair device witch C-8 but thats all.
I've tested generic zigbee thermostat driver
In log i see
dev:72023-12-15 21:17:35.570infoZigbee parsed:[raw:catchall: 0104 EF00 01 01 0040 00 1A8B 01 00 0000 02 01 000266020004000000E9, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:1A8B, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 02, 66, 02, 00, 04, 00, 00, 00, E9]]
dev:72023-12-15 21:01:37.008infoZigbee parsed:[raw:catchall: 0104 EF00 01 01 0040 00 1A8B 01 00 0000 24 01 1200, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:1A8B, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:24, direction:01, data:[12, 00]]

Data shows:
endpointId: **01
application: **43
inClusters: **0004,0005,EF00,0000
manufacturer: **_TZE200_0dvm9mva
model: **TS0601
outClusters: **0019,000A
* softwareBuild:

Additionally I've tested drivers:

in logs I got warning
dev:72023-12-15 22:41:42.576warn pase lin 59 used - read attr - raw: 1A8B0100000A00002003, dni: 1A8B, endpoint: 01, cluster: 0000, size: 0A, attrId: 0000, encoding: 20, command: 01, value: 03
dev:72023-12-15 22:41:42.151debugrefresh
dev:72023-12-15 22:37:22.430warn pase lin 59 used - read attr - raw: 1A8B0100000A00002003, dni: 1A8B, endpoint: 01, cluster: 0000, size: 0A, attrId: 0000, encoding: 20, command: 01, value: 03
dev:72023-12-15 22:37:21.024debugrefresh
Data the same as previously

and
https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Zigbee%20TRV/Zigbee_TRV_lib_included.groovy
I got logs
dev:72023-12-15 22:44:34.093debugTermostat clearing the Status event
dev:72023-12-15 22:44:27.834debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:27.824debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:27.725debugTermostat refresh()... DEVICE_TYPE is Thermostat
dev:72023-12-15 22:44:13.983debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:13.973debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:13.794debugTermostat refresh()... DEVICE_TYPE is Thermostat
dev:72023-12-15 22:44:13.757debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:13.747debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:13.521debugTermostat refresh()... DEVICE_TYPE is Thermostat
dev:72023-12-15 22:44:13.472debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:13.463debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:13.339debugTermostat refresh()... DEVICE_TYPE is Thermostat
dev:72023-12-15 22:44:12.995debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:12.983debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:12.835debugTermostat refresh()... DEVICE_TYPE is Thermostat
dev:72023-12-15 22:44:11.064debugTermostat sendZigbeeCommands(cmd=[he raw 0x1A8B 1 0x01 0x0201 {10 00 00 00 00 12 00 1B 00 1C 00 29 00}, delay 3500])
dev:72023-12-15 22:44:11.053debugTermostat refreshThermostat: calling DEVICE.refresh methods: [pollThermostatCluster]
dev:72023-12-15 22:44:10.964debugTermostat refresh()... DEVICE_TYPE is Thermostat

i have found driver fo Aqara E1

https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Aqara%20E1%20Thermostat/Aqara_E1_Thermostat_lib_included.groovy
but it looks promissing so I'm considerng sending back RTX anby buy Aqara E1.
Any other suggestions?

Hi @tserwicki ,

Is this your TRV ?

If you can keep it for one more week, I will try to add it to the new Zigbee TRV and Thermostats driver..

Can you try the following:
Turn on the 'Advanced Options' and lock on the Save Preferences button.
image
Additional preferences will appear on the device page - select "MOES BRT-100 TRV" and save the preferences again.
image

Your TRV is different than the Moes BRT-100, but some commands are the same - let me know if something is working or not.

Actually, this TRV commands are rather different than the BRT-100 model ..

Please update manually the driver to the new version 3.0.6, 2023/12/16 5:58 PM

https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Zigbee%20TRV/Zigbee_TRV_lib_included.groovy

Then, select "LOAD ALL DEFAILTS" in the Configure command options and click on the button above :

image

hello @kkossev
at the beginning I would like to say thank You for Your help :slight_smile:
Ok, from the beginning
TRX eTRV+ Radiator Valve ZB-RT1 Zigbee compatibility Yes this is my device
Yes I can keep it for one more week.
I updated the driver from https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Zigbee%20TRV/Zigbee_TRV_lib_included.groovy
and it looks much better
I get this info:

Current States

      * Status : **clear**
      * coolingSetpoint : **34.5**
      * healthStatus : **online**
      * heatingSetpoint : **250.0**
      * rtt : **3547**
      * supportedThermostatFanModes : **["auto","circulate","on"]**
      * supportedThermostatModes : **["off","heat"]**
      * temperature : **23.9**
      * thermostatFanMode : **auto**
      * thermostatMode : **heat**
      * thermostatOperatingState : **idle**
      * thermostatSetpoint : **250.0**

I don't know why Setpoint is multiply by 10 byt the value is correct 25 deg.

State Variables

      * deviceType : **Thermostat**
      * deviceProfile : **TUYA_SASWELL**
      * lastTx : **{cmdTime=1702752160208, pingTime=1702752160166}**
      * lastThermostatMode : **heat**
      * lastRx : **{tempTime=1702752216264, checkInTime=1702752163697}**
      * lastThermostatOperatingState : **idle**
      * stats : **{pingsMax=3531, rxCtr=31, pingsAvg=3531, txCtr=6, pingsOK=1, tempCtr=2}**
      * driverVersion : **3.0.6 2023/12/16 5:58 PM (TS0601 _TZE200_0dvm9mva) (C-8 2.3.6.146)**
      * health : **{checkCtr3=0, offlineCtr=0}**
      * zigbeeGroups : **{}**
      * states : **{isRefresh=false, isDigital=false, isPing=false}**

ok so receiving data from device is working, when I change set point on device i see this update in Hubitat immediately.
but i notice that when I try set heating setpoint it is not working
below You can see a log
dev:82023-12-16 19:56:15.622infoTermostat stołowy heatingSetpoint is 50.0 °C (raw:50) (no change)
dev:82023-12-16 19:56:15.617debugTermostat stołowy dp_id=2 dp=103 fncmd=50 fncmd_len=4 (index=0)
dev:82023-12-16 19:56:15.609debugTermostat stołowy parse: descMap = [raw:catchall: 0104 EF00 01 01 0040 00 1A8B 01 00 0000 01 01 00846702000400000032, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:1A8B, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:01, direction:01, data:[00, 84, 67, 02, 00, 04, 00, 00, 00, 32]] description=catchall: 0104 EF00 01 01 0040 00 1A8B 01 00 0000 01 01 00846702000400000032
dev:82023-12-16 19:56:15.594debugTermostat stołowy parse: catchall: 0104 EF00 01 01 0040 00 1A8B 01 00 0000 01 01 00846702000400000032
dev:82023-12-16 19:56:15.545debugTermostat stołowy zigbee private cluster 0xEF00 command 0x00 response: Success
dev:82023-12-16 19:56:15.530debugTermostat stołowy parse: catchall: 0104 EF00 01 01 0040 00 1A8B 00 00 0000 0B 01 0000
dev:82023-12-16 19:56:15.118debugTermostat stołowy sendZigbeeCommands(cmd=[he cmd 0x1A8B 0x01 0xEF00 0x00 {15846702000400000012} {}, delay 2000])
dev:82023-12-16 19:56:15.116debugTermostat stołowy sendAttribute: successfluly executed sendAttribute customSetHeatingSetpoint(18.0 (scaledValue=18))
dev:82023-12-16 19:56:15.113debugTermostat stołowy Termostat stołowy sendTuyaCommand = [he cmd 0x1A8B 0x01 0xEF00 0x00 {15846702000400000012} {}, delay 2000]
dev:82023-12-16 19:56:15.105debugTermostat stołowy sendTuyaParameter: sending parameter heatingSetpoint dpValHex 00000012 (raw=18) Tuya dp=67 dpType=02
dev:82023-12-16 19:56:15.098debugTermostat stołowy sendAttribute: not a virtual device (device.controllerType = ZGB), continue
dev:82023-12-16 19:56:15.096debugTermostat stołowy sendAttribute: SKIPPED customSetFunction customSetHeatingSetpoint, continue with the default processing
dev:82023-12-16 19:56:15.093debugTermostat stołowy sendAttribute: parameter heatingSetpoint value 18.0, type decimal validated and scaled to 18 type=decimal
dev:82023-12-16 19:56:15.085debugTermostat stołowy sendAttribute(heatingSetpoint, 18.0)
dev:82023-12-16 19:56:15.083debugTermostat stołowy calling sendAttribute heatingSetpoint 18.0

Still I have a chance to give it back and buy Aqara Smart Radiator Thermostat E1, what do You think?

1 Like

I have corrected the heatingSetpoint scale in the driver update, dated 2023/12/17 9:48 AM.
Update the driver (the faster way is to use the Import button on the top of the Driver Editor) and let me know if the heating setpoint works now.

I don't see many benefits of the Aqara E1 thermostat over this one..

How many TRVs will you need at your home? You could use different models and compare the performance, and most importantly - the reliability!

ok, I've updated the driver and now everything look ok
Current States
Status : clear
coolingSetpoint : 34.5
healthStatus : online
heatingSetpoint : 6.0
rtt : 3058
supportedThermostatFanModes : ["auto","circulate","on"]
supportedThermostatModes : ["off","heat"]
temperature : 23.7
thermostatFanMode : auto
thermostatMode : heat
thermostatOperatingState : idle
thermostatSetpoint : 6.0
Setting set point via Hubitat now work ok, it works immediately and correctly :slight_smile:

I need for thermostats in my flat, but I've only one week to decide, I can send back two and buy two Aqara.
Can You tell is there a page where I can find info about building a driver so maybe I will learn how to expand functionality.

1 Like

You can start from here : Building a Zigbee Driver | Hubitat Documentation

The sample drivers and apps published by Hubitat are very useful :

But, thermostats/TRVs are rather complex devices... and this diver is even more overcomplicated ...

What would be the next feature that you will need for your TRV ?

So I've just started with smart things. So right now I'm learning Hubitat and now I will start to learn thermostat control.
I think that possibility to set temperature is 90% of functionality that I need. I think that maybe set thermostat mode might by useful to, I'm not shure do i understand it well, on my device in extreme positions i see OFF (valve closed of course with antifreeze) and on second side ON (valve fully open) is this the thermostat mode?
supportedThermostatModes : ["off","heat"]
I don't see battery level, this might be useful too.
thermostatOperatingState : idle here should I see if the valve is opening, closing or iddle (not moving) if yes here information is not changing and this might be useful too.
What is rtt : 1660?? Is it round trip time? it is in ms?
In Interface i see send command button, where i can find possible commands to test?

I know, I know the appetite groves the more You eat, yesterday my TRV wasn't working and right know i can control it via My hubitat :slight_smile: so @kkossev many thanks for help.

1 Like

Your questions are quite reasonable!
I have to go out now shopping, but will reply later tonight.

Have fun with Hubitat!

The difficulties when adding support in HE for a new Tuya thermostat or TRV are mostly related to understanding the different operational modes, which are different or at least named differently for each Tuya-based device. The 'manual' / the leaflet that comes with the device is often written in a way that is difficult to understand...

This TRV RTX ZB-RT1 has several modes that we need to map to Hubitat standard thermostatModes :

  • on/off ON - currently mapped to HE thermostat 'heat' mode.
  • on/off OFF - currently mapped to HE thermostat 'off' mode.
  • antiFreeze ON - need to understand what this does
  • antiFreeze OFF - need to understand what TRV mode is selected automatically?
  • awayMode ON - need to understand what this does
  • awayMode OFF - need to understand what TRV mode is selected automatically?
  • limescaleProtect ON - need to understand what this does
  • limescaleProtect OFF - need to understand what this does
  • scheduleMode ON - the internal TRV scheduler is not supported, should add an option to automatically revert to the Manual mode (heating) if the scheduleMode is accidentaly selected.
  • scheduleMode OFF - need to understand what TRV mode is selected automatically?

In the next update, I will try to expose these additional modes for testing.

What is shown on the TRV display when you send 'heat' and 'off' mode from the device web page in HE?

This TRV does not report the battery level in the standard range of 0..100 % battery level remaining, but sends only a 'low battery' warning. Currently, a "batteryLowAlarm" event should be sent from this driver with values batteryOK or batteryLow

Unfortunately, this TRV does not report back whether the valve is open or closed .. : (
What can be done on a driver level is to simulate the thermostatOperatingState :

  • set it to 'heat' when the reported temperature is greater than the heatingSetpoint
  • set it to 'idle' when the reported temperature is less than the heatingSetpoint
    Probably a hysteresis value should be configured in the Preferences section, so that the heat/idle does not change too often.

Yes, this is the time difference between sending a simple command to the device and receiving the answer, in milliseconds. To preserve the battery, the TRVs usually do not listen all the time, but once per second or similar - hence the relatively high RTT value. For mains-powered Zigbee devices the typical RTT values should be less than 200 ms.

  • on/off ON - currently mapped to HE thermostat 'heat' mode.
    When I turn the rotary ring max to left I got "OF" display and I see the valve is closed, and when turn max right I get "ON" and the valve is max open. And in description of Anti-Freeze - so this is security option when the valve is off and the temperature in room drop below 5 C deg. the thermostat will activate and will try to keep 5 C deg in a room to secure water installation in room. So OF is clear the question is about ON is it only for fully open or it is any state except OF?
  • on/off OFF - currently mapped to HE thermostat 'off' mode.
  • antiFreeze ON - I described it above , this description is from technical documentation from the supplier.
  • antiFreeze OFF -
  • awayMode ON - Holiday Mode - fast switch to holiday mode, so the temperature will be keep at defined level. So there must be a variable to set for it.
  • awayMode OFF -
  • limescaleProtect ON - DESCALING Radiator that is off for a long time may cause scaling. To ensure normal operation of radiator, note to open the valve for 30 sec. every two weeks. In such case “AS” message will be displayed. I didn't found this option in documentation so I'm not shure is it supported, I will ask producer
  • limescaleProtect OFF -
  • scheduleMode ON - the internal TRV scheduler is not supported, should add an option to automatically revert to the Manual mode (heating) if the scheduleMode is accidentaly selected.
    I think to that sheduler is done by external device.
  • scheduleMode OFF - need to understand what TRV mode is selected automatically?

I found in producer documentation CHILD LOCK
Press the knob for ca. 10 seconds to activate child lock function what prevents any manual
control over the device. To switch off this function press the knob again.

In the next update, I will try to expose these additional modes for testing.
Happy to hear :slight_smile:

What is shown on the TRV display when you send 'heat' and 'off' mode from the device web page in HE?
A: I did't notice any reaction but in logs I've found this

dev:82023-12-18 23:34:35.833infoTermostat stołowy setThermostatMode: pre-processing: switching to off mode instead
dev:82023-12-18 23:34:11.600infoTermostat stołowy invalid enum parameter auto. value must be one of [0:off, 1:heat]
dev:82023-12-18 23:33:46.606infoTermostat stołowy invalid enum parameter emergency heat. value must be one of [0:off, 1:heat]

This TRV does not report the battery level in the standard range of 0..100 % battery level remaining, but sends only a 'low battery' warning. Currently, a "batteryLowAlarm" event should be sent from this driver with values batteryOK or batteryLow
I see in current states, ok

* thermostatOperatingState : **idle**Info not changing when the valve is opening or closing or in place
Unfortunately, this TRV does not report back whether the valve is open or closed .. : (
What can be done on a driver level is to simulate the thermostatOperatingState :

  • set it to 'heat' when the reported temperature is greater than the heatingSetpoint
  • set it to 'idle' when the reported temperature is less than the heatingSetpoint
    Probably a hysteresis value should be configured in the Preferences section, so that the heat/idle does not change too often.

Yes, this is the time difference between sending a simple command to the device and receiving the answer, in milliseconds. To preserve the battery, the TRVs usually do not listen all the time, but once per second or similar - hence the relatively high RTT value. For mains-powered Zigbee devices the typical RTT values should be less than 200 ms.
[/quote]
I've send request to producer for more info about the device, I'm waiting for response.I got answer they don't have any documentation about software and as they have tried to get info from Tuya they were refused to get any information
Im considering buying CC2531 stick for Sniff Zigbee traffic link

Best Regards
Tomek

I got confirmation that this device support limescale Protect.
I'v notice that when I manually set thermostat to OFF scheduler is unable to set temperature, the device must be set at leat to 5st.C to by able to receive different set points.

Yep, every manufacturer device has its own 'specifics' ...

Hopefully, the Tuya Matter Bridges will solve these issues, leaving the Tuya specifics in their hubs.