TRV - sensors system

I'm looking at further expanding my home automation.
I want to install TRVs on radiators and a thermostat to switch on / off the heater and pump when the TRV on a radiator is open. Ideally, i would also want additional temperature sensors since, the sensors built in the TRVs are not reflective of the actual room temperature.

I read

And it's not very promising.

It would seem it might just be easier to buy a netatmo system off the shelf.

Is there anything that works with hubitat without wasting a massive amount of time?
Thank you very much

Have a look over here......

1 Like

Hey thank you so much for the reply, I decided to buy a couple of relatively cheap zigbee eTRV from amazon to test them out.

1 Like

so I am still struggling to figure out how to use hubitat.
I would be grateful for some help here, it is really not easy.

First on the device selection:
I ordered the Moes Tuya ZigBee 3.0 Smart Radiator Actuator and I have yet to be able to get hubitat to recognize it.
Is it possible that despite being Zigbee 3.0 hubitat won't read it? or maybe I have not been able to put it correctly in pairing mode?

Then I am still looking at other devices and i wonder if there is decent support for the Eurotronic Spirit Zigbee version.
@simon I saw you did an excellent job on the z-wave version but I am developing my mesh to be zigbee and unless strictly necessary I am thinking of sticking to zigbee.

Then another major question that I have yet to understand:
does the Thermostat Scheduler app work without a wall thermostat like the following:
Zen zigbee thermostat

In my understanding the hubitat Thermostat Scheduler is the equivalent of a wall thermostat. However i would still need somethng like a zigbee switch to enable the heater pump. Just having the TRV open is not enough unless the heater starts and pumps hot water through the system.
Am I understanding this correctly?

Thank you in advance to anycan who can help

I use Z-Wave room thermostats (I currently have 8 of them) - they are Secure SRT321's - they simply allow to to set the desired temperature and they measure current room temperature. If the set point becomes higher than the room temperature it calls for heat. I use Thermostat Scheduler to automatically set these set points depending on the time of day.

I wrote an app for Hubitat that activates when a thermostat calls for heat and turns on my boiler - that's another Z-Wave switch. The boiler has two heating zones and a hot water zone. So I have two copies of my app running for the heating zones and I have another similar app that I wrote that controls the hot water.

I can't comment on the Tuya TRV as I have never tried one,

1 Like

Thank you very much Simon.
so if I don't get a wall thermostat I would at least need a temperature sensor which is what I bought.

I have another question regarding best practices to set this system up:
How do you deal with the switching on/off the boiler when called by multiple sensors?

I see an edge case when:
Sensor A is above the setpoint and the boiler is activated
Sensor B is above the setpoint and the boiler is activated
Sensor A is below setpoint BUT Sensor B is still above the setpoint. There is a conflict here, sensor A will want to turn off the boiler because it's done, but Sensor B will want it to keep running.
Obviously what we want is to close the TRVs connected to sensor A and allow the boiler to run.

How do you deal with this logic?

My app allows for multiple thermostats.
If any one calls for heat the boiler goes on.
If none are calling for heat anymore then the boiler goes off.
I have additional logic (currently a bit of a mess) that sets eTRV's based on the setpoint of the corresponding thermostat.

1 Like

this makes perfect sense.
this should totally be something built into hubitat!
maybe something similar could be achieved by node red? what do you think?

Can you share the app on github? curious to poke around with it

Here's the app that controls the thermostats for my Heating Zone 1

 *  Zone1 Boiler Control
 *  Copyright 2018 Simon Burke
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
    name: "Boiler Control Zone1",
    namespace: "SJB",
    author: "Simon Burke",
    description: "Control Zone1 Boiler based on Thermostat Zones",
    category: "Convenience",
    iconUrl: "",
    iconX2Url: "",
    iconX3Url: ""

preferences {
    section("Turn on/off this Z-Wave Boiler Switch") {
        input "theswitch", "capability.switch", required: true
    section("Boiler Boost Switch") {
        input "Booster", "capability.switch", required: true
    section("Thermostat") {
        input "thermo", "capability.thermostat", title: "SRT321 Thermostats", multiple: true, required: true
    section("Temperature Sensor") {
        input "temperatureSensor", "capability.temperatureMeasurement", title: "Temperature Sensor", required: false
    section("Temperature Trigger Level") {
        input "temperatureTrigger", "number", title: "Temperature", required:true, multiple:false

def updated() {
	log.debug "Updated with settings: ${settings}"

def initialize() {
	subscribe(thermo, "thermostatMode", thermostatMode)

    thermo?.each {
        if (it.currentValue('battery') < 2)   {
            log.debug  "Zone1 - $it.displayName battery too low - disabled"
    	if (it.currentThermostatMode.contains('heat')) and (it.currentValue('battery') > 1) {
    		log.debug "Zone1 - Boiler switched on... ${it.displayName} needs heat"

def thermostatMode(evt) {
     if (evt.value.contains('heat')) {
    	log.debug "Zone1 - Boiler switched on... ${evt.displayName} called for heat"

def TemperatureHandler(evt) {
    def CurrentTemp = temperatureSensor.latestValue("temperature")
    def KnockOnOff = 0
    def BatteryPerCent = 0
    if (CurrentTemp>temperatureTrigger-1) {
        log.debug "Zone1 - Temp is $CurrentTemp - at or above $temperatureTrigger"
        KnockOnOff = 0
    } else {  
        log.debug "Zone1 - Temp is $CurrentTemp - too cold - Switching Boiler On"
        KnockOnOff = 1
    thermo?.each {
        BatteryPerCent = it.currentValue('battery')
    	log.debug "Zone1 - $it.displayName current mode is $it.currentThermostatMode  Battery is $BatteryPerCent"    
        if (it.currentValue('battery') < 2)   {
            log.debug  "Zone1 - $it.displayName battery too low - disabled"
        if (it.currentThermostatMode.contains('heat')) {
            if (it.currentValue('battery') > 1) {
    		    log.debug "Zone1 - $it.displayName needs heat..."
    		    KnockOnOff = 1            
    if ("off" == Booster.currentSwitch ) {
    	log.debug "Zone1 - Booster is Off"
    } else {
       	log.debug "Zone1 - Booster is On"
        KnockOnOff = 1

    if  (KnockOnOff == 1) {
        log.debug "Zone1 - Boiler switched on..."
    } else {
        log.debug "Zone1 - Boiler switched off..."

thank you I will have a look at it.
I am rusty with code, I used to code but haven't done it for many years....

Hi Simon,

By any chance did you look at the thermostat controller recently released?
It seems kind of helpful for what you and i are trying to do.

By the way, I'm also looking at home assistant lately, it seems it has a lot more activity than hubitat

Not looked at it yet........