eTRV Aeotec Radiator Thermostat and Eurotronic Spirit Z-Wave Thermostats

Simon I have been playing with the Thermostat Controller Built in App.

You set the Thermostat to the TRV and can choose multiple Temp Sensors and set weighting on them for the area that the TRV is heating.

Just testing right now but have setup a Eurotronic Spirit TRV and using a Hue Motion/temp Sensor using the cocohue App to get the temperatures etc (it is a pre release right now V3 but works apart from errors around battery reading.

@simon if you get a chance I would like to know exactly how you got the SSR302 up and running, that is my next big challenge.

I stopped using my SSR302 a while ago..... I now use 3 SSR303's (single channel) - better WAF as she can see at a glance if a zone is on or off....

See here for what I used to use with the SSR302....

Ok got the Eurotronic Spirit zwave TRVs working.

I am new to HE - so probably missing something here.

Is there anyway to get visibility of the actual Valve % of each TRV - the Spirit sometime have a habit of sticking slightly open and on other HAs I have been able to force the valve open and shut it down

Not critical - nice to have

If you look at "Current States" you will see "level" - that's the valve - ranges between 0 to 100. There is a parameter that controls how much a change in the valve triggers a valve report into the logs and updates this level....

1 Like

@bravenel any chance that you could consider adding slave thermostats to Thermostat Scheduler? That is, for each room (main) thermostat you can have one or more eTRV's that need to take their setpoints from the room thermostat. I currently have 10 room thermostats controlling 22 eTRV's and I'm about to implement virtual thermostats for some of the eTRV's. - Plan is I will end up with 10 room thermostats and 7 virtual thermostats - that will be 17 copies of Thermostat Scheduler running.

@simon Thank you for your insights and experience, very much appreciated.

I have 16 eTRVs (Zwave Spirits) and 10 zwave Secure 321.

15 rooms (two radiators in the Lounge)

Also I have 14 Hue Motion/Temp Sensors through cocohue beta App

And I am playing with the Sonoff Temp/Humidity and Motion sensors - directly connected to HE

With the in mind.

I am planning on one Thermostat Controller per Room

And one Thermostat Scheduler per Zone

No Guests in House
Zone 1 - Two bedroom rooms that are unused
Zone 2 - Two Bathrooms unused
Zone 3 - And a reception Room unused
These can all sit at 17c 24/7

EXCEPT when we have guests, then each o the 3 zones above will have different temperature needs.
ie Guest Bedrooms need to be 18c at night and the bathrooms at 22c, the reception room 17c at night 21c during the day.

Zone 4 - Hallway/Landing/WC - only two controllable radiators there - the hallway is not controllable (WC included because despite best efforts the door is always left open :slight_smile:

Zone 5 - Kitchen/Study/Utility

Zone 6 - Lounge

Zone 7 - Master Bedroom

Zone 8 - Master Ensuite

and my Office which I have the radiator turned off - I get too much heat from computers and monitors and vent into the Landing

So will end up with 8 Thermostat Schedulers.

The Hue Motion/Temp sensors are already migrated to HE so using those right now and offsetting temperature readings in the Thermostat Controller (the motion sensors locations are optimised for motion sensing not Temp).

And I can combine and weight the Hue Temp sensors for each zone in the Thermostat Controller.

Does that sound reasonable?

Also, Turning heating on through a Rule is quiet straight forward, If ANY Thermostat Controllers state changes AND ANY of the Thermostat Controllers state is 'heating' turn on the Boiler.

I am finding the turn off more complicated and cumbersome - so would appreciate some advice.

Currently I am using a Rule IF ANY Thermostat Controllers state changes AND ALL Thermostat Controllers state is NOT 'heating' Then turn off boiler

Setting this up is painful for 16 Thermostat Controllers is there a better way?

Found it thanks

Anyway to view the firmware version of the eTRV?

Just noticed something .... well inconsistent ( or more likely I don't understand)

This is the Spirit TRV on Inclusion


Has Firmware version and a few other things

2 Mins later looking at it from devices

Lose all the fw Zwave version etc

Any ideas?

I have that behavior too.....
I implemented the code to go get the Z-Wave info and display it, but don't know why the info disappears after a bit..... (a bit like SnapChat???)

1 Like

This is my app to drive a boiler switch.

/**
 *  Zone1 Boiler Control
 *
 *  Copyright 2020 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:
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  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.
 *
 */
definition(
    name: "Boiler Control Zone1",
    namespace: "SJB",
    author: "Simon Burke",
    description: "Control Zone1 Boiler based on Thermostat Zones",
    category: "Convenience",
    iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
    iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png",
    iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png"
    )

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}"
	unsubscribe()
    unschedule()
	initialize()
}

def initialize() {
	subscribe(thermo, "thermostatMode", thermostatMode)
    runEvery5Minutes('TemperatureHandler')

    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) {
    		theswitch.on()  
    		log.debug "Zone1 - Boiler switched on... ${it.displayName} needs heat"
    	}
    }
}

def thermostatMode(evt) {
     if (evt.value.contains('heat')) {
    	theswitch.on()  
    	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) {
    	theswitch.on()  
        log.debug "Zone1 - Boiler switched on..."
    } else {
        theswitch.off()
        log.debug "Zone1 - Boiler switched off..."
    }
}

@simon any way to expose the Valve level of a TRV to the Dashboard?

I want to be able easily keep an eye on stuck/sticky valves

Pick your device to add to your dashboard and use the level attribute.
Ignore the up/down arrows that show up on the tile.

Nearly lasted 2 weeks without going bonkers :rofl:

1 Like

Just added 2 more TRV's and now it's hit or miss if the temps will change. Each TRV has its own schedule. Do I need to stagger there times?

I've noticed sometimes the nextheatpoint is set needs the manual refresh to activate it.

Is your Z-Wave mesh ok?

If you hit configure and look at the logs do you see plenty of communication back from the device as it's gets the settings?

Should be I have a mains module in every room. Even my office one which has been solid is acting up.

Kinda smells like a mesh issue......
It may just bed down once the new devices get friendly with the older ones.....

Ok, we will see. Been at this for a couple of days, just excluded and reset and including them all, now updated my hub as well.

Noticed too, if I set the heatpoint manually of each, no probs, all together via the scheduler then it's hit or miss (mostly miss).

I found that triggering mutliple FLiRS at once will in most cases stress the network and can render other devices unresponsive or let them respond only after some seconds.
It this applies to you, maybe add a delay of at least 6 seconds between all actions.

Thanks, for the tip, not ideal but worth a try. :sunglasses: