diff --git a/blueprint.yaml b/blueprint.yaml index ad17464..4c2bfbc 100644 --- a/blueprint.yaml +++ b/blueprint.yaml @@ -1,175 +1,99 @@ -blueprint: - name: Better Thermostat Controller (Window + Deadzone Fix) - description: Steuert BT. Logik: Fenster offen > Sommer (Aus) > Urlaub (Eco) > Winter+Schedule (Komfort) > SONST IMMER ECO. - domain: automation - input: - better_thermostat_entity: - name: Better Thermostat Entity - description: Die BT Entität (muss Fenstersensoren in BT konfiguriert haben!) - selector: - entity: - domain: climate - integration: better_thermostat - schedule_entity: - name: Heizzeitplan Schedule - selector: - entity: - domain: schedule - vacation_helper: - name: Urlaubsmodus Helper - selector: - entity: - domain: input_boolean - weather_entity: - name: Wettervorhersage - selector: - entity: - domain: weather - summer_temp_threshold: - name: Sommer-Schwellwert (°C) - description: Ab hier wird die Heizung komplett ausgeschaltet. - default: 22 - selector: - number: - min: 15 - max: 30 - step: 1 - winter_temp_threshold: - name: Winter-Schwellwert (°C) - description: Unter dieser Temp wird der Komfort-Modus erlaubt (wenn Schedule an ist). - default: 18 - selector: - number: - min: 10 - max: 25 - step: 1 - eco_temp: - name: Eco Temperatur (°C) - description: Standard-Temperatur (Übergangszeit, Nachts, Abwesend) - default: 17 - selector: - number: - min: 10 - max: 20 - step: 0.5 - comfort_temp: - name: Komfort Temperatur (°C) - description: Temperatur wenn es kalt ist UND Schedule aktiv ist. - default: 21 - selector: - number: - min: 18 - max: 24 - step: 0.5 - -trigger: +alias: Klima BT Wohnzimmer +description: "Steuerung mit Fenster-Logik, Sommer/Winter und Zeitplan" +mode: restart +max: 10 +triggers: - platform: state - entity_id: !input schedule_entity + entity_id: schedule.heizzeitplan_wohnzimmer - platform: state - entity_id: !input vacation_helper + entity_id: input_boolean.urlaubsmodus_heizunh # Prüfe, ob "heizunh" wirklich stimmt! - platform: state - entity_id: !input weather_entity + entity_id: weather.schleswig attribute: temperature - platform: time_pattern - minutes: "/30" - # Sofort reagieren, wenn Fenster zugeht + minutes: /30 - platform: state - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer attribute: window_open - -condition: [] - -action: +actions: - variables: - bt_entity: !input better_thermostat_entity - weather_entity: !input weather_entity - schedule_entity: !input schedule_entity - vacation_entity: !input vacation_helper - summer_threshold: !input summer_temp_threshold - winter_threshold: !input winter_temp_threshold - eco_temperature: !input eco_temp - comfort_temperature: !input comfort_temp - + bt_entity: climate.klima_bt_wohnzimmer + weather_entity: weather.schleswig + schedule_entity: schedule.heizzeitplan_wohnzimmer + vacation_entity: input_boolean.urlaubsmodus_heizunh + summer_threshold: 18 + winter_threshold: 18 + eco_temperature: 18 + comfort_temperature: 20.5 - variables: - weather_temp: '{{ state_attr(weather_entity, "temperature") | float(15) }}' - is_window_open: '{{ state_attr(bt_entity, "window_open") | bool(false) }}' - - # Logik-Definitionen + weather_temp: "{{ state_attr(weather_entity, 'temperature') | float(15) }}" + is_window_open: "{{ state_attr(bt_entity, 'window_open') | bool(false) }}" is_summer: "{{ weather_temp > summer_threshold }}" - is_winter_mode: "{{ weather_temp < winter_threshold }}" + # Winter-Definition hier für die Variable, aber im Choose nutzen wir den Default + is_heating_season: "{{ weather_temp < winter_threshold }}" is_vacation: "{{ states(vacation_entity) == 'on' }}" schedule_active: "{{ states(schedule_entity) == 'on' }}" - + - choose: - # 0. NOTBREMSE: Fenster offen - # Wenn Fenster offen, brechen wir ab. BT regelt das "Aus". - # Wir verhindern nur, dass die Automation die Heizung wieder anmacht. + # 1. FENSTER OFFEN -> STOP - conditions: - condition: template value_template: "{{ is_window_open }}" sequence: - - stop: "Fenster offen - Automation übergibt an Better Thermostat." - - # 1. SOMMER: Heizung ganz aus + - stop: "Fenster ist offen - Automation bricht ab und lässt BT die Kontrolle." + + # 2. SOMMER -> AUS - conditions: - condition: template value_template: "{{ is_summer }}" sequence: - - service: climate.set_hvac_mode + - action: climate.set_hvac_mode target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: hvac_mode: "off" - # 2. URLAUB: Immer Eco + # 3. URLAUB -> ECO - conditions: - condition: template value_template: "{{ is_vacation }}" sequence: - - service: climate.set_hvac_mode + - action: climate.set_hvac_mode target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: - hvac_mode: "heat" - - service: climate.set_temperature + hvac_mode: heat + - action: climate.set_temperature target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: temperature: "{{ eco_temperature }}" - # 3. WINTER & ZEITPLAN: Komfort - # Nur wenn es wirklich kalt ist (unter Winter-Schwelle) UND der Zeitplan an ist + # 4. WINTER + SCHEDULE -> KOMFORT - conditions: - condition: template - value_template: "{{ is_winter_mode and schedule_active }}" + value_template: "{{ is_heating_season and schedule_active }}" sequence: - - service: climate.set_hvac_mode + - action: climate.set_hvac_mode target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: - hvac_mode: "heat" - - service: climate.set_temperature + hvac_mode: heat + - action: climate.set_temperature target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: temperature: "{{ comfort_temperature }}" - - # 4. DEFAULT / FALLBACK (Die ehemalige Todeszone + Nachts) - # Wenn KEINE der oberen Bedingungen zutrifft (also weder Sommer, noch Urlaub, noch Kalter-Komfort), - # dann greift dieser Block. Das deckt ab: - # - Winter + Nachts (Schedule aus) - # - Übergangszeit (Todeszone) egal ob Schedule an oder aus + + # 5. DEFAULT (Alles andere: Winter ohne Schedule, genau 18 Grad, etc.) -> ECO default: - - service: climate.set_hvac_mode + - action: climate.set_hvac_mode target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: - hvac_mode: "heat" - - service: climate.set_temperature + hvac_mode: heat + - action: climate.set_temperature target: - entity_id: !input better_thermostat_entity + entity_id: climate.klima_bt_wohnzimmer data: - temperature: "{{ eco_temperature }}" - -mode: restart -max: 10 \ No newline at end of file + temperature: "{{ eco_temperature }}" \ No newline at end of file