diff --git a/Climate/bosch_bth-ra_control.yaml b/Climate/bosch_bth-ra_control.yaml index b98766a..c263e99 100644 --- a/Climate/bosch_bth-ra_control.yaml +++ b/Climate/bosch_bth-ra_control.yaml @@ -184,6 +184,7 @@ blueprint: enable_day: false variables: + # Input-Variablen trv: !input trv temperature_sensor: !input temperature_sensor sensor_sync_threshold: !input sensor_sync_threshold @@ -195,26 +196,34 @@ variables: max_temperature: !input max_temperature alarm_control_panel: !input alarm_control_panel override_reset_duration: !input override_reset_duration - temperature_change_tolerance: 0.4 # °C - sensor_sync_max_age: 1499 # Sekunden (25 Minuten - 1 Sekunde) - is_heating_period: > - {{ heating_period_switch in [none, ''] or is_state(heating_period_switch, 'on') }} + + # Konstanten + temperature_change_tolerance: 0.4 # °C - Minimale Differenz für Temperaturänderung + sensor_sync_max_age: 1499 # Sekunden (25 Minuten - 1 Sekunde) - Max Alter für Sensor-Sync + + # Entity-Discovery remote_temperature_entity: > {{ device_entities(device_id(trv)) | select('search', 'remote_temperature') | list | first | default('') }} - remote_temperature_entity_valid: > - {{ remote_temperature_entity and states(remote_temperature_entity) not in ['unknown', 'unavailable', none] }} - setpoint_change_source_entity_valid: > - {{ setpoint_change_source_entity and states(setpoint_change_source_entity) not in ['unknown', 'unavailable', none] }} - window_detection_entity_valid: > - {{ window_detection_entity and window_detection_entity | length > 0 }} - current_remote_temperature: > - {{ states(remote_temperature_entity) | float(0) if remote_temperature_entity_valid else 0 }} - remote_temperature_last_change: > - {{ states[remote_temperature_entity].last_changed if remote_temperature_entity_valid else none }} window_detection_entity: > {{ device_entities(device_id(trv)) | select('search', 'window_detection') | list | first | default('') }} setpoint_change_source_entity: > {{ device_entities(device_id(trv)) | select('search', 'setpoint_change_source') | list | first | default('') }} + + # Entity-Validierung + remote_temperature_entity_valid: > + {{ remote_temperature_entity and states(remote_temperature_entity) not in ['unknown', 'unavailable', none] }} + window_detection_entity_valid: > + {{ window_detection_entity and window_detection_entity | length > 0 }} + setpoint_change_source_entity_valid: > + {{ setpoint_change_source_entity and states(setpoint_change_source_entity) not in ['unknown', 'unavailable', none] }} + + # Basis-Berechnungen + is_heating_period: > + {{ heating_period_switch in [none, ''] or is_state(heating_period_switch, 'on') }} + current_remote_temperature: > + {{ states(remote_temperature_entity) | float(0) if remote_temperature_entity_valid else 0 }} + remote_temperature_last_change: > + {{ states[remote_temperature_entity].last_changed if remote_temperature_entity_valid else none }} scheduled_temperature: > {% set schedule_finder = namespace(current_temperature = none) %} {% set selected_friendly_name = states(active_scheduler_selector) %} @@ -230,6 +239,8 @@ variables: {% endfor %} {% endif %} {{ schedule_finder.current_temperature }} + + # Temperatur-Berechnungen target_temperature: > {% if alarm_control_panel and is_state(alarm_control_panel, 'armed_away') %} {{ away_temperature }} @@ -240,6 +251,8 @@ variables: {% endif %} safe_temperature: > {{ [min_temperature, [max_temperature, target_temperature | float(18)] | min] | max }} + + # Status-Prüfungen is_valid_temperature: > {{ safe_temperature is not none and safe_temperature | is_number }} is_temperature_change_needed: > @@ -266,6 +279,8 @@ variables: {% endif %} is_manual_override: > {{ (state_attr(trv, 'temperature') | float(0) - safe_temperature | float(0)) | abs >= temperature_change_tolerance }} + + # Override Reset Berechnungen override_reset_duration_seconds: > {{ (override_reset_duration.hours | default(0) | int) * 3600 + (override_reset_duration.minutes | default(0) | int) * 60 +