We'd need to see the logic of your automation to help on this one. The full graph would be good too.
But, why use an automation as a thermostat instead of a generic thermostat integration?
Home Assistant is open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server. Available for free at home-assistant.io
We'd need to see the logic of your automation to help on this one. The full graph would be good too.
But, why use an automation as a thermostat instead of a generic thermostat integration?
I use the generic thermostat but I want to switch the TRVs to different temperatures/states depending on a schedule and if we are at home or not. The automation changed over the last 3 or 4 years but basicly it was one of my first experiments with HA. It worked flawless and did what it should.
Maybe it's not the best or refined but it worked.
triggers:
- entity_id:
- sensor.wohnzimmer_temp
trigger: state
conditions:
- condition: and
conditions:
- condition: state
state: "off"
entity_id: binary_sensor.balkontur_contact
- condition: state
entity_id: input_boolean.wohnzimmer_heizung
state: "on"
- condition: template
value_template: >-
{% if states('input_boolean.away_mode')=='off' %} {% if
states('schedule.testkalender')=='on' %} {{
states('sensor.wohnzimmer_temp') | float <
states('input_number.wohnzimmer_temperatur_tag') | float + 1 }} {%
else %} {{ states('sensor.wohnzimmer_temp') | float <
states('input_number.wohnzimmer_temperatur_nacht') | float + 1 }} {%
endif %} {% else %} {{ (states('sensor.wohnzimmer_temp') | float) |
round < states('input_number.temperatur_away_mode') | float + 1 }} {%
endif %}
enabled: true
actions:
- action: climate.set_temperature
target:
entity_id: climate.heizung_wohnzimmer
data:
temperature: |
{% if states('schedule.testkalender')=='on' %}
{{ states('input_number.wohnzimmer_temperatur_tag') | int + states('input_number.wohnzimmer_heizung_offset') | int }}
{% else %}
{{ states('input_number.wohnzimmer_temperatur_nacht') | int }}
{% endif %}
hvac_mode: |
{% if states('input_boolean.away_mode')=='off' %}
{% if states('schedule.testkalender')=='on' %}
{% if states('sensor.wohnzimmer_temp') | float < states('input_number.wohnzimmer_temperatur_tag') | float %}
heat
{% else %}
off
{% endif %}
{% else %}
{% if states('sensor.wohnzimmer_temp') | float < states('input_number.wohnzimmer_temperatur_nacht') | float %}
heat
{% else %}
off
{% endif %}
{% endif %}
{% else %}
{% if states('sensor.wohnzimmer_temp') | float < states('input_number.temperatur_away_mode') | float %}
heat
{% else %}
off
{% endif %}
{% endif %}
mode: single
Why thefloat + 1
for some values?
Also you're using <
, maybe try <=
I was young and... I don't know why I used it a few years ago. I will try your suggestion.
Ok, now I know why. without the +1 the automation does not trigger when the temperature is over the target and the TRVs running on idle. The +1 triggers the automation and switches them off until the room temperature is under the target temperature. So it does not explain why the mode is switched from heat to off or the other way around in the target +1° range.
I feel like this is screaming for proper PID controller logic. I like this one, installable from HACS.
Thank you. I will look at it
Sorry I don't have an answer to your question but I am curious which TRVs you're using and how you're finding them? What was the reason for switching from Bosch to Sonoff? Thanks.
They are Sonoff TRVZB. Bosch changed the firmware and with 3.7.4 the TRVs startet to recalibrate and reboot at random times. Sometimes 15 minutes in a row. Bosch said: Thats your valves, change them, not our fault.