Multi-room temp inputs to one thermostat

Hey Everyone, during the cold of the last few days it has come to my attention that the temp of our three bedrooms can vary drastically because of closed doors and the location of the thermostat.

I got an acurite temp and humidity 433MHz sensor that I put in one of the rooms to check and found that, with the bedroom door closed, the temp of the room could be up to 8 degrees warmer than what the thermostat was reading in the hallway. When the door is open both read the same. So what I deduce is that the thermostat is kicking on the heat at the low end setpoint and running for a long time because there are no actual vents in the hall way to raise the temp. Meanwhile it becomes hot in the rooms with the doors closed.

What I would like to do is get two more of the temp sensors and set those up in the bedrooms and either somehow create an automation to control the HVAC unit itself or adjust the setpoint on the existing thermostat (I would rather do the later here because the Wife still like to adjust the temp on the unit on the wall as opposed to the app).

Some additional information:
It is a central air unit with a gas pack for heat.
The thermostat is a Honeywell T-6 Pro with wifi. I have it integrated to HA with HomeKit Controller.

I’m also working on some scheduling for setting temperatures based on presence detection which is going well so far and has been pretty fun.

I think I’m in over my head on this one but would like to figure out how to make it work so everyone doesn’t have to keep their doors open all night.
Any suggestions would be appreciated. I haven’t been able to find this specific case in my googling and searching of the forums.

2 Likes

Can you elaborate on how you intend to ensure temperature uniformity?

If the (closed off) bedroom’s temperature is used as the ambient temperature reference, the rest of the house will remain colder (due to the lack of air circulation from the bedroom’s registers to the rest of the house).

Or are you planning to use motorized dampers to control air flow (to the bedroom)?

So the Honeywell thermostat is controlling the unit turning on and off based on the temperature that the Honeywell thermostat measures against the setpoint also stored in the thermostat.
HA can pull the temp from the three rooms and also can directly control the thermostat.

I’m looking for a solution that stitches them all together in HA and basically offloads the logic from Honeywell to HA.
So if the average of all three rooms is within a desired range that I’ve set in HA things run as normal on the thermostat. If the average falls outside of that range (or one of the sensors is way outside the range), HA adjusts the setpoints of the thermostat to counter. So basically, I don’t care what the temp is at the thermostat but because it controls when the heat comes on I need to be able to dynamically change it based on the other sensor data.
Does that make sense?
Great question.

The return is directly above the thermostat in the hallway. So it does take a while to register the temp change as opposed to be located nearer to a vent.
I have also thought about the damper route (and may end up going that way), but I wanted to see if I could pull it off with some cheap sensors and programing first.

Other information is this is our 2nd floor unit and only heats and cools these three bedrooms (and a bathroom). And we’ve really only had this problem during extreme cold events but I could also see it happening during heat events in the summertime as well.
I also have a weather station integrated into HA that can also maybe inform when HA needs to take over the control but I would think that I shouldn’t need to do that if whatever solution works well.

also wanted to add that the temp in all three bedrooms is generally consistent if all the doors are closed (I’ve got two other sensors ordered so I’ll be able to say for sure when they are installed). The system is new in the last two years and pretty well balanced for the most part. We’re really only had an issue during extreme cold where the system can’t tell that it’s working the way it sure before the air cools as it reaches the thermostat so it just keeps running.

Have a look at the min max sensor.

You could feed your sensors to that and use it for automation.

So I mean tom is right with the min/max sensor but the problem here is going to be diligence with the doors. Like you say when all the doors are closed the temp is pretty consistent in all the rooms. That’s great and if everyone is really diligent about closing their doors this is a very simple problem. You can do it in HA but honestly there’s probably an even simpler solution, Honeywell sells extra sensors. I’m not actually familiar with Honeywell but have used their competitors and so I’m sure they have a way in the app to say “use this thermostat during these times”. Just put that sensor in one room if they are all the same, no averages are required.

But what if someone forgets to close their door? Normal humans who aren’t on this forum don’t tend to think about the impact of their actions on home automation and just kind of do unpredictable things (animals!). If you are basing the temp on one room or doing an average of all 3 then then that person will be cold (or the other two will be warm depending on which room the sensor is in). And then you’ll have aggravated family members grumbling about an overengineered home in the morning.

It might honestly be better to get less precise. Figure out a good comfort range and watch that all 3 are in that range (not an average). If any fall outside then adjust the target temperature around the current temperature accordingly to force the heat/AC to turn on. And when they are all inside then set target to a temp that forces it to turn off (like a kinda cold temp in the winter and a kinda warm temp in the summer so you know it won’t turn on from the hallway temp).

If that doesn’t work then you might have to add more devices. Like a door sensor to detect when one of the doors is opened or closed so you an account for that in automation. Although you’ll still have limited response with only one zone for the whole upstairs. Taras suggestion definitely requires more investment and time but automated dampers would create a makeshift zone for each room and give more precise control.

Yeah I know that systems like Ecobee have additional sensors, if I had been quicker on the draw I would have got that system but the contractor installed the Honeywell. I haven’t seen any additional sensors for Honeywell which is why I want to offload it to HA.
The issue is when all the doors are closed. The temp in the bed rooms could be several degrees hotter than what is registering at the thermostat which is the problem.
I’m going to take a stab at using min/max and see if I can get the base setup started and I’ll post as I get things going.
Thanks for the input everyone.

Oh. I had seen this on their website when I posted before, isn’t that a room sensor for the thermostat? Or is that incompatible with the thermostat model you have?

Yeah that’s only for their T9 and TWO thermostats. I’ve got the base model T6 so I can’t expand it nativity.
I have got the min max sensor setup and working. I’m now working on the logic for changing the set points on the thermostat.

- platform: min_max
  name: 2nd Floor Temp Stats
  type: mean
  round_digits: 3
  entity_ids:
  - sensor.indoor_temperature_2
  - sensor.acurite_tower_592txr1_f

1 Like

A quick update. I decided to go with a script for the logic piece of this project which I’m still working on. I also created a toggle helper to have a manual override to turn on and off if needed.

Here is the automation so far:

alias: 2nd Floor temp override
description: >-
  The automation that triggers when the outside temp drops below 35 or the
  toggle is turned on.
trigger:
  - platform: state
    entity_id: input_boolean.2nd_floor_temp_script
    to: 'on'
    id: toggle_on
  - platform: numeric_state
    entity_id: sensor.acurite_5n1_1578_f
    below: '35'
    id: outside temp low
    for:
      hours: 0
      minutes: 30
      seconds: 0
  - platform: numeric_state
    entity_id: sensor.acurite_5n1_1578_f
    id: outside temp normal
    above: '35'
    for:
      hours: 0
      minutes: 30
      seconds: 0
  - platform: state
    entity_id: input_boolean.2nd_floor_temp_script
    id: toggle_off
    to: 'off'
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: toggle_on
          - condition: trigger
            id: outside temp low
        sequence:
          - service: script.turn_on
            target:
              entity_id: script.2nd_floor_temp_override
      - conditions:
          - condition: trigger
            id: toggle_off
          - condition: trigger
            id: outside temp normal
        sequence:
          - service: script.turn_off
            target:
              entity_id: script.2nd_floor_temp_override
    default: []
mode: single

I’m going to try and get the script done this weekend but we’ll see how it goes.

alright, I’m working on the script and need some help. I’m going to have a repeat action that checks the conditions ever 5 minutes until either the toggle is turned off or a certain time. I’m having trouble getting the action to format correctly. I’m using an IF statement to adjust the set temp on the thermostat if the tolerance is off by 2 degrees but I keep getting an “message malformed” error.

service: climate.set_temperature
target:
  entity_id: climate.2nd_floor_thermostat
temperature:
  {% if (states('sensor.2nd_floor_temp_stats') | float - states('sensor.indoor_temperature_2') | float) | round(2) > 2 %}
    {{ state_attr('climate.2nd_floor_thermostat', 'temperature') | int - 1 }}
  {% else %}
    {{ state_attr('climate.2nd_floor_thermostat', 'temperature') | int }}
  {% endif %}

any suggestions?

Alright, beta testing. I’ve got the automation dialed in to trigger on either a toggle or outside temp dropping below 35 for at least 30 minutes. It triggers a script that will run on repeat every 5 minutes while the toggle is turned on or until 7am. I will probable adjust this and not have it tied to a time but I want to make sure it works first. Automation Code:

alias: 2nd Floor temp override
description: >-
  The automation that triggers when the outside temp drops below 35 or the
  toggle is turned on.
trigger:
  - platform: state
    entity_id: input_boolean.2nd_floor_temp_script
    to: 'on'
    id: toggle_on
  - platform: numeric_state
    entity_id: sensor.acurite_5n1_1578_f
    below: '35'
    id: outside temp low
    for:
      hours: 0
      minutes: 30
      seconds: 0
  - platform: numeric_state
    entity_id: sensor.acurite_5n1_1578_f
    id: outside temp normal
    above: '35'
    for:
      hours: 0
      minutes: 30
      seconds: 0
  - platform: state
    entity_id: input_boolean.2nd_floor_temp_script
    id: toggle_off
    to: 'off'
condition: []
action:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id: toggle_on
              - condition: trigger
                id: outside temp low
        sequence:
          - service: script.turn_on
            target:
              entity_id: script.2nd_floor_temp_override
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id: toggle_off
              - condition: trigger
                id: outside temp normal
        sequence:
          - service: homeassistant.turn_off
            target:
              entity_id: script.2nd_floor_temp_override
    default:
      - service: homeassistant.turn_off
        target:
          entity_id: script.2nd_floor_temp_override
mode: single

This calls the script which is below:

alias: 2nd Floor temp override
sequence:
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.2nd_floor_temp_script
  - repeat:
      until:
        - condition: state
          entity_id: input_boolean.2nd_floor_temp_script
          state: 'off'
        - condition: time
          after: '07:00:00'
          before: '18:00:00'
      sequence:
        - service: climate.set_temperature
          target:
            entity_id: climate.2nd_floor_thermostat
          data:
            temperature: >
              {% if (states('sensor.2nd_floor_temp_stats') | float -
              states('sensor.indoor_temperature_2') | float) | round(2) > 2 %}
                {{ state_attr('climate.2nd_floor_thermostat', 'temperature') | int - 1 }}
              {% else %}
                {{ state_attr('climate.2nd_floor_thermostat', 'temperature') | int }}
              {% endif %}
        - delay:
            hours: 0
            minutes: 5
            seconds: 0
            milliseconds: 0
mode: single

it should be pretty cold the next few nights. I’ll report back on how it works. Doors closed tonight.

That repeat appears to be designed to run for a long time. You should know that the moment you execute Reload Automations, or restart Home Assistant, all automations that are in-progress (like that long-running repeat) are terminated.

Hey @123 thanks for the heads up. Is that also true for scripts? I think that should be fine because this should be running while everyone is sleeping and only when the temp is low. If I’m working on the server and reloading automations I’ve got the toggle on the lovelace so I should see if it gets disabled.

It did run last night and worked pretty well. It did end up setting the target too low because the time between repeats was too short I think. It basically didn’t allow enough time for the temps to equalize before stepping it down again. I’m adjusting the time to 10 minutes tonight and will also look at adding an if statement to add back to the target if it gets too low.

Also applies to scripts (Reload Scripts).

If you use either the Automation Editor (or Script Editor) to create/modify an automation (script), the moment you press the Save button it automatically performs a Reload Automations (Scripts). Any automation (script) that is busy at that moment executing its actions, is terminated and reset.

How did you go ?
Did you ever get this working 100% ?

haven’t got it working 100%. I’ve since move my setup to a Docker container and I’m working on getting my sensors back but I’ll re-visit this because I want it to work this winter.

hey @bryn.hoh , just remembered that I never posted what I ended up doing for this. I did get something working that is has taken care of my problem. I’m still working on refining the solution to be more flexible but here is what I ended up doing:
First I created an automation that triggers every 15 minutes at nighttime when the thermostat is set to “heat”. This would kick it over to a script that would then evaluate the two temp sensors that I have and either decide that the temp was within range and stop or would adjust the setpoint either up or down.

alias: 2nd Flood Night/Heat Temp Trigger
trigger:
  - platform: time_pattern
    minutes: "15"
  - platform: time_pattern
    minutes: "30"
  - platform: time_pattern
    minutes: "45"
  - platform: time_pattern
    minutes: "0"
condition:
  - condition: state
    entity_id: binary_sensor.night
    state: "on"
  - condition: state
    entity_id: climate.2nd_floor
    state: heat
action:
  - service: script.turn_on
    target:
      entity_id: script.2nd_floor_night_heat_adjust
mode: single

the script:

alias: 2nd Floor Night-Heat Adjust
sequence:
  - if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.acurite_tower_9403_f
            above: 73
            enabled: true
          - condition: numeric_state
            entity_id: sensor.acurite_tower_7666_f
            above: 73
        enabled: true
    then:
      - service: climate.set_temperature
        target:
          entity_id: climate.2nd_floor
        data_template:
          entity_id: climate.2nd_floor
          temperature: "{{(state_attr('climate.2nd_floor' , 'temperature')|round(0)) - 1 }}"
    else:
      - if:
          - condition: or
            conditions:
              - condition: numeric_state
                entity_id: sensor.acurite_tower_9403_f
                enabled: true
                below: 66.5
              - condition: numeric_state
                entity_id: sensor.acurite_tower_7666_f
                below: 66.5
            enabled: true
        then:
          - service: climate.set_temperature
            target:
              entity_id: climate.2nd_floor
            data_template:
              entity_id: climate.2nd_floor
              temperature: >-
                {{(state_attr('climate.2nd_floor' , 'temperature')|round(0)) + 1
                }}
        else:
          - stop: ""
mode: single

I’m working on adding some variables instead of hard numbers but haven’t had the time to fully finish that. I also need to add another condition to check and see if the temp value has changed in the last 15 minutes because I ran into a situation one night where it had cranked the temp up to about 79 before I caught it because my MQTT docker had stopped with one of the temp sensors at around 66 degrees and therefore hadn’t updated in two hours. That was a one off time though while I was tinkering with docker downstairs and forgot that I had taken it down.

Bring this back up after a few months. I’ve been searching for a while for something like this and finally came across your progress. Let me first say thanks for the basis! Have you by chance had any luck with further progress?

no not yet. it’s sill on the list “to do when I have time”.
maybe this fall though since it’s starting to cool down and I’ll start using this script again.