Mein Weg zur perfekten Klima-Automation – endlich fertig

Warum ich mich für eine eigene Klima-Automation entschieden habe

Endlich geschafft – meine Klima-Automation läuft jetzt so, wie ich es mir vorgestellt habe. Im Wohnzimmer wird automatisch zwischen den tado-Heizkörperthermostaten, die meine Gastherme ansteuern, und einer über tado eingebundenen Mitsubishi-Klimaanlage entschieden. Dabei unterscheidet die Steuerung klar zwischen Heizen und Kühlen – es läuft immer nur eine Quelle. In den anderen Räumen übernehmen die tado-Thermostate die Heizung, zusätzlich springt bei Bedarf ein Heizlüfter als Backup ein. Offene Fenster sperren das Heizen sofort, gesteuert wird anhand einer Zieltemperatur mit Toleranz. Im Wohnzimmer wird außerdem die PV-Erzeugung, der Speicherstand und die Solarprognose berücksichtigt, sodass die Klimaanlage nur dann läuft, wenn auch wirklich genug Energie vorhanden ist.

Warum der Aufwand? Ich habe mir auch Lösungen wie Better Thermostat angeschaut, aber bin zu dem Schluss gekommen, dass meine eigene Automation meinen Anforderungen besser entspricht. Standardlösungen kümmern sich meist nur um Temperatur und Fensterstatus – meine Automation geht einen Schritt weiter: sie kombiniert verschiedene Quellen, integriert die Energieverfügbarkeit und sorgt dafür, dass immer nur das sinnvollste Gerät aktiv ist. Genau das war mein Ziel, und jetzt habe ich eine Lösung, die meinen Ansprüchen entspricht und sich im Alltag bewährt.Warum ich mich für eine eigene Klima-Automation entschieden habe.

Ergänzung:
Optional könnte die Automation auch noch Präsenz- und Zeitprofile berücksichtigen – also nur heizen, wenn jemand zuhause ist, oder nachts automatisch die Temperatur absenken. Damit ließe sich das System noch weiter optimieren.

Versatile Thermostat

Hätte das nicht vieles abgedeckt?

Hm - schön das Du jetzt Dir jetzt eine “perfekte Klima-Automation” erstellt hast. Noch schöner wäre es natürlich wenn Du hier jetzt auch noch das wie genau und auch z.B. zumindest Teile des Codes, veröffentlichen würdest. :wink: Denn so kann niemand etwas mit Deinem Beitrag anfangen, außer das er dann weiß das Du jetzt für Dich Dir eine “perfekte Klima-Automation” erstellt hast. :slightly_smiling_face:

VG JIm

2 „Gefällt mir“

Sorry ich hab keine Schimmer wie ich den yaml veröffentlichen kann im Forum!

Ganz einfach über Code einfügen.
Forum_Code
VG Jim

2 „Gefällt mir“

Das wäre es in der Tat. Meine Schokoladenseite hat kürzlich gefragt, ob man mit HA auch Thermostate steuern kann. :hushed_face:

Bei der Hardware bin ich mit der Auswahl quasi fast fertig (Sonoff TRVZB oder Aqara E1) und jetzt ist die Software-Seite dran.

Ich würde gerne, soweit als möglich, auf die Installation von HACS verzichten wollen und alles mit Bordmitteln machen. Und da ich mich mit HA noch nicht wirklich gut auskenne, würde ich mir den Code für die Automation(en), um das frei heraus zu sagen, gerne bei anderen abgucken. :innocent:

Lange Rede, kurzer Sinn: Her mit dem Code! @Otanes :laughing:

alias: Wohnzimmer-Klima intelligente Steuerung (1.14)
description: ""
triggers:
  # Alle 5 Minuten prüfen
  - minutes: /5
    trigger: time_pattern

  # Trigger bei Änderung der aktuellen Temperatur im Thermostat
  - trigger: state
    entity_id: climate.wohnzimmer
    attribute: current_temperature

  # Trigger bei Änderungen von Eingaben / Helfern / Fenstersensoren
  - trigger: state
    entity_id:
      - input_number.zieltemperatur_wohnzimmer      # Solltemperatur
      - input_number.temp_toleranz_wohnzimmer       # Toleranz (Hysterese)
      - input_number.aussentemperatur_grenze        # Außentemp-Grenze für Heizungswahl
      - binary_sensor.fenster_wohnzimmer_l_offnung  # Fenster links offen?
      - binary_sensor.fenster_wohnzimmer_r_offnung  # Fenster rechts offen?
      - input_boolean.klimaanlage_aktiv             # Klimaanlage darf genutzt werden
      - input_boolean.gasheizung_aktiv              # Gasheizung darf genutzt werden
      - input_boolean.klima_nur_lueften             # Nur Lüften-Modus
      - input_boolean.klima_wz_manual               # Hauptschalter (manuell aus)

conditions: []

actions:
  # Falls Hauptschalter aktiv → alles aus
  - if:
      - condition: state
        entity_id: input_boolean.klima_wz_manual
        state: "on"
    then:
      - action: climate.turn_off
        target:
          entity_id:
            - climate.wohnzimmer
            - climate.klimaanlage
      - action: logbook.log
        data:
          name: Wohnzimmer-Klima
          message: Alle Geräte AUS (Hauptschalter)
      - stop: Automation beendet wegen Hauptschalter

  - choose:

      # Nur-Lüften-Modus aktiv → Klimaanlage nur Ventilator, Heizung aus
      - conditions:
          - condition: state
            entity_id: input_boolean.klima_nur_lueften
            state: "on"
        sequence:
          - action: climate.set_hvac_mode
            target:
              entity_id: climate.klimaanlage
            data:
              hvac_mode: fan_only
          - action: climate.turn_off
            target:
              entity_id: climate.wohnzimmer
          - action: logbook.log
            data:
              name: Wohnzimmer-Klima
              message: Nur Lüften aktiv – Klimaanlage im Fan-Modus

      # Temperatur unter Untergrenze (zu kalt) & Fenster zu
      - conditions:
          - condition: template
            value_template: "{{ temp < untergrenze and not fenster_offen }}"
        sequence:
          - choose:
              # Gasheizung aktiv + Außentemp unter Grenze → Gasheizung übernimmt
              - conditions:
                  - condition: state
                    entity_id: input_boolean.gasheizung_aktiv
                    state: "on"
                  - condition: template
                    value_template: >
                      {{ states('sensor.aussentemperatur_dummy')|float(20)
                         < states('input_number.aussentemperatur_grenze')|float(7) }}
                sequence:
                  - action: climate.set_hvac_mode
                    target:
                      entity_id: climate.wohnzimmer
                    data:
                      hvac_mode: heat
                  - action: climate.set_temperature
                    target:
                      entity_id: climate.wohnzimmer
                    data:
                      temperature: "{{ ziel }}"
                  - action: climate.turn_off
                    target:
                      entity_id: climate.klimaanlage
                  - action: logbook.log
                    data:
                      name: Wohnzimmer-Klima
                      message: >-
                        Gasheizung aktiv (Außentemp={{
                        states('sensor.aussentemperatur_dummy') }}°C,
                        Ziel={{ ziel }})

              # Klimaanlage aktiv + Außentemp über Grenze + genug Energie → Klimaanlage heizt
              - conditions:
                  - condition: state
                    entity_id: input_boolean.klimaanlage_aktiv
                    state: "on"
                  - condition: template
                    value_template: >
                      {{ states('sensor.aussentemperatur_dummy')|float(20)
                         >= states('input_number.aussentemperatur_grenze')|float(7) }}
                  - condition: template
                    value_template: "{{ energie_verfuegbar }}"
                sequence:
                  - action: climate.set_hvac_mode
                    target:
                      entity_id: climate.klimaanlage
                    data:
                      hvac_mode: heat
                  - delay: "00:00:02"   # kurze Pause, damit der Modus übernommen wird
                  - action: climate.set_temperature
                    target:
                      entity_id: climate.klimaanlage
                    data:
                      temperature: "{{ ziel }}"
                  - action: climate.turn_off
                    target:
                      entity_id: climate.wohnzimmer
                  - action: logbook.log
                    data:
                      name: Wohnzimmer-Klima
                      message: >-
                        Klimaanlage heizt (Außentemp={{
                        states('sensor.aussentemperatur_dummy') }}°C,
                        Ziel={{ ziel }})

      # Temperatur über Obergrenze (zu warm), Fenster zu, Energie vorhanden, Klimaanlage aktiv → Kühlen
      - conditions:
          - condition: template
            value_template: >-
              {{ temp > obergrenze and not fenster_offen and energie_verfuegbar }}
          - condition: state
            entity_id: input_boolean.klimaanlage_aktiv
            state: "on"
        sequence:
          - action: climate.set_hvac_mode
            target:
              entity_id: climate.klimaanlage
            data:
              hvac_mode: cool
          - delay: "00:00:02"
          - action: climate.set_temperature
            target:
              entity_id: climate.klimaanlage
            data:
              temperature: "{{ ziel - 2 }}"   # beim Kühlen leicht unter Soll gehen
          - action: climate.turn_off
            target:
              entity_id: climate.wohnzimmer
          - action: logbook.log
            data:
              name: Wohnzimmer-Klima
              message: >-
                Kühlen mit Klimaanlage aktiv (Temp={{ temp }}, Ziel={{ ziel - 2 }})

      # Temperatur im Sollbereich → alle Geräte aus
      - conditions:
          - condition: template
            value_template: >-
              {{ temp >= untergrenze and temp <= obergrenze and
                 is_state('input_boolean.klima_nur_lueften','off') }}
        sequence:
          - action: climate.turn_off
            target:
              entity_id:
                - climate.klimaanlage
                - climate.wohnzimmer
          - action: logbook.log
            data:
              name: Wohnzimmer-Klima
              message: Heizung/Klimaanlage aus – Temperatur im Zielbereich ({{ temp }})

variables:
  # aktuelle Raumtemperatur (Standardwert 22°C, falls Sensor nicht verfügbar)
  temp: "{{ state_attr('climate.wohnzimmer','current_temperature') | float(22) }}"

  # gewünschte Zieltemperatur aus Input Number
  ziel: "{{ states('input_number.zieltemperatur_wohnzimmer') | float(21) }}"

  # Toleranz (Hysterese), Standard 1°C
  toleranz: "{{ states('input_number.temp_toleranz_wohnzimmer') | float(1.0) }}"

  # Untergrenze und Obergrenze
  untergrenze: "{{ ziel - toleranz }}"
  obergrenze: "{{ ziel + toleranz }}"

  # Fenster offen? (links oder rechts)
  fenster_offen: >
    {{ is_state('binary_sensor.fenster_wohnzimmer_l_offnung','on')
       or is_state('binary_sensor.fenster_wohnzimmer_r_offnung','on') }}

  # Dummy-Außentemperatur-Sensor (statt echter Adresse)
  aussentemp: "{{ states('sensor.aussentemperatur_dummy') | float(20) }}"

  # Außentemp-Grenze aus Input Number
  grenze_aussen: "{{ states('input_number.aussentemperatur_grenze') | float(7) }}"

  # Energie-Verfügbarkeit (PV / Speicher / Prognose) – Dummys statt echter Sensoren
  energie_verfuegbar: >
    {{ (states('sensor.pv_leistung_dummy')|float(0) * -1) >= states('input_number.pv_mindestleistung')|float(0)
       or states('sensor.speicher_soc_dummy')|float(0) >= states('input_number.speicher_limit')|float(0)
       or states('sensor.solarprognose_dummy')|float(0) >= states('input_number.solarprognose_limit')|float(0) }}
mode: restart

Dashboard dazu

type: vertical-stack
cards:
  - type: entities
    title: Wohnzimmer Klima – Manueller Modus
    show_header_toggle: false
    entities:
      - entity: input_boolean.klima_wz_manual
        name: Manueller Modus EIN/AUS
        icon: mdi:hand
    conditions:
      - entity: input_boolean.klima_wz_manual
        state: "off"
    card:
      type: vertical-stack
      cards:
        - type: entities
          title: Heizung/Klima Wohnzimmer
          show_header_toggle: false
          entities:
            - entity: input_boolean.klimaanlage_aktiv
              name: Klimaanlage aktiv
            - entity: input_bo
  - type: conditionalolean.gasheizung_aktiv
              name: Gasheizung aktiv
            - entity: input_boolean.klima_nur_lueften
              name: Nur Lüften (Fan-Modus)
            - type: divider
            - entity: input_number.zieltemperatur_wohnzimmer
              name: Zieltemperatur
            - entity: input_number.temp_toleranz_wohnzimmer
              name: Toleranz (± °C)
            - entity: sensor.sensor_briefkasten_temperatur
              name: Aktuelle Temperatur
            - entity: input_number.aussentemperatur_grenze
              name: Außentemperatur-Grenze
            - type: divider
            - entity: climate.klimaanlage
              name: Klimaanlage Status
            - entity: climate.wohnzimmer
              name: Heizung Status
            - entity: binary_sensor.fenster_wohnzimmer_l_offnung
              name: Fenster links
            - entity: binary_sensor.fenster_wohnzimmer_r_offnung
              name: Fenster rechts
        - type: conditional
          conditions:
            - entity: climate.klimaanlage
              state: heat
          card:
            type: markdown
            content: Klimaanlage heizt – Strombetrieb, Gas gespart!
        - type: conditional
          conditions:
            - entity: climate.wohnzimmer
              state: heat
          card:
            type: markdown
            content: Gasheizung aktiv – läuft im Heizmodus.
        - type: conditional
          conditions:
            - entity: climate.klimaanlage
              state: fan_only
          card:
            type: markdown
            content:  Fan-Modus aktiv – Fenster dürfen offen sein!
        - type: conditional
          conditions:
            - entity: climate.klimaanlage
              state: cool
          card:
            type: markdown
            content: Kühlmodus aktiv – Temperatur wird gesenkt!
        - type: conditional
          conditions:
            - entity: climate.klimaanlage
              state: dry
          card:
            type: markdown
            content: Entfeuchtung aktiv – Luftfeuchtigkeit wird reduziert!

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

1 „Gefällt mir“

Sehr schön! Vielen Dank für die Vorlage, @Otanes :+1:

Das guck ich mir auf jeden Fall mal an. Falls was unklar ist, geh ich Dir nochmal auf den Sa… melde ich mich nochmal. :innocent: