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
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.
I’m glad to see that you’re still working on this — I stumbled across this post months ago when I was setting up HA again. Lo and behold, winter is almost here, and found this when researching a workable solution for my landlord’s Honeywell, and radiators.
I’m fairly new, so not sure how much help I can be at this stage. If I figure anything out, I’ll post here.
This is an interesting project, and it’s nice to see some progress on it. For your case, however, have you considered using something like the Keen smart vents, which are Zigbee compatible? Seems like a good way to more directly run automations simulating zoned climate control.
Hi @masterofthe4th have you had any progress on this? I have a similar issue. Our apartment has a single AC unit that powers the AC in the master bedroom, living+kitchen, and baby’s room. I am using a honeywell T9 with sensors in each area. Nonetheless, I’d be interested in having more control in HA. Main issue we have is half of the apartment is receiving more sun throughout the day, and therefore the kitchen (not a main issue) and the baby’s room tends to be much warmer than the living room and the master. Master is always much cooler, and baby is mostly too warm…
It is a bit improved by forcing the honeywell with the Master + Baby as active sensors at night (I believe it thinks no rooms are occupied when everyone is asleep)… I would love to try flair or other smart vents but Flair dont make vents that fit our install yet… (anyone know any other smart vent options?)
If I could control the weight of different rooms at different times I think I’d have a better system… Please let us know what your project looks like now, it seems like it would be a good starting point for me to experiment.