sensor: ## -----------------------------------------------------------------------------------------------## ## Calculation of temperature change ## -----------------------------------------------------------------------------------------------## - platform: template sensors: climate_temp_change: friendly_name: change in temperature value_template: > {% set now = states("sensor.aqara_temperature_kai_temperature")|float %} {% set last = states("input_number.climate_temp_last")|float %} {% set change = (now | float - last) | float %} {% if now == ("0.0"|float) %} {% set change = ("0.0"|float) %} {% endif %} {{ change | round(2) }} ## -----------------------------------------------------------------------------------------------## ## Calculation of the target temperature ## -----------------------------------------------------------------------------------------------## - platform: template sensors: climate_temp: friendly_name: target temperature unit_of_measurement: '°C' value_template: > {% set auto = states("input_boolean.climate_auto") %} {% set manual_temp = states("input_number.climate_temp") %} {% if auto == "off" %} {{ manual_temp }} {% else %} {% set time = states("sensor.time") %} {% set morning = states("input_datetime.climate_morning") %} {% set night = states("input_datetime.climate_night") %} {% set morning_temp = states("input_number.climate_temp_day")|float %} {% set night_temp = states("input_number.climate_temp_night")|float %} {% if night > morning %} {% if time > morning and time <= night %} {{ morning_temp|float }} {% else %} {{ night_temp|float }} {% endif %} {% else %} {% if time <= morning and time > night %} {{ morning_temp|float }} {% else %} {{ night_temp|float }} {% endif %} {% endif %} {% endif %} # Mit Weekday # - platform: template # sensors: # climate_temp: # friendly_name: target temperature # unit_of_measurement: '°C' # value_template: > # {% set auto = states("input_boolean.climate_auto") %} # {% set manual_temp = states("input_number.climate_temp") %} # {% if auto == "off" %} {{ manual_temp }} # {% else %} # {% set time = states("sensor.time") %} # {% set morning = states("sensor.climate_morning") %} # {% set weekday = states("input_boolean.climate_weekday") %} # {% if weekday == "on" %} {% set morning = states("input_datetime.climate_morning") %} # {% else %} {% set morning = states("input_datetime.climate_morning_weekend") %} {% endif %} # {% set night = states("input_datetime.climate_night") %} # {% set morning_temp = states("input_number.climate_temp_morning")|float %} # {% set night_temp = states("input_number.climate_temp_night")|float %} # {% if night > morning %} # {% if time > morning and time <= night %} {{ morning_temp|float }} # {% else %} {{ night_temp|float }} {% endif %} # {% else %} # {% if time <= morning and time > night %} {{ morning_temp|float }} # {% else %} {{ night_temp|float }} {% endif %} # {% endif %} # {% endif %} ## -----------------------------------------------------------------------------------------------## ## target min and max temperature ## -----------------------------------------------------------------------------------------------## - platform: template sensors: climate_temp_min: friendly_name: target min unit_of_measurement: '°C' value_template: > {% set target = states("sensor.climate_temp")|float %} {% set accuracy = states("input_number.climate_temp_accuracy")|float %} {{ target-accuracy|float }} - platform: template sensors: climate_temp_max: friendly_name: target max unit_of_measurement: '°C' value_template: > {% set target = states("sensor.climate_temp")|float %} {% set accuracy = states("input_number.climate_temp_accuracy")|float %} {{ target+accuracy|float }} ## -----------------------------------------------------------------------------------------------## ## Recommendation ## -----------------------------------------------------------------------------------------------## - platform: template sensors: climate_temp_recommendation: friendly_name: temperature recommendation value_template: > {% set min = states("sensor.climate_temp_min")|float %} {% set max = states("sensor.climate_temp_max")|float %} {% set target = states("sensor.climate_temp")|float %} {% set temp_inside = states("sensor.garten_temperatur_temperature")|float %} {% set temp_outside = states("sensor.temperature_outside")|float %} {% set inside_max = temp_inside + states("input_number.climate_temp_accuracy")|float %} {% set accuracy = states("input_number.climate_temp_accuracy") |float %} {% if temp_inside >= target and temp_inside >= (temp_outside - accuracy) %} {{ "open the window" }} {% else %} {{ "close the window" }} {% endif %} ## -----------------------------------------------------------------------------------------------## ## difference to target ## -----------------------------------------------------------------------------------------------## - platform: template sensors: climate_temp_difference: friendly_name: difference to target value_template: > {% if states("sensor.garten_temperatur_temperature") == "unknown" %} {{ 0 | float }} {% else %} {{ (states("sensor.garten_temperatur_temperature") | float - (states.sensor.climate_temp.state | float) ) | round(2) }} {% endif %} unit_of_measurement: '°C' - platform: template sensors: climate_temp_difference_inside_outside: friendly_name: difference inside to outside value_template: > {% if states("sensor.garten_temperatur_temperature") == "unknown" %} {{ 0 | float }} {% else %} {{ (states("sensor.temperature_outside")|float - states("sensor.garten_temperatur_temperature")|float) | round(2) }} {% endif %} unit_of_measurement: '°C' ## -----------------------------------------------------------------------------------------------## ## Schrittgröße, mit der die Heizung verstellt werden soll, abhängig vom Unterschied zur realen ## Temperatur ## Variable Schrittgröße, bei positiv (zu warm) größer, bei negativ (zu kalt) geringer ## -----------------------------------------------------------------------------------------------## # - platform: template # sensors: # climate_temp_steps: # friendly_name: increment # value_template: > # {% set difference = (states("sensor.climate_temp_difference" ) | float) %} # {% set zero = ("0.0" | float ) %} # {% if difference > zero %} # {% if difference >= ("2.00"|float) %} {% set steps = ( "3.00" | float ) %} # {% elif difference >= ("1.50"|float) %} {% set steps = ( "1.50" | float ) %} # {% elif difference >= ("1.00"|float) %} {% set steps = ( "1.00" | float ) %} # {% elif difference >= ("0.50"|float) %} {% set steps = ( "0.50" | float ) %} # {% elif difference >= ("0.00"|float) %} {% set steps = ( "0.00" | float ) %} # {% endif %} # {% else %} # {% if difference <= ("-2.00"|float) %} {% set steps = ( "3.00" | float ) %} # {% elif difference <= ("-1.50"|float) %} {% set steps = ( "1.50" | float ) %} # {% elif difference <= ("-1.00"|float) %} {% set steps = ( "0.50" | float ) %} # {% elif difference <= ("-0.50"|float) %} {% set steps = ( "0.50" | float ) %} # {% elif difference <= ("-0.00"|float) %} {% set steps = ( "0.00" | float ) %} # {% endif %} # {% endif %} # {{ steps }} ## -----------------------------------------------------------------------------------------------## ## Berechnung der Temperatur, auf die die Heizung gestellt werden soll, um Zieltemperatur zu ## erreichen. Berücksichtigung für Genauigkeit, variable Temperaturanpassung und Temperatur- ## anpassung aufgrund von Offset. Berechnung ob Anpassung Positiv oder Negativ ## -----------------------------------------------------------------------------------------------## # - platform: template # sensors: # climate_temp_set: # friendly_name: '-> climate' # value_template: > # {% set difference = (states("sensor.climate_temp_difference" ) | float) %} # {% set change = (states("sensor.climate_temp_change" ) | float) %} # {% set goal = (states("sensor.climate_temp" ) | float) %} # {% set temp = (states("sensor.aqara_temperature_kai_temperature") | float ) %} # {% set climate = (state_attr("climate.kai", "temperature") | float ) %} # {% if climate < ("15.0" | float ) %} {% set climate = ("15.0" | float) %} {% endif %} # {% set max = states("sensor.climate_temp") | float %} # {% set min = states("sensor.climate_temp") | float - (states.input_number.climate_temp_accuracy.state | float) %} # {% set zero = ("0.0" | float ) %} # {% set difference_max = ("1.5" | float ) %} # {% set difference_min = ("-2.0" | float ) %} # {% set change_max = ("1.0" | float ) %} # {% set offset = (states("input_number.climate_temp_offset") | float ) %} # {% set climate_goal = (goal | float + ("2.0" | float) | float - offset) | float %} # {% set steps = (states("sensor.climate_temp_steps") | float) %} # {% if difference == zero %} {% set result = climate %} # {% elif (difference > difference_max) %} {% set result = ("15.0"|float) %} # {% elif (difference < difference_min) %} {% set result = goal - offset %} # {% elif difference > zero %} # {% if (climate_goal <= climate) or (change >= change_max) %} {% set result = goal - offset %} # {% elif temp > max %} {% set result = (climate | float - steps) | float %} # {% else %} {% set result = climate %} {% endif %} # {% elif difference < zero %} # {% if temp < min %} # {% set result = (climate | float + steps) | float %} # {% else %} # {% if change >= change_max %} # {% set result = goal - offset %} # {% else %} # {% set result = climate %} # {% endif %} # {% endif %} # {% endif %} # {% if result < ("15.0"|float) %} {{ ("15.0"|float) }} # {% elif result > ("29.5"|float) %} {{ ("29.5"|float) }} # {% else %} {{ result }} # {% endif %} # unit_of_measurement: '°C'