[RELEASE] Tuya Wall Mount Thermostat (Water/Electric Floor Heating) Zigbee driver

This is how my Thermostats Dashboard looks like at the moment :

1 Like

With what app did you do this?

@kkossev I wonder, does this driver not become "big" & difficult to maintain when supporting all those devices?

I started using the inbuilt webCoRe graphs ... It is the former HubiGraph app now in webCore.

I am not planing to add more devices into this driver, as it become really difficult to maintain.
A new driver is on the way ...

1 Like

OK, is there a topic where I can follow the progress?

Not yet, I plan to create it once I have the new driver working with both Tuya BRT-100, Aqara E1 and Sonoff TRVZB.

1 Like

Bruno, I can encourage you to try the HE inbuilt WebCoRE graphs for analyzing the performance of your thermostats.

I am running the WebCoRE on my main C-8 hub, with excellent performance counts (I mean it does not overload the hub in any way!)

There is a learning curve on how to use the WebCoRE graphs, and especially the LTS (Long Time Storage), but it pays off understanding how your thermostats / TRVs controlled heating is performing and where it can be improved.

I am now focusing on heating efficiency, as here in BG the electricity/gas/central hot water costs are still significantly sponsored by the government, but I expect that these good times will be over very soon... Probably from the 1st of January.

Just got another TRV in the mail, the Avatto TRV06. I will add the details here, so we can add functionality in the new driver, when it's ready. I will be returning it, as it does not have as much functionality as the HY367.

Unless you want me to stop posting new ones I test and we can coordinate somewhere else?

res_6507d8dc8db1c9f6a8d675f5e449d18d

Device Pairing Info
Device pairing info
Manufacturer:	_TZE200_p3dbf6qs
Endpoint 01 application:	43
Endpoint 01 endpointId:	01
Endpoint 01 idAsInt:	1
Endpoint 01 inClusters:	0004,0005,EF00,0000
Endpoint 01 initialized:	true
Endpoint 01 manufacturer:	_TZE200_p3dbf6qs
Endpoint 01 model:	TS0601
Endpoint 01 outClusters:	0019,000A
Endpoint 01 profileId:	0104
Endpoint 01 stage:	4
Data Points
{
   "2":"Mode",
   "3":"Working status",
   "4":"Set temperature",
   "5":"Current temperature",
   "7":"Child lock",
   "28":"Week program",
   "29":"Week program Tuesday",
   "30":"Week program Wednesday",
   "31":"Week program Thursday",
   "32":"Week program Friday",
   "33":"Week program Saturday",
   "34":"Week program Sunday",
   "35":"Fault alarm",
   "36":"ι˜²ιœœε†»",
   "39":"Switch Scale",
   "47":"Temperature correction"
}
Standard Instruction Set
Code	Type	Values
mode	Enum	
{
  "range": [
    "auto",
    "manual",
    "off"
  ]
}
temp_set	Integer	
{
  "unit": "℃",
  "min": 50,
  "max": 350,
  "scale": 1,
  "step": 10
}
child_lock	Boolean	
"{true,false}"
week_program_13_1	Raw	
{}
week_program_13_2	Raw	
{}
week_program_13_3	Raw	
{}
week_program_13_4	Raw	
{}
week_program_13_5	Raw	
{}
week_program_13_6	Raw	
{}
week_program_13_7	Raw	
{}
frost	Boolean	
"{true,false}"
scale_switch	Boolean	
"{true,false}"
temp_correction	Integer	
{
  "unit": "℃",
  "min": -3,
  "max": 3,
  "scale": 0,
  "step": 1
}
Standard Status Set
Code	Type	Values
mode	Enum	
{
  "range": [
    "auto",
    "manual",
    "off"
  ]
}
work_state	Enum	
{
  "range": [
    "opened",
    "closed"
  ]
}
temp_set	Integer	
{
  "unit": "℃",
  "min": 50,
  "max": 350,
  "scale": 1,
  "step": 10
}
temp_current	Integer	
{
  "unit": "℃",
  "min": 0,
  "max": 500,
  "scale": 1,
  "step": 10
}
child_lock	Boolean	
"{true,false}"
week_program_13_1	Raw	
{}
week_program_13_2	Raw	
{}
week_program_13_3	Raw	
{}
week_program_13_4	Raw	
{}
week_program_13_5	Raw	
{}
week_program_13_6	Raw	
{}
week_program_13_7	Raw	
{}
fault	Bitmap	
{
  "label": [
    "low_battery",
    "sensor_fault"
  ],
  "maxlen": 2
}
frost	Boolean	
"{true,false}"
scale_switch	Boolean	
"{true,false}"
temp_correction	Integer	
{
  "unit": "℃",
  "min": -3,
  "max": 3,
  "scale": 0,
  "step": 1
}

Please keep posting these, it is difficult to find all these details!

I will come back working on the new driver hopefully after few days, but this is an example how the BRT-100 Device Profile is defined in the code :

BRT-100

Theoretically, if the other TRV models/manufacturers have the same functions - all it needs is to define a new profile for the new device, reusing the existing parameters and attributes names.

1 Like

Yeah, there is, I once looked at WebCoRE but I didn't see added value for my situation and at that time I was not willing to invest some time in it because I could do everything I needed with Rule Machine...

No, I didn't mean to use webCoRE pistons instead of RM5 - currently, I don't have any pistons, all my automations are on RM5.

The only thing that I use from webCoRE at the moment is the Graphs - it is the former HubiGraph app. I replied to the question about what I am using for the graphs.

1 Like

Another TRV. This one looks identical to the HY367 Immax, but has 1 less DP. Purchased from here,

res_04241e50cb132c0db1181b426a6119fe

Device Pairing Info
Manufacturer:	_TZE200_cpmgn2cf
Endpoint 01 application:	55
Endpoint 01 endpointId:	01
Endpoint 01 idAsInt:	1
Endpoint 01 inClusters:	0000,0004,0005,EF00
Endpoint 01 initialized:	true
Endpoint 01 manufacturer:	_TZE200_cpmgn2cf
Endpoint 01 model:	TS0601
Endpoint 01 outClusters:	0019,000A
Endpoint 01 profileId:	0104
Endpoint 01 stage:	4
Data Points
{
   "2":"Set temperature",
   "3":"Current temperature",
   "4":"Mode",
   "7":"Key Lock",
   "13":"Fault alarm",
   "44":"Temp Calibration",
   "102":"SetTemp.Min",
   "103":"SetTemp.Max",
   "104":"Window Parameter",
   "105":"Boost Time(S)",
   "106":"Valve Setting",
   "107":"ComfortTemp Set",
   "108":"EcoTemp Set",
   "109":"Valve Status",
   "110":"Battery Status",
   "111":"AutoMode Type",
   "112":"Workday Set",
   "113":"Restday Set",
   "114":"Holiday  Temperature",
   "115":"Window Status",
   "116":"KeyLock",
   "117":"Holiday Days"
}
Standard Instruction Set
Code	Type	Values
temp_set	Integer	
{
  "unit": "Β°C",
  "min": 10,
  "max": 700,
  "scale": 1,
  "step": 5
}
mode	Enum	
{
  "range": [
    "holiday",
    "auto",
    "manual",
    "comfort",
    "eco",
    "BOOST",
    "temp_auto"
  ]
}
child_lock	Boolean	
"{true,false}"
roomtemp_calibrat	Integer	
{
  "unit": "℃",
  "min": -90,
  "max": 90,
  "scale": 1,
  "step": 10
}
lowtemp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 15,
  "scale": 0,
  "step": 1
}
hightemp	Integer	
{
  "unit": "℃",
  "min": 16,
  "max": 70,
  "scale": 0,
  "step": 1
}
wind	Raw	
{}
boost	Integer	
{
  "unit": "",
  "min": 100,
  "max": 900,
  "scale": 0,
  "step": 100
}
valve_set	Enum	
{
  "range": [
    "normal",
    "ForceOpen",
    "ForceClose"
  ]
}
comfort_temp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
eco_temp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
week_state	Enum	
{
  "range": [
    "0",
    "1",
    "2"
  ]
}
Prog_Workday	Raw	
{}
Prog_Restday	Raw	
{}
Temp_holiday	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
Auto_Lock	Boolean	
"{true,false}"
Days_Holiday	Integer	
{
  "unit": "倩",
  "min": 1,
  "max": 30,
  "scale": 0,
  "step": 1
}

Standard Status Set
Code	Type	Values
temp_set	Integer	
{
  "unit": "Β°C",
  "min": 10,
  "max": 700,
  "scale": 1,
  "step": 5
}
temp_current	Integer	
{
  "unit": "Β°C",
  "min": 0,
  "max": 700,
  "scale": 1,
  "step": 5
}
mode	Enum	
{
  "range": [
    "holiday",
    "auto",
    "manual",
    "comfort",
    "eco",
    "BOOST",
    "temp_auto"
  ]
}
child_lock	Boolean	
"{true,false}"
fault	Bitmap	
{
  "label": [
    "1",
    "2",
    "3",
    "4",
    "5"
  ],
  "maxlen": 5
}
roomtemp_calibrat	Integer	
{
  "unit": "℃",
  "min": -90,
  "max": 90,
  "scale": 1,
  "step": 10
}
lowtemp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 15,
  "scale": 0,
  "step": 1
}
hightemp	Integer	
{
  "unit": "℃",
  "min": 16,
  "max": 70,
  "scale": 0,
  "step": 1
}
wind	Raw	
{}
boost	Integer	
{
  "unit": "",
  "min": 100,
  "max": 900,
  "scale": 0,
  "step": 100
}
valve_set	Enum	
{
  "range": [
    "normal",
    "ForceOpen",
    "ForceClose"
  ]
}
comfort_temp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
eco_temp	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
valve	Integer	
{
  "unit": "%",
  "min": 0,
  "max": 100,
  "scale": 0,
  "step": 1
}
power_state	Boolean	
"{true,false}"
week_state	Enum	
{
  "range": [
    "0",
    "1",
    "2"
  ]
}
Prog_Workday	Raw	
{}
Prog_Restday	Raw	
{}
Temp_holiday	Integer	
{
  "unit": "℃",
  "min": 1,
  "max": 70,
  "scale": 0,
  "step": 1
}
windows_state	Boolean	
"{true,false}"
Auto_Lock	Boolean	
"{true,false}"
Days_Holiday	Integer	
{
  "unit": "倩",
  "min": 1,
  "max": 30,
  "scale": 0,
  "step": 1
}

1 Like

If the DPs less one are matching, we could add it to the existing HY367 Product Profile ('Model Group' in this driver).

Thank you for the PR! :+1:, I will make some small changes and will push the updated version back.
The 'valve' should be a custom attribute, not a capability, as the Hubitat standard capability Valve adds automatically open() and close() methods that are usually not needed for TRVs/thermostats.

I will also add the newly sent events as custom attributes, otherwise they won't be accessible from RM5 rules.

Are you using any of the HE integrations to Alexa, Google or HomeKit?

I guess we could add it to HY367 and just log the missing DP functionality. Maybe a isWhatever(). I will be away for a few days, but intend to get the rest of the functionality working for HY367 after I get back.

Much appreciated on the valve issue, I don't yet know how everything works, was trying to get the valve to show up in my InfluxDB somehow, missing as of yet.

I am using Alexa, and have successfully changed the Setpoint. But, as with all integrations, it is not 100% working. I sometimes have to tell her to turn my Hue lights on twice, and to set the thermostat twice. It usually works the second time, if the first was unsuccessful, even though Alexa reports it as successful.

1 Like

Hi @kkossev and all,
I have spent a lot of time searching for the right thermostst for my need but no luck so far so I am reaching out for your help.
My underfloor heating system is water based. I have 8 different zones controlled by separate 230v thermostats, each controlling an electric valve (Normaly Closed) with a relay rated 3 Amp. Each thermostat is located on the wall in the room it controls.
I would like to replace all thermostats to a smart thermostat (Zigbee to fit @kkossev driver if possible).
The current wall electric boxes are Gewiss 3 gang boxes which are 119mm wide and I would like to avoid replacing them with an EU box (55mm).
All thermostats on this post go well inside a 55 mm electric box but will not cover the 3 gang box I have as they are typically 86*86mm.
Did anyone see a suitable product I should look at?
Thanks,

1 Like

@amithalp I don't have much experience with water-based underfloor heating systems...
As I understand it, you will reuse the existing electric valves and you are looking for new control thermostats only, that must fit into the existing electric boxes, that are 86*86mm.

Just out of curiosity, are these electric boxes used in Italy?

BTW, these are new, interesting and feature-reach thermostats that I discovered for myself in the last few days :

Hi @kkossev ,
Actually, the in-wall electric box is a standard (at least here in Israel) triple module box.
The dimentions are 119mm wide * 80mm tall
You can fill it with any Gewiss, Bticino or other brands' accessories.
The problem is that it seems most uthermostats are suitable for the smaller electric boxes that people ahrdly use anymore in my country.

Probably some adaptor plates exist aimed to accommodate EU style electrical devices into the 119mm wide * 80mm tall electrical boxes? Something that is produced / sold locally?

Anyone using the Tuya / Moes BRT-100 TRV can try the new driver:
[ALPHA] Tuya / Moes BRT-100 TRV driver
The code for this device remains in this driver, but any improvements will be done in the new driver in the future.

1 Like

@kkossev,
I have set the hysteresis for the Tuya thermostat a few times.
Unfortunately, it does not seem to stick, any advise please?

Summary

image


Logs

dev:28492023-12-04 10:36:03.716 AMinfoTuya wall thermostat heatingSetpoint is: 18.0Β°C

dev:28492023-12-04 10:36:03.598 AMinfoTuya wall thermostat Thermostat mode reported is: heat

dev:28492023-12-04 10:35:58.732 AMinfoTuya wall thermostat AVATTO Program Mode (104) received is: off (0)

dev:28492023-12-04 10:35:57.241 AMinfoTuya wall thermostat AVATTO Max Temp Limit is: 32 C (dp=19, fncmd=32)

dev:28492023-12-04 10:35:57.104 AMinfoTuya wall thermostat Min temperature limit is: 10 C (dp=26, fncmd=10)

dev:28492023-12-04 10:35:56.979 AMinfoTuya wall thermostat Min temperature limit is: 10 C (dp=26, fncmd=10)

dev:28492023-12-04 10:35:56.625 AMinfoTuya wall thermostat Dead Zone temp (hysteresis) is: 0C (dp=106, fncmd=0)

dev:28492023-12-04 10:35:56.388 AMinfoTuya wall thermostat temperature calibration (correction) is: 0.0 (dp=27, fncmd=0)

dev:28492023-12-04 10:35:56.138 AMinfoTuya wall thermostat Update finished

dev:28492023-12-04 10:35:55.953 AMinfoDebug logging is false; Description text logging is true

dev:28492023-12-04 10:35:55.951 AMinfoForce manual is false; Resend failed is false

dev:28492023-12-04 10:35:55.948 AMinfoUpdating Tuya wall thermostat (Tuya Wall Thermostat) model TS0601 manufacturer _TZE200_ye5jkfsb modelGroupPreference = Auto detect (AVATTO)