Shelly TRV - How is everyone using them?

Hi All,

So I’ve recently replaced my old and failing Drayton wiser smart TRV’s with shelly TRV’s in preparation for the winter. So far they seem ok but I’m letting them run as they would in the winter (minus controlling the boiler) but they seem to have some odd quirks so i wanted to see how everyone else is using them

For me, i have each TRV configured with external temperature sensors and with underfloor heating mode enabled so the internal sensor does nothing. I then push rest calls to the TRV’s using data from my external sensors to control them.

Each sensor has auto temperature control enabled with the fast heat option disabled. I then use the HACS scheduler-component to control the temperature set points on a schedule so all my configuration is in home assistant if I need to make changes

It’s only been a few days so I’m still learning but I have spotted odd behaviour with the TRV trying to turn the heating on. For example, here is the HA chart for this morning
image

You can see it turns on as it should, but then randomly turns off for 10 minutes before deciding to come on again. It then remains on until the temperature hits 20.9 and then 5 minutes later turns itself on again for 5 minutes, even through its already warm enough

I had a similar starting behaviour yesterday as well, except yesterday it was 5 minutes that it was off for. It did not however have the weird issue of turning itself on again after the room warmed up
image

Right now its feeling like I may have to disable auto control and manage the valves manually to make sure it works a little more as you’d expect but I wanted to see what everyone else is doing first?

For example, ideally it would turn on when it was 0.5 degrees below the set point and turn off at 0.5 degrees above so it has a gap/swing. Right now it looks like if I set 20, it would turn on at 19.9 but that could be triggered by someone walking past a sensor for split second so it almost seems too sensitive

Many thanks in advance,
Jamie

I have zigbee trvs. I set them in manual mode as programing mode is just eating battery and do basically nothing. Maybe this will make sense if you turn boiler on/off using trv.
I also using external temperature sensor, one that is in the bedroom to measure temp.
I had it for one winter and they are working as I wanted.
I noticed that various parts of the house have different temperature.
When heating is working furnace pump is sending hot water to radiators. Water will first go to the radiators that have less flow resistance.
Using smart trv I could adjust flow resistance by setting higher or lower temp to the radiators affecting how much radiator valve is open.
And this works quite well as I can get more hear where I needed maintaining temp in the rooms that don’t need that much heat.
And why all that trouble?
Well because you need more energy to heat water for ie. 20 radiators than for 10. So I can set lower temp in furnace and still maintain desired temp where I need it. This winter was the lowest gas consumption ever.

That does make sense and was the way i was expecting to do it to be honest. For now i have swapped them to manual mode and grabbed the valve position information, i have then written some custom logic that is fired each time the input number i have stored for the set temp or the external sensor value changes

This logic is still being worked on but is designed to only alter the valve position based on threshold figures i have configured elsewhere, for example, only turn on if 0.5 degrees below the set point, and turn ff at 0.5 degrees above the set point

Valve positions are set to go between 30 and 100 when running and always work to a 10% increment

The system uses a script and an automation and looks like this:

alias: Control TRV Valve
sequence:
  - variables:
      settemp: "{{ states( settempname, rounded=True) | float }}"
      settempwithloweroffset: >-
        {{ settemp - states( 'input_number.heating_under_temp_trigger',
        rounded=True) | round(2) }}
      settempwithupperoffset: >-
        {{ settemp + states( 'input_number.heating_under_temp_trigger',
        rounded=True) | round(2) }}
      currenttemp: "{{ states( curtempname, rounded=True) | float }}"
      currentpos: "{{ states( curposname, rounded=True) | round(0, 'ceil') | int }}"
      currentlyon: "{{ currentpos > 0 }}"
      difference: "{{ ( settemp - currenttemp ) | round(2) }}"
      calculatedpos: >-
        {{ [( ( ( ( difference / float( states(
        'input_number.heating_under_temp_fractional_point', rounded=True) ) ) *
        100 ) / 10) | round(0, 'ceil') * 10 | int ), 100] | min | int }}
      calculatedposfixed: "{{ [calculatedpos, 100] | min | int }}"
      calculatedposusable: |-
        {% if currentlyon == false and currenttemp <= settempwithloweroffset %}
          {{ [calculatedposfixed, 30] | max | int }}
        {% elif currentlyon == true and currenttemp < settempwithupperoffset %}
          {{ [calculatedposfixed, 30] | max | int }}
        {% else %}
          {{ 0 }}
        {% endif %}
      runupdate: "{{ calculatedposusable != currentpos }}"
    enabled: true
  - condition: template
    value_template: "{{ runupdate == true }}"
    enabled: true
  - service: number.set_value
    data:
      value: "{{ calculatedposusable }}"
    target:
      entity_id: "{{curposname}}"
    enabled: true
mode: parallel
max: 10

The automation looks like this

alias: Heating - Update TRV Position
description: ""
trigger:
  - platform: state
    entity_id:
      - input_number.master_bedroom_set_temp
      - sensor.temperature_humidity_sensor_a938_temperature
    id: MasterBedroom
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - MasterBedroom
        sequence:
          - service: script.control_trv_valve
            data:
              settempname: input_number.master_bedroom_set_temp
              curtempname: sensor.temperature_humidity_sensor_a938_temperature
              curposname: number.shellytrv_2c1165dacc5b_valve_position
    default:
      - stop: ""
mode: parallel
max: 10

I then have a min/max helper setup on the valve positions so if any of them are 10% or above (to allow me to alter settings as needed), then it turns the boiler on with it turning off when all are below 10%

The input number for set temp is controlled by a separate schedule and then can be manually changed by people as needed. For now this is controlling 1 valve as a test but you’d just add more conditions and triggers as needed for the other rooms/stats

It may or may not be useful to others and there may be better ways to do it but for now, this will hopefully work

I’m using better thermostat integration for trv control. It doesn’t need automation because it uses indoor and outdoor sensor to calculate valve position for given temp.
I use automation to turn on off valves using buderus summer mode state.
For now I have 6 smart trv. System would very likely be more efficient if I have more valves.

And that’s the whole point of having smart home. Except the obvious reason to brag around, it main purpose is to improve efficiency and reduce vaste while maintaining the same life quality.

1 Like

Honestly it would have been much easier to use the better thermostat integration but with the shelly trv’s I have, the valve position is a separate number entity and it doesn’t work like a lot of others so its a little annoying

Hopefully my custom logic works until someone can recommend a better way of doing this specifically with the shelly’s. At least i can let it do auto clog prevention by itself, some perks i guess?

Primarily i’m hoping in this state that the battery of the device should last a very long time. Internal temp sensors and logic are all disabled besides the clog prevention. And it will only be sent commands if the valve position needs to change so hopefully a fairly minimal amount of commands per day

Nevertheless of manufacturer claims battery will last for a year, let’s say for a winter. But that depends on how many times trv will adjust valve or open and close it and the pressure it had to do on a valve to change position.
Well test it for a winter and see how it goes. I have moes trvs, they also have some quirks like Shelly’s but they are working with better thermostat

@bigjme Try jmcollin78/versatile_thermostat. It works with Shelly TRVs.