Schlagwort-Archiv: Featured

Wellness-Oase-Garten mit HA Integration (Bestway)

Wer einen Garten hat, kennt das Gefühl: Nach einem langen Tag einfach in den Jacuzzi sinken, warmes Wasser, Ruhe – pure Erholung. Doch bis es so weit ist, wartet man entweder ewig auf die richtige Wassertemperatur, oder man verschwendet Energie, weil der Whirlpool stundenlang unnötig heizt.

Ich habe das Problem gelöst – mit Home Assistant. In diesem Beitrag zeige ich dir, wie ich meinen Bestway Jacuzzi und meine Gartendusche vollständig automatisiert habe. Der Jacuzzi heizt nur dann, wenn genug Photovoltaik-Überschuss vorhanden ist – also praktisch kostenlos. Die Dusche schaltet sich nach einer konfigurierbaren Zeit automatisch ab. Beides lässt sich bequem per Dashboard steuern und überwachen.

Und wen es interessiert , es gibt noch einen Blogbeitrag, wie das Holzdeck und die Dusche entstanden sind ➡️ Vom alten Pool zum Wellness-Deck


📸 Dashboard der Wellness-Oase im Garten mit Jacuzzi und Dusche

🛁 Teil 1: Der smarte Jacuzzi


🔧 Ausgangsproblem

Der Bestway Lay-Z-Spa bringt von Haus aus keine nennenswerte Automatisierung mit. Man schaltet ihn ein, stellt die Zieltemperatur ein – und wartet. Das Aufheizen dauert je nach Ausgangstemperatur mehrere Stunden und kostet entsprechend Strom.

👉 Meine Probleme waren:

  • Heizen kostet Strom – idealerweise sollte das nur bei PV-Überschuss passieren
  • Wasser muss regelmäßig gefiltert werden – auch wenn die Heizung gerade nicht läuft
  • War der Jacuzzi manuell eingeschaltet, sollte die Automatisierung das nicht ignorieren oder gar den Spa unkontrolliert ausschalten

🔗 Die Bestway-Integration für Home Assistant

Die Grundlage für die gesamte Steuerung ist die Bestway-Integration für Home Assistant, die den Jacuzzi über die Cloud-API von Bestway einbindet. Die Installation erfolgt über HACS.

📸 Screenshot der Bestway-Integration

⚠️ Wichtiger Hinweis zum Modell: Mein konkretes Modell, der Bestway LAY-Z-SPA Energiespar-Whirlpool Cabo HydroJet, ist in der offiziellen Liste der unterstützten Geräte nicht aufgeführt. Die Integration funktioniert dennoch – jedoch nicht vollständig.

Das grundsätzliche Problem: Mehrere Entitäten liefern über die API keine zuverlässige Rückmeldung über den tatsächlichen Gerätezustand. Befehle lassen sich senden – ob sie angekommen sind und was das Gerät jetzt wirklich macht, meldet die API aber nicht immer zurück. Besonders deutlich wird das an der Filterpumpe: Hier musste ich sogar auf einen Mechanismus mit drei Ausschaltversuchen zurückgreifen, weil ein einzelner Befehl nicht garantiert zuverlässig ausgeführt wird.

Überall wo die API-Rückmeldung nicht verlässlich ist, habe ich denselben Workaround-Ansatz gewählt: interne Booleans als Zustandsspeicher, die von den Automationen selbst gesetzt werden – unabhängig davon was die API zurückmeldet. Das bekannteste Beispiel ist der Template-Switch switch.v8_jacuzzi_spa_filter_ui in Kombination mit input_boolean.v8_jacuzzi_filter_state: Der Boolean ist die verlässliche Zustandsquelle für das Dashboard, nicht die API-Entität direkt.

Wer denselben oder einen ähnlichen Bestway-Jacuzzi besitzt und mit ähnlichen API-Problemen kämpft: Dieser Ansatz – eigene Zustandsspeicher statt API-Feedback – hat sich bei mir bewährt. Schreib gerne in die Kommentare welches Modell du hast und welche Erfahrungen du gemacht hast.


🎯 Ziele meiner Automatisierung

  • ☀️ Jacuzzi heizt nur bei ausreichendem PV-Überschuss (≥ 2 kW für 2 Minuten)
  • ⏹️ Automatisches Abschalten wenn Überschuss zu gering (< 1 kW für 3 Minuten)
  • ⏱️ Mindestlaufzeit von 30 Minuten schützt vor ständigem Ein-/Ausschalten
  • 💧 Regelmäßige Filterzyklen – unabhängig davon ob die Heizung läuft
  • 🧠 War der Spa manuell eingeschaltet: Automatisierung greift nur in Heizung und Filter ein – Spa bleibt an
  • 📧 E-Mail-Benachrichtigungen bei jedem automatischen Start, Stopp und bei Fehlern
  • 📊 Übersichtliches Dashboard zur Steuerung und Statusanzeige
  • 🌡️ Zieltemperatur erreicht → alles automatisch ausschalten, Neustart erst wenn das Wasser 2 °C abgekühlt ist und PV-Überschuss wieder ausreicht
  • 💧 Regelmäßige Filterzyklen – unabhängig davon ob die Heizung läuft

  • 🔌 Voraussetzungen – benötigte Entitäten

    Diese Entitäten werden durch die Bestway-Integration in Home Assistant bereitgestellt und müssen bereits existieren:

    • switch.v8_jacuzzi_spa_power – Hauptschalter des Spas
    • switch.v8_jacuzzi_spa_filter – Filterpumpe
    • climate.v8_jacuzzi_spa_thermostat – Heizungssteuerung
    • binary_sensor.v8_jacuzzi_spa_connected – Verbindungsstatus
    • binary_sensor.v8_jacuzzi_spa_errors – Fehlererkennung
    • sensor.em_available_for_heatpump – PV-Überschuss aus dem Energy Manager (mehr dazu weiter unten)

    ⚡ Zusammenspiel mit dem Energy Manager

    Das Herzstück der PV-Steuerung ist der Sensor sensor.em_available_for_heatpump aus meinem Energy Manager Package. Dieser Sensor berechnet in Echtzeit, wie viel Solarstrom tatsächlich für weitere Verbraucher verfügbar ist:

    Verfügbar = PV-Leistung (geglättet) - Haushaltslast (geglättet) - Powerwall-Ladung

    Der entscheidende Vorteil: Läuft meine Wärmepumpe gerade, ist ihr Verbrauch bereits in der Haushaltslast enthalten. Der Sensor sinkt automatisch. Der Jacuzzi startet dann nur noch bei echtem Zusatzüberschuss – kein separater Konfliktschutz zwischen Wärmepumpe und Jacuzzi nötig.


    🧩 Helper – automatisch durch das Package erstellt

    Das Package erstellt beim Start alle benötigten Helfer automatisch. Kein manuelles Anlegen notwendig.

    🔘 Steuer-Flags

    • input_boolean.jacuzzi_pv_auto – PV-Heizautomatik ein/aus (Standard: an). Perfekt für den Urlaubsfall.
    • input_boolean.jacuzzi_filter_auto – Filter-Automatik ein/aus (Standard: an). Unabhängig von der Heizautomatik.
    • input_boolean.jacuzzi_spa_started_by_pv – Merkt sich ob der Spa durch die PV-Automatik eingeschaltet wurde. Verhindert, dass ein manuell eingeschalteter Spa automatisch wieder ausgeschaltet wird.
    • input_boolean.jacuzzi_temp_reached – Merkt sich ob der letzte Stopp durch das Erreichen der Zieltemperatur ausgelöst wurde. Verhindert, dass der Spa sofor t neu startet, bevor das Wasser 2 °C abgekühlt ist.

    ⚙️ Schwellenwerte & Konfiguration

    • input_number.jacuzzi_pv_start – PV-Überschuss zum Einschalten (Standard: 2,0 kW)
    • input_number.jacuzzi_pv_stop – PV-Überschuss zum Abschalten (Standard: 1,0 kW)
    • input_number.jacuzzi_target_temp – Zieltemperatur (Standard: 37 °C)
    • input_number.jacuzzi_min_runtime – Mindestlaufzeit vor automatischem Stopp (Standard: 30 Min)
    • input_number.jacuzzi_filter_duration – Dauer eines Filterzyklus (Standard: 60 Min)

    🕐 Filterzeiten

    • input_datetime.jacuzzi_filter_time_1 – Erste tägliche Filterzeit (z. B. 08:00 Uhr)
    • input_datetime.jacuzzi_filter_time_2 – Zweite tägliche Filterzeit (z. B. 20:00 Uhr)

    💡 Tipp: Die Heizphasen tagsüber liefern automatisch zusätzliche Filterzeit – die zwei konfigurierten Zyklen dienen als Mindestabsicherung für Tage ohne PV-Überschuss.


    🤖 Die 8 Automationen im Überblick

    1️⃣ PV-Überschuss EIN

    Sobald der verfügbare PV-Überschuss die Start-Schwelle (Standard: 2 kW) für mindestens 2 Minuten überschreitet, startet der Jacuzzi automatisch. Der Debounce von 2 Minuten verhindert, dass kurze Schwankungen im Energieangebot den Spa ständig ein- und ausschalten.

    👉 Besonderheit: War der Spa bereits manuell eingeschaltet, schaltet die Automatisierung ihn nicht nochmal ein – sie setzt nur Heiztemperatur und Filter. Der jacuzzi_spa_started_by_pv-Boolean merkt sich dabei, ob die Automatisierung den Spa selbst gestartet hat.

    2️⃣ PV-Überschuss AUS

    Fällt der Überschuss für 3 Minuten unter die Stop-Schwelle (Standard: 1 kW), schaltet die Automatisierung Heizung und Filter ab. Zusätzlich greift eine Mindestlaufzeit: Der Spa läuft immer mindestens 30 Minuten, bevor er automatisch gestoppt werden kann.

    👉 War der Spa vor dem PV-Start bereits manuell eingeschaltet, wird er nicht ausgeschaltet – nur Heizung und Filter stoppen.

    3️⃣ Filter-Zyklus

    Täglich zu den zwei konfigurierten Zeiten startet automatisch ein Filterzyklus – unabhängig davon ob die Heizung gerade läuft. Die Automation ist dabei smart:

    • Spa war aus → Spa kurz einschalten, Filter starten, nach Ablauf der Filterdauer: Filter stoppen, Spa wieder ausschalten (außer die Heizung ist inzwischen aktiv)
    • Spa war bereits an → nur Filter starten und nach Ablauf stoppen
    • Filter läuft bereits (z. B. wegen Heizung) → Zyklus wird übersprungen

    4️⃣ Auto-Modus deaktiviert

    Schaltet man jacuzzi_pv_auto manuell aus während der Spa läuft, stoppt diese Automation sauber Heizung und Filter. Den Spa selbst schaltet sie nur aus wenn er ursprünglich durch die PV-Automatik gestartet wurde – war er manuell eingeschaltet, bleibt er an.

    5️⃣ Fehler-Benachrichtigung

    Meldet der Spa einen Fehler (z. B. den gefürchteten E02 bei verstopfter Filterkartusche), kommt sofort eine E-Mail-Benachrichtigung und ein Eintrag im System-Log.

    💡 Tipp zur Filterpflege: Die Filterkartusche sollte spätestens alle 2–3 Tage gereinigt werden, sonst kommt es schnell zu Fehlern durch schlechten Durchfluss.

    6️⃣ Zieltemperatur sofort übernehmen

    Ändert man die Zieltemperatur im Dashboard während der Spa bereits läuft, soll die neue Temperatur sofort an den Thermostat weitergegeben werden – ohne auf den nächsten automatischen Start warten zu müssen.

    Diese Automation überwacht input_number.jacuzzi_target_temp auf Änderungen. Ist der Spa zu diesem Zeitpunkt eingeschaltet, wird die neue Temperatur unmittelbar per climate.set_temperature gesetzt. Ist der Spa aus, passiert nichts – beim nächsten Einschalten greift dann wie gewohnt die PV-EIN-Automation.

    7️⃣ Zieltemperatur erreicht – alles ausschalten

    Damit der Jacuzzi nicht eingeschaltet bleibt, wenn die Zieltemperatur erreicht ist und unnötiger Stromverbrauch verbraucht wird, gibt es diese zusätzliche Automatisierung.

    Diese neue Automation löst das Problem mit einer Hysterese-Regelung: Sobald climate.v8_jacuzzi_spa_thermostat in den Zustand idle wechselt (= Zieltemperatur ist erreicht), schaltet die Automation alles ab: Heizung off, Filter 3× off, Spa Power off. Gleichzeitig wird der interne Merker jacuzzi_temp _reached gesetzt.

    👉 Die Automation greift nur wenn jacuzzi_pv_auto aktiv ist – bei manuellem Betrieb bleibt das normale Thermostat-Verhalten (heat → idle → heat) erhalten.

    8️⃣ Temperatur gesunken – automatischer Neustart

    Das Gegenstück zu Automation 7: Sobald die Wassertemperatur um 2 °C unter die Zieltemperatur gefallen ist – und das für mindestens 1 Minute stabil bleibt – startet der Jacuzzi automatisch neu, sofern alle Bedingungen erfüllt sind:

    • PV-Auto ist aktiv
    • Der Merker jacuzzi_temp_reached ist gesetzt (kein versehentlicher Neustart aus anderen Szenarien)
    • Spa ist verbunden und fehlerfrei
    • PV-Überschuss ist wieder ausreichend (≥ Start-Schwelle)

    💡 Wichtig: Reicht der PV-Überschuss beim 2-°C-Abfall noch nicht aus, bleibt der Spa aus und wartet. Sobald der Überschuss wieder steigt und die Temperatur noch 2 °C unter Ziel liegt, springt entweder diese Automation an – oder die normale PV-EIN-Automation übernimmt. Ein Doppelstart wird durch den jacuzzi_temp_reached-Merker sicher verhindert.


    🖥️ Das Jacuzzi-Dashboard

    Das Jacuzzi-Dashboard ist ein extra Dashboard aufgebaut und nutzt das Theme Nordic. Es ist über eine klickbaren Heading direkt aus meinem Hauptdashboard ereichbar. Alle Buttons basieren auf custom:button-card.

    📸 Screenshot des Jacuzzi-Dashboard

    Steuer-Buttons

    Die Steuer-Buttons sind in einem 2-Spalten-Grid angeordnet. Jeder Button zeigt Icon, Name und Zustand in einer kompakten 60px-Karte:

    • Jacuzzi Power – grün wenn an, dunkel wenn aus. Tippen schaltet den Spa direkt um.
    • Heizung – rot bei aktiver Heizung, orange im Idle-Modus (Zieltemp erreicht, Thermostat wartet), dunkel wenn aus. Tippen ruft das Script jacuzzi_heat_toggle auf, das Heizung und Filter gemeinsam schaltet.
    • Filterpumpe – blau wenn aktiv, dunkel wenn aus. Arbeitet über den Template-Switch switch.v8_jacuzzi_spa_filter_ui als verlässliche Zustandsquelle (siehe API-Hinweis oben).
    • Bubble-Modus – orange wenn MAX, dunkel wenn OFF. Tippen wechselt direkt zwischen OFF und MAX.
    • Massagefunktion – lila wenn aktiv, dunkel wenn aus.
    📸 Die fünf Steuer-Buttons – verschiedene Zustände sichtbar

    📌 Übersichts-Widget auf dem Hauptdashboard

    Auf meinem zentralen Tablet-Dashboard habe ich zusätzlich ein kompaktes 4-Button-Widget eingebaut, das auf einen Blick den wichtigsten Status von Jacuzzi und Dusche zeigt – ohne in die Detailansicht wechseln zu müssen. Die vier Buttons sind in einem 2-Spalten-Grid angeordnet:

    • Jacuzzi Power – Hauptschalter, grün wenn an
    • Jacuzzi Status – Der Button zeigt z. B. „Heizung AN · Filter AN · Massage AN“ wenn mehrere Funktionen aktiv sind, oder schlicht „Alles aus“. Er reagiert nicht auf Tippen – er dient nur der Anzeige. Die Kartenfarbe wechselt zu Blau sobald mindestens eine Funktion aktiv ist.
    • Dusche – Ventilstatus, „Ein“ oder „Aus“
    • Jacuzzi Heizung – zeigt Ist- und Solltemperatur direkt im Button: „Ist: 34°C / Soll: 37°C“ – so sieht man sofort wie weit der Jacuzzi noch aufheizen muss

    Der Heizungs-Button ist dabei besonders praktisch: Dank einem state_display-Template werden Ist- und Zieltemperatur direkt in der Statuszeile angezeigt. Kein Aufklappen, kein More-Info nötig.

    📸 4-Button-Übersichts-Widgets auf dem Hauptdashboard

    ⚡ Stromverbrauch im Blick

    Auf der Jacuzzi-Detailseite habe ich drei Verbrauchs-Anzeigen eingebaut, damit ich jederzeit sehe was der Jacuzzi gerade und in den letzten Tagen verbraucht hat:

    • Gauge – aktueller Verbrauch: Zeigt die aktuelle Leistungsaufnahme in Watt an. Farblich abgestuft: grün (Normalbetrieb), gelb (erhöht), rot (Volllast).
    • Stündliche Übersicht (24h): Ein Balkendiagramm auf Stundenbasis zeigt den Leistungsverlauf der letzten 24 Stunden – ideal um zu sehen, wann die Heizphasen und Filterzyklen stattgefunden haben.
    • 14-Tage-Übersicht: Ein Tagesbalken-Diagramm der letzten 14 Tage zeigt den täglichen Energieverbrauch in kWh. Auf einen Blick sieht man, an welchen Tagen der Jacuzzi viel oder wenig PV-Überschuss genutzt hat.
    📸 Verbrauchsüberischt

    📋 Der YAML-Code

    Helper & Automationen (config/packages/jacuzzi.yaml)

    # config/packages/jacuzzi.yaml
    
    # --- Helpers ---
    input_boolean:
      jacuzzi_pv_auto:
        name: "Jacuzzi: PV-Auto aktiv"
        initial: on
        icon: mdi:hot-tub
    
      jacuzzi_filter_auto:
        name: "Jacuzzi: Filter-Automatik aktiv"
        initial: on
        icon: mdi:water-sync
    
      v8_jacuzzi_filter_state:
        name: "Jacuzzi Filter Status"
        initial: off
        icon: mdi:water-pump
    
      jacuzzi_spa_started_by_pv:
        name: "Jacuzzi Spa durch PV gestartet"
        initial: off
        icon: mdi:solar-power
    
      jacuzzi_temp_reached:
        name: "Jacuzzi Zieltemperatur erreicht (Pause)"
        initial: off
        icon: mdi:thermometer-check
    
    input_number:
      jacuzzi_pv_start:
        name: "Jacuzzi PV Start-Schwelle (kW)"
        initial: 2.0
        min: 0.5
        max: 6.0
        step: 0.1
        unit_of_measurement: kW
    
      jacuzzi_pv_stop:
        name: "Jacuzzi PV Stop-Schwelle (kW)"
        initial: 1.0
        min: 0.0
        max: 5.0
        step: 0.1
        unit_of_measurement: kW
    
      jacuzzi_target_temp:
        name: "Jacuzzi Zieltemperatur (°C)"
        initial: 37
        min: 20
        max: 40
        step: 0.5
        unit_of_measurement: "°C"
    
      jacuzzi_min_runtime:
        name: "Jacuzzi Mindestlaufzeit (Min)"
        initial: 30
        min: 5
        max: 120
        step: 5
    
      jacuzzi_filter_duration:
        name: "Jacuzzi Filter Laufzeit (Min)"
        initial: 60
        min: 15
        max: 240
        step: 15
        unit_of_measurement: min
    
    # --- Filter-Zeitsteuerung ---
    input_datetime:
      jacuzzi_filter_time_1:
        name: "Jacuzzi Filter Zeit 1"
        has_time: true
        has_date: false
    
      jacuzzi_filter_time_2:
        name: "Jacuzzi Filter Zeit 2"
        has_time: true
        has_date: false
    
    # --- Automationen ---
    automation:
      - alias: "Jacuzzi: PV-Überschuss EIN"
        description: "Schaltet Jacuzzi-Heizung bei ausreichendem PV-Überschuss ein"
        mode: single
        trigger:
          - platform: numeric_state
            entity_id: sensor.em_available_for_heatpump
            above: input_number.jacuzzi_pv_start
            for: "00:02:00"
        condition:
          - condition: state
            entity_id: input_boolean.jacuzzi_pv_auto
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_connected
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_errors
            state: "off"
          - condition: template
            value_template: >
              {{ not is_state('input_boolean.jacuzzi_temp_reached', 'on') or
                 state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') | float(100)
                 < (states('input_number.jacuzzi_target_temp') | float(37) - 2) }}
        action:
          - variables:
              spa_was_off: "{{ is_state('switch.v8_jacuzzi_spa_power', 'off') }}"
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.jacuzzi_temp_reached
          - if:
              - condition: template
                value_template: "{{ spa_was_off }}"
            then:
              - service: switch.turn_on
                target:
                  entity_id: switch.v8_jacuzzi_spa_power
              - service: input_boolean.turn_on
                target:
                  entity_id: input_boolean.jacuzzi_spa_started_by_pv
              - delay: "00:00:05"
          - service: climate.set_temperature
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              temperature: "{{ states('input_number.jacuzzi_target_temp') | float(37) }}"
          - service: climate.set_hvac_mode
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              hvac_mode: heat
          - service: switch.turn_on
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - service: system_log.write
            data:
              message: >
                Jacuzzi: EIN via PV-Überschuss
                {{ states('sensor.em_available_for_heatpump') }} kW,
                Zieltemp {{ states('input_number.jacuzzi_target_temp') }}°C
                (Spa war {{ 'aus – wurde eingeschaltet' if spa_was_off else 'bereits an' }})
              level: info
          - data:
              title: "Jacuzzi gestartet"
              message: >
                Jacuzzi automatisch gestartet
                (PV-Überschuss: {{ states('sensor.em_available_for_heatpump') }} kW,
                Zieltemp: {{ states('input_number.jacuzzi_target_temp') }}°C)
            action: notify.kottlowski_gmail_com
    
      - alias: "Jacuzzi: PV-Überschuss AUS"
        description: "Schaltet Jacuzzi-Heizung ab wenn PV-Überschuss zu gering"
        mode: single
        trigger:
          - platform: numeric_state
            entity_id: sensor.em_available_for_heatpump
            below: input_number.jacuzzi_pv_stop
            for: "00:03:00"
        condition:
          - condition: state
            entity_id: input_boolean.jacuzzi_pv_auto
            state: "on"
          - condition: state
            entity_id: switch.v8_jacuzzi_spa_power
            state: "on"
          - condition: template
            value_template: >
              {% set last_on = states.switch.v8_jacuzzi_spa_power.last_changed %}
              {% set min_run = states('input_number.jacuzzi_min_runtime') | int(30) %}
              {{ (as_timestamp(now()) - as_timestamp(last_on)) > (min_run * 60) }}
        action:
          - service: climate.set_hvac_mode
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              hvac_mode: "off"
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:01"
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - delay: "00:00:03"
          - if:
              - condition: state
                entity_id: input_boolean.jacuzzi_spa_started_by_pv
                state: "on"
            then:
              - service: switch.turn_off
                target:
                  entity_id: switch.v8_jacuzzi_spa_power
              - service: input_boolean.turn_off
                target:
                  entity_id: input_boolean.jacuzzi_spa_started_by_pv
          - service: system_log.write
            data:
              message: >
                Jacuzzi: AUS – PV-Überschuss unter Schwelle
                ({{ states('sensor.em_available_for_heatpump') }} kW)
              level: info
          - data:
              title: "Jacuzzi gestoppt"
              message: >
                Jacuzzi automatisch gestoppt
                (PV-Überschuss zu gering: {{ states('sensor.em_available_for_heatpump') }} kW)
            action: notify.kottlowski_gmail_com
    
      - alias: "Jacuzzi: Filter Zyklus"
        description: "Startet Filterung zu konfigurierbaren Zeiten – Spa wird bei Bedarf kurz eingeschaltet"
        mode: single
        trigger:
          - platform: time
            at: input_datetime.jacuzzi_filter_time_1
          - platform: time
            at: input_datetime.jacuzzi_filter_time_2
        condition:
          - condition: state
            entity_id: input_boolean.jacuzzi_filter_auto
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_connected
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_errors
            state: "off"
          - condition: state
            entity_id: input_boolean.v8_jacuzzi_filter_state
            state: "off"
        action:
          - variables:
              spa_was_off: "{{ is_state('switch.v8_jacuzzi_spa_power', 'off') }}"
          - if:
              - condition: template
                value_template: "{{ spa_was_off }}"
            then:
              - service: switch.turn_on
                target:
                  entity_id: switch.v8_jacuzzi_spa_power
              - delay: "00:00:05"
          - service: switch.turn_on
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - service: system_log.write
            data:
              message: >
                Jacuzzi: Filter gestartet für
                {{ states('input_number.jacuzzi_filter_duration') | int }} Min
                (Spa war {{ 'aus – wurde eingeschaltet' if spa_was_off else 'bereits an' }})
              level: info
          - delay:
              minutes: "{{ states('input_number.jacuzzi_filter_duration') | int(60) }}"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - if:
              - condition: template
                value_template: >
                  {{ spa_was_off and
                     not is_state('climate.v8_jacuzzi_spa_thermostat', 'heat') }}
            then:
              - delay: "00:00:03"
              - service: switch.turn_off
                target:
                  entity_id: switch.v8_jacuzzi_spa_power
          - service: system_log.write
            data:
              message: "Jacuzzi: Filter Zyklus beendet"
              level: info
    
      - alias: "Jacuzzi: Auto-Modus deaktiviert"
        description: "Stoppt den Jacuzzi sofort wenn PV-Auto manuell deaktiviert wird"
        mode: single
        trigger:
          - platform: state
            entity_id: input_boolean.jacuzzi_pv_auto
            to: "off"
        condition:
          - condition: state
            entity_id: switch.v8_jacuzzi_spa_power
            state: "on"
        action:
          - service: climate.set_hvac_mode
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              hvac_mode: "off"
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:01"
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - delay: "00:00:03"
          - if:
              - condition: state
                entity_id: input_boolean.jacuzzi_spa_started_by_pv
                state: "on"
            then:
              - service: switch.turn_off
                target:
                  entity_id: switch.v8_jacuzzi_spa_power
              - service: input_boolean.turn_off
                target:
                  entity_id: input_boolean.jacuzzi_spa_started_by_pv
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.jacuzzi_temp_reached
          - service: system_log.write
            data:
              message: "Jacuzzi: PV-Auto deaktiviert – Heizung und Filter gestoppt"
              level: info
          - data:
              title: "Jacuzzi deaktiviert"
              message: "Jacuzzi PV-Auto wurde deaktiviert. Heizung und Filter wurden gestoppt."
            action: notify.kottlowski_gmail_com
    
      - alias: "Jacuzzi: Zieltemperatur aktualisieren"
        description: "Übergibt geänderte Zieltemperatur sofort an den Thermostat wenn der Spa läuft"
        mode: single
        trigger:
          - platform: state
            entity_id: input_number.jacuzzi_target_temp
        condition:
          - condition: state
            entity_id: switch.v8_jacuzzi_spa_power
            state: "on"
        action:
          - service: climate.set_temperature
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              temperature: "{{ states('input_number.jacuzzi_target_temp') | float(37) }}"
          - service: system_log.write
            data:
              message: >
                Jacuzzi: Zieltemperatur aktualisiert auf
                {{ states('input_number.jacuzzi_target_temp') }}°C
              level: info
    
      - alias: "Jacuzzi: Fehler-Benachrichtigung"
        description: "Benachrichtigt bei Jacuzzi-Fehler und stoppt falls aktiv"
        mode: single
        trigger:
          - platform: state
            entity_id: binary_sensor.v8_jacuzzi_spa_errors
            to: "on"
        action:
          - data:
              title: "Jacuzzi Fehler!"
              message: "Der Jacuzzi meldet einen Fehler. Bitte überprüfen!"
            action: notify.kottlowski_gmail_com
          - service: system_log.write
            data:
              message: "Jacuzzi: Fehler erkannt – manuelle Prüfung erforderlich"
              level: error
    
      - alias: "Jacuzzi: Zieltemperatur erreicht"
        description: "Schaltet alles ab wenn Zieltemperatur erreicht ist – Neustart nach 2°C Abfall"
        mode: single
        trigger:
          - platform: template
            value_template: >
              {{ state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') | float(0)
                 >= states('input_number.jacuzzi_target_temp') | float(100) }}
            for: "00:01:00"
        condition:
          - condition: state
            entity_id: input_boolean.jacuzzi_pv_auto
            state: "on"
          - condition: state
            entity_id: switch.v8_jacuzzi_spa_power
            state: "on"
        action:
          - service: climate.set_hvac_mode
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              hvac_mode: "off"
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:02"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - delay: "00:00:01"
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - delay: "00:00:03"
          - service: switch.turn_off
            target:
              entity_id: switch.v8_jacuzzi_spa_power
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.jacuzzi_spa_started_by_pv
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.jacuzzi_temp_reached
          - service: system_log.write
            data:
              message: >
                Jacuzzi: Zieltemperatur erreicht – alles ausgeschaltet
                ({{ state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') }}°C /
                Ziel: {{ states('input_number.jacuzzi_target_temp') }}°C).
                Neustart wenn unter {{ (states('input_number.jacuzzi_target_temp') | float(37) - 2) | round(1) }}°C und PV ausreicht.
              level: info
          - data:
              title: "Jacuzzi: Zieltemperatur erreicht"
              message: >
                Jacuzzi ausgeschaltet – Zieltemperatur
                {{ states('input_number.jacuzzi_target_temp') }}°C erreicht.
                Neustart automatisch bei {{ (states('input_number.jacuzzi_target_temp') | float(37) - 2) | round(1) }}°C.
            action: notify.kottlowski_gmail_com
    
      - alias: "Jacuzzi: Temperatur gesunken – neu starten"
        description: "Startet Jacuzzi neu wenn Temperatur 2°C unter Zieltemperatur und PV-Überschuss ausreicht"
        mode: single
        trigger:
          - platform: template
            value_template: >
              {{ state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') | float(100)
                 < (states('input_number.jacuzzi_target_temp') | float(37) - 2) }}
            for: "00:01:00"
        condition:
          - condition: state
            entity_id: input_boolean.jacuzzi_pv_auto
            state: "on"
          - condition: state
            entity_id: input_boolean.jacuzzi_temp_reached
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_connected
            state: "on"
          - condition: state
            entity_id: binary_sensor.v8_jacuzzi_spa_errors
            state: "off"
          - condition: numeric_state
            entity_id: sensor.em_available_for_heatpump
            above: input_number.jacuzzi_pv_start
        action:
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.jacuzzi_temp_reached
          - service: switch.turn_on
            target:
              entity_id: switch.v8_jacuzzi_spa_power
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.jacuzzi_spa_started_by_pv
          - delay: "00:00:05"
          - service: climate.set_temperature
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              temperature: "{{ states('input_number.jacuzzi_target_temp') | float(37) }}"
          - service: climate.set_hvac_mode
            target:
              entity_id: climate.v8_jacuzzi_spa_thermostat
            data:
              hvac_mode: heat
          - service: switch.turn_on
            target:
              entity_id: switch.v8_jacuzzi_spa_filter
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.v8_jacuzzi_filter_state
          - service: system_log.write
            data:
              message: >
                Jacuzzi: Temperatur auf
                {{ state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') }}°C gesunken –
                Neustart (Ziel: {{ states('input_number.jacuzzi_target_temp') }}°C,
                PV: {{ states('sensor.em_available_for_heatpump') }} kW)
              level: info
          - data:
              title: "Jacuzzi: Neustart nach Abkühlung"
              message: >
                Jacuzzi neu gestartet – Temperatur auf
                {{ state_attr('climate.v8_jacuzzi_spa_thermostat', 'current_temperature') }}°C gesunken
                (PV-Überschuss: {{ states('sensor.em_available_for_heatpump') }} kW).
            action: notify.kottlowski_gmail_com
    
    # --- Laufzeit-Protokollierung ---
    sensor:
      - platform: history_stats
        name: "Jacuzzi Heizung Laufzeit heute"
        entity_id: climate.v8_jacuzzi_spa_thermostat
        state: "heat"
        type: time
        start: "{{ now().replace(hour=0, minute=0, second=0) }}"
        end: "{{ now() }}"
    
    template:
      - sensor:
          - name: "Jacuzzi Heizung Laufzeit heute formatiert"
            icon: mdi:timer-play
            state: >
              {% set h = states('sensor.jacuzzi_heizung_laufzeit_heute') | float(0) %}
              {% set hours = h | int %}
              {% set minutes = ((h - hours) * 60) | int %}
              {{ '%d:%02d h' | format(hours, minutes) }}
    

    Status-Button (Lovelace YAML)

    type: custom:button-card
    name: Jacuzzi Status
    icon: mdi:information-outline
    show_label: true
    show_state: false
    tap_action:
      action: none
    hold_action:
      action: more-info
      entity: climate.v8_jacuzzi_spa_thermostat
    triggers_update:
      - climate.v8_jacuzzi_spa_thermostat
      - switch.v8_jacuzzi_spa_filter_ui
      - switch.v8_jacuzzi_spa_jets
      - select.v8_jacuzzi_spa_bubbles
    label: |
      [[[
        var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
        var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
        var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
        var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
        var parts = [];
        if (heat === 'heat')   parts.push('Heizung AN');
        if (heat === 'idle')   parts.push('Heizung Idle');
        if (filter === 'on')   parts.push('Filter AN');
        if (jets === 'on')     parts.push('Massage AN');
        if (bubbles !== 'OFF') parts.push('Bubbles AN');
        return parts.length > 0 ? parts.join('  ·  ') : 'Alles aus';
      ]]]
    styles:
      card:
        - height: 60px
        - padding: 6px 10px
        - border-radius: 10px
        - cursor: default
        - background: |
            [[[
              var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
              var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
              var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
              var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
              var anyOn = heat === 'heat' || heat === 'idle' || filter === 'on' || jets === 'on' || bubbles !== 'OFF';
              return anyOn ? '#1565c0' : '#3a3a3a';
            ]]]
        - border: |
            [[[
              var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
              var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
              var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
              var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
              var anyOn = heat === 'heat' || heat === 'idle' || filter === 'on' || jets === 'on' || bubbles !== 'OFF';
              return anyOn ? '2px solid #1565c0' : '1px solid #666';
            ]]]
      grid:
        - grid-template-areas: "\"i n\" \"i l\""
        - grid-template-columns: 32px auto
        - grid-template-rows: auto auto
        - align-items: center
        - justify-items: start
        - column-gap: 8px
      icon:
        - width: 22px
        - height: 22px
        - color: |
            [[[
              var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
              var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
              var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
              var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
              var anyOn = heat === 'heat' || heat === 'idle' || filter === 'on' || jets === 'on' || bubbles !== 'OFF';
              return anyOn ? '#ffffff' : '#9e9e9e';
            ]]]
      name:
        - font-size: 14px
        - font-weight: 600
        - justify-self: start
        - text-align: left
        - color: |
            [[[
              var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
              var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
              var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
              var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
              var anyOn = heat === 'heat' || heat === 'idle' || filter === 'on' || jets === 'on' || bubbles !== 'OFF';
              return anyOn ? '#ffffff' : '#cccccc';
            ]]]
      label:
        - font-size: 12px
        - justify-self: start
        - text-align: left
        - color: |
            [[[
              var heat    = states['climate.v8_jacuzzi_spa_thermostat'].state;
              var filter  = states['switch.v8_jacuzzi_spa_filter_ui'].state;
              var jets    = states['switch.v8_jacuzzi_spa_jets'].state;
              var bubbles = states['select.v8_jacuzzi_spa_bubbles'].state;
              var anyOn = heat === 'heat' || heat === 'idle' || filter === 'on' || jets === 'on' || bubbles !== 'OFF';
              return anyOn ? '#e3f2fd' : '#aaaaaa';
            ]]]
    

    Steuer-Buttons (Lovelace YAML)

    type: vertical-stack
    cards:
      - type: custom:button-card
        entity: switch.v8_jacuzzi_spa_power
        name: SPA Power
        icon: mdi:hot-tub
        show_state: true
        size: 22px
        tap_action:
          action: toggle
        hold_action:
          action: more-info
        state:
          - value: "on"
            styles:
              card:
                - background: "#2e7d32"
                - border: 2px solid "#2e7d32"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#e8f5e9"
          - value: "off"
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
            - background: var(--ha-card-background)
            - border: 1px solid var(--divider-color)
            - cursor: pointer
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
          icon:
            - width: 22px
            - height: 22px
            - color: var(--secondary-text-color)
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - opacity: 0.8
            - justify-self: start
            - text-align: left
      - type: custom:button-card
        entity: climate.v8_jacuzzi_spa_thermostat
        name: Heizung
        icon: mdi:fire
        show_state: true
        tap_action:
          action: call-service
          service: script.jacuzzi_heat_toggle
        hold_action:
          action: more-info
        state:
          - value: heat
            styles:
              card:
                - background: "#d32f2f"
                - border: 2px solid "#d32f2f"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#ffebee"
          - value: idle
            styles:
              card:
                - background: "#f57c00"
                - border: 2px solid "#f57c00"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#fff3e0"
          - value: "off"
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
            - cursor: pointer
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
            - column-gap: 8px
          icon:
            - width: 22px
            - height: 22px
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - opacity: 0.8
            - justify-self: start
            - text-align: left
      - type: custom:button-card
        entity: switch.v8_jacuzzi_spa_filter_ui
        name: Filterpumpe
        icon: mdi:water-pump
        show_state: true
        size: 22px
        tap_action:
          action: call-service
          service: >
            [[[ return entity.state === 'on' ? 'switch.turn_off' : 'switch.turn_on'
            ]]]
          target:
            entity_id: switch.v8_jacuzzi_spa_filter_ui
        hold_action:
          action: more-info
        state:
          - value: "on"
            styles:
              card:
                - background: "#0288d1"
                - border: 2px solid "#0288d1"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#e1f5fe"
          - value: "off"
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
            - border: 1px solid var(--divider-color)
            - cursor: pointer
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
            - column-gap: 8px
          icon:
            - width: 22px
            - height: 22px
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - opacity: 0.8
            - justify-self: start
            - text-align: left
      - type: custom:button-card
        entity: select.v8_jacuzzi_spa_bubbles
        name: Bubble-Modus
        icon: mdi:chart-bubble
        show_state: true
        tap_action:
          action: call-service
          service: select.select_option
          service_data:
            entity_id: select.v8_jacuzzi_spa_bubbles
            option: "[[[ return entity.state === 'MAX' ? 'OFF' : 'MAX'; ]]]"
        hold_action:
          action: more-info
        state:
          - value: "OFF"
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
          - value: MAX
            styles:
              card:
                - background: "#ff9800"
                - border: 2px solid "#ff9800"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#fff8e1"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
            - column-gap: 8px
          icon:
            - width: 22px
            - height: 22px
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - justify-self: start
            - text-align: left
            - opacity: 0.8
      - type: custom:button-card
        entity: switch.v8_jacuzzi_spa_jets
        name: Massagefunktion
        icon: mdi:waves
        show_state: true
        tap_action:
          action: toggle
        hold_action:
          action: more-info
        state:
          - value: "on"
            styles:
              card:
                - background: "#8e24aa"
                - border: 2px solid "#8e24aa"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#f3e5f5"
          - value: "off"
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
            - column-gap: 8px
          icon:
            - width: 22px
            - height: 22px
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - justify-self: start
            - text-align: left
    grid_options:
      rows: auto
      columns: 6
    card_mod:
      style: |
        ha-card {
          gap: 6px;   /* 🔥 Abstand zwischen Buttons */
        }
    

    Script & Template-Switch (script.yaml / sensors/jacuzzi.yaml)

    In: „/homeassistant/scripts.yaml“

    jacuzzi_heat_toggle:
      alias: "Jacuzzi: Heizung + Filter-UI Toggle (force off with retries)"
      mode: single
      sequence:
        - choose:
            - conditions:
                - condition: state
                  entity_id: climate.v8_jacuzzi_spa_thermostat
                  state: 'off'
              sequence:
                - service: climate.set_hvac_mode
                  target:
                    entity_id: climate.v8_jacuzzi_spa_thermostat
                  data:
                    hvac_mode: 'heat'
                - delay: { seconds: 2 }
                - service: switch.turn_on
                  target:
                    entity_id: switch.v8_jacuzzi_spa_filter
                - service: input_boolean.turn_on
                  target:
                    entity_id: input_boolean.v8_jacuzzi_filter_state
          default:
            - service: climate.turn_off
              target:
                entity_id: climate.v8_jacuzzi_spa_thermostat
            - delay: { seconds: 2 }
            # drei Versuche, den Filter auszuschalten (mit kurzen Pausen)
            - service: switch.turn_off
              target:
                entity_id: switch.v8_jacuzzi_spa_filter
            - delay: { seconds: 2 }
            - service: switch.turn_off
              target:
                entity_id: switch.v8_jacuzzi_spa_filter
            - delay: { seconds: 2 }
            - service: switch.turn_off
              target:
                entity_id: switch.v8_jacuzzi_spa_filter
            - delay: { seconds: 1 }
            - service: input_boolean.turn_off
              target:
                entity_id: input_boolean.v8_jacuzzi_filter_state

    Unter: „/homeassistant/sensors/jacuzzi.yaml“

    - switch:
          - name: "v8-Jacuzzi Spa Filter (UI)"
            unique_id: v8_jacuzzi_filter_ui
            optimistic: false  # optional
            state: "{{ is_state('input_boolean.v8_jacuzzi_filter_state','on') }}"
            turn_on:
              - service: switch.turn_on
                target:
                  entity_id: switch.v8_jacuzzi_spa_filter
              - service: input_boolean.turn_on
                target:
                  entity_id: input_boolean.v8_jacuzzi_filter_state
            turn_off:
              - service: switch.turn_off
                target:
                  entity_id: switch.v8_jacuzzi_spa_filter
              - service: input_boolean.turn_off
                target:
                  entity_id: input_boolean.v8_jacuzzi_filter_state

    Vollständiges Dashboard (Lovelace Raw-Konfiguration)

    Der vollständige YAML-Code meines Jacuzzi Dashboards mit Nordic Theme:

      - type: sections
        max_columns: 3
        title: Jacuzzi
        path: jacuzzi
        icon: mdi:spa
        sections:
          - type: grid
            cards:
              - type: custom:button-card
                entity: switch.jacuzzi
                name: SPA Master Switch
                icon: mdi:electric-switch
                show_state: true
                size: 22px
                tap_action:
                  action: toggle
                hold_action:
                  action: more-info
                state:
                  - value: "on"
                    styles:
                      card:
                        - background: "#2e7d32"
                        - border: "2px solid #ffffff"
                      icon:
                        - color: "#ffffff"
                      name:
                        - color: "#ffffff"
                      state:
                        - color: "#e8f5e9"
                  - value: "off"
                    styles:
                      card:
                        - background: "#c62828"
                        - border: "2px solid #c62828"
                      icon:
                        - color: "#ffffff"
                      name:
                        - color: "#ffffff"
                      state:
                        - color: "#ffebee"
                styles:
                  card:
                    - height: 60px
                    - padding: 6px 10px
                    - border-radius: 10px
                    - cursor: pointer
                  grid:
                    - grid-template-areas: "\"i n s\""
                    - grid-template-columns: 32px auto auto
                    - grid-template-rows: 1fr
                    - align-items: center
                  icon:
                    - width: 22px
                    - height: 22px
                  name:
                    - font-size: 16px
                    - font-weight: 600
                    - justify-self: start
                    - margin-left: 8px
                  state:
                    - font-size: 18px
                    - justify-self: start
                    - font-weight: 700
                    - margin-left: 10px
                    - text-transform: uppercase
              - type: heading
                icon: ""
                heading_style: title
              - type: thermostat
                entity: climate.v8_jacuzzi_spa_thermostat
                show_current_as_primary: true
                grid_options:
                  columns: 6
                  rows: auto
                name: Jacuzzi
              - type: vertical-stack
                cards:
                  - type: custom:button-card
                    entity: switch.v8_jacuzzi_spa_power
                    name: SPA Power
                    icon: mdi:hot-tub
                    show_state: true
                    size: 22px
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#2e7d32"
                            - border: "2px solid #ffffff"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#e8f5e9"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: var(--secondary-text-color)
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                  - type: custom:button-card
                    entity: climate.v8_jacuzzi_spa_thermostat
                    name: Heizung
                    icon: mdi:fire
                    show_state: true
                    tap_action:
                      action: call-service
                      service: script.jacuzzi_heat_toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: heat
                        styles:
                          card:
                            - background: "#d32f2f"
                            - border: 2px solid "#d32f2f"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#ffebee"
                      - value: idle
                        styles:
                          card:
                            - background: "#f57c00"
                            - border: 2px solid "#f57c00"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#fff3e0"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                  - type: custom:button-card
                    entity: switch.v8_jacuzzi_spa_filter_ui
                    name: Filterpumpe
                    icon: mdi:water-pump
                    show_state: true
                    size: 22px
                    tap_action:
                      action: call-service
                      service: >
                        [[[ return entity.state === 'on' ? 'switch.turn_off' :
                        'switch.turn_on' ]]]
                      target:
                        entity_id: switch.v8_jacuzzi_spa_filter_ui
                    hold_action:
                      action: more-info
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#0288d1"
                            - border: 2px solid "#0288d1"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#e1f5fe"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                  - type: custom:button-card
                    entity: select.v8_jacuzzi_spa_bubbles
                    name: Bubble-Modus
                    icon: mdi:chart-bubble
                    show_state: true
                    tap_action:
                      action: call-service
                      service: select.select_option
                      service_data:
                        entity_id: select.v8_jacuzzi_spa_bubbles
                        option: "[[[ return entity.state === 'MAX' ? 'OFF' : 'MAX'; ]]]"
                    hold_action:
                      action: more-info
                    state:
                      - value: "OFF"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                      - value: MAX
                        styles:
                          card:
                            - background: "#ff9800"
                            - border: 2px solid "#ff9800"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#fff8e1"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - justify-self: start
                        - text-align: left
                        - opacity: 0.8
                  - type: custom:button-card
                    entity: switch.v8_jacuzzi_spa_jets
                    name: Massagefunktion
                    icon: mdi:waves
                    show_state: true
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#8e24aa"
                            - border: 2px solid "#8e24aa"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#f3e5f5"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - justify-self: start
                        - text-align: left
                grid_options:
                  rows: auto
                  columns: 6
                card_mod:
                  style: |
                    ha-card {
                      gap: 6px;   /* 🔥 Abstand zwischen Buttons */
                    }
          - type: grid
            cards:
              - type: gauge
                name: Jacuzzi
                severity:
                  green: 0
                  yellow: 800
                  red: 1500
                needle: true
                entity: sensor.jacuzzi_leistung
                max: 2300
              - type: custom:apexcharts-card
                header:
                  title: Jacuzzi Energie (14 Tage)
                  show: true
                graph_span: 14d
                span:
                  start: day
                  offset: "-13d"
                series:
                  - entity: sensor.jacuzzi_energy_daily
                    name: Jacuzzi
                    type: column
                    group_by:
                      func: max
                      duration: 1d
                    transform: |
                      return x < 0 ? 0 : x;
                apex_config:
                  chart:
                    height: 300
                  plotOptions:
                    bar:
                      borderRadius: 4
                      columnWidth: 60%
                      colors:
                        ranges:
                          - from: 0
                            to: 0.5
                            color: "#90EE90"
                          - from: 0.5
                            to: 0.7
                            color: "#00C853"
                          - from: 0.7
                            to: 15
                            color: "#FFD600"
                  xaxis:
                    labels:
                      datetimeFormatter:
                        day: dd.MM
                  yaxis:
                    min: 0
              - type: custom:apexcharts-card
                header:
                  title: Jacuzzi Energie (stündlich)
                  show: true
                graph_span: 24h
                series:
                  - entity: sensor.jacuzzi_energie
                    name: Solar
                    type: column
                    group_by:
                      func: diff
                      duration: 1h
                    transform: |
                      return x < 0 ? 0 : x;
                apex_config:
                  chart:
                    height: 300
                  plotOptions:
                    bar:
                      borderRadius: 4
                      columnWidth: 60%
                      colors:
                        ranges:
                          - from: 0
                            to: 4
                            color: "#90EE90"
                          - from: 4
                            to: 8
                            color: "#00C853"
                          - from: 8
                            to: 15
                            color: "#FFD600"
                  xaxis:
                    labels:
                      datetimeFormatter:
                        hour: HH:mm
                  yaxis:
                    min: 0
                  tooltip:
                    "y":
                      formatter: |
                        function(value) {
                          return Math.round(value) + " W";
                        }
          - type: grid
            cards:
              - type: heading
                heading_style: title
                icon: mdi:shower-head
                heading: Dusche
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: valve.morpheus_reich_valve_4
                    name: Dusche
                    icon: mdi:shower-head
                    show_state: true
                    size: 22px
                    state_display: |
                      [[[
                        return entity.state === 'open' ? 'Ein' : 'Aus';
                      ]]]
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: open
                        styles:
                          card:
                            - background: "#2e7d32"
                            - border: 2px solid "#2e7d32"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#e8f5e9"
                      - value: closed
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: var(--secondary-text-color)
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                columns: 2
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    name: Dauer
                    icon: mdi:timer
                    show_name: false
                    entity: input_number.dusche_laufzeit
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.dusche_laufzeit
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.dusche_laufzeit
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} min`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 90) return '#1565c0';
                              if (v <= 150) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                columns: 2
              - type: heading
                heading: Jacuzzi Filterung
                heading_style: title
                icon: mdi:filter-outline
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: input_boolean.jacuzzi_filter_auto
                    name: Filter-Automatik
                    icon: mdi:filter
                    show_state: true
                    size: 22px
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#2e7d32"
                            - border: "2px solid #ffffff"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#e8f5e9"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: var(--secondary-text-color)
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                columns: 2
                grid_options:
                  rows: 1
              - square: false
                type: grid
                columns: 3
                grid_options:
                  rows: auto
                cards:
                  - type: custom:button-card
                    entity: input_datetime.jacuzzi_filter_time_1
                    icon: mdi:clock-start
                    show_name: false
                    show_state: true
                    show_icon: true
                    tap_action:
                      action: more-info
                    layout: vertical
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 4px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: "#1565c0"
                      grid:
                        - grid-template-areas: "\"i\" \"s\""
                        - grid-template-rows: 1fr auto
                        - justify-items: center
                      icon:
                        - width: 24px
                        - height: 24px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                  - type: custom:button-card
                    entity: input_datetime.jacuzzi_filter_time_2
                    icon: mdi:clock-start
                    show_name: false
                    show_state: true
                    show_icon: true
                    tap_action:
                      action: more-info
                    layout: vertical
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 4px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: "#1565c0"
                      grid:
                        - grid-template-areas: "\"i\" \"s\""
                        - grid-template-rows: 1fr auto
                        - justify-items: center
                      icon:
                        - width: 24px
                        - height: 24px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                  - type: custom:button-card
                    name: Dauer
                    icon: mdi:timer
                    show_name: false
                    entity: input_number.jacuzzi_filter_duration
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.jacuzzi_filter_duration
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.jacuzzi_filter_duration
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} min`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 90) return '#1565c0';
                              if (v <= 150) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
              - type: heading
                heading_style: title
              - type: heading
                heading_style: title
                icon: mdi:heating-coil
                heading: Jacuzzi Automatisierung Filter
              - square: false
                type: grid
                columns: 2
                grid_options:
                  rows: 1
                cards:
                  - type: custom:button-card
                    entity: automation.jacuzzi_filter_zyklus
                    name: Jacuzzi-Automatisierungen
                    show_name: true
                    show_icon: false
                    show_state: true
                    layout: vertical
                    tap_action:
                      action: call-service
                      service: automation.toggle
                      target:
                        entity_id:
                          - automation.jacuzzi_filter_zyklus
                    state_display: |
                      [[[
                        return entity.state === 'on' ? 'aktiv' : 'inaktiv';
                      ]]]
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                      grid:
                        - grid-template-areas: "\"n\" \"s\""
                        - grid-template-rows: auto auto
                        - justify-items: start
                      name:
                        - font-size: 14px
                        - font-weight: 600
                      state:
                        - font-size: 13px
                        - font-weight: bold
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#2e7d32"
                          name:
                            - color: "#e8f5e9"
                          state:
                            - color: "#e8f5e9"
                      - value: "off"
                        styles:
                          card:
                            - background: "#c62828"
                          name:
                            - color: "#ffebee"
                          state:
                            - color: "#ffebee"
              - type: heading
                heading_style: title
              - type: heading
                heading_style: title
                icon: mdi:heating-coil
                heading: Jacuzzi Heizung
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: input_boolean.jacuzzi_pv_auto
                    name: Heiz-Automatik
                    icon: mdi:heating-coil
                    show_state: true
                    size: 22px
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#2e7d32"
                            - border: "2px solid #ffffff"
                          icon:
                            - color: "#ffffff"
                          name:
                            - color: "#ffffff"
                          state:
                            - color: "#e8f5e9"
                      - value: "off"
                        styles:
                          card:
                            - background: "#3a3a3a"
                            - border: "1px solid #666"
                          icon:
                            - color: "#9e9e9e"
                          name:
                            - color: "#cccccc"
                          state:
                            - color: "#aaaaaa"
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: var(--secondary-text-color)
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                        - justify-self: start
                        - text-align: left
                columns: 2
                grid_options:
                  rows: 1
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    name: Laufzeit Heizung
                    entity: sensor.jacuzzi_heizung_laufzeit_heute
                    icon: mdi:timer-play
                    show_name: true
                    show_icon: true
                    show_state: true
                    tap_action:
                      action: none
                    double_tap_action:
                      action: none
                    hold_action:
                      action: more-info
                    aspect_ratio: 3/1
                    size: 22px
                    state_display: |
                      [[[
                        const h = Number(entity.state);
                        const hours = Math.floor(h);
                        const minutes = Math.round((h - hours) * 60);
                        return `${hours}:${String(minutes).padStart(2,'0')} h`;
                      ]]]
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                        - background: "#4a148c"
                        - cursor: default
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#ce93d8"
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#ce93d8"
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                        - justify-self: start
                        - text-align: left
                columns: 2
                grid_options:
                  rows: 1
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    name: Dauer
                    icon: mdi:timer
                    show_name: false
                    entity: input_number.jacuzzi_min_runtime
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.jacuzzi_min_runtime
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.jacuzzi_min_runtime
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} min`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 90) return '#1565c0';
                              if (v <= 150) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                  - type: custom:button-card
                    name: Dauer
                    icon: mdi:hydraulic-oil-temperature
                    show_name: false
                    entity: input_number.jacuzzi_target_temp
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.jacuzzi_target_temp
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.jacuzzi_target_temp
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} Grad`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 90) return '#1565c0';
                              if (v <= 150) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                columns: 2
                grid_options:
                  rows: auto
              - type: heading
                heading_style: title
                icon: mdi:heating-coil
                heading: Jacuzzi Automatisierungen Heizung
              - square: false
                type: grid
                columns: 2
                grid_options:
                  rows: auto
                cards:
                  - type: custom:button-card
                    entity: automation.jacuzzi_pv_uberschuss_ein
                    name: PV-Automatisierungen
                    show_name: true
                    show_icon: false
                    show_state: true
                    layout: vertical
                    tap_action:
                      action: call-service
                      service: automation.toggle
                      target:
                        entity_id:
                          - automation.jacuzzi_pv_uberschuss_ein
                          - automation.jacuzzi_pv_uberschuss_aus
                    hold_action:
                      action: more-info
                    state_display: |
                      [[[
                        return entity.state === 'on' ? 'aktiv' : 'inaktiv';
                      ]]]
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                      grid:
                        - grid-template-areas: "\"n\" \"s\""
                        - grid-template-rows: auto auto
                        - justify-items: start
                      name:
                        - font-size: 14px
                        - font-weight: 600
                      state:
                        - font-size: 13px
                        - font-weight: bold
                    state:
                      - value: "on"
                        styles:
                          card:
                            - background: "#2e7d32"
                          name:
                            - color: "#e8f5e9"
                          state:
                            - color: "#e8f5e9"
                      - value: "off"
                        styles:
                          card:
                            - background: "#c62828"
                          name:
                            - color: "#ffebee"
                          state:
                            - color: "#ffebee"
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    name: Aktueller PV-Überschuß
                    icon: mdi:solar-power
                    show_name: true
                    show_icon: true
                    entity: sensor.em_available_for_heatpump
                    tap_action:
                      action: none
                    hold_action:
                      action: more-info
                    double_tap_action:
                      action: none
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} kW`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                        - background: "#4a148c"
                        - cursor: default
                      grid:
                        - grid-template-areas: "\"i n\" \"i s\""
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - justify-items: start
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#ce93d8"
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#ce93d8"
                        - justify-self: start
                        - text-align: left
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#f9a825';
                              if (v <= 5) return '#a5d6a7';
                              return '#ffffff';
                            ]]]
                        - justify-self: start
                        - text-align: left
                columns: 2
                grid_options:
                  rows: 1
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    name: PV-Überschuß Stop
                    icon: mdi:power
                    show_name: true
                    show_icon: false
                    entity: input_number.jacuzzi_pv_stop
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.jacuzzi_pv_stop
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.jacuzzi_pv_stop
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} kW`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 1) return '#1565c0';
                              if (v <= 2) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                  - type: custom:button-card
                    name: PV-Überschuß Start
                    icon: mdi:power
                    show_name: true
                    show_icon: false
                    entity: input_number.jacuzzi_pv_start
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.jacuzzi_pv_start
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.jacuzzi_pv_start
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} kW`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid rgba(255,255,255,0.2)
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';
                              if (v <= 2) return '#1565c0';
                              if (v <= 3) return '#f9a825';
                              return '#c62828';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: "#90caf9"
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: "#90caf9"
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: "#ffffff"
                columns: 2
                grid_options:
                  rows: 1
        visible: []
        cards: []
        header:
          card:
            type: markdown
            text_only: true
            content: "# 🌿 Jacuzzi 🫧"
        subview: true
    

    🚿 Teil 2: Die smarte Gartendusche


    🔧 Ausgangsproblem & Hintergrund

    Meine Gartendusche ist Teil meiner Gardena Gartenbewässerung. Die gesamte Bewässerungsanlage wird über die Gardena Integration in Home Assistant eingebunden – damit lassen sich alle Ventile der Anlage direkt aus HA heraus steuern.

    Die Gartendusche hat dabei ein eigenes dediziertes Ventil in der Bewässerungsanlage, das unabhängig von den anderen Bewässerungskreisen angesteuert werden kann. In Home Assistant erscheint es als valve.morpheus_reich_valve_4 bzw. Dusche nach Umbenennung.

    📸 Screenshot der Gardena Integration in Home Assistant

    Das Problem: Wer kennt das nicht – man dreht die Dusche auf, geht kurz ins Haus und vergisst sie oder man nutzt die Dusche nur kurz und es liegt die ganze Zeit der Wassserdruck an. Gerade bei einer Gartendusche, die über ein steuerbares Ventil läuft, ist eine automatische Abschaltung ein Muss.

    Außerdem liefert das Ventil intern die Zustände „open“ und „closed“ – für ein deutschsprachiges Dashboard möchte ich lieber „Ein“ und „Aus“ sehen.


    🎯 Ziele

    • ⏱️ Dusche schaltet sich nach konfigurierbarer Zeit automatisch ab (Standard: 60 Minuten)
    • 🔢 Laufzeit per Eingabefeld einstellbar (5–180 Minuten) – kein Schieberegler
    • 🔄 Öffnet man die Dusche erneut während der Timer läuft, startet der Countdown von vorne
    • 🏷️ Dashboard-Button zeigt „Ein“ / „Aus“ statt der internen Zustände „open“ / „closed“

    🧩 Helper

    • input_number.dusche_laufzeit – Einstellbare Laufzeit bis zum automatischen Abschalten. Standard: 30 Min, Bereich: 5–180 Min, Eingabe als Zahlenfeld (kein Schieberegler).

    🤖 Die Automation: Auto-Aus nach Laufzeit

    Die Automation ist einfach und zuverlässig aufgebaut:

    • Trigger: Ventil wird geöffnet
    • Action: Warte die konfigurierte Laufzeit, prüfe ob das Ventil noch offen ist, schließe es dann automatisch
    • mode: restart – Wird die Dusche erneut geöffnet während der Timer läuft, startet der Countdown neu. Es läuft immer nur ein Timer gleichzeitig.

    Die Condition vor dem Schließen ist wichtig: Hat jemand die Dusche in der Zwischenzeit manuell geschlossen, passiert beim automatischen Schließversuch nichts – kein unnötiger Schaltvorgang.


    🖥️ Die Dashboard-Button

    Die Button folgt dem gleichen Design wie die Jacuzzi-Buttons: grüner Hintergrund wenn die Dusche läuft, dunkler Hintergrund wenn sie geschlossen ist. Der interne Zustand „open“ / „closed“ wird per state_display-Template in „Ein“ / „Aus“ übersetzt. Und dann noch der Button über den die Laufzeit eingestellt werden kann.

    📸 Screenshot des Dusche-Buttons im Dashboard – sowie der Laufzeit

    📋 Der YAML-Code

    Helper & Automation (config/packages/dusche.yaml)

    # config/packages/dusche.yaml
    
    # --- Helper ---
    input_number:
      dusche_laufzeit:
        name: "Dusche Laufzeit (Min)"
        initial: 60
        min: 5
        max: 180
        step: 5
        unit_of_measurement: min
        mode: box
        icon: mdi:timer-outline
    
    # --- Automation ---
    automation:
      - alias: "Dusche: Auto-Aus nach Laufzeit"
        description: "Schließt das Duschventil automatisch nach konfigurierbarer Zeit"
        mode: restart
        trigger:
          - platform: state
            entity_id: valve.morpheus_reich_valve_4
            to: "open"
        action:
          - delay:
              minutes: "{{ states('input_number.dusche_laufzeit') | int(60) }}"
          - condition: state
            entity_id: valve.morpheus_reich_valve_4
            state: "open"
          - service: valve.close_valve
            target:
              entity_id: valve.morpheus_reich_valve_4
          - service: system_log.write
            data:
              message: >
                Dusche: automatisch geschlossen nach
                {{ states('input_number.dusche_laufzeit') | int }} Min
              level: info
    

    Dashboard-Button (Lovelace YAML)

    square: false
    type: grid
    cards:
      - type: custom:button-card
        entity: valve.morpheus_reich_valve_4
        name: Dusche
        icon: mdi:shower-head
        show_state: true
        size: 22px
        state_display: |
          [[[
            return entity.state === 'open' ? 'Ein' : 'Aus';
          ]]]
        tap_action:
          action: toggle
        hold_action:
          action: more-info
        state:
          - value: open
            styles:
              card:
                - background: "#2e7d32"
                - border: 2px solid "#2e7d32"
              icon:
                - color: "#ffffff"
              name:
                - color: "#ffffff"
              state:
                - color: "#e8f5e9"
          - value: closed
            styles:
              card:
                - background: "#3a3a3a"
                - border: "1px solid #666"
              icon:
                - color: "#9e9e9e"
              name:
                - color: "#cccccc"
              state:
                - color: "#aaaaaa"
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
            - background: var(--ha-card-background)
            - border: 1px solid var(--divider-color)
            - cursor: pointer
          grid:
            - grid-template-areas: "\"i n\" \"i s\""
            - grid-template-columns: 32px auto
            - grid-template-rows: auto auto
            - align-items: center
            - justify-items: start
          icon:
            - width: 22px
            - height: 22px
            - color: var(--secondary-text-color)
          name:
            - font-size: 14px
            - font-weight: 600
            - justify-self: start
            - text-align: left
          state:
            - font-size: 12px
            - opacity: 0.8
            - justify-self: start
            - text-align: left
      - type: custom:button-card
        name: Dauer
        icon: mdi:timer
        show_name: false
        entity: input_number.dusche_laufzeit
        tap_action:
          action: call-service
          service: input_number.increment
          target:
            entity_id: input_number.dusche_laufzeit
        hold_action:
          action: call-service
          service: input_number.decrement
          target:
            entity_id: input_number.dusche_laufzeit
        double_tap_action:
          action: more-info
        show_state: true
        state_display: |
          [[[
            const v = Number(entity.state);
            return `${v} min`;
          ]]]
        aspect_ratio: 3/1
        size: 22px
        styles:
          card:
            - height: 60px
            - padding: 6px 10px
            - border-radius: 10px
            - border: 1px solid
            - background: |
                [[[
                  const v = Number(entity.state);
                  if (v === 0) return '#424242';       // aus / deaktiviert
                  if (v <= 90) return '#2e7d32';        // grün (kurz, sicher)
                  if (v <= 150) return '#f9a825';       // gelb (normal)
                  return '#c62828';                    // rot (lang)
                ]]]
          name:
            - font-size: 14px
            - font-weight: 600
            - color: "#cccccc"
          icon:
            - width: 22px
            - height: 22px
            - color: "#bdbdbd"
          state:
            - font-size: 14px
            - font-weight: bold
            - color: "#ffffff"
    columns: 2
    

    ✅ Fazit

    Mit relativ wenig Aufwand ist aus einem gewöhnlichen Garten-Jacuzzi und einer Dusche eine vollständig smarte Wellness-Oase geworden. Der Jacuzzi heizt praktisch kostenlos mit Solarstrom, filtert das Wasser zuverlässig auch an sonnenarmen Tagen – und schaltet sich bei manueller Nutzung einfach gar nicht erst in den Weg. Die Gartendusche vergisst sich nicht mehr von selbst.

    Was mich dabei am meisten überzeugt: Das System ist robust gegenüber manuellen Eingriffen. Wer den Spa von Hand einschaltet, wird nicht von der Automatisierung überrascht. Wer die Dusche früher zudreht als geplant, muss sich nicht um den laufenden Timer sorgen. Die Automatisierung hilft – sie übernimmt nicht die Kontrolle.

    Hast du ähnliche Geräte im Garten? Ich freue mich über Fragen und Feedback in den Kommentaren! 👇

    🤖 Intelligente Steuerung für den Mähroboter mit Home Assistant

    Als Besitzer eines automatischen Mähroboters steht man vor der Herausforderung, ihn möglichst effizient, wetterabhängig und zeitschonend zu steuern.

    In meinem Smart Home nutze ich Home Assistant, um meinen Green Cruiser Mähroboter (Gardena smart SILENO city, 500 m²) perfekt in meinen Alltag zu integrieren.

    Heute möchte ich dir meine finale Automatisierungslösung vorstellen, die ich über mehrere Wochen optimiert habe. Ich erkläre dir genau, wie die Steuerung funktioniert, welche Automatisierungen ich dafür eingesetzt habe, welche Helfer-Entitäten dabei eine wichtige Rolle spielen und wie die Benutzeroberfläche zur Steuerung aufgebaut ist.


    🔧 Ausgangsproblem

    Der Gardena Mähroboter bringt von Haus aus ein eigenes Scheduling-System mit.

    Dieses steuert:

    • wann der Roboter fährt
    • wann er lädt
    • wann er pausiert

    👉 Problem:

    • Zeitplan aktiv → ✅ gutes Ladeverhalten, ❌ automatisches Starten
    • Zeitplan deaktiviert → ✅ keine Eigenstarts, ❌ Ladeverhalten teilweise suboptimal

    Zusätzlich:

    • der Zeitplan lässt sich nur „pausieren“
    • wird aber im Hintergrund teilweise wieder automatisch aktiviert

    🎯 Ziele meiner Automatisierung

    • ✅ Mähen nur in festgelegten Zeitfenstern
    • 🌧️ Kein Mähen bei Regen
    • 🔋 Automatisches Fortsetzen des Mähens nach dem Aufladen
    • ⚡ Manuelles, spontanes Mähen für eine selbstgewählte Dauer unabhängig von Zeitfenstern
    • 🛑 Verhindern unerlaubter Starts außerhalb erlaubter Zeitfenster ohne expliziten Home Assistant-Trigger
    • 📊 Übersichtliche Bedienelemente und Statusanzeigen in Home Assistant
    • 👉 Home Assistant soll die einzige Steuerinstanz sein – ohne unkontrolliertes Eigenverhalten des Roboters

    🧩 Architektur meines Systems

    Das gesamte System basiert auf vier zentralen Bausteinen:

    • Automatikbetrieb (Zeit + Wetter + Akku)
    • Spontanbetrieb (manuell über UI)
    • Schutz-Mechanismus gegen Fremdstarts
    • Sicherheitsnetz gegen hängendes Spontan-Flag

    🧩 Wichtigste Hilfsmittel: Helper (Input-Entitäten)

    Damit die Automatisierungen flexibel und nutzerfreundlich sind, verwende ich verschiedene Helper in Home Assistant:

    🔘 1. Steuer-Flags

    • ▶️ input_boolean.mahroboter_spontan_akti
      Steuert den manuellen, spontanen Mähmodus. Wird dieser aktiviert, läuft der Mäher unabhängig vom Zeitfenster.
    • 📌 input_boolean.mahroboter_hat_gemaeht
      Merkt sich, ob der Mäher bereits gemäht hat – wichtig, um nach vollständigem Akku-Laden richtig zu entscheiden.

    ⏱ 2. Zeitsteuerung

    • 🕒 input_datetime.mahroboter_startzeit und input_datetime.mahroboter_endzeit
      Dienen zur Definition der erlaubten Mähzeitfenster. So kann man jederzeit bequem per UI Start- und Endzeit anpassen.

    ⏳ 3. Spontanmodus Parameter

    • ⏱ input_number.mahroboter_spontan_dauer
      Einstellbarer Timer, wie lange das spontane Mähen laufen soll.
    • 📅 input_datetime.mahroboter_ende_spontan
      Speichert das Ende des spontanen Mähvorgangs zeitlich ab, damit es in der UI angezeigt werden kann.

    Diese Helper sind essentiell, um dynamisch und intelligent auf Zeit, Regen und Batterielevel reagieren zu können.


    🌦 Wetterlogik (Binary Sensor)

    Ein wichtiger Bestandteil ist ein eigener Sensor:

    👉 „Mähroboter Regen OK“

    Funktion

    • wertet die Regenrate aus
    • entscheidet, ob Mähen aktuell erlaubt ist

    Logik (vereinfacht)

    • Regenrate < 0.1 → OK
    • Regenrate >= 0.1 → gesperrt

    YAML – Code

    - binary_sensor:
        - name: "Mähroboter Regen OK"
          unique_id: maehroboter_regen_ok
          state: >
            {{ states('sensor.gw1100a_rain_rate') | float(0) < 0.1 }}
          icon: >
            {% if states('sensor.gw1100a_rain_rate') | float(0) < 0.1 %}
              mdi:weather-sunny
            {% else %}
              mdi:weather-rainy
            {% endif %}

    👉 Vorteil:

    ✅ klare Freigabe / Sperre
    ✅ direkt im Dashboard sichtbar
    ✅ einfache Integration in Automationen


    ⚙️ Die vier finalen Automatisierungen im Detail

    1. 🌱 Intelligente Regen-, Akku- und Zeitsteuerung

    Diese Automatisierung sorgt dafür, dass der Green Cruiser nur im definierten Zeitfenster mäht, bei Regen sofort ins Dock zurückkehrt und nach vollem Akku-Aufladen sein Mähen fortsetzt.

    Trigger:

    • ⏰ Startzeit erreicht (input_datetime.mahroboter_startzeit)
    • 🏁 Endzeit erreicht (input_datetime.mahroboter_endzeit)
    • 🌧 Regen beginnt
    • ☀️ Regen ist mindestens 2 Stunden vorbei
    • 🔋 Akku voll (>95%)

    Bedingungen & Ablauf:

    • ➡️ Start bei passenden Bedingungen innerhalb Zeitfenster
    • 🚫 Kein Start bei Regen
    • 🔄 Fortsetzung nach dem Laden
    • 🛑 Rückkehr bei Regen oder Endzeit

    Diese Logik sorgt für maximale Effizienz: Kein Mähen bei Regen, nur im definierten Fenster, und automatische Fortsetzung nach Laden.

    alias: "Mähroboter: Intelligente Regen-, Akku- und Zeitsteuerung"
    description: >
      Green Cruiser fährt nur im Zeitfenster, reagiert auf Regen und setzt nach
      Laden fort.
    triggers:
      - trigger: time
        at: input_datetime.mahroboter_startzeit
        id: zeit_start
      - trigger: time
        at: input_datetime.mahroboter_endzeit
        id: zeit_ende
      - trigger: numeric_state
        entity_id: sensor.gw1100a_rain_rate
        above: 0
        id: regen_start
      - trigger: numeric_state
        entity_id: sensor.gw1100a_rain_rate
        below: 0.1
        for: "02:00:00"
        id: regen_vorbei
      - trigger: numeric_state
        entity_id: sensor.green_cruiser_battery_level_2
        above: 95
        id: akku_voll
    actions:
      - choose:
          - conditions:
              - condition: state
                entity_id: input_boolean.mahroboter_spontan_akti
                state: "off"
              - condition: or
                conditions:
                  - condition: trigger
                    id: zeit_start
                  - condition: trigger
                    id: regen_vorbei
                  - condition: trigger
                    id: akku_voll
              - condition: time
                after: input_datetime.mahroboter_startzeit
                before: input_datetime.mahroboter_endzeit
              - condition: numeric_state
                entity_id: sensor.gw1100a_rain_rate
                below: 0.1
              - condition: state
                entity_id: lawn_mower.green_cruiser_lawn_mower
                state: docked
              - condition: or
                conditions:
                  - condition: not
                    conditions:
                      - condition: trigger
                        id: akku_voll
                  - condition: state
                    entity_id: input_boolean.mahroboter_hat_gemaeht
                    state: "on"
            sequence:
              - action: button.press
                target:
                  entity_id: button.green_cruiser_start_mowing_now
              - action: input_boolean.turn_on
                target:
                  entity_id: input_boolean.mahroboter_hat_gemaeht
          - conditions:
              - condition: state
                entity_id: input_boolean.mahroboter_spontan_akti
                state: "off"
              - condition: or
                conditions:
                  - condition: trigger
                    id: zeit_ende
                  - condition: trigger
                    id: regen_start
            sequence:
              - action: button.press
                target:
                  entity_id: button.green_cruiser_return_to_dock_2
              - condition: trigger
                id: zeit_ende
              - action: input_boolean.turn_off
                target:
                  entity_id: input_boolean.mahroboter_hat_gemaeht
    mode: restart
    

    🧠 Besonderheit

    Die Automation nutzt gezielt:

    • Trigger-ID (zeit_start, regen_vorbei, akku_voll)
    • Zustandslogik (mahroboter_hat_gemaeht)

    👉 Dadurch entsteht eine sehr präzise Steuerung ohne Chaoszustände

    2. ⚡ Spontan mähen für Dauer

    Manchmal will man nicht auf Zeitfenster warten und den Mäher spontan starten lassen – z. B. an einem sonnigen Tag zwischendurch.

    Trigger:

    • ▶️ Spontanmodus wird aktiviert
    • 🔋 Akku ist voll

    Ablauf:

    • 🚀 Start aus dem Dock
    • 📅 Berechnung der Endzeit
    • ⏱ Lauf für definierte Dauer
    • 🏠 Rückkehr ins Dock
    • 🔁 Neustart nach Laden wenn nötig
    alias: "Mähroboter: Spontan mähen für Dauer"
    description: ""
    triggers:
      - trigger: state
        entity_id: input_boolean.mahroboter_spontan_akti
        to: "on"
        id: start
      - trigger: numeric_state
        entity_id: sensor.green_cruiser_battery_level_2
        above: 95
        id: akku_voll
    actions:
      - choose:
          - conditions:
              - condition: trigger
                id: start
              - condition: state
                entity_id: lawn_mower.green_cruiser_lawn_mower
                state: docked
            sequence:
              - action: button.press
                target:
                  entity_id: button.green_cruiser_start_mowing_now
              - action: input_boolean.turn_on
                target:
                  entity_id: input_boolean.mahroboter_hat_gemaeht
              - action: input_datetime.set_datetime
                target:
                  entity_id: input_datetime.mahroboter_ende_spontan
                data:
                  datetime: >
                    {{ (now() +
                    timedelta(minutes=states('input_number.mahroboter_spontan_dauer')
                    | int)).strftime('%Y-%m-%d %H:%M:%S') }}
              - delay:
                  minutes: "{{ states('input_number.mahroboter_spontan_dauer') | int }}"
              - action: button.press
                target:
                  entity_id: button.green_cruiser_return_to_dock_2
              - action: input_boolean.turn_off
                target:
                  entity_id: input_boolean.mahroboter_spontan_akti
          - conditions:
              - condition: trigger
                id: akku_voll
              - condition: state
                entity_id: input_boolean.mahroboter_spontan_akti
                state: "on"
              - condition: state
                entity_id: input_boolean.mahroboter_hat_gemaeht
                state: "on"
              - condition: state
                entity_id: lawn_mower.green_cruiser_lawn_mower
                state: docked
              - condition: template
                value_template: >
                  {{ now() < states('input_datetime.mahroboter_ende_spontan') |
                  as_datetime }}
            sequence:
              - action: button.press
                target:
                  entity_id: button.green_cruiser_start_mowing_now
        default:
          - condition: trigger
            id: start
          - action: input_boolean.turn_off
            target:
              entity_id: input_boolean.mahroboter_spontan_akti
    mode: restart
    

    🧠 Besonderheit

    👉 Diese Automation funktioniert unabhängig vom Zeitfenster

    → daher war eine zusätzliche Schutzlogik notwendig

    3. 🛡 Unerlaubten Start blockieren

    Manche Mäher starten auch mal spontan oder ungewollt. Diese Automatisierung verhindert genau das – auch unter realen Bedingungen mit verzögerten Zustandswechseln und Cloud-abhängigem Verhalten.

    Problem (genaue Beschreibung am Ende vom Beitrag):

    Der Gardena Zeitplan darf:

    • aktiviert bleiben (für Ladeverhalten)
    • startet aber trotzdem eigenständig

    Trigger:

    • ⚡ Zustand wechselt auf „mowing“

    Bedingungen:

    • 🚫 Spontanmodus aus
    • ⏰ außerhalb Zeitfenster

    Ablauf:

    • ⏳ kurze Wartezeit, bis der Mäher in einem stabilen Zustand ist
    • 🔁 Stop-Befehl wird gezielt und mehrfach gesende
    • 🧠 robuste Logik, die nicht von einem einzelnen Zustand abhängig ist
    • 🏠 Rückfahrt zum Dock wird aktiv erzwungen

    Im praktischen Einsatz hat sich gezeigt, dass der Mähroboter nach dem Start nicht sofort auf Steuerbefehle reagiert und intern verschiedene Zwischenzustände durchläuft (z. B. Start, Bewegung, Positionierung).

    Daher wurde die Automatisierung bewusst so aufgebaut, dass:

    • ⏱ genügend Zeit für stabile Zustandswechsel eingeplant wird
    • 🔁 Stop-Befehle wiederholt gesendet werden (Retry-Mechanismus)
    • 📡 auch Cloud- oder Integrationsverzögerungen berücksichtigt werden
    • 🔍 Debug-Informationen zur Analyse ausgegeben werde

    👉 Dadurch wird sichergestellt, dass der Mähroboter auch bei Änderungen durch Firmware- oder Integrations-Updates zuverlässig gestoppt wird.

    alias: "Mähroboter: Unerlaubten Start blockieren mit Notifications"
    description: ""
    triggers:
      - trigger: state
        entity_id: lawn_mower.green_cruiser_lawn_mower
        to: mowing
    conditions:
      - condition: state
        entity_id: input_boolean.mahroboter_spontan_akti
        state: "off"
      - condition: template
        value_template: >
          {% set now_time = now().time() %} {% set start =
          strptime(states('input_datetime.mahroboter_startzeit'), '%H:%M:%S').time()
          %} {% set end = strptime(states('input_datetime.mahroboter_endzeit'),
          '%H:%M:%S').time() %} {{ now_time < start or now_time > end }}
    actions:
      - data:
          level: warning
          message: >
            MC: Fremdstart erkannt → adaptive Prüfung startet State={{
            states('lawn_mower.green_cruiser_lawn_mower') }}, Time={{ now() }}
        action: system_log.write
      - data:
          title: Achtung - Mähroboter unerlaubter Start
          message: >
            Der Mähroboter hat außerhalb der erlaubten Zeit gestartet ({{
            now().strftime('%H:%M') }} Uhr).
          target: [email protected]
        action: notify.kottlowski_gmail_com
      - repeat:
          while:
            - condition: template
              value_template: >
                {{ states('lawn_mower.green_cruiser_lawn_mower') not in ['docked',
                'charging', 'returning'] }}
            - condition: template
              value_template: |
                {{ repeat.index <= 6 }}
          sequence:
            - target:
                entity_id: button.green_cruiser_return_to_dock_2
              action: button.press
            - data:
                level: warning
                message: >
                  MC: STOP Versuch {{ repeat.index }} State={{
                  states('lawn_mower.green_cruiser_lawn_mower') }}, Time={{ now() }}
              action: system_log.write
            - wait_template: >
                {{ states('lawn_mower.green_cruiser_lawn_mower') in ['docked',
                'charging', 'returning'] }}
              timeout: "00:00:15"
      - wait_template: >
          {{ states('lawn_mower.green_cruiser_lawn_mower') in ['docked', 'charging'] }}
        timeout: "00:05:00"
        continue_on_timeout: true
      - choose:
          - conditions:
              - condition: template
                value_template: >
                  {{ states('lawn_mower.green_cruiser_lawn_mower') in ['docked',
                  'charging'] }}
            sequence:
              - data:
                  level: info
                  message: |
                    MC: Roboter erfolgreich zurück zur Basis Time={{ now() }}
                action: system_log.write
        default:
          - data:
              level: error
              message: |
                MC: FEHLER – Roboter konnte nicht gestoppt werden Time={{ now() }}
            action: system_log.write
          - data:
              title: Achtung - Mähroboter konnte nicht gestoppt werden!
              message: >
                Der Mähroboter mäht weiterhin außerhalb der erlaubten Zeit und
                konnte nicht automatisch gestoppt werden!
              target: [email protected]
            action: notify.kottlowski_gmail_com
    mode: restart
    

    🧠 Ergebnis

    👉 Der Zeitplan bleibt aktiv
    👉 das Ladeverhalten bleibt optimal
    👉 aber jede unerwünschte Bewegung wird sofort gestoppt

    4. 🔄 Spontan-Flag zurücksetzen

    Nach der praktischen Nutzung stellte sich heraus, dass input_boolean.mahroboter_spontan_akti in bestimmten Situationen nicht automatisch zurückgesetzt wird – zum Beispiel wenn der Mähroboter beim Aktivieren des Spontanmodus nicht docked war, oder wenn Home Assistant während einer laufenden Session neu gestartet wurde.

    Das Flag bleibt dann dauerhaft ON und blockiert die automatische Zeitsteuerung, weil diese spontan_akti = off als erste Bedingung prüft.

    Trigger:

    • 🏠 Roboter wechselt zu „docked“ oder „charging“

    Bedingungen:

    • ▶️ spontan_akti ist ON
    • ⏱ Die geplante Endzeit (mahroboter_spontan_ende) ist bereits verstrichen

    Ablauf:

    • ⏳ 30 Sekunden warten (State stabilisieren)
    • 🔴 spontan_akti = OFF setzen

    👉 Wichtig: Diese Automation greift nicht während einer aktiven laufenden Session (solange die Zeit noch nicht abgelaufen ist) – der automatische Neustart nach dem Laden funktioniert dadurch weiterhin korrekt.

    alias: "Mähroboter: Spontan-Flag zurücksetzen"
    description: >-
      Setzt spontan_akti zurück wenn Roboter andockt und die geplante Zeit
      abgelaufen ist
    triggers:
      - trigger: state
        entity_id: lawn_mower.green_cruiser_lawn_mower
        to:
          - docked
          - charging
    conditions:
      - condition: state
        entity_id: input_boolean.mahroboter_spontan_akti
        state: "on"
      - condition: template
        value_template: >
          {{ now() >= states('input_datetime.mahroboter_ende_spontan') | as_datetime
          }}
    actions:
      - delay: "00:00:30"
      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.mahroboter_spontan_akti
    mode: restart
    

    🧠 Besonderheit

    Dieses Sicherheitsnetz verhindert, dass ein hängendes Flag die gesamte automatische Steuerung dauerhaft blockiert – unabhängig davon, warum die Hauptautomation die Rücksetzung verpasst hat (HA-Neustart, mode:restart-Unterbrechung, unterbrochene Sequenz).


    📊 Die Steuerungsoberfläche (UI) für den Mähroboter

    Mähroboters

    Um die Steuerung einfach und intuitiv zu halten, habe ich in Home Assistant eine übersichtliche View aufgebaut.

    • 🕒 Zeit-Fenster Steuerung
    • 🌦 Wetterfreigabe
    • ⚙️ Automationsstatus
    • ▶️ Manueller Start
    • 📊 Status & Batterie
    • 🎮 Direkte Steuerung

    Der Aufbau nutzt Custom Button Cards, die das UI optisch ansprechend und übersichtlich gestalten.

    
          - type: grid
            cards:
              - type: heading
                heading: Rasenmäher Start - & Endzeiten
                heading_style: title
                icon: mdi:robot-mower
              - square: false
                type: grid
                columns: 2
                grid_options:
                  rows: 1
                cards:
                  - type: custom:button-card
                    entity: input_datetime.mahroboter_startzeit
                    icon: mdi:clock-start
                    show_name: false
                    show_state: true
                    show_icon: true
                    tap_action:
                      action: more-info
                    layout: vertical
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 4px
                        - border-radius: 10px
                        - border: '1px solid #555'
                        - background: var(--card-background-color)
                      grid:
                        - grid-template-areas: '"i" "s"'
                        - grid-template-rows: 1fr auto
                        - justify-items: center
                      icon:
                        - width: 24px
                        - height: 24px
                      state:
                        - font-size: 14px
                        - font-weight: bold
                  - type: custom:button-card
                    entity: input_datetime.mahroboter_endzeit
                    icon: mdi:clock-end
                    show_name: false
                    show_state: true
                    show_icon: true
                    tap_action:
                      action: more-info
                    layout: vertical
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 4px
                        - border-radius: 10px
                        - border: '1px solid #555'
                        - background: var(--card-background-color)
                      grid:
                        - grid-template-areas: '"i" "s"'
                        - grid-template-rows: 1fr auto
                        - justify-items: center
                      icon:
                        - width: 24px
                        - height: 24px
                      state:
                        - font-size: 14px
                        - font-weight: bold
              - type: heading
                heading_style: title
                icon: ''
              - type: heading
                heading: Rasenmäher aktivieren
                heading_style: title
                icon: mdi:robot-mower
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: binary_sensor.maehroboter_regen_ok
                    aspect_ratio: 3/1
                    size: 22px
                    name: Wetterfreigabe
                    show_name: true
                    show_state: false
                    icon: |
                      [[[
                        const s = states['binary_sensor.mahroboter_regen_ok']?.state;
                        return s === 'on'
                          ? 'mdi:weather-sunny'
                          : 'mdi:weather-rainy';
                      ]]]
                    tap_action:
                      action: none
                    hold_action:
                      action: none
                    double_tap_action:
                      action: none
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                        - background: |
                            [[[
                              const s = states['binary_sensor.mahroboter_regen_ok']?.state;
                              if (s === 'on') return '#2e7d32';   // grün → Freigabe erteilt
                              return '#c62828';                  // rot → gesperrt (Regen)
                            ]]]
                      name:
                        - font-size: 14px
                        - color: '#ffffff'
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: '#ffffff'
                  - type: custom:button-card
                    entity: >-
                      automation.mahroboter_intelligente_regen_akku_und_zeitsteuerung
                    icon: mdi:robot-mower-outline
                    show_name: false
                    show_state: true
                    layout: vertical
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: '1px solid #555'
                      grid:
                        - grid-template-areas: '"i" "s"'
                        - grid-template-rows: 1fr auto
                        - justify-items: center
                      icon:
                        - width: 24px
                        - height: 24px
                      state:
                        - font-size: 14px
                        - font-weight: bold
                    state:
                      - value: 'on'
                        styles:
                          card:
                            - background: '#2e7d32'
                            - border: '1px solid #ffffff'
                          icon:
                            - color: '#a5d6a7'
                          state:
                            - color: '#e8f5e9'
                      - value: 'off'
                        styles:
                          card:
                            - background: '#c62828'
                            - border: '1px solid #ffffff'
                          icon:
                            - color: '#ffcdd2'
                          state:
                            - color: '#ffebee'
                columns: 2
                grid_options:
                  columns: 12
                  rows: 1
              - type: heading
                heading_style: title
                icon: ''
              - type: heading
                heading: Rasenmäher manueller Start
                heading_style: title
                icon: mdi:robot-mower
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: input_boolean.mahroboter_spontan_akti
                    aspect_ratio: 3/1
                    size: 22px
                    name: Start jetzt
                    icon: mdi:play-circle-outline
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - cursor: default
                      name:
                        - font-size: 14px
                        - font-weight: 600
                      icon:
                        - width: 22px
                        - height: 22px
                  - type: custom:button-card
                    name: Dauer
                    icon: mdi:timer
                    show_name: false
                    entity: input_number.mahroboter_spontan_dauer
                    tap_action:
                      action: call-service
                      service: input_number.increment
                      target:
                        entity_id: input_number.mahroboter_spontan_dauer
                    hold_action:
                      action: call-service
                      service: input_number.decrement
                      target:
                        entity_id: input_number.mahroboter_spontan_dauer
                    double_tap_action:
                      action: more-info
                    show_state: true
                    state_display: |
                      [[[
                        const v = Number(entity.state);
                        return `${v} min`;
                      ]]]
                    aspect_ratio: 3/1
                    size: 22px
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - border: 1px solid
                        - background: |
                            [[[
                              const v = Number(entity.state);
                              if (v === 0) return '#424242';       // aus / deaktiviert
                              if (v <= 120) return '#2e7d32';        // grün (kurz, sicher)
                              if (v <= 240) return '#f9a825';       // gelb (normal)
                              return '#c62828';                    // rot (lang)
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: '#cccccc'
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: '#bdbdbd'
                      state:
                        - font-size: 14px
                        - font-weight: bold
                        - color: '#ffffff'
                  - type: custom:button-card
                    name: Läuft bis
                    icon: mdi:clock-end
                    show_state: true
                    show_icon: false
                    state_display: |
                      [[[
                        const e = states['input_datetime.mahroboter_spontan_ende'];
                        if (!e || !e.state) return "-";
    
                        const d = new Date(e.state);
                        if (isNaN(d)) return "-";
    
                        return d.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
                      ]]]
                    styles:
                      card:
                        - height: 60px
                        - border-radius: 10px
                        - border: |
                            [[[
                              const e = states['input_datetime.mahroboter_spontan_ende'];
                              if (!e || !e.state) return 'none';
    
                              const end = new Date(e.state);
                              const now = new Date();
    
                              return (end > now) ? '1px solid white' : 'none';
                            ]]]
                        - background: |
                            [[[
                              const e = states['input_datetime.mahroboter_spontan_ende'];
                              if (!e || !e.state) return '#424242';
    
                              const end = new Date(e.state);
                              const now = new Date();
    
                              return (end > now) ? '#2e7d32' : '#424242';
                            ]]]
                      name:
                        - font-size: 14px
                        - font-weight: 600
                        - color: |
                            [[[
                              const e = states['input_datetime.mahroboter_spontan_ende'];
                              if (!e || !e.state) return '#cccccc';
    
                              const end = new Date(e.state);
                              const now = new Date();
    
                              return (end > now) ? 'white' : '#cccccc';
                            ]]]
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: |
                            [[[
                              const e = states['input_datetime.mahroboter_spontan_ende'];
                              if (!e || !e.state) return '#bdbdbd';
    
                              const end = new Date(e.state);
                              const now = new Date();
    
                              return (end > now) ? 'white' : '#bdbdbd';
                            ]]]
                      state:
                        - font-size: 16px
                        - font-weight: bold
                        - color: white
                  - type: custom:button-card
                    show_name: false
                    show_icon: false
                    show_state: false
                    styles:
                      card:
                        - height: 60px
                        - background: none
                        - box-shadow: none
                        - border: none
                columns: 3
                grid_options:
                  rows: 1
              - type: heading
                heading_style: title
                icon: ''
              - type: heading
                heading: Rasenmäher Status
                heading_style: title
                icon: mdi:robot-mower
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: lawn_mower.green_cruiser_lawn_mower
                    name: Übersicht
                    icon: mdi:robot-mower
                    show_state: true
                    aspect_ratio: 3/1
                    size: 22px
                    tap_action:
                      action: more-info
                    hold_action:
                      action: none
                    double_tap_action:
                      action: none
                    state:
                      - value: mowing
                        styles:
                          card:
                            - background: '#2e7d32'
                            - border: 2px solid "#2e7d32"
                          icon:
                            - color: '#ffffff'
                          name:
                            - color: '#ffffff'
                          state:
                            - color: '#e8f5e9'
                      - value: returning
                        styles:
                          card:
                            - background: '#ef6c00'
                            - border: 2px solid "#ef6c00"
                          icon:
                            - color: '#ffffff'
                          name:
                            - color: '#ffffff'
                          state:
                            - color: '#fff3e0'
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: '"i n" "i s"'
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: var(--secondary-text-color)
                      name:
                        - font-size: 14px
                        - font-weight: 600
                      state:
                        - font-size: 12px
                        - opacity: 0.8
                  - type: custom:button-card
                    entity: sensor.green_cruiser_battery_level_2
                    name: Batterie
                    icon: mdi:battery
                    show_state: true
                    aspect_ratio: 3/1
                    size: 22px
                    tap_action:
                      action: more-info
                    hold_action:
                      action: none
                    double_tap_action:
                      action: none
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: '"i n" "i s"'
                        - grid-template-columns: 32px auto
                        - grid-template-rows: auto auto
                        - align-items: center
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                      name:
                        - font-size: 14px
                        - font-weight: 600
                      state:
                        - font-size: 12px
                        - opacity: 0.75
                columns: 2
              - type: heading
                heading: Rasenmäher manuell steuern
                heading_style: title
                icon: mdi:robot-mower
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: button.green_cruiser_start_mowing_now
                    name: Start Work
                    icon: mdi:home-export-outline
                    show_state: false
                    aspect_ratio: 3/1
                    size: 22px
                    tap_action:
                      action: call-service
                      service: button.press
                      target:
                        entity_id: button.green_cruiser_start_mowing_now
                    hold_action:
                      action: none
                    double_tap_action:
                      action: none
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: '"i n"'
                        - grid-template-columns: 32px auto
                        - align-items: center
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: '#66bb6a'
                      name:
                        - font-size: 14px
                        - font-weight: 600
                  - type: custom:button-card
                    entity: button.green_cruiser_return_to_dock_2
                    name: Back Home
                    icon: mdi:home-import-outline
                    show_state: false
                    aspect_ratio: 3/1
                    size: 22px
                    tap_action:
                      action: call-service
                      service: button.press
                      target:
                        entity_id: button.green_cruiser_return_to_dock_2
                    hold_action:
                      action: none
                    double_tap_action:
                      action: none
                    styles:
                      card:
                        - height: 60px
                        - padding: 6px 10px
                        - border-radius: 10px
                        - background: var(--ha-card-background)
                        - border: 1px solid var(--divider-color)
                        - cursor: pointer
                      grid:
                        - grid-template-areas: '"i n"'
                        - grid-template-columns: 32px auto
                        - align-items: center
                        - column-gap: 8px
                      icon:
                        - width: 22px
                        - height: 22px
                        - color: '#e57373'
                      name:
                        - font-size: 14px
                        - font-weight: 600
                columns: 2

    ✅ Fazit und Ausblick

    Mit diesen Automatisierungen steuere ich meinen Mähroboter effizient, wetterabhängig und flexibel in Home Assistant.

    Die Kombination aus Zeitsteuerung, Regenwettererkennung, Akkustatus und manueller Spontansteuerung sorgt für maximale Automatisierung mit Benutzerkomfort.

    Die Helper erlauben individuelle Anpassungen ohne Codeänderung und die UI macht die Bedienung kinderleicht.

    Ich hoffe, dieser umfassende Einblick in meine Mähroboter-Steuerung zeigt dir, wie smart und flexibel man selbst vermeintlich simple Geräte in Home Assistant automatisieren kann!


    ⚠️ Problem: Der Gardena Zeitplan als „unsichtbarer Gegenspieler“

    Im Laufe der Umsetzung bin ich auf ein zentrales Problem gestoßen, das vermutlich viele Gardena-Nutzer kennen: Der in der App konfigurierte Zeitplan übernimmt nicht nur die Steuerung des Mähzeitraums, sondern beeinflusst auch das interne Verhalten des Roboters deutlich stärker als zunächst gedacht.

    Wird der Zeitplan aktiv genutzt, sorgt er zwar für ein stabiles Ladeverhalten, jedoch startet der Mähroboter automatisch zu den im Plan definierten Zeiten – unabhängig davon, ob Home Assistant gerade andere Bedingungen vorgibt.

    Eine einfache Lösung wie das „Pausieren“ des Zeitplans führt dabei nicht zum Ziel, da dieser Zustand von der Cloud bzw. vom Gerät selbst jederzeit wieder aufgehoben werden kann. In der Praxis bedeutet das: Der Mähroboter kann plötzlich wieder eigenständig starten, z. B. früh am Morgen, obwohl dies im Smart Home so gar nicht vorgesehen ist.

    Auf der anderen Seite führt ein vollständiges Deaktivieren oder Entfernen des Zeitplans häufig dazu, dass der Roboter nicht mehr zuverlässig vollständig lädt, da die interne Energiemanagement-Logik ebenfalls daran gekoppelt ist.

    👉 Es entsteht also ein klassischer Zielkonflikt:

    • ✅ Zeitplan aktiv → stabiles Laden, aber ungewollte Starts
    • ❌ Zeitplan aus → volle Kontrolle über Home Assistant, aber suboptimales Ladeverhalten

    Die Lösung dieses Problems ist kein simples Umschalten, sondern eine gezielte Kombination aus beiden Welten:

    • ✅ Der Zeitplan bleibt aktiv (für optimales Ladeverhalten)
    • ✅ Home Assistant übernimmt die eigentliche Steuerung
    • 🛡 Unerwünschte Starts werden aktiv erkannt und sofort korrigiert

    Genau aus diesem Grund ist die dritte Automatisierung „Unerlaubten Start blockieren“ ein essenzieller Bestandteil der Gesamtarchitektur. Sie fungiert als Schutzmechanismus, der sicherstellt, dass ausschließlich Home Assistant bestimmt, wann der Roboter tatsächlich mäht.

    Intelligentes Energiemanagement für Bosch Wärmepumpe mit Home Assistant

    In diesem Beitrag teile ich meine Erfahrungen und die Umsetzung eines Energy Managers in Home Assistant (HA) für meine Bosch Wärmepumpe Compress 5800i AW 12 ORE‑T in Kombination mit einer PV‑Anlage und einer Tesla Powerwall.

    🎉Energiemanagement – Motivation

    Bosch bietet einen kostenpflichtigen Energiemanager an, der die Wärmepumpe abhängig vom PV-Überschuss steuert:

    Viel PV-Strom-Überschuss → Wärmepumpe läuft intensiver
    Kein PV-Überschuss → Wärmepumpe im Normalmodus

    Ich wollte das in Home Assistant selbst umsetzen: Ein umfassendes System, das PV-Überschuss, Hausverbrauch und Powerwall-Ladestatus intelligent auswertet und steuert. Dabei sollten auch Temperaturbedingungen berücksichtigt werden. Das System sollte flexibel über Schalter und Zahlen steuerbar sein und automatisch die Wärmepumpe je nach Restüberschuss regeln.

    🧰Ausgangslage

    Seit etwa einem Jahr habe ich die Bosch Wärmepumpe und eine PV-Anlage installiert. Die PV-Anlage und die Tesla Powerwall ließen sich problemlos in HA integrieren (z.B. mit der „SMA Solar“ und der “Tesla Powerwall” Integration). Die Wärmepumpe von Bosch war allerdings schwieriger: Bosch stellt keine offizielle Schnittstelle für die über 150 Entitäten der Wärmepumpe zur Verfügung.

    👑Lösung: EMS-Bus-Gateway von BBQKees Electronics

    Nach längerer Recherche bin ich auf das EMS-Bus-Gateway von BBQKees Electronics gestoßen. Dieses Gateway bietet eine umfangreiche Knowledge Base und lässt sich gut über Matter in HA integrieren. So habe ich endlich Zugriff auf die Wärmepumpen-Daten bekommen.

    📟Dashboard

    Mein erstes Ziel war ein Dashboard mit den wichtigsten Wärmepumpen-Daten. Dabei hat mir die Webseite bosch-buderus-wp.github.io sehr geholfen.

    Hier der zugehörige Auszug aus der RAW-Konfigurationsdatei:

    YAML
      - type: custom:grid-layout
        path: waermepumpe
        title: Wärmepumpe
        theme: Nordic
        cards:
          - square: false
            type: grid
            cards:
              - square: false
                type: grid
                cards:
                  - graph: line
                    type: sensor
                    entity: sensor.boiler_burner_current_power
                    detail: 1
                    name: Modulation
                    icon: mdi:fan
                  - graph: line
                    type: sensor
                    entity: sensor.boiler_current_flow_temperature
                    detail: 1
                    name: Vorlauf
                    icon: mdi:thermometer-lines
                  - graph: line
                    type: sensor
                    entity: sensor.boiler_return_temperature
                    detail: 1
                    name: Rücklauf
                    icon: mdi:thermometer-lines
                  - graph: line
                    type: sensor
                    entity: sensor.shellyhtg3_543204575c94_temperature
                    detail: 1
                    name: Innentemperatur
                    icon: mdi:home-thermometer-outline
                  - graph: line
                    type: sensor
                    entity: sensor.boiler_air_inlet_temperature_tl2
                    detail: 1
                    name: Außentemperatur
                    icon: mdi:home-thermometer-outline
                    limits:
                      min: 0
                      max: 10
                  - type: gauge
                    unit: kW
                    name: WP Gesamt Extern
                    needle: true
                    grid_options:
                      columns: 6
                      rows: auto
                    severity:
                      green: 0
                      yellow: 10
                      red: 25
                    entity: sensor.warmepumpen_verbrauch_gesamt_taglich
                    max: 40
                  - type: gauge
                    entity: sensor.ems_verbrauchte_energie_taglich
                    unit: kW
                    name: WP Heizung
                    min: 0
                    needle: true
                    grid_options:
                      columns: 6
                      rows: auto
                    severity:
                      green: 0
                      yellow: 10
                      red: 25
                    max: 40
                  - type: gauge
                    entity: sensor.ems_erzeugte_energie_taglich
                    unit: kW
                    min: 0
                    name: Energieabgabe
                    needle: true
                    max: 100
                    severity:
                      green: 0
                      yellow: 100
                      red: 100
                  - type: gauge
                    entity: sensor.warmepumpe_cop
                    min: 0
                    name: COP
                    needle: true
                    unit: ' '
                    max: 20
                  - type: gauge
                    entity: sensor.starts_pro_kwh
                    min: 0
                    name: Starts pro kWh
                    severity:
                      green: 0
                      yellow: 5
                      red: 8
                    max: 10
                columns: 5
            columns: 1
          - type: history-graph
            entities:
              - entity: sensor.boiler_compressor_activity
                name: ' '
            hours_to_show: 24
            grid_options:
              columns: full
              rows: auto
            logarithmic_scale: false
            title: Heute
          - chart_type: bar
            period: hour
            type: statistics-graph
            entities:
              - sensor.ems_erzeugte_energie_taglich
              - sensor.ems_verbrauchte_energie_taglich
            stat_types:
              - change
            days_to_show: 1
        visible:
          - user: 9c3a30d6645649c386acf6485e8d39e3
        badges:
          - type: entity
            show_name: true
            show_state: true
            show_icon: true
            entity: sensor.boiler_compressor_activity
            name: Heizen
            icon: mdi:heat-pump
          - type: entity
            show_name: true
            show_state: true
            show_icon: true
            entity: select.boiler_aux_heater_mode
            name: Modus
            icon: mdi:auto-mode
        icon: mdi:heat-pump
        subview: true
      - type: sections
        max_columns: 3
        title: System
        path: system
        icon: mdi:archive-cog
        sections:
          - type: grid
            cards:
              - type: heading
                heading: System
                heading_style: title
              - type: tile
                entity: update.home_assistant_operating_system_update
                features_position: bottom
                vertical: false
                name: Operating System
              - type: tile
                entity: sensor.home_assistant_operating_system_newest_version
                features_position: bottom
                vertical: false
                name: Neueste Version
                icon: mdi:cogs
              - type: tile
                features_position: bottom
                vertical: false
                color: yellow
                tap_action:
                  action: toggle
                entity: button.ignore_all_issues
                name: Fehler löschen
              - type: tile
                entity: sensor.active_issues
              - type: tile
                entity: sensor.ignored_issues
              - type: tile
                entity: sensor.issues
              - type: tile
                features_position: bottom
                vertical: false
                name: 'Neu starten '
                color: red
                tap_action:
                  action: toggle
                entity: button.homeassistant_restart
              - type: tile
                features_position: bottom
                vertical: false
                entity: button.homeassistant_reload
                name: 'Neu laden '
                color: red
                tap_action:
                  action: toggle
          - type: grid
            cards:
              - type: heading
                heading: FRITZ!Box
                heading_style: title
              - type: tile
                entity: update.fritz_box_7530_fritz_os
                features_position: bottom
                vertical: false
                name: Firmware
              - type: tile
                entity: binary_sensor.fritz_box_7530_verbindung
                features_position: bottom
                vertical: false
                name: Verbunden
              - type: tile
                entity: sensor.fritz_box_7530_link_download_durchsatz
                features_position: bottom
                vertical: false
                name: Download Rate
              - type: tile
                entity: sensor.fritz_box_7530_link_upload_durchsatz
                features_position: bottom
                vertical: false
                name: Upload Rate
              - type: tile
                features_position: bottom
                vertical: false
                name: 'Neu starten '
                color: red
                tap_action:
                  action: toggle
                entity: button.fritz_box_7530_neu_starten
              - type: tile
                features_position: bottom
                vertical: false
                entity: button.fritz_box_7530_neu_verbinden
                name: 'Neu verbinden '
                color: red
                tap_action:
                  action: toggle
              - type: tile
                features_position: bottom
                vertical: false
                color: yellow
                tap_action:
                  action: toggle
                entity: button.fritz_box_7530_firmware_update
                name: 'Firmware Update '
              - type: tile
                features_position: bottom
                vertical: false
                color: yellow
                tap_action:
                  action: toggle
                entity: button.fritz_box_7530_aufraumen
                name: 'Aufräumen '
          - type: grid
            cards:
              - type: heading
                icon: mdi:fridge
                heading: NAS-Server
                heading_style: title
              - type: tile
                entity: update.diskstation_dsm_update
                features_position: bottom
                vertical: false
                name: DSM Update
              - type: tile
                entity: sensor.diskstation_temperatur
                features_position: bottom
                vertical: false
                name: Temperatur
              - type: tile
                features_position: bottom
                vertical: false
                color: red
                tap_action:
                  action: toggle
                entity: button.diskstation_reboot
                name: Reboot
              - type: tile
                features_position: bottom
                vertical: false
                color: red
                tap_action:
                  action: toggle
                entity: button.diskstation_shutdown
                name: Shutdown
              - type: gauge
                entity: sensor.diskstation_volume_1_belegter_speicherplatz
                max: 2.7
                name: Belegter Speicherplatz V1
                theme: Github Dark Theme
                grid_options:
                  columns: 6
                  rows: auto
                severity:
                  green: 0
                  yellow: 2
                  red: 2.4
              - type: gauge
                entity: sensor.diskstation_volume_2_belegter_speicherplatz
                max: 2.7
                name: Belegter Speicherplatz V2
                grid_options:
                  columns: 6
                  rows: auto
                severity:
                  green: 0
                  yellow: 2
                  red: 2.4
          - type: grid
            cards:
              - type: heading
                heading_style: title
                heading: Kamerabilder
              - show_name: true
                show_icon: true
                type: button
                name: Snapshots löschen
                icon: mdi:delete
                tap_action:
                  action: call-service
                  service: automation.trigger
                  service_data:
                    entity_id: automation.snapshots_sofort_loschen
                grid_options:
                  columns: 12
                  rows: 2
              - type: heading
                heading_style: title
                heading: Lichtsteuerung Urlaub
                grid_options:
                  columns: 6
                  rows: 1
              - type: markdown
                content: |
                  **Status:** {{ states('automation.zeitsteuerung_flur_zufall') }}
                text_only: true
                grid_options:
                  columns: 12
                  rows: auto
              - show_name: true
                show_icon: true
                type: button
                name: Automationen einschalten
                icon: mdi:power-cycle
                tap_action:
                  action: perform-action
                  target:
                    entity_id:
                      - automation.zeitsteuerung_lichterkette_garten
                      - automation.zeitsteuerung_schlafzimmer
                      - automation.zufall_steuerung_spitzboden
                      - automation.zeitsteuerung_flur_zufall
                      - automation.zufalls_steuerung_licht_wohnzimmer_schraenke
                      - automation.zufalls_steuerung_stehlampe_wz
                      - automation.zufall_steuerung_schreibtisch_buro_rene
                      - automation.zufall_steuerung_licht_treppenhaus
                  perform_action: automation.turn_on
                  data: {}
                show_state: false
                grid_options:
                  columns: 6
                  rows: 2
              - show_name: true
                show_icon: true
                type: button
                name: Automationen ausschalten
                icon: mdi:power-off
                tap_action:
                  action: perform-action
                  target:
                    entity_id:
                      - automation.zeitsteuerung_lichterkette_garten
                      - automation.zeitsteuerung_schlafzimmer
                      - automation.zufall_steuerung_spitzboden
                      - automation.zeitsteuerung_flur_zufall
                      - automation.zufalls_steuerung_licht_wohnzimmer_schraenke
                      - automation.zufalls_steuerung_stehlampe_wz
                      - automation.zufall_steuerung_schreibtisch_buro_rene
                      - automation.zufall_steuerung_licht_treppenhaus
                  perform_action: automation.turn_off
                  data:
                    stop_actions: true
          - type: grid
            cards:
              - type: heading
                heading_style: title
                heading: Backup
              - type: tile
                features_position: bottom
                vertical: false
                entity: sensor.backup_nachstes_geplantes_automatisches_backup
                name: Nächste auto. Backup
              - type: tile
                features_position: bottom
                vertical: false
                entity: sensor.backup_letztes_erfolgreiches_automatisches_backup
                name: Letztes auto. Backup
              - show_name: true
                show_icon: true
                type: button
                name: Voll-Backup starten
                icon: mdi:backup-restore
                tap_action:
                  action: call-service
                  service: automation.trigger
                  service_data:
                    entity_id: automation.backup_manuell_komplett
              - show_name: true
                show_icon: true
                type: button
                name: Teil-Backup starten
                icon: mdi:backup-restore
                tap_action:
                  action: call-service
                  service: automation.trigger
                  service_data:
                    entity_id: automation.backup_manuell_teilbackup
          - type: grid
            cards:
              - type: heading
                heading_style: title
                heading: EMS-ESP
              - type: tile
                entity: sensor.system_ems_bus
              - type: tile
                entity: binary_sensor.system_status
              - type: tile
                entity: sensor.system_version
                features_position: bottom
                vertical: false
                name: Firmware
              - type: tile
                entity: sensor.system_uptime
                features_position: bottom
                vertical: false
                name: Uptime
              - type: tile
                entity: sensor.system_rx_fails
              - type: tile
                entity: sensor.system_rx_received
                features_position: bottom
                vertical: false
                name: RX Received
              - type: tile
                entity: sensor.system_tx_reads
              - type: tile
                entity: sensor.system_tx_fails
        theme: Nordic
        visible:
          - user: xxx
        cards: []
        subview: true
    

    🧱Bestandteile und Funktionen meines Energy Manager Packages

    1) Helpers / Controls – Was ist definiert und wofür?

    Im Package werden diverse Input‑Helper verwendet, um den Energy Manager flexibel steuerbar zu machen. Ich erkläre sie nacheinander:

    Input Booleans

    • input_boolean.energy_manager_enabled

      Beschreibt, ob der Energy Manager grundsätzlich aktiv ist. Wird verwendet als Hauptschalter: viele Automationen und Logik prüfen diesen Zustand.
    • input_boolean.energy_manager_temp_ok

      Signalisiert, ob die Außentemperatur (bzw. der Luftansaugtemperatur der WP) in einem Bereich liegt, in dem das Energiemanagement arbeiten soll. Das verhindert sinnlose Heizaktivitäten bei sehr niedrigen Außentemperaturen.
    • input_boolean.energy_manager_force_zero

      Ein Start‑/Initialisierungs‑Flag: beim Start von HA wird temporär gesetzt, damit die gemittelten Sensoren nicht wegen initialer fehlender Rohdaten fälschlicherweise Werte liefern. Wird automatisch wieder ausgeschaltet.
    • input_boolean.em_allow_aux

      Erlaubt die Nutzung des Aux‑Heaters (Nachheizung). Standardmäßig aus, kann manuell eingeschaltet werden, wenn Zusatzheizung erwünscht ist.
    • input_boolean.em_dhw_charging

      Kennzeichnet, ob eine gezielte Boiler‑/DHW‑Ladung via PV‑Überschuss aktuell aktiv ist.
    • input_boolean.em_safe_mode

      Ein Schutzschalter, um den Manager in einen sicheren Zustand zu versetzen (Stopschalter, z. B. während Reset oder Wartung).

    Input Select

    • input_select.energy_manager_mode

      Umschaltbar zwischen „Sommer“ und „Winter“. In Sommer wird der Energiemanager weitestgehend deaktiviert (z. B. keine Heizaktivitäten), in Winter wird er aktiviert und die zugehörigen Automationen eingeschaltet.

    Input Numbers

    Diese Zahlen erlauben die Feinabstimmung des Managers ohne Anpassung der YAML‑Logik:

    • pw_max_charge – max. gewünschte Ladeleistung für die Powerwall (kW).
    • energy_manager_temp_start / energy_manager_temp_stop – Temperatur‑Hysterese für energy_manager_temp_ok (Start‑ und Stop‑Schwellen).
    • em_flow_temp_min / em_flow_temp_max – zulässiger Bereich für die Vorlauftemperatur, in dem der Manager die WP steuert.
    • em_flow_temp_step_k – Schrittgröße (°C) für das schrittweise Erhöhen der ausgewählten Vorlauftemperatur (Ramping).
    • em_min_runtime – minimale Kompressor‑Laufzeit (Minuten) (in der aktuellen Config als Parameter geplant, wird aber nicht direkt in allen Automationen verwendet).
    • em_pv_threshold_start / em_pv_threshold_stop – Grenzwerte (kW) für bestimmte PV‑Aktionen (Start / Stop), z. B. für DHW‑Ladung (werden aber in weiteren Logiken die tatsächlichen Avail‑Schwellwerte verwendet).
    • em_dhw_max_temp / em_dhw_min_temp – maximale/minimale Boiler‑Temperatur für DHW‑Ladung und für Blockierung des Aux‑Heaters.
    • em_dhw_charge_min_duration – minimale Ladezeit für DHW‑Ladevorgänge (Minuten) zur Vermeidung zu kurzer Schaltzyklen.
    • em_avail_start / em_avail_stop – Schwellen zur Aktivierung/Deaktivierung der Wärmepumpen‑Regelung basierend auf verfügbarer überschüssiger Leistung (kW).

    2) Filter Sensoren (Glättung)

    Rohdaten der PV‑Anlage, des Hausverbrauchs und der Batterie können stark schwanken. Um „flattern“ (häufiges An‑/Abschalten) zu vermeiden, werden diese Werte geglättet:

    • sensor.em_pv_power_smoothed

      Quelle: sensor.my_home_solar_energie

      Filter: lowpass (time_constant: 2, precision: 2).

      Zweck: Glättet kurzzeitige PV‑Spitzen/-Tiefen. Niedriger Time Constant (2s) sorgt für relativ schnelle Reaktion bei gleichzeitigem Dämpfen von kurzen Ausschlägen.
    • sensor.em_home_load_smoothed

      Quelle: sensor.my_home_last_leistung

      Filter: time_simple_moving_average (window_size: 3).

      Zweck: Glättet den Hausverbrauch mit einfachem gleitendem Mittelwert über 3 Messpunkte (reduziert kurzzeitige Peaks).
    • sensor.em_powerwall_battery_power_smoothed

      Quelle: sensor.my_home_batterie_leistung

      Filter: lowpass (time_constant: 6).

      Zweck: Batterieströme können stark schwanken (z. B. Wechsel zwischen Laden/Entladen). Ein längeres Lowpass (6s) sorgt für stabile Erkennung der Ladeleistung.

    Warum Glätten? Weil Steuerentscheidungen (z. B. Vorlauf‑Temp erhöhen, DHW starten) bittere Konsequenzen haben können (häufiges Schalten, unnötige Laufzeiten). Glättung reduziert Noise und setzt auf „echte“ Trends.


    3) Template Sensors (Kernlogik)

    Die Template‑Sensoren bilden das Herz des EM: Sie berechnen korrigierte Werte, Überschuss, verfügbarer Anteil für die WP und daraus das Ziel für die Vorlauftemperatur.

    • em_pv_power_corrected (kW)

      Logik: Nimmt entweder den geglätteten PV‑Wert (sensor.em_pv_power_smoothed) oder 0, falls das Force‑Zero‑Flag aktiv ist (input_boolean.energy_manager_force_zero) oder der rohe Wert nahe 0 liegt. Damit schützt man vor falschen Messungen beim Systemstart und vermeidet winzige Rauschwerte.
    • em_home_load_corrected (kW)

      Entspricht dem obigen Prinzip für Hausverbrauch (sensor.em_home_load_smoothed). Ziel: saubere Basis für Überschussberechnung.
    • em_powerwall_charge_corrected (kW)

      Korrigiert die Powerwall‑Leistung: returns 0 wenn Force‑Zero gesetzt oder wenn die absolute Rohleistung < 0.02 kW (Schwellenwert). Ansonsten verwendet es den geglätteten Wert. Zusätzlich wird in em_pw_current_charge der absolute Wert genommen (positive Ladeleistung).
    • em_energy_surplus (kW)

      Überschuss = em_pv_power_corrected − em_home_load_corrected. Der zentrale Kennwert, der anzeigt, wieviel Leistung theoretisch zur Verfügung steht.
    • em_pw_max_charge (kW)

      Schlicht die Eingabe (input_number.pw_max_charge). Praktisch Referenzwert zur Begrenzung der Batterieladung durch andere Logiken (derzeit als Informativ verwendet).
    • em_pw_current_charge (kW)

      Absoluter (gegenseitiger) Ladewert der Batterie – wieviel gerade in die Powerwall fließt (kW). Wichtig beim Verteilen des Überschusses: wenn die Batterie schon lädt, reduziert sie den Überschuss, der der WP zur Verfügung steht.
    • em_available_for_heatpump (kW)

      Zentrale Logik: Verfügbarer Überschuss für die Wärmepumpe = max(0, surplus − current_battery_charge). Implementiert eine einfache Regel: Wird PV‑Überschuss erzeugt, nutzt zuerst die Batterie das Laden (wenn sie gerade lädt). Der Rest geht an die WP. Negative oder fehlende Überschüsse werden als 0 betrachtet. Es gibt ein implizites kleines Threshold‑Handling (pw_curr > 0.02 wird als „nutzt Batterie“ angenommen).
    • em_target_flow_temp (°C)

      Hier wird aus em_available_for_heatpump eine Zielvorlauftemperatur berechnet. Formel: linearer Interpolationsansatz zwischen em_flow_temp_min und em_flow_temp_max, basierend auf einem angenommenen maximalen Heizleistungsbudget (in der Config ist max_power = 6 kW als Referenz). Ratio = clamp(avail / max_power, 0, 1). Zieltemp = min_t + (max_t − min_t) * ratio. Ergebnis ist stufenlos und wird in 0.1°C gerundet.
    • em_current_flow_temp (°C)

      Liest die aktuelle WP‑Vorlauftemperatur (sensor.boiler_current_flow_temperature). Wird benötigt, um zu entscheiden, ob erhöht werden soll.
    • em_dhw_boiler_temp (°C)

      Aktuelle Boiler‑Temperatur (für Warmwasser). Grundlage für DHW‑Ladungsentscheidungen.
    • em_dhw_charge_state

      Ein einfacher on/off‑Sensor, abgeleitet vom input_boolean.em_dhw_charging, dient dem Dashboard und anderen Automationen als bequeme Sicht auf den DHW‑Lademodus.

    Diese Sensoren liefern zusammen die Basis, auf der Automationen entscheiden, ob die WP angehoben wird, ob Boiler geladen wird oder ob Aux‑Heater blockiert wird.


    4) Binary Sensor: wp_laufzeit_startbedingung

    Der Binary Sensor fasst mehrere Bedingungen zusammen und liefert ein klares „laufen / nicht laufen“ Signal, ob die WP laufen (im Sinne: die Vorlauftemperatur erhöht werden soll).

    Zustand (true), wenn:

    • Energy Manager ist aktiviert (energy_manager_enabled = on)
    • Temperatur‑Bedingung ist ok (energy_manager_temp_ok = on)
    • Safe Mode ist aus (em_safe_mode = off)
    • Verfügbare Überschussleistung (em_available_for_heatpump) ist größer als em_avail_start
    • Target Vorlauftemperatur ist deutlich (> current + hysteresis 0.2°C) über der aktuellen Vorlauftemperatur

    Der Sensor hat zahlreiche Attribute, z. B. em_enabled, avail_for_hp_kW, target_flow_temp_C, current_flow_temp_C und eine berechnete “would_set_to_C” Angabe die zeigt, auf welche Temperatur die WP gesetzt würde (current + step, mit Cap auf target und max). Außerdem liefert das Attribut “reason” eine hilfreiche Diagnosen‑Kette (z. B. warum gerade nicht gestartet wird), was fürs Troubleshooting sehr praktisch ist.


    5) Integration Sensor: wp_laufzeit_bei_uberschuss_heute_neu

    Hinweis: Nicht bestandteil des Packages!

    Dieser history_stats‑Sensor wertet die Laufzeit eines Binary‑Sensors aus (in meinem Fall
    binary_sensor.wp_laufzeit_startbedingung) und berechnet daraus, wie lange dieser heute bzw. im aktuellen Monat auf on stand.
    Das Ergebnis ist eine Laufzeit in Dezimalstunden (z. B. 1.75 = 1 h 45 min).

    Ich habe diesen Sensor in einer separaten Datei angelegt:

    /homeassistant/integration_sensors/laufzeit_wp.yaml

    mit folgendem Inhalt:

    YAML
    - platform: history_stats
      name: "WP Laufzeit bei Überschuss heute neu"
      unique_id: wp_laufzeit_bei_uberschuss_heute_neu
      entity_id: binary_sensor.wp_laufzeit_startbedingung
      state: "on"
      type: time
      start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
      end: "{{ now() }}"
    
    - platform: history_stats
      name: "WP Laufzeit bei Überschuss Monat"
      unique_id: wp_laufzeit_bei_uberschuss_monat
      entity_id: binary_sensor.wp_laufzeit_startbedingung
      state: "on"
      type: time
      start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) }}"
      end: "{{ now() }}"

    Damit Home Assistant diesen Sensor überhaupt kennt, habe ich die Datei zusätzlich in der configuration.yaml eingebunden:

    YAML
    # Allgemeine Sensoren (verschiedene Integrationen)
    sensor: !include_dir_merge_list integration_sensors/

    Erst dadurch wird  sensor.wp_laufzeit_bei_uberschuss_heute_neu erzeugt und kann anschließend im Dashboard (z. B. in der button-card) verwendet werden.
    Die JavaScript‑Logik in der Card dient dann nur noch dazu, den Stundenwert optisch als hh:mm:ss darzustellen (siehe Scrennshot unten)

    6) Automatisierungen – Funktionen im Detail

    Das Package enthält mehrere Automationen. Ich erläutere kurz jede einzelne samt Triggern, Bedingungen und Zweck.

    EM Temp OK Status aktualisieren

    Zweck: Setzt input_boolean.energy_manager_temp_ok abhängig von der gemessenen Lufteinlasstemperatur sensor.boiler_air_inlet_temperature_tl2 mit Debounce (60 s).

    Logik:

    • Auslöser: jede Änderung der inlet‑Temp.
    • Wenn Temp < energy_manager_temp_start → nach 60 s nochmals prüfen und dann input_boolean.energy_manager_temp_ok = on (Manager darf arbeiten).
    • Wenn Temp > energy_manager_temp_stop → nach 60 s prüfen und input_boolean.energy_manager_temp_ok = off (zu warm / nicht heizrelevant).

    Hinweis: Der Start/Stop ist hystereseartig gestaltet (separierte Start/Stop‑Schwellen), um Flattern zu vermeiden.

    EM: Vorlauftemperatur regeln

    Zweck: Erhöht stufenweise die ausgewählte Vorlauftemperatur (number.boiler_selected_flow_temperature) – nur Erhöhungen, kein aktives Absenken. Das vermeidet unnötige Absenk‑Schaltungen der WP und ermöglicht sanftes Ramping.

    Trigger: Änderung von em_available_for_heatpump, em_current_flow_temp oder den Eingangs‑Booleans.

    Voraussetzungen: Manager aktiv, Temp OK, Safe Mode off, avail > em_avail_start.

    Aktion:

    • Berechnet target_temp_raw und current_temp sowie step und max_t.
    • Wenn target > current → Kandidat = current + step; cappe auf target und max_t → setze number.boiler_selected_flow_temperature auf new_temp_capped.
    • Schreibt einen Logeintrag mit Änderung.

    Warum nur Erhöhungen? Absenken sollte – je nach WP – eher vom Gerät selbst oder durch separate Strategien übernommen werden, um kurze zyklische Belastungen zu vermeiden.

    EM: DHW Ladung steuern

    Zweck: Startet / Stoppt Boiler‑DHW‑Ladung basierend auf PV‑Überschuss, Boiler‑Temperatur, Hysterese und Mindestladezeit.

    Trigger: Änderungen an em_available_for_heatpump, Boiler‑Temp, Manager‑Flags.

    Logik:

    • Start: Wenn pv_avail > em_avail_start UND Boiler Temp < em_dhw_max_temp UND (noch nicht ladend oder bereits ladend, aber Mindestdauer erfüllt) → input_boolean.em_dhw_charging = on, switch.boiler_dhw_one_time_charging = on.
    • Stop: Wenn Boiler Temp >= em_dhw_max_temp ODER pv_avail < em_avail_stop UND Mindestladezeit erfüllt → stoppe DHW‑Ladung und setze Flag off.

    Die Mindestladezeit verhindert zu kurzes Ein/Aus‑Schalten; die Start/Stop‑Schwellen gewährleisten saubere Schaltbedingungen mit Hysterese.

    EM: Aux‑Heater Steuerung

    Zweck: Blockiert oder erlaubt den Aux‑Heater basierend auf em_allow_aux, Boiler Temp, DHW‑Ladestatus und PV‑Verfügbarkeit.

    Logik:

    • Wenn Aux nicht erlaubt (em_allow_aux = off), Boiler Temp über em_dhw_min_temp, DHW charging aktiv und PV avail > em_avail_stop → schalte Aux‑Heater aus (switch.boiler_aux_heater_only = off).
    • Wenn em_allow_aux = on → schalte Aux‑Heater an.

    Zusätzlich werden Logeinträge geschrieben – praktisch beim Debugging und zur Nachverfolgung der Steuerung.

    EM: Force smoothed zero on startup

    Zweck: Diese Automation verhindert initiale Fehlinterpretationen der geglätteten Sensoren direkt nach einem Home Assistant Neustart. Oft sind Rohsensoren zu Beginn noch „unknown“ oder liefern spurige Werte — das Force‑Zero‑Flag sorgt dafür, dass die auf Glättung basierenden Sensoren zunächst 0 melden, bis verlässliche Rohdaten vorliegen.

    Logik im Ablauf:

    • Beim Start von Home Assistant wird input_boolean.energy_manager_force_zero kurz gesetzt.
    • Die Automation wartet, bis mindestens einer der Rohsensoren (PV, Hauslast, Batterie) initialisiert ist; Timeout sind 20 Sekunden.
    • Nach einer kleinen Verzögerung werden die geglätteten Sensoren sowie die wichtigsten Template‑Sensoren einmalig per homeassistant.update_entity aktualisiert, um konsistente Startwerte zu erzwingen.
    • Anschließend wird das Force‑Zero‑Flag wieder deaktiviert und das System arbeitet mit echten Werten weiter.

    Nutzen: Robustheit beim Systemstart — keine spontanen Aktionen (z. B. Boiler‑Start) aufgrund falscher Anfangswerte.

    EM: Aux‑Heater max Laufzeit

    Zweck: Failsafe gegen dauerhaft eingeschalteten Aux‑Heater. Wenn der Aux‑Heater manuell oder durch andere Logiken eingeschaltet wurde, schaltet diese Automation ihn nach 20 Minuten automatisch aus.

    Warum notwendig: Aux‑Heater sind in der Regel elektrische Zusatzheizungen mit hohem Verbrauch. Ein unbeabsichtigtes oder klemmendes Relais könnte ansonsten unnötig hohe Kosten verursachen oder die Energieeffizienz komplett zunichte machen.

    EM: Aux‑Heater aus bei keinem PV-Überschuss

    Zweck: Verhindert das Einschalten des Aux‑Heaters, wenn kein ausreichender PV‑Überschuss mehr vorhanden ist.

    Logik:

    • Wenn der verfügbare PV-Überschuss (sensor.em_available_for_heatpump) unter 0,3 kW fällt und für mindestens 2 Minuten bleibt, wird der Aux‑Heater automatisch ausgeschaltet.
    • Das schützt vor unnötiger Netzstromaufnahme durch den Aux‑Heater, der nur bei Überschuss laufen soll.

    EM: Moduswechsel ausführen

    Zweck: Schaltet den Energy Manager automatisch in den Sommer‑ oder Wintermodus um, wenn die Auswahl im input_select.energy_manager_mode geändert wird.

    In der Automation wird das Script em_set_mode ausgelöst, welches die notwendigen Input Booleans, Automationen und Werte entsprechend setzt.

    EM: HARD Restore Modus nach Neustart

    Zweck: Nach einem Home Assistant Neustart wird der zuletzt gewählte Modus aus dem input_select.energy_manager_mode gelesen und über das Script em_set_mode hart wiederhergestellt.

    So wird sichergestellt, dass der Manager nicht in einem unerwarteten Zustand startet.


    💾Package Struktur

    YAML
    # config/packages/energy_manager.yaml
    
    # --- Helpers / Controls ---
    input_boolean:
      energy_manager_enabled:
        name: "Energy Manager aktiv"
        initial: on
    
      energy_manager_temp_ok:
        name: "Energy Manager: Temp OK"
        initial: on
    
      energy_manager_force_zero:
        name: "Energy Manager: Force smoothed zero"
        initial: off
        icon: mdi:power-off
    
      em_allow_aux:
        name: "EM: Aux-Heater erlauben"
        initial: off
    
      em_dhw_charging:
        name: "EM DHW Ladung aktiv"
        initial: off
    
      em_safe_mode:
        name: "EM Safe Mode"
        initial: off
        icon: mdi:shield-alert
    
    
    input_select:
      energy_manager_mode:
        name: "Energy Manager Modus"
        options:
          - "Sommer"
          - "Winter"
    
    
    input_number:
      pw_max_charge:
        name: "Powerwall max Ladeleistung (kW)"
        initial: 4.6
        min: 0
        max: 11.0
        step: 0.1
        unit_of_measurement: kW
    
      energy_manager_temp_start:
        name: "EM Temp Start (°C)"
        initial: 14
        min: -40
        max: 40
        step: 0.5
    
      energy_manager_temp_stop:
        name: "EM Temp Stop (°C)"
        initial: 17
        min: -40
        max: 40
        step: 0.5
    
      em_flow_temp_min:
        name: "EM Vorlauf Minimum (°C)"
        initial: 38
        min: 20
        max: 45
        step: 0.5
    
      em_flow_temp_max:
        name: "EM Vorlauf Maximum (°C)"
        initial: 50
        min: 40
        max: 60
        step: 0.5
    
      em_flow_temp_step_k:
        name: "EM Vorlauf Änderung pro Intervall (°C)"
        initial: 0.5
        min: 0.1
        max: 2
        step: 0.1
    
      em_min_runtime:
        name: "EM Kompressor Mindestlaufzeit (Minuten)"
        initial: 15
        min: 5
        max: 60
        step: 1
    
      em_pv_threshold_start:
        name: "EM PV Überschuss Startschwelle (kW)"
        initial: 3
        min: 0
        max: 5
        step: 0.1
    
      em_pv_threshold_stop:
        name: "EM PV Überschuss Stoppschwelle (kW)"
        initial: 1
        min: 0
        max: 5
        step: 0.1
    
      em_dhw_max_temp:
        name: "EM DHW Max Temperatur (°C)"
        initial: 55
        min: 45
        max: 70
        step: 0.5
    
      em_dhw_min_temp:
        name: "EM DHW Min Temperatur (°C)"
        initial: 45
        min: 35
        max: 55
        step: 0.5
    
      em_dhw_charge_min_duration:
        name: "EM DHW Mindestladezeit (Minuten)"
        initial: 20
        min: 5
        max: 60
        step: 1
    
      em_avail_start:
        name: "EM Avail Start (kW)"
        initial: 0.6
        min: 0
        max: 10
        step: 0.1
    
      em_avail_stop:
        name: "EM Avail Stop (kW)"
        initial: 0.4
        min: 0
        max: 10
        step: 0.1
    
    
    # --- Scripts ---
    script:
    
      em_set_mode:
        alias: "EM: Modus anwenden"
        mode: single
        sequence:
    
          - variables:
              mode: "{{ states('input_select.energy_manager_mode') }}"
    
          - choose:
    
              - conditions:
                  - condition: template
                    value_template: "{{ mode == 'Winter' }}"
                sequence:
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.energy_manager_enabled
    
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.energy_manager_temp_ok
    
                  - service: input_boolean.turn_off
                    target:
                      entity_id: input_boolean.em_safe_mode
    
                  - service: number.set_value
                    target:
                      entity_id: number.boiler_selected_flow_temperature
                    data:
                      value: "{{ states('input_number.em_flow_temp_min') | float(38) }}"
                  
                  - delay: "00:00:02"
                  
                  - service: automation.turn_on
                    target:
                      entity_id:
                        - automation.em_vorlauftemperatur_regeln
                        - automation.em_dhw_ladung_steuern
                        - automation.em_aux_heater_steuerung
    
                  - service: system_log.write
                    data:
                      message: "EM: Wintermodus aktiviert"
                      level: info
    
              - conditions:
                  - condition: template
                    value_template: "{{ mode == 'Sommer' }}"
                sequence:
                  - service: input_boolean.turn_off
                    target:
                      entity_id:
                        - input_boolean.energy_manager_enabled
                        - input_boolean.em_dhw_charging
                        - input_boolean.em_allow_aux
    
                  - service: automation.turn_off
                    target:
                      entity_id:
                        - automation.em_vorlauftemperatur_regeln
                        - automation.em_dhw_ladung_steuern
                        - automation.em_aux_heater_steuerung
    
                  - service: script.em_reset_to_defaults
    
                  - service: system_log.write
                    data:
                      message: "EM: Sommermodus aktiviert"
                      level: warning
    
      em_toggle_mode:
        alias: "EM: Modus umschalten"
        mode: single
        sequence:
          - variables:
              current: "{{ states('input_select.energy_manager_mode') }}"
    
          - service: input_select.select_option
            target:
              entity_id: input_select.energy_manager_mode
            data:
              option: >
                {% if current == 'Winter' %}
                  Sommer
                {% else %}
                  Winter
                {% endif %}
                
      em_reset_to_defaults:
        alias: "EM: Reset auf Standardwerte"
        mode: single
        sequence:
    
          # 🛡 Safe Mode aktivieren (verhindert Zwischenzustände)
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.em_safe_mode
    
          - delay: "00:00:01"
    
          # 🧹 Grundsystem deaktivieren
          - service: input_boolean.turn_off
            target:
              entity_id:
                - input_boolean.energy_manager_enabled
                - input_boolean.energy_manager_force_zero
                - input_boolean.em_allow_aux
                - input_boolean.em_dhw_charging
    
          # ✔ Temp Status initialisieren
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.energy_manager_temp_ok
    
          # 🔧 Input Numbers Reset
          - service: input_number.set_value
            data:
              entity_id: input_number.pw_max_charge
              value: 4.6
    
          - service: input_number.set_value
            data:
              entity_id: input_number.energy_manager_temp_start
              value: 14
    
          - service: input_number.set_value
            data:
              entity_id: input_number.energy_manager_temp_stop
              value: 17
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_flow_temp_min
              value: 38
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_flow_temp_max
              value: 50
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_flow_temp_step_k
              value: 0.5
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_min_runtime
              value: 15
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_pv_threshold_start
              value: 3
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_pv_threshold_stop
              value: 1
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_dhw_max_temp
              value: 55
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_dhw_min_temp
              value: 45
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_dhw_charge_min_duration
              value: 20
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_avail_start
              value: 0.6
    
          - service: input_number.set_value
            data:
              entity_id: input_number.em_avail_stop
              value: 0.4
    
          # 🌡 Boiler Startwert setzen
          - service: number.set_value
            data:
              entity_id: number.boiler_selected_flow_temperature
              value: "{{ states('input_number.em_flow_temp_min') | float(38) }}"
    
          # 🔌 Aktoren sicher aus
          - service: switch.turn_off
            target:
              entity_id:
                - switch.boiler_dhw_one_time_charging
                - switch.boiler_aux_heater_only
    
    # --- Filter Sensoren (Glättung) ---
    sensor:
      - platform: filter
        name: "em_pv_power_smoothed"
        entity_id: sensor.my_home_solar_energie
        filters:
          - filter: lowpass
            time_constant: 2
            precision: 2
    
      - platform: filter
        name: "em_home_load_smoothed"
        entity_id: sensor.my_home_last_leistung
        filters:
          - filter: time_simple_moving_average
            window_size: 3
            precision: 2
    
      - platform: filter
        name: "em_powerwall_battery_power_smoothed"
        entity_id: sensor.my_home_batterie_leistung
        filters:
          - filter: lowpass
            time_constant: 6
            precision: 2
    
    # --- Template Sensors & Binary Sensors ---
    template:
      - sensor:
          - name: "em_pv_power_corrected"
            unit_of_measurement: "kW"
            state: >-
              {% set force = is_state('input_boolean.energy_manager_force_zero', 'on') %}
              {% set raw = states('sensor.my_home_solar_energie') | float(0) %}
              {% set sm = states('sensor.em_pv_power_smoothed') | float(0) %}
              {% if force or raw < 0.02 %}
                0
              {% else %}
                {{ sm | round(2) }}
              {% endif %}
    
          - name: "em_home_load_corrected"
            unit_of_measurement: "kW"
            state: >-
              {% set force = is_state('input_boolean.energy_manager_force_zero', 'on') %}
              {% set raw = states('sensor.my_home_last_leistung') | float(0) %}
              {% set sm = states('sensor.em_home_load_smoothed') | float(0) %}
              {% if force or raw < 0.02 %}
                0
              {% else %}
                {{ sm | round(2) }}
              {% endif %}
    
          - name: "em_powerwall_charge_corrected"
            unit_of_measurement: "kW"
            state: >-
              {% set force = is_state('input_boolean.energy_manager_force_zero', 'on') %}
              {% set raw = states('sensor.my_home_batterie_leistung') | float(0) %}
              {% set sm = states('sensor.em_powerwall_battery_power_smoothed') | float(0) %}
              {% if force or (raw | abs) < 0.02 %}
                0
              {% else %}
                {{ sm | round(2) }}
              {% endif %}
    
          - name: "em_energy_surplus"
            unit_of_measurement: "kW"
            state: >-
              {{ (states('sensor.em_pv_power_corrected') | float(0) - states('sensor.em_home_load_corrected') | float(0)) | round(2) }}
    
          - name: "em_pw_max_charge"
            unit_of_measurement: "kW"
            state: >-
              {{ states('input_number.pw_max_charge') | float(4.6) }}
    
          - name: "em_pw_current_charge"
            unit_of_measurement: "kW"
            state: >-
              {{ (states('sensor.em_powerwall_charge_corrected') | float(0)) | abs | round(2) }}
    
          - name: "em_available_for_heatpump"
            unit_of_measurement: "kW"
            state: >-
              {% set surplus = states('sensor.em_energy_surplus') | float(0) %}
              {% set pw_curr = states('sensor.em_pw_current_charge') | float(0) %}
              {% set threshold = 0.02 %}
              {% if surplus > 0 %}
                {% set used = pw_curr if pw_curr > threshold else 0 %}
                {{ [surplus - used, 0] | max | round(2) }}
              {% else %}
                0
              {% endif %}
            attributes:
              note: "Surplus minus current battery charge (threshold 0.02 kW)"
    
          - name: "em_target_flow_temp"
            unit_of_measurement: "°C"
            state: >-
              {% set min_t = states('input_number.em_flow_temp_min') | float(0) %}
              {% set max_t = states('input_number.em_flow_temp_max') | float(0) %}
              {% set avail = states('sensor.em_available_for_heatpump') | float(0) %}
              {% set max_power = 6 %}
              {% set ratio = (avail / max_power) | float(0) %}
              {% set ratio = [ratio, 0] | max %}
              {% set ratio = [ratio, 1] | min %}
              {% set target = min_t + (max_t - min_t) * ratio %}
              {{ target | round(1) }}
    
          - name: "em_current_flow_temp"
            unit_of_measurement: "°C"
            state: "{{ states('sensor.boiler_current_flow_temperature') | float(0) }}"
    
          - name: "em_dhw_boiler_temp"
            unit_of_measurement: "°C"
            state: "{{ states('sensor.boiler_heat_carrier_forward_tc1') | float(0) }}"
    
          - name: "em_dhw_charge_state"
            state: >-
              {{ 'on' if is_state('input_boolean.em_dhw_charging', 'on') else 'off' }}
    
      - binary_sensor:
        - name: "wp_laufzeit_startbedingung"
          unique_id: wp_laufzeit_startbedingung
          device_class: running
          state: >-
            {% set enabled    = is_state('input_boolean.energy_manager_enabled','on') %}
            {% set temp_ok    = is_state('input_boolean.energy_manager_temp_ok','on') %}
            {% set safe_off   = is_state('input_boolean.em_safe_mode','off') %}
            {% set avail      = states('sensor.em_available_for_heatpump') | float(0) %}
            {% set start_th   = states('input_number.em_avail_start') | float(0) %}
            {% set target_t   = states('sensor.em_target_flow_temp') | float(0) %}
            {% set current_t  = states('sensor.em_current_flow_temp') | float(0) %}
            {% set hysteresis = 0.2 %}
            {{ enabled and temp_ok and safe_off and (avail > start_th) and (target_t > current_t + hysteresis) }}
            {# Optional zusätzlich: or is_state('input_boolean.em_dhw_charging','on') #}
          attributes:
            em_enabled: "{{ states('input_boolean.energy_manager_enabled') }}"
            em_temp_ok: "{{ states('input_boolean.energy_manager_temp_ok') }}"
            em_safe_mode: "{{ states('input_boolean.em_safe_mode') }}"
            avail_for_hp_kW: "{{ states('sensor.em_available_for_heatpump') }}"
            avail_start_kW: "{{ states('input_number.em_avail_start') }}"
            target_flow_temp_C: "{{ states('sensor.em_target_flow_temp') }}"
            current_flow_temp_C: "{{ states('sensor.em_current_flow_temp') }}"
            would_set_to_C: >-
              {% set step  = states('input_number.em_flow_temp_step_k') | float(0.5) %}
              {% set max_t = states('input_number.em_flow_temp_max')   | float(50) %}
              {% set cand  = (states('sensor.em_current_flow_temp') | float(0)) + step %}
              {% set tgt   = states('sensor.em_target_flow_temp')  | float(0) %}
              {% set capped = [cand, tgt, max_t] | min %}
              {{ capped | round(1) }}
            reason: >-
              {# Variablen in Attribut-Template erneut setzen, da separat gerendert #}
              {% set enabled    = is_state('input_boolean.energy_manager_enabled','on') %}
              {% set temp_ok    = is_state('input_boolean.energy_manager_temp_ok','on') %}
              {% set safe_off   = is_state('input_boolean.em_safe_mode','off') %}
              {% set avail      = states('sensor.em_available_for_heatpump') | float(0) %}
              {% set start_th   = states('input_number.em_avail_start') | float(0) %}
              {% set target_t   = states('sensor.em_target_flow_temp') | float(0) %}
              {% set current_t  = states('sensor.em_current_flow_temp') | float(0) %}
              {% set hysteresis = 0.2 %}
              {% set reasons = [] %}
              {% if not enabled %}{% set reasons = reasons + ['disabled'] %}{% endif %}
              {% if not temp_ok %}{% set reasons = reasons + ['temp_not_ok'] %}{% endif %}
              {% if not safe_off %}{% set reasons = reasons + ['safe_mode_on'] %}{% endif %}
              {% if not (avail > start_th) %}{% set reasons = reasons + ['avail_below_start'] %}{% endif %}
              {% if not (target_t > current_t + hysteresis) %}{% set reasons = reasons + ['target_not_above_current'] %}{% endif %}
              {{ 'all_conditions_met' if reasons|length == 0 else reasons|join(',') }}
          availability: >-
            {{
              (states('sensor.em_available_for_heatpump') not in ['unknown','unavailable','']) and
              (states('sensor.em_target_flow_temp') not in ['unknown','unavailable','']) and
              (states('sensor.em_current_flow_temp') not in ['unknown','unavailable',''])
            }}
    
    # --- Automationen (alle in einem Block) ---
    automation:
      - alias: "EM Temp OK Status aktualisieren"
        description: "Setzt input_boolean.energy_manager_temp_ok basierend auf Temperatur mit Debounce 60s"
        mode: restart
        trigger:
          - platform: state
            entity_id: sensor.boiler_air_inlet_temperature_tl2
        condition: []
        action:
          - choose:
              - conditions:
                  - condition: template
                    value_template: >-
                      {% set temp = states('sensor.boiler_air_inlet_temperature_tl2') %}
                      {% set start = states('input_number.energy_manager_temp_start') %}
                      {{ temp not in ['unavailable', 'unknown', ''] and
                         start not in ['unavailable', 'unknown', ''] and
                         (temp | float(0)) < (start | float(0)) }}
                sequence:
                  - delay: "00:01:00"
                  - condition: template
                    value_template: >-
                      {% set temp = states('sensor.boiler_air_inlet_temperature_tl2') %}
                      {% set start = states('input_number.energy_manager_temp_start') %}
                      {{ temp not in ['unavailable', 'unknown', ''] and
                         start not in ['unavailable', 'unknown', ''] and
                         (temp | float(0)) < (start | float(0)) }}
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.energy_manager_temp_ok
              - conditions:
                  - condition: template
                    value_template: >-
                      {% set temp = states('sensor.boiler_air_inlet_temperature_tl2') %}
                      {% set stop = states('input_number.energy_manager_temp_stop') %}
                      {{ temp not in ['unavailable', 'unknown', ''] and
                         stop not in ['unavailable', 'unknown', ''] and
                         (temp | float(0)) > (stop | float(0)) }}
                sequence:
                  - delay: "00:01:00"
                  - condition: template
                    value_template: >-
                      {% set temp = states('sensor.boiler_air_inlet_temperature_tl2') %}
                      {% set stop = states('input_number.energy_manager_temp_stop') %}
                      {{ temp not in ['unavailable', 'unknown', ''] and
                         stop not in ['unavailable', 'unknown', ''] and
                         (temp | float(0)) > (stop | float(0)) }}
                  - service: input_boolean.turn_off
                    target:
                      entity_id: input_boolean.energy_manager_temp_ok
    
      # Automation: EM: Vorlauftemperatur regeln (nur Erhöhungen, kein Absenken)
      - alias: "EM: Vorlauftemperatur regeln"
        description: "Erhöht Selected flow temperature stufenlos mit Ramping (nur Anheben, kein aktives Absenken)"
        trigger:
          - platform: state
            entity_id:
              - sensor.em_available_for_heatpump
              - sensor.em_current_flow_temp
              - input_boolean.energy_manager_enabled
              - input_boolean.energy_manager_temp_ok
        condition:
          - condition: state
            entity_id: input_boolean.energy_manager_enabled
            state: 'on'
          - condition: state
            entity_id: input_boolean.energy_manager_temp_ok
            state: 'on'
          - condition: state
            entity_id: input_boolean.em_safe_mode
            state: 'off'
          # Hysterese-Bedingung: nur wenn verfügbar > Start-Schwelle
          - condition: template
            value_template: >-
              {{ (states('sensor.em_available_for_heatpump') | float(0)) > (states('input_number.em_avail_start') | float(0)) }}
        action:
          - variables:
              target_temp_raw: "{{ states('sensor.em_target_flow_temp') | float(0) }}"
              current_temp: "{{ states('sensor.em_current_flow_temp') | float(0) }}"
              step: "{{ states('input_number.em_flow_temp_step_k') | float(0) }}"
              max_t: "{{ states('input_number.em_flow_temp_max') | float(0) }}"
              last_change: "{{ state_attr('number.boiler_selected_flow_temperature', 'last_changed') }}"
              time_since_change_min: >-
                {% if last_change is none %}
                  9999
                {% else %}
                  ((as_timestamp(now()) - as_timestamp(last_change)) / 60)
                {% endif %}
          - choose:
              - conditions:
                  # Nur erhöhen, wenn Ziel > Ist
                  - condition: template
                    value_template: >-
                      {{ target_temp_raw > current_temp }}
                sequence:
                  - variables:
                      # Kandidat ist Ist + Schritt, aber nicht über Ziel
                      candidate_temp: >-
                        {% set cand = current_temp + step %}
                        {% if cand > target_temp_raw %}
                          {{ target_temp_raw }}
                        {% else %}
                          {{ cand }}
                        {% endif %}
                      # Kappe auf maximalen erlaubten Wert
                      new_temp_capped: >-
                        {{ [ (candidate_temp | float), (max_t | float) ] | min | round(1) }}
                  - service: number.set_value
                    data:
                      entity_id: number.boiler_selected_flow_temperature
                      value: "{{ new_temp_capped }}"
                  - service: system_log.write
                    data:
                      message: "EM: Vorlaufregelung erhöht von {{ current_temp }}°C auf {{ new_temp_capped }}°C (Ziel {{ target_temp_raw }}°C, Max {{ max_t }}°C)"
                      level: info
            default: []
    
      - alias: "EM: DHW Ladung steuern"
        description: "Steuert DHW Charging basierend auf PV Überschuss und Boiler Temperatur, mit Hysterese"
        trigger:
          - platform: state
            entity_id:
              - sensor.em_available_for_heatpump
              - sensor.em_dhw_boiler_temp
              - input_boolean.energy_manager_enabled
              - input_boolean.energy_manager_temp_ok
              - input_boolean.em_dhw_charging
        condition:
          - condition: state
            entity_id: input_boolean.energy_manager_enabled
            state: 'on'
          - condition: state
            entity_id: input_boolean.energy_manager_temp_ok
            state: 'on'
          - condition: state
            entity_id: input_boolean.em_safe_mode
            state: 'off'
        action:
          - variables:
              pv_avail: "{{ states('sensor.em_available_for_heatpump') | float(0) }}"
              boiler_temp: "{{ states('sensor.boiler_heat_carrier_forward_tc1') | float(0) }}"
              dhw_charging: "{{ is_state('input_boolean.em_dhw_charging', 'on') }}"
              max_temp: "{{ states('input_number.em_dhw_max_temp') | float(0) }}"
              min_temp: "{{ states('input_number.em_dhw_min_temp') | float(0) }}"
              min_duration: "{{ states('input_number.em_dhw_charge_min_duration') | int }}"
              last_on: "{{ state_attr('input_boolean.em_dhw_charging', 'last_changed') }}"
              time_on_min: >-
                {% if last_on is none %}
                  9999
                {% else %}
                  ((as_timestamp(now()) - as_timestamp(last_on)) / 60)
                {% endif %}
              start_thresh: "{{ states('input_number.em_avail_start') | float(0) }}"
              stop_thresh: "{{ states('input_number.em_avail_stop') | float(0) }}"
          - choose:
              # Start DHW Charging wenn PV Überschuss über Startschwelle und Boiler Temp < max_temp
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ pv_avail > start_thresh }}
                  - condition: template
                    value_template: >-
                      {{ boiler_temp < max_temp }}
                  - condition: template
                    value_template: >-
                      {{ not dhw_charging or (dhw_charging and time_on_min > min_duration) }}
                sequence:
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.em_dhw_charging
                  - service: switch.turn_on
                    target:
                      entity_id: switch.boiler_dhw_one_time_charging
                  - service: system_log.write
                    data:
                      message: "EM: DHW Charging gestartet (Boiler {{ boiler_temp }}°C, PV Überschuss {{ pv_avail }} kW)"
                      level: info
    
              # Stop DHW Charging wenn PV unter Stop-Schwelle oder Boiler Temp >= max_temp und Mindestladezeit erfüllt
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ (boiler_temp >= max_temp) or (pv_avail < stop_thresh) }}
                  - condition: template
                    value_template: >-
                      {{ dhw_charging and time_on_min > min_duration }}
                sequence:
                  - service: input_boolean.turn_off
                    target:
                      entity_id: input_boolean.em_dhw_charging
                  - service: switch.turn_off
                    target:
                      entity_id: switch.boiler_dhw_one_time_charging
                  - service: system_log.write
                    data:
                      message: "EM: DHW Charging gestoppt (Boiler {{ boiler_temp }}°C, PV Überschuss {{ pv_avail }} kW)"
                      level: info
    
      - alias: "EM: Aux-Heater Steuerung"
        description: "Blockiert Aux-Heater wenn nicht erlaubt oder Boiler Temp ausreichend, mit Hysterese"
        trigger:
          - platform: state
            entity_id:
              - input_boolean.em_allow_aux
              - sensor.boiler_heat_carrier_forward_tc1
              - input_boolean.em_dhw_charging
              - sensor.em_available_for_heatpump
        condition:
          - condition: state
            entity_id: input_boolean.em_safe_mode
            state: 'off'
        action:
          - variables:
              allow_aux: "{{ is_state('input_boolean.em_allow_aux', 'on') }}"
              boiler_temp: "{{ states('sensor.boiler_heat_carrier_forward_tc1') | float(0) }}"
              min_temp: "{{ states('input_number.em_dhw_min_temp') | float(0) }}"
              dhw_charging: "{{ is_state('input_boolean.em_dhw_charging', 'on') }}"
              pv_avail: "{{ states('sensor.em_available_for_heatpump') | float(0) }}"
              start_thresh: "{{ states('input_number.em_avail_start') | float(0) }}"
              stop_thresh: "{{ states('input_number.em_avail_stop') | float(0) }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ not allow_aux and boiler_temp > min_temp and dhw_charging and pv_avail > stop_thresh }}
                sequence:
                  - service: switch.turn_off
                    target:
                      entity_id: switch.boiler_aux_heater_only
                  - service: system_log.write
                    data:
                      message: "EM: Aux-Heater deaktiviert wegen Energiemanager"
                      level: info
    
              - conditions:
                  - condition: template
                    value_template: "{{ allow_aux }}"
                sequence:
                  - service: switch.turn_on
                    target:
                      entity_id: switch.boiler_aux_heater_only
                  - service: system_log.write
                    data:
                      message: "EM: Aux-Heater erlaubt durch Energiemanager"
                      level: info
    
      - alias: "EM: Force smoothed zero on startup"
        description: "Setzt beim HA-Start kurzzeitig das Force-Zero-Flag, bis Rohsensoren initialisiert sind"
        mode: single
        trigger:
          - platform: homeassistant
            event: start
        action:
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.energy_manager_force_zero
          - wait_for_trigger:
              - platform: template
                value_template: >-
                  {% set s1 = states('sensor.my_home_solar_energie') %}
                  {% set s2 = states('sensor.my_home_last_leistung') %}
                  {% set s3 = states('sensor.my_home_batterie_leistung') %}
                  {{ [s1, s2, s3] | select('match', '^(?!unknown$|^unavailable$|^$).+') | list | count > 0 }}
            timeout: "00:00:20"
          - delay: "00:00:02"
          - service: homeassistant.update_entity
            target:
              entity_id:
                - sensor.em_pv_power_smoothed
                - sensor.em_home_load_smoothed
                - sensor.em_powerwall_battery_power_smoothed
                - sensor.em_pv_power_corrected
                - sensor.em_home_load_corrected
                - sensor.em_powerwall_charge_corrected
                - sensor.em_energy_surplus
                - sensor.em_available_for_heatpump
                - sensor.em_pw_current_charge
                - sensor.em_pw_max_charge
                - sensor.em_target_flow_temp
                - sensor.em_current_flow_temp
                - sensor.boiler_heat_carrier_forward_tc1
          - delay: "00:00:01"
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.energy_manager_force_zero
    
      - alias: "EM: Aux-Heater max Laufzeit"
        description: "Schaltet den Aux-Heater automatisch nach definierter Zeit wieder aus (Failsafe)"
        mode: restart
        trigger:
          - platform: state
            entity_id: switch.boiler_aux_heater_only
            to: "on"
            for: "00:20:00"
        condition: []
        action:
          - service: switch.turn_off
            target:
              entity_id: switch.boiler_aux_heater_only
          - service: system_log.write
            data:
              message: "EM: Aux-Heater wurde nach 20 Minuten automatisch abgeschaltet (Failsafe)"
              level: warning
    
      - alias: "EM: Aux-Heater aus bei keinem PV-Überschuss"
        description: "Schaltet den Aux-Heater aus, wenn kein ausreichender PV-Überschuss vorhanden ist"
        mode: restart
        trigger:
          - platform: numeric_state
            entity_id: sensor.em_available_for_heatpump
            below: 0.3
            for: "00:02:00"
        condition: []
        action:
          - condition: state
            entity_id: switch.boiler_aux_heater_only
            state: "on"
          - service: switch.turn_off
            target:
              entity_id: switch.boiler_aux_heater_only
          - service: system_log.write
            data:
              message: "EM: Aux-Heater deaktiviert wegen fehlendem PV-Überschuss"
              level: warning
              
      - alias: "EM: Moduswechsel ausführen"
        mode: single
        trigger:
          - platform: state
            entity_id: input_select.energy_manager_mode
        action:
          - service: script.em_set_mode
          
      - alias: "EM: HARD Restore Modus nach Neustart"
        mode: single
    
        trigger:
          - platform: homeassistant
            event: start
    
        action:
          # ⏱ wirklich warten bis alles stabil ist
          - delay: "00:00:20"
    
          # 🧠 Modus hart lesen (mit Fallback!)
          - variables:
              mode: "{{ states('input_select.energy_manager_mode') | default('Winter') }}"
    
          # 🧯 Debug zur Kontrolle
          - service: system_log.write
            data:
              message: "EM START: gespeicherter Modus = {{ mode }}"
              level: warning
    
          # 🔥 HARTE WIEDERHERSTELLUNG
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ mode == 'Sommer' }}"
                sequence:
                  - service: script.em_set_mode
    
              - conditions:
                  - condition: template
                    value_template: "{{ mode == 'Winter' }}"
                sequence:
                  - service: script.em_set_mode

    🕶️Überblick zur Funktionsweise des Energy Managers

    Das Energiemanagement arbeitet in mehreren, klar strukturierten Schritten:

    Datenaufnahme & Glättung

    Rohdaten aus den Quellen PV-Anlage, Hausverbrauch und Powerwall-Batterie werden zunächst mit Filtern geglättet. Dadurch werden kurzfristige Schwankungen und Messrauschen reduziert, um stabile Steuerentscheidungen zu ermöglichen.

    Überschussberechnung & Verteilung

    Aus den geglätteten Werten wird ein Energieüberschuss berechnet (PV-Erzeugung minus Hausverbrauch). Von diesem Überschuss wird sukzessive der aktuelle Ladebedarf der Powerwall subtrahiert, da die Batterie Vorrang beim Laden hat.

    Der verbleibende Überschuss steht dann der Wärmepumpe zur Verfügung – dieser Wert steuert, wie intensiv die Wärmepumpe beheizt wird.

    Temperaturabhängige Aktivierung

    Der Manager berücksichtigt über einen eigenen Input Boolean, ob die Temperaturbedingungen (bspw. Außentemperatur am Luftansaugpunkt) geeignet sind. Nur wenn die Temperatur im definierten Bereich ist, aktiviert er Heizprozesse – das erhöht Effizienz und schützt die Anlage.

    Automatische Steuerung

    Die Wärmepumpe wird nur dann hochgefahren, wenn ein Restüberschuss nach Batterieladung verbleibt. Die Vorlauftemperatur der WP wird sanft in kleinen Schritten erhöht, um eine zu schnelle Hysterese zu vermeiden.

    Die Powerwall wird vorrangig mit Überschussstrom geladen, wobei eine maximale Ladeleistung definiert ist.

    Außerdem steuert der Manager die Warmwasserbereitung (DHW), indem er das Boilerladen abhängig von PV-Überschuss, Boiler-Temperatur und definierten Zeiträumen ein- und ausschaltet.

    Der Aux-Heater wird je nach Einstellung blockiert oder zugelassen, um unnötigen Stromverbrauch zu verhindern.

    Manuelle Steuerung

    Über definierte Input Booleans kann der Nutzer den Manager manuell ein- oder ausschalten. Ein Force-Flag sorgt beim Start für stabile Initialisierung, Safe Mode verhindert temporär alle automatischen Aktionen, und verschiedene Schalter erlauben die manuelle Aktivierung von DHW-Ladung oder Aux-Heater.

    Mit dieser Kombination aus Helpern, Glättung, Logiksensoren und Automationen entsteht ein flexibles, robuster Energiemanager, der PV-Überschuss gezielt für Heizungs- und Warmwasserbetrieb nutzt und gleichzeitig Hausverbrauch und Batterie berücksichtigt. So wird der Eigenverbrauch erhöht, Stromkosten gesenkt und der Komfort gewahrt.


    🔭Visualisierung im Dashboard

    Im Hauptdashboard zeige ich aktuell nur den Betriebsmodus der Wärmepumpe mit einer custom:button-card an:

    Hier der zugehörige YAML-Code:

    YAML
    type: custom:button-card
    entity: binary_sensor.wp_laufzeit_startbedingung
    name: Wärmepumpe
    icon: |
      [[[ return entity.state === 'on'
          ? 'mdi:fire'
          : 'mdi:fire-off'; ]]]
    show_icon: true
    show_name: true
    show_state: true
    tap_action:
      action: navigate
      navigation_path: /lovelace/WPDaten
    state_display: |
      [[[ return entity.state === 'on'
          ? 'Aufheizen aktiv'
          : 'Normaler Betrieb'; ]]]
    styles:
      grid:
        - grid-template-areas: "\"i n\" \"i s\""
        - grid-template-columns: 48px 1fr
        - grid-template-rows: auto auto
      card:
        - padding: 10px 12px
        - border-radius: 8px
        - box-shadow: none
        - text-align: left
      icon:
        - width: 32px
        - height: 32px
      name:
        - font-size: 16px
        - font-weight: 600
      state:
        - font-size: 13px
    state:
      - value: "on"
        styles:
          card:
            - background-color: "#FF8C00"
            - border-color: "#FF8C00"
          icon:
            - color: white
          name:
            - color: white
          state:
            - color: white
    

    Zusätzlich habe ich ein rudimentäres Dashboard mit allen relevanten Entitäten zur Steuerung der Wärmepumpe erstellt (rein zur Übersicht und prüfen der Daten die alles steuern):

    • Screenshot Sommermodus
    • Screenshot Wintermodus

    Hier der zugehörige Auszug aus der RAW-Konfigurationsdatei:

    YAML
      - title: WP Automatisierung
        path: WPDaten
        icon: mdi:heat-pump-outline
        theme: Nordic
        cards: []
        type: sections
        layout:
          width: 400
          max_cols: 3
        visible:
          - user: 9c3a30d6645649c386acf6485e8d39e3
        sections:
          - type: grid
            cards:
              - type: heading
                heading_style: title
                heading: Wärmepumpe - Betriebsmodus
                icon: mdi:heat-pump
              - type: custom:button-card
                entity: input_select.energy_manager_mode
                name: Energy Manager
                show_icon: true
                show_name: true
                show_state: false
                tap_action:
                  action: call-service
                  service: input_select.select_option
                  target:
                    entity_id: input_select.energy_manager_mode
                  data:
                    option: |
                      [[[
                        return entity.state === "Winter" ? "Sommer" : "Winter";
                      ]]]
                state:
                  - value: Winter
                    icon: mdi:snowflake
                    name: Wintermodus
                    styles:
                      card:
                        - background: '#4DA3FF'
                        - border-radius: 8px
                        - box-shadow: none
                      name:
                        - color: white
                        - font-weight: 600
                      icon:
                        - color: white
                  - value: Sommer
                    icon: mdi:white-balance-sunny
                    name: Sommermodus
                    styles:
                      card:
                        - background: '#D32F2F'
                        - border-radius: 8px
                        - box-shadow: none
                      name:
                        - color: white
                        - font-weight: 600
                      icon:
                        - color: white
                styles:
                  card:
                    - padding: 12px
                    - font-size: 16px
                    - text-align: center
                    - border-radius: 6px
                  icon:
                    - width: 32px
                    - height: 32px
                  name:
                    - font-size: 16px
              - type: custom:button-card
                entity: binary_sensor.wp_laufzeit_startbedingung
                name: Extra Heißmodus
                show_icon: true
                icon: mdi:fire
                show_name: true
                show_state: false
                state:
                  - value: 'on'
                    color: white
                    icon: mdi:fire
                    name: Aufheiz-Betrieb
                    styles:
                      card:
                        - background: '#FF8C00'
                        - border-radius: 8px
                        - box-shadow: none
                      name:
                        - color: white
                        - font-weight: 600
                      state:
                        - color: white
                  - value: 'off'
                    color: white
                    icon: mdi:fire-off
                    name: Normal-Betrieb
                    styles:
                      card:
                        - background: '#2E8B57'
                        - border-radius: 8px
                        - box-shadow: none
                      name:
                        - color: white
                        - font-weight: 600
                      state:
                        - color: white
                styles:
                  card:
                    - padding: 12px
                    - font-size: 16px
                    - text-align: center
                    - color: white
                    - border-radius: 6px
                    - box-shadow: none
                  icon:
                    - width: 32px
                    - height: 32px
                  name:
                    - font-size: 16px
                  state:
                    - font-size: 14px
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: sensor.wp_laufzeit_bei_uberschuss_heute_neu
                    name: WP Laufzeit bei Überschuss heute
                    icon: mdi:clock-time-five-outline
                    show_icon: false
                    show_name: true
                    show_state: false
                    show_label: true
                    label: |
                      [[[
                        // raw = Stunden im Dezimalformat (z.B. 1.75 = 1h45min)
                        const raw = states['sensor.wp_laufzeit_bei_uberschuss_heute_neu']?.state;
                        const val = parseFloat(raw);
                        if (isNaN(val)) return "–";
    
                        // Umrechnung: Dezimalstunden → Sekunden
                        const totalSeconds = Math.round(val * 3600);
    
                        const hours   = Math.floor(totalSeconds / 3600);
                        const minutes = Math.floor((totalSeconds % 3600) / 60);
                        const seconds = totalSeconds % 60;
    
                        // Format hh:mm:ss
                        return `${hours.toString().padStart(2,'0')}:` +
                               `${minutes.toString().padStart(2,'0')}:` +
                               `${seconds.toString().padStart(2,'0')}`;
                      ]]]
                    styles:
                      card:
                        - font-size: 18px
                        - text-align: center
                        - padding: 8px
                      label:
                        - font-weight: bold
                        - color: var(--primary-text-color)
                columns: 1
              - square: false
                type: grid
                cards:
                  - type: custom:button-card
                    entity: sensor.wp_laufzeit_bei_uberschuss_monat
                    name: WP Laufzeit bei Überschuss Monat
                    icon: mdi:clock-time-five-outline
                    show_icon: false
                    show_name: true
                    show_state: false
                    show_label: true
                    label: |
                      [[[
                        // raw = Stunden im Dezimalformat (z.B. 1.75 = 1h45min)
                        const raw = states['sensor.wp_laufzeit_bei_uberschuss_monat']?.state;
                        const val = parseFloat(raw);
                        if (isNaN(val)) return "–";
    
                        // Umrechnung: Dezimalstunden → Sekunden
                        const totalSeconds = Math.round(val * 3600);
    
                        const hours   = Math.floor(totalSeconds / 3600);
                        const minutes = Math.floor((totalSeconds % 3600) / 60);
                        const seconds = totalSeconds % 60;
    
                        // Format hh:mm:ss
                        return `${hours.toString().padStart(2,'0')}:` +
                               `${minutes.toString().padStart(2,'0')}:` +
                               `${seconds.toString().padStart(2,'0')}`;
                      ]]]
                    styles:
                      card:
                        - font-size: 18px
                        - text-align: center
                        - padding: 8px
                      label:
                        - font-weight: bold
                        - color: var(--primary-text-color)
                columns: 1
              - type: horizontal-stack
                cards:
                  - type: custom:button-card
                    entity: input_boolean.energy_manager_enabled
                    name: EM aktiv
                    show_state: true
                    icon: mdi:flash
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
                  - type: custom:button-card
                    entity: input_boolean.em_safe_mode
                    name: SAFE MODE
                    show_state: true
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
                    state:
                      - value: 'on'
                        color: red
                        icon: mdi:shield-alert
                        name: SAFE MODE ON
                      - value: 'off'
                        color: green
                        icon: mdi:shield-check
                        name: Safe Mode
                    tap_action:
                      action: toggle
                    hold_action:
                      action: more-info
              - type: horizontal-stack
                cards:
                  - type: custom:button-card
                    entity: sensor.em_dhw_charge_state
                    name: DHW State
                    show_state: true
                    show_icon: false
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
                  - type: custom:button-card
                    entity: input_boolean.em_dhw_charging
                    name: DHW Charging
                    show_state: true
                    show_icon: false
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
              - type: horizontal-stack
                cards:
                  - type: custom:button-card
                    entity: input_boolean.energy_manager_force_zero
                    name: Force Zero
                    show_state: true
                    icon: mdi:power-off
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
                  - type: custom:button-card
                    entity: input_boolean.em_allow_aux
                    name: Aux erlauben
                    show_state: true
                    icon: mdi:radiator
                    tap_action:
                      action: toggle
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
              - type: horizontal-stack
                cards:
                  - type: custom:button-card
                    entity: script.em_reset_to_defaults
                    name: Reset Defaults
                    show_state: false
                    icon: mdi:restart-alert
                    styles:
                      card:
                        - padding: 12px
                        - font-size: 16px
                        - text-align: center
                        - color: white
                        - border-radius: 6px
                        - box-shadow: none
                    tap_action:
                      action: call-service
                      service: script.turn_on
                      service_data:
                        entity_id: script.em_reset_to_defaults
                    hold_action:
                      action: more-info
                    show_icon: true
                    show_name: true
                    confirmation:
                      text: Reset auf Standardwerte ausführen?
                      confirm: true
                grid_options:
                  columns: 6
                  rows: auto
          - type: grid
            cards:
              - type: heading
                heading_style: title
                heading: 'Aktueller Status:'
                icon: mdi:list-status
              - type: vertical-stack
                cards:
                  - type: vertical-stack
                    cards:
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: sensor.em_pv_power_corrected
                            name: PV (kW)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: sensor.em_home_load_corrected
                            name: Hausverbrauch (kW)
                            vertical: false
                            features_position: bottom
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: sensor.em_pw_current_charge
                            name: Batterie (kW)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: sensor.my_home_ladung
                            name: Powerwall Aufladung
                            vertical: false
                            features_position: bottom
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: sensor.em_target_flow_temp
                            name: Ziel Vorlauf (°C)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: sensor.em_current_flow_temp
                            name: Ist Vorlauf (°C)
                            vertical: false
                            features_position: bottom
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: sensor.em_dhw_boiler_temp
                            name: Boiler (°C)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: number.thermostat_hc1_selected_room_temperature
                            name: Soll-Temp
                            vertical: false
                            features_position: bottom
              - type: tile
                entity: sensor.boiler_air_inlet_temperature_tl2
                name: Außentemp.
                vertical: false
                features_position: bottom
              - type: tile
                entity: input_number.em_flow_temp_step_k
                name: Vorlauf Step (°C)
                vertical: false
                features_position: bottom
              - type: heading
                heading_style: title
                heading: 'Vorgaben:'
                icon: mdi:heat-pump
              - type: vertical-stack
                cards:
                  - type: vertical-stack
                    cards:
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: input_number.em_pv_threshold_start
                            name: PV Start (kW)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: input_number.em_pv_threshold_stop
                            name: PV Stop (kW)
                            vertical: false
                            features_position: bottom
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: input_number.pw_max_charge
                            name: PW Max (kW)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: input_number.em_flow_temp_step_k
                            name: Vorlauf Step (°C)
                            vertical: false
                            features_position: bottom
                      - type: horizontal-stack
                        cards:
                          - type: tile
                            entity: input_number.em_flow_temp_min
                            name: Vorlauf Min (°C)
                            vertical: false
                            features_position: bottom
                          - type: tile
                            entity: input_number.em_flow_temp_max
                            name: Vorlauf Max (°C)
                            vertical: false
                            features_position: bottom
              - type: tile
                entity: input_number.energy_manager_temp_start
                vertical: false
                features_position: bottom
              - type: tile
                entity: input_number.energy_manager_temp_stop
                vertical: false
                features_position: bottom
          - type: grid
            cards:
              - type: heading
                heading: Geglättete Werte
                heading_style: title
              - type: tile
                entity: sensor.em_pv_power_smoothed
                name: 'Smoothed PV Power '
                vertical: false
                features_position: bottom
              - type: tile
                entity: sensor.em_home_load_smoothed
                name: 'Smoothed Home Load '
                vertical: false
                features_position: bottom
              - type: tile
                entity: sensor.em_powerwall_battery_power_smoothed
                name: Smoothed Ladestrom Batterie
                vertical: false
                features_position: bottom
              - type: heading
                heading: >-
                  Aktuelle Ladeleistung der Powerwall (negativer Wert bedeutet
                  Laden, wird positiv ausgegeben)
                heading_style: title
              - type: tile
                entity: sensor.em_pw_current_charge
                vertical: false
                features_position: bottom
              - type: heading
                heading: >-
                  Überschussleistung, die nach Batterieladung für die Wärmepumpe
                  verfügbar bleibt
                heading_style: title
                grid_options:
                  columns: full
                  rows: 1
              - type: tile
                entity: sensor.em_available_for_heatpump
                vertical: false
                features_position: bottom
              - type: heading
                heading: >-
                  Überschussleistung = PV-Leistung minus Hausverbrauch (beide
                  geglättet)
                heading_style: title
                grid_options:
                  columns: full
                  rows: 1
              - type: tile
                entity: sensor.em_energy_surplus
                vertical: false
                features_position: bottom
        max_columns: 3
        header: {}
        subview: true
    

    Ich hoffe, die ausführliche Beschreibung und Struktur hilft dir, die Lösung nachzuvollziehen und bei eigenen Projekten anzupassen.

    Garagentor mit Home Assistant steuern – inkl. Statusanzeig

    Heute möchte ich euch ein kleines, aber für mich sehr hilfreiches Smart‑Home‑Projekt vorstellen.

    Unser Garagentorantrieb verrichtet seit vielen Jahren zuverlässig seinen Dienst – bisher allerdings völlig losgelöst von Home Assistant. Gerade im Alltag fehlte mir immer wieder die einfache Antwort auf eine scheinbar banale Frage: Ist das Garagentor eigentlich noch offen?

    Statt zu rätseln oder extra nachzusehen, sollte mir Home Assistant künftig nicht nur die Steuerung übernehmen, sondern mir auch klar und eindeutig den aktuellen Zustand anzeigen. Ideal wäre das Ganze natürlich lokal, ohne Cloud und mit möglichst wenig zusätzlicher Hardware.

    Besonders wichtig war mir, jederzeit sehen zu können, in welchem Zustand sich das Garagentor gerade befindet:
    geschlossen / in Bewegung / geöffnet.

    Dieser Beitrag richtet sich an alle, die ein bestehendes Garagentor ohne großen Umbau in Home Assistant integrieren möchten – inklusive zuverlässiger Statusrückmeldung, lokaler Steuerung und sauberer Visualisierung im Dashboard.

    Herausgekommen ist eine kompakte Lösung mit einem Shelly 1 Gen3, einem Shelly Add‑On und zwei Magnetschaltern, die ich euch im Folgenden Schritt für Schritt vorstelle.


    🔧 Verwendete Komponenten

    • Shelly 1 Gen3 – schaltet den Torantrieb wie ein klassischer Taster
    • Shelly Plus Add‑On – ermöglicht den Anschluss der beiden Magnetschalter
    • Magnetschalter – liefern die Positionsinformation „offen / geschlossen“
    • Abzweigdose

    🔌 Kurz zur Verkabelung

    Ein Magnetschalter ist so an der Antriebsschiene angebracht,
    dass er schließt, wenn das Garagentor komplett geöffnet ist.
    Der zweite Magnetschalter schließt, wenn das Garagentor
    komplett geschlossen ist.

    Zu beachten ist, dass das Shelly Add‑On nur einen digitalen Eingang
    für einen Magnetschalter besitzt. Deshalb wurde der zweite Magnetschalter am analogen Eingang angeschlossen.

    Der analoge Eingang des Shelly Add‑On wird in diesem Fall nicht zur Messung eines Spannungswerts genutzt, sondern dient lediglich als zweiter „Status‑Eingang“. Der Magnetschalter wird dabei wie ein einfacher Schließer verwendet.

    Normalerweise kann ein Shelly 1 über die 12 Volt Versorgung
    des Torantriebs betrieben werden. In meinem Fall hat das jedoch nicht funktioniert, deshalb habe ich den Shelly ganz klassisch an 230 Volt angeschlossen.

    Für die Steuerung habe ich am Garagentorantrieb die Anschlüsse
    für einen externen Taster verwendet (GND & PB).

    Move 600 Taster

    ⚡ Verkabelung Shelly 1 Gen3

    • L & N an die 230‑Volt‑Stromversorgung
    • 0 an den PB-Anschluss des Garagentorantriebs
    • I an den GND-Anschluss des Garagentorantriebs

    📸 Verkabelung Shelly 1


    🔗 Verkabelung Shelly Add‑On

    • Magnetschalter 1 an Digital In und GND
    • Magnetschalter 2 an Analog In und GND (zweiten freien verwenden)

    ⚙️ Einstellungen in der Shelly App

    Zunächst sollte das Shelly 1 Gen3 zusammen mit dem Shelly Add‑On
    über die Shelly App eingebunden werden. Einige wichtige Einstellungen müssen dort vorgenommen werden.

    Die Einbindung der Add‑On‑Peripherie (Magnetschalter)
    überspringe ich an dieser Stelle.

    Hier nur kurz das Ergebnis in der App:

    📸 Shelly App – Peripherieeinstellungen

    ⚙️Wichtige Einstellungen

    Unter Einstellungen → Eingangs-/Ausgangseinstellungen sollten die Optionen wie folgt gesetzt sein:

    📸 Shelly App – Eingangs-/Ausgangseinstellungen

    Zusätzlich muss bei der Zeitschaltuhr ein Wert für „Automatisches Ausschalten“ gesetzt werden, damit der Taster auch wirklich als Taster funktioniert.

    Ohne diese Einstellung würde der Shelly‑Ausgang dauerhaft eingeschaltet bleiben, was bei einem Garagentorantrieb zu Fehlfunktionen oder ungewolltem Dauerlauf führen kann.

    ✅ Empfohlener Wert: 1 Sekunde

    Zeitschaltuhr

    📸 Shelly App – Zeitschaltuhr


    🏠 Home Assistant Integration

    In Home Assistant wird das Shelly Relais zusammen mit dem Add‑On ganz normal über die Shelly Integration eingebunden. Danach stehen alle notwendigen Entitäten zur Verfügung.

    image

    📸 Home Assistant – Shelly Entitäten

    Zusätzlich habe ich eine Kamera in der Garage installiert, um bei Bedarf einen Blick auf das Garagentor zu werfen.

    Wichtig war mir aber vor allem eine visuelle Statusanzeige:

    • 🟢 Grün → Tor geschlossen
    • 🟡 Gelb → Tor bewegt sich
    • 🔴 Rot → Tor geöffnet

    Die Statusänderungen über die Magnetschalter werden in Home Assistant nahezu verzögerungsfrei aktualisiert und haben sich im Alltag als sehr zuverlässig erwiesen.


    🎨 Statusanzeige mit Button‑Card

    Für die Anzeige habe ich eine custom:button-card verwendet.

    YAML-Code für die Button‑Card:

    type: custom:button-card
    entity: sensor.garagentor_status
    name: Garagentor
    show_state: false
    tap_action:
      action: call-service
      service: switch.toggle
      service_data:
        entity_id: switch.garagentor
    color_type: icon
    styles:
      card:
        - display: flex
        - align-items: center
        - justify-content: center
      icon:
        - width: 50%
        - height: 50%
    state:
      - value: error_on
        icon: mdi:garage-alert-variant
        color: red
      - value: error_off
        icon: mdi:garage-alert-variant
        color: yellow
      - value: normal
        icon: mdi:garage-variant
        color: lightgreen
      - value: other
        icon: mdi:garage-variant
        color: grey

    Bedeutung der Stati:

    • normal → Tor vollständig geschlossen
    • error_off → Tor befindet sich in Bewegung
    • error_on → Tor vollständig geöffnet
    • other → Fehlerzustand oder unbekannte Position

    🔧 Externer Template‑Sensor

    Die Entity sensor.garagentor_status liefert den aktuellen Status.
    Diese wird über einen Template‑Sensor ermittelt.

    Da der digitale und der analoge Eingang jeweils unterschiedliche Endpositionen abbilden, werden beide Sensorwerte kombiniert, um den exakten Zustand des Garagentors zuverlässig zu bestimmen.

      - sensor:
          - name: "Garagentor Status"
            unique_id: "garagentor_status"
            state: >-
              {% set bin = states('binary_sensor.shelly1g3_28372f2ad118_input_100') %}
              {% set analog = states('sensor.garagentor_input_101_analog') %}
              {% if analog == 'unknown' and bin == 'on' %}error_on{% 
              elif analog == 'unknown' and bin == 'off' %}error_off{% 
              elif analog == '0.0' and bin == 'off' %}normal{% 
              else %}other{% endif %}

    Dieser externe Template Sensor wurde in einer separaten YAML-Datei (/homeassistant/sensors/garagentor.yaml) definiert und in der configuration.yaml wie folgt eingebunden:

    📝 Ergebnis:

    • Zustand wenn das Tor geschlossen ist:
    image

    • Zustand wenn das Tor gerade schließt ist:
    image

    • Zustand wenn das Tor komplett geöffnet ist:
    image

    👉 Fazit

    • zuverlässige Statusanzeige ohne Cloud
    • minimale Hardware‑Kosten
    • vollständig lokal in Home Assistant
    • leicht auf andere Garagentorantriebe übertragbar

    ECOVACS Deebot – Vollautomatischer Reinigungsplan – Mit Release 2026.3

    In diesem Beitrag stelle ich mein vollständig automatisiertes Setup vor, mit dem ich meinen ECOVACS Deebot T10 Omni komplett lokal über Home Assistant steuere – ohne App-Zwang und ohne Cloud-Abhängigkeit.

    📦 Funktionsumfang des Setups

    • ✅ Plan 1 – zeitgesteuert
    • ✅ Plan 2 – zeitgesteuert
    • ✅ Plan 3 – Sofortstart per Button
    • ✅ Raum-Mapping (Helper → Ecovacs Areas)
    • ✅ Modus-Mapping (z. B. „Nur Saugen“ → „Vacuum-Only“)
    • ✅ Wochentagssteuerung
    • ✅ Mushroom-Dashboard zur kompletten Bedienung

    Hinweis: Da verschiedene Ecovacs-Modelle unterschiedliche Area-IDs und Modusbezeichnungen nutzen, muss das Setup ggf. angepasst werden.


    🖥️ Mein Dashboard

    • Plan 1 & Plan 2 (jeweils Uhrzeit + Räume)
    • Sofortstart (Plan 3) mit eigener Raumauswahl
    • Wochentagsauswahl
    • Aktueller Roboterstatus
    • Action-Buttons (Pause, Stop, Dock, Start)
    ecovacs

    1️⃣ Benötigte Helfer (manuell anlegen)

    Startzeiten – Plan 1 &2

    input_datetime.sr_plan1_zeit
    input_datetime.sr_plan2_zeit

    Wochentage – Plan 1

    input_boolean.sr_plan1_mo
    input_boolean.sr_plan1_di
    input_boolean.sr_plan1_mi
    input_boolean.sr_plan1_do
    input_boolean.sr_plan1_fr
    input_boolean.sr_plan1_sa
    input_boolean.sr_plan1_so

    Wochentage – Plan 2

    Analog zu Plan 1:

    input_boolean.sr_plan2_mo
    ...
    ...
    input_boolean.sr_plan2_so

    Raumauswahl – Plan 1 / 2 / 3

    Die Namen müssen exakt so heißen (X = 1, 2 oder 3):

    input_boolean.sr_planX_ankleide
    input_boolean.sr_planX_kueche
    input_boolean.sr_planX_wohnzimmer
    input_boolean.sr_planX_schlafzimmer
    input_boolean.sr_planX_flur
    input_boolean.sr_planX_flur_eingang
    input_boolean.sr_planX_bad
    input_boolean.sr_planX_buero_rene
    input_boolean.sr_planX_buero_sandra

    Reinigungsmodus pro Plan

    input_select.sr_planX_modus

    Optionen:

    • Saugen & Wischen
    • Nur Saugen
    • Nur Wischen
    • Wischen nach Saugen

    2️⃣ Modus-Mapping (Dashboard → Ecovacs)

    Der Deebot akzeptiert intern nur folgende Modi:

    • Vacuum & Mop
    • Vacuum-Only
    • Mopping
    • Mop after Vacuum

    Das Mapping erfolgt später direkt in der Automation.


    3️⃣ Raum-Mapping (Helper → Ecovacs Areas)

    Da der Roboter beispielsweise nur kuche oder badezimmer versteht, müssen die Helfer entsprechend gemappt werden.


    4️⃣ Automation – Zeitplan Plan 1 & Plan 2

    Diese Automation enthält:

    • Zeit-Trigger per time_pattern
    • Wochentagsprüfung
    • Raum-Reihenfolge
    • Modus-Mapping
    • cleaning_area_id (entscheidend!)

    📜 Komplette Automation (YAML)

    alias: "Staubsauger: Zeitplan Steuerung Plan 1 & 2"
    description: >
      Führt die Reinigung basierend auf den Dashboard-Einstellungen für Plan 1 und 2 aus.
    mode: parallel
    
    ##############################################################
    # ZEIT-TRIGGER – moderne & zuverlässige Methode
    ##############################################################
    trigger:
      - platform: time_pattern
        minutes: "*"
        seconds: 0
    
    ##############################################################
    # VARIABLEN – Zeitvergleich & aktiver Plan
    ##############################################################
    variables:
      aktuelle_zeit: "{{ now().strftime('%H:%M') }}"
      plan1_zeit: "{{ states('input_datetime.sr_plan1_zeit')[:5] }}"
      plan2_zeit: "{{ states('input_datetime.sr_plan2_zeit')[:5] }}"
    
      aktiver_plan: >
        {% if aktuelle_zeit == plan1_zeit %}
          plan1
        {% elif aktuelle_zeit == plan2_zeit %}
          plan2
        {% else %}
          none
        {% endif %}
    
    ##############################################################
    # CONDITIONS – nur weitermachen, wenn Plan aktiv + Wochentag aktiv
    ##############################################################
    condition:
      - condition: template
        value_template: "{{ aktiver_plan != 'none' }}"
    
      - condition: template
        value_template: >
          {% set tage = {
            'mon': 'mo',
            'tue': 'di',
            'wed': 'mi',
            'thu': 'do',
            'fri': 'fr',
            'sat': 'sa',
            'sun': 'so'
          } %}
          {% set heute = tage[now().strftime('%a') | lower] %}
          {{ is_state('input_boolean.sr_' ~ aktiver_plan ~ '_' ~ heute, 'on') }}
    
    ##############################################################
    # ACTIONS
    ##############################################################
    action:
      - variables:
    
          ########################################################
          # ROOM MAPPING – Helper → Ecovacs Area-ID
          ########################################################
          area_map:
            ankleide: ankleide
            kueche: kuche
            wohnzimmer: wohnzimmer
            schlafzimmer: schlafzimmer
            flur: flur
            flur_eingang: flur_eingang
            bad: badezimmer
            buero_rene: arbeitszimmer
            buero_sandra: arbeitszimmer_dg
    
          ########################################################
          # DEINE gewünschte Reinigungsreihenfolge (1–9)
          ########################################################
          sortierte_reihenfolge:
            - wohnzimmer
            - kueche
            - bad
            - schlafzimmer
            - flur_eingang
            - flur
            - ankleide
            - buero_rene
            - buero_sandra
    
          ########################################################
          # Räume prüfen in exakt deiner Wunschreihenfolge
          ########################################################
          gewaehlte_bereiche: >
            {% set ns = namespace(found=[]) %}
            {% for helper in sortierte_reihenfolge %}
              {% if is_state('input_boolean.sr_' ~ aktiver_plan ~ '_' ~ helper, 'on') %}
                {% set ns.found = ns.found + [area_map[helper]] %}
              {% endif %}
            {% endfor %}
            {{ ns.found }}
    
          ########################################################
          # Reinigungsmodus lesen & korrekt mappen
          ########################################################
          dashboard_modus: "{{ states('input_select.sr_' ~ aktiver_plan ~ '_modus') }}"
    
          ecovacs_modus: >
            {% set map = {
              'Saugen & Wischen': 'Vacuum & Mop',
              'Nur Saugen': 'Vacuum-Only',
              'Nur Wischen': 'Mopping',
              'Wischen nach Saugen': 'Mop after Vacuum'
            } %}
            {{ map[dashboard_modus] }}
    
      ##############################################################
      # Abbrechen wenn kein Raum gewählt
      ##############################################################
      - condition: template
        value_template: "{{ gewaehlte_bereiche | count > 0 }}"
    
      ##############################################################
      # Roboter-Modus setzen
      ##############################################################
      - action: select.select_option
        target:
          entity_id: select.ecodeebot_reinigungsmodus_2
        data:
          option: "{{ ecovacs_modus }}"
    
      ##############################################################
      # Reinigung starten – wichtig: cleaning_area_id
      ##############################################################
      - action: vacuum.clean_area
        target:
          entity_id: vacuum.ecodeebot_2
        data:
          cleaning_area_id: "{{ gewaehlte_bereiche }}"

    5️⃣ Sofortstart – Plan 3

    Plan 3 dient dem manuellen Start per Button – z. B. über das Mushroom-Dashboard.

    Komplette Automation (YAML)

    alias: "Staubsauger: Sofortstart Plan 3"
    description: Startet sofort die Reinigung basierend auf den ausgewählten Plan-3-Bereichen.
    mode: single
    
    trigger:
      - platform: event
        event_type: plan3_start
    
    action:
      - variables:
    
          # Mapping Helper → Ecovacs-Area-ID
          area_map:
            ankleide: ankleide
            kueche: kuche
            wohnzimmer: wohnzimmer
            schlafzimmer: schlafzimmer
            flur: flur
            flur_eingang: flur_eingang
            bad: badezimmer
            buero_rene: arbeitszimmer
            buero_sandra: arbeitszimmer_dg
    
          # Deine gewünschte Reinigungsreihenfolge (1–9)
          sortierte_reihenfolge:
            - wohnzimmer
            - kueche
            - bad
            - schlafzimmer
            - flur_eingang
            - flur
            - ankleide
            - buero_rene
            - buero_sandra
    
          # aktive Räume in definierter Reihenfolge sammeln
          gewaehlte_bereiche: >
            {% set ns = namespace(found=[]) %}
            {% for helper in sortierte_reihenfolge %}
              {% if is_state('input_boolean.sr_plan3_' ~ helper, 'on') %}
                {% set ns.found = ns.found + [area_map[helper]] %}
              {% endif %}
            {% endfor %}
            {{ ns.found }}
    
          # Dashboard-Modus lesen
          dashboard_modus: "{{ states('input_select.sr_plan3_modus') }}"
    
          # Ecovacs-Modus korrekt mappen
          ecovacs_modus: >
            {% set map = {
              'Saugen & Wischen': 'Vacuum & Mop',
              'Nur Saugen': 'Vacuum-Only',
              'Nur Wischen': 'Mopping',
              'Wischen nach Saugen': 'Mop after Vacuum'
            } %}
            {{ map[dashboard_modus] }}
    
      # wenn keine Räume ausgewählt → abbrechen
      - condition: template
        value_template: "{{ gewaehlte_bereiche | count > 0 }}"
    
      # Modus am Roboter setzen
      - action: select.select_option
        target:
          entity_id: select.ecodeebot_reinigungsmodus_2
        data:
          option: "{{ ecovacs_modus }}"
    
      # Reinigung starten
      - action: vacuum.clean_area
        target:
          entity_id: vacuum.ecodeebot_2
        data:
          cleaning_area_id: "{{ gewaehlte_bereiche }}"

    6️⃣ Mushroom Start-Button

    type: custom:mushroom-template-card
    primary: "JETZT STARTEN"
    icon: mdi:play-circle
    tap_action:
      action: fire-dom-event
      browser_mod:
        event: plan3_start

    ✅ Fazit

    Dieses Setup ermöglicht:

    • Vollautomatische Reinigungspläne (Plan 1 & 2)
    • Manuellen Sofortstart (Plan 3)
    • Frei konfigurierbare Räume & Modi
    • Perfekte Ecovacs-Kompatibilität
    • Komplett lokale Steuerung über Home Assistant

    Kein Cloud-Zwang. Keine App. Volle Kontrolle.

    Hier geht es zu weiteren Smart Home Projekten

    Zwischen Alpenpässen und Inselglück: Ein Roadtrip durch das Herz Mitteleuropas

    Nachdem unser großer Sommerurlaub nun hinter uns liegt und die Koffer wieder im Schrank verstaut sind, ist es Zeit, die Erlebnisse Revue passieren zu lassen.

    Es war eine Reise der Kontraste und Entdeckungen, die uns durch das historische Herz Mitteleuropas geführt hat. Von den barocken Gassen in Graz über die antiken Mauern Splits bis hin zur magischen Altstadt von Dubrovnik – unser Roadtrip war eine Tour durch die Geschichte und die wilde Natur der Adria.

    Über 2.500 Kilometer legten wir zurück, die uns von Erlangen über Österreich nach Kroatien, weiter zur Insel Korčula und schließlich über die grünen Landschaften von Ljubljana wieder zurück nach Hause führten. Ich nehme euch mit aufunser Abenteuer: den Weg von Franken bis tief an die glitzernde Adriaküste.


    🇦🇹 Graz – Zwischen Uhrenturm, Murinsel und marokkanischen Träumen

    Die ersten 500 km führten uns von Erlangen direkt nach Graz. Während unser Golden Retriever Didi die Autobahnkilometer eher skeptisch im Liegen verbrachte und deutlich machte, dass Autofahren nicht zu seinen Hobbys gehört, wurden wir bei der Ankunft mit herrlichstem Frühlingswetter belohnt. Unser erster Weg führte uns in den Augarten direkt an der Mur. Es war faszinierend zu beobachten, wie die Grazer nach dem Winter jede Sekunde Sonne aufsaugten – eine entspannte Atmosphäre, die uns sofort im Urlaub ankommen ließ.

    Kulinarik-Tipp: Ein echtes Highlight war unser Abendessen im Ya Habibi. Die orientalischen Gewürze der Tajine Essaouira haben uns sofort in unseren eigenen Marokko-Urlaub zurückversetzt. Besonders herzlich: Der Chef persönlich begrüßte uns am Tisch, und Didi wurde mit Wasser und Streicheleinheiten wie ein kleiner König empfangen. 🐾

    Die Stadt am Morgen: Stille über den Dächern

    Dank Didis innerer Uhr startete der nächste Tag bereits um 06:40 Uhr. Ich nutzte die Gunst der Stunde für einen Lauf durch das noch schlafende Graz. Mein Weg führte mich entlang der Mur, vorbei an der futuristischen Murinsel – einer schwimmenden Plattform aus Stahl und Glas, die wie eine Muschel im Fluss liegt. Dann ging es hinauf zum Schlossberg:

    • Die Zisterne: Dieses tiefe Wasserbecken ist ein Meisterwerk der Renaissance-Ingenieurkunst. Am frühen Morgen, ohne Touristenströme, strahlt dieser Ort eine fast meditative Ruhe aus. 💧
    • Wahrzeichen & Ausblicke: Der Weg führte mich am Glockenturm (der „Liesl“) vorbei zum berühmten Uhrenturm. Von hier oben hat man den perfekten Blick über die roten Ziegeldächer der Grazer Altstadt, die zum UNESCO-Welterbe gehört.

    Tipp für Entdecker: Den Abstieg über die Kriegssteige, die sich spektakulär am Felsen hinunterschlängelt, sollte man einmal zu Fuß gemacht haben. Später am Tag haben wir für den erneuten Aufstieg dann die Schlossbergbahn genutzt – mit 60 % Steigung ein echtes Erlebnis!


    🏛️ Split – Ein lebendiges Museum an der Adria

    Weitere 600 km später erreichten wir Split. Unsere Unterkunft war ein modernes Airbnb-Juwel – von außen ein typisch funktionaler Bau, innen jedoch ein geschmackvoll eingerichteter Traum und nur einen Kilometer von der Altstadt entfernt.

    Streifzüge durch das antike Erbe

    In Split ist die Geschichte nicht hinter Absperrungen, man lebt mittendrin. Wir ließen uns durch die labyrinthartigen Gassen des Diokletianpalasts treiben, der im 4. Jahrhundert als Altersruhesitz für den römischen Kaiser erbaut wurde. Dabei passierten wir das imposante Goldene Tor und bestaunten die riesige Statue von Gregor von Nin. Man sagt, das Reiben seines großen Zehs bringt Glück – wir es trotzdem nicht gemacht! 🏰

    Für die Sportlichen unter euch: Ein Lauf auf den Marjan, den bewaldeten Hausberg, ist ein absolutes Muss. Die unzähligen Treppenstufen brennen zwar in den Waden, aber die spektakulären Ausblicke auf die Adria und den Hafen von Split sind jede Anstrengung wert. Unterwegs traf ich sogar einen Pfarrer, der in Innsbruck studiert hatte – solche zufälligen Begegnungen machen das Reisen erst aus. 🌲

    Kulinarische Entdeckungen:

    • Das Eis der Gelateria Emiliana 🍦 wird in handgemachten Waffeln serviert und ist jeden Meter Umweg wert.
    Gelateria Emiliana
    • Für den authentischen Geschmack Dalmatiens gönnte ich mir ein Burek (gefüllte Teigtaschen) bei ST Burek – deftig, ehrlich und gut.

    ⛴️ Der Weg ins Inselparadies: Korčula

    Tag 5 stand ganz im Zeichen des Meeres. Wir wählten die malerische Küstenstraße, die uns über Omiš und Makarska bis zur neuen Pelješac-Brücke 🌉 führte. Das Bauwerk ist ein architektonisches Wunderwerk und erspart einem die Grenzformalitäten durch den schmalen Korridor von Bosnien-Herzegowina.

    Von Orebić setzte die Fähre uns schließlich nach Korčula über. In unserer Villa Vita in Vela Luka angekommen, fiel der Reisestress sofort von uns ab. Die Terrasse mit Blick auf die tiefblaue Bucht ist der perfekte Ort, um mit der Familie die Seele baumeln zu lassen. Doch die Idylle hatte einen kleinen Schatten: Mein Mäppchen mit allen wichtigen Dokumenten und Kreditkarten hatte ich bei einem Stop zum Einkaufen auf dem Autodach liegen lassen… Eine Lektion in Gelassenheit, die erst am nächsten Tag eine Wendung nehmen sollte. 🌊


    🏝️ Korčula – Wenn die Ruhe einkehrt und Wunder geschehen

    An Tag 6 begann endlich der entspannte Teil unseres Urlaubs. Während zu Hause oft das „Heckgeschwür“ des Alltags den Morgen bestimmt, konnte ich hier die absolute Freiheit genießen. Eine ausgedehnte Runde mit Didi durch die erwachende Natur gibt einem einfach 100 % Energie zurück. Nach einem ausgiebigen Frühstück auf unserer Terrasse mit direktem Blick auf das glitzernde Meer zog es mich wieder in die Laufschuhe.

    Gute 10 km standen auf dem Plan, um die nähere Umgebung zu erkunden. Es war ein Lauf wie aus dem Bilderbuch: absolute Stille, eine perfekte Strecke und immer wieder diese atemberaubenden Ausblicke. Unterwegs gab es eine besonders nette Begegnung mit einer Slowenin, die mit ihrem fünf Monate alten Golden-Retriever-Mädchen unterwegs war 🐾 . Der schönste Teil des Weges führte mich von Vela Luka entlang eines Küstentrails direkt am Wasser zurück zu unserer Unterkunft.

    Die Reisegruppe ist komplett

    Kaum zurück, hieß es auch schon: Warten auf Cara und ihren Freund Luca. Wir konnten die Fähre, die die beiden auf die Insel brachte, schon während unseres Mittagsspaziergangs ganz langsam in den Hafen einlaufen sehen. Didis Freude war grenzenlos, als er die beiden endlich begrüßen durfte. Ab jetzt sind wir zu fünft unterwegs! Cara und Luca hatten viel von ihrer beeindruckenden Gravel-Tour zu erzählen, die sie mit den Bikes von Österreich bis zu uns nach Dalmatien geführt hat. 🚲

    Das „Wunder“ von Korčula

    Mitten in die Nachmittagsidylle platzte dann der erlösende Anruf. Der Polizist, bei dem ich mich am Morgen erkundigt hatte, hielt Wort: Mein Mäppchen wurde gefunden! Und das Beste daran: Es war wohl noch komplett. Bargeld, alle Karten, Führerschein und Ausweis – alles soll noch da sein. Ein riesiges Dankeschön an die ehrlichen Finder und den hilfsbereiten Polizisten. Nächsten Dienstag, wenn wir die Insel verlassen, holen wir es bei der Station ab.

    Mein Zitat des Tages: „Leben meint es im Moment wirklich gut mit uns!“✨


    🌊 Klippensprünge und Lichtschatten an der Küste

    Der heutige Tag startete besonders herzlich und entspannt. Während ich mit Didi die erste Gassirunde des Tages drehte, herrschte in der Küche unserer Unterkunft bereits reges Treiben. Cara hatte zum Vatertag ein komplettes Frühstück vorbereitet – ein perfekter Start in den Tag, den wir gemeinsam  genossen, bevor wir uns aufmachten, die Insel weiter zu erkunden. ☕🥐

    Ein Sprung ins Ungewisse: Cliff Jumping bei Blato

    Unser erstes Ziel führte uns an einen spektakulären Cliff Jumping Spot südlich von Blato. Die schroffen Felsen und das tiefblaue Wasser wirkten gleichermaßen einladend wie herausfordernd. Da wir den Spot komplett für uns alleine hatten, stellte sich uns eine ganz besondere Herausforderung: Unsere Badesachen lagen noch im Auto! Nach kurzem Zögern siegte jedoch die Abenteuerlust und wir wagten den Sprung im „Adamskostüm“. Das Wasser war zwar noch recht kühl, aber der Adrenalinkick und das glasklare Nass waren jede Überwindung wert. Ein echtes Gefühl von Freiheit! 💦

    Žitna und Čara: Die zwei Gesichter der Insel

    Beseelt vom Klippensprung steuerten wir die Bucht von Žitna an. Schon vom Parkplatz aus bot sich uns ein Postkartenmotiv, das uns viel erhoffen ließ. Doch am Strand angekommen, folgte die Ernüchterung: Überall lag Müll und Plastik trieb im Wasser. Es ist wirklich schmerzhaft zu sehen, wie wir Menschen mit solchen Naturjuwelen umgehen. Eigentlich wollte ich hier noch einmal ins Wasser springen, aber das habe ich mir angesichts des Zustands verkniffen. Es ist traurig, dass die Natur hier das ganze Jahr über leidet, nur weil der Dreck nicht weggeräumt wird. 😔

    Unser letzter Stop führte uns nach Čara. Da wir uns noch in der Vorsaison befinden, wirkte der Ort fast wie ausgestorben. Wir schlenderten kurz durch die stillen Gassen, merkten aber schnell, dass das Leben hier wohl erst im Hochsommer so richtig erwacht.

    So kehrten wir zurück in unsere Unterkunft – mit den Bildern des erfrischenden Morgens im Kopf, aber auch einem mahnenden Blick auf die Zerbrechlichkeit dieser wunderschönen Küste.


    🏰 Korčula-Stadt: Ein Streifzug durch die Geschichte und Luxus im Hafen

    So langsam bin ich im richtigen Urlaubsfeeling angekommen. Der Morgen startete wieder mit einer wunderbar gemütlichen Runde mit Didi. Das Meer schon in der ersten Morgensonne zu genießen, hat etwas unglaublich Beruhigendes – man lässt den Alltag endgültig hinter sich. Nach einem entspannten Frühstück beschlossen wir, den Osten der Insel zu erkunden: Das Ziel war Korčula-Stadt.

    Ein praktischer Tipp für alle Roadtripper: Wenn man vom Westen der Insel kommt, kann man am oberen Kreisverkehr vor der Stadt kostenfrei parken. Von dort sind es nur wenige Gehminuten bis ins Zentrum. Wir starteten unseren Besuch mit einem Mittagessen nahe dem Plaza Luka Korčulanska. Für mich gab es – wie könnte es anders sein – ein hervorragendes Burek. Frisch gestärkt ließen wir uns durch die engen, fischgrätenartig angeordneten Gassen treiben.

    Wissenswertes zur Stadt: Korčula-Stadt wird oft als „kleines Dubrovnik“ bezeichnet. Die Altstadt liegt auf einer Halbinsel und ist von massiven Mauern umgeben. Eine architektonische Besonderheit: Die Gassen sind so angeordnet, dass sie im Sommer Schatten spenden, aber den kühlenden Wind (Mistral) durchlassen. Und natürlich begegnet man hier überall dem Erbe von Marco Polo, der hier geboren sein soll.

    Ein Hauch von Luxus: Die Emerald Kaia

    Ein echtes Highlight erwartete uns am Hafen. Dort lag die Emerald Kaia vor Anker – eine brandneue Superyacht der Extraklasse, die erst vor kurzem (April 2026) ihre Jungfernfahrt feierte. Mit ihrem futuristischen Design und dem riesigen Beach Club ist sie ein absoluter Blickfang. Es ist schon faszinierend, diesen Kontrast zwischen den jahrhundertealten Mauern der Stadt und modernster maritimer Luxustechnologie zu sehen. 🚢✨


    Sportlicher Ausklang: Trailrun zur Vela Spila

    Am frühen Abend packte mich dann wieder die sportliche Lust. Gemeinsam mit Cara startete ich zu einem ca. 12 km langen Lauf. Zuerst ging es auf meinem aktuell Lieblingstrail entlang der Küste Richtung Vela Luka. Während Cara nach einiger Zeit den Rückweg antrat, setzte ich mir ein höheres Ziel: die Vela Spila (die „Große Grotte“).

    Der Aufstieg zur Höhle, die etwa 130 Meter über Vela Luka liegt, war extrem zäh und fordernd. Doch oben angekommen, entschädigte der Ausblick über die Bucht für jede Schweißperle. Die Vela Spila ist eine der bedeutendsten prähistorischen Fundstätten Europas mit Funden, die bis zu 20.000 Jahre zurückreichen. Es ist ein ehrfurchtgebietendes Gefühl, an einem Ort zu stehen, der schon in der Steinzeit bewohnt war. Zurück ging es über einen schmalen Trail und mit ordentlich Pace entlang der Küste. 🏃‍♂️💨

    Mein Zitat des Tages: „Die schönsten Wege im Leben sind die, auf denen man ins Staunen gerät – egal, ob vor einer jahrhundertealten Mauer, einer modernen Superyacht oder oben auf dem Gipfel vor einer prähistorischen Grotte.“

    🌧️ Wenn das Wetter die Pause diktiert

    Der neunte Tag unserer Reise ist schnell zusammengefasst. Bereits in der Nacht hatte es immer wieder stark, phasenweise fast unwetterartig geregnet. Dieses ungemütliche Wetter zog sich leider auch durch den kompletten Vormittag bis hinein in den frühen Nachmittag. Wir nutzten die Zeit einfach, um mal komplett abzuschalten.

    Erst gegen 15:00 Uhr lockerte die Wolkendecke endlich auf und die Sonne kämpfte sich mühsam wieder heraus. Sandra und ich fackelten nicht lange, packten Didi ein und brachen zu einer größeren Wanderung in der Umgebung auf. Die Runde war am Ende gute 5 km lang und belohnte uns mit wunderschönen Ausblicken auf die versteckten Buchten und das hügelige Inselinnere. Auch wenn dieser Tag nicht mit den ganz großen Abenteuern glänzen konnte, war er doch unglaublich erholsam – und genau dafür ist der Urlaub schließlich da. 🌊🏡


    ☀️ Küstenpfade, der Gipfelsturm zum Hum und ein unvergessliches Abendessen

    Der zehnte Tag unseres Urlaubs – ein Sonntag – startete dank Didis bewährtem Weckmanöver bereits um 7:15 Uhr. Der Blick aus dem Fenster entschädigte jedoch sofort für das frühe Aufstehen: Ein strahlend blauer Himmel und keine Wolke in Sicht! Nach einem ersten, ruhigen Kaffee mit Blick auf das noch still liegende Meer starteten wir mit einer entspannten Gassirunde in den Tag. Als wir zurückkamen, waren auch Cara, Luca und der Rest der Truppe aufgewacht und das Frühstück war schon gedeckt. Perfekt!

    Zwischen Olivenhainen an der Nordküste

    Frisch gestärkt zog es Sandra, Didi und mich wieder hinaus. Auf dem Plan stand eine kleinere, rund 7 km lange Wanderung an der malerischen Nordküste von Korčula. Unser Startpunkt war der kleine, idyllische Hafen von Prigradica. Zuerst führte uns der Weg sanft bergauf, mal über schmale Schotterpfade, mal ein kurzes Stück entlang der Straße. Nach etwa 500 Metern bogen wir jedoch wieder nach rechts ab und wanderten durch wunderschöne, alte Olivenbaum-Wälder, bis sich der Weg wieder hinunter zur Küste schlängelte. Die letzten zwei Kilometer direkt am Wasser entlang zurück zum Auto waren pures Urlaubsglück. 🫒🌿

    Der Berg ruft: Trailrun zur Festung Hum

    Nach einer kurzen Verschnaufpause in unserer Ferienunterkunft musste ich endlich ein Projekt in die Tat umsetzen, das mir schon die ganze Woche im Kopf herumging. Von unserer Terrasse aus hatte ich jeden Tag den Sendemast auf dem gegenüberliegenden Berg im Blick – genau dort befindet sich die alte Festung Hum (Hum utvrda). Die Festung selbst sieht man von unten zwar nicht, aber der Drang, dort hochzulaufen, war einfach zu groß.

    Also schnürte ich die Laufschuhe für einen anspruchsvollen Trailrun von Vela Luka hinauf zur Hum-Festung, weiter zum Aussichtspunkt Greben Belvedere und zurück über Potirna. Am Ende wurden es 12 knackige Kilometer mit satten 500 Höhenmetern! Der Aufstieg zur Festung hatte es in sich: ein reiner Single-Trail, der unbarmherzig steil bergauf führte. Oben angekommen, war die Aussicht über die Inselwelt jedoch absolut grandios. Weiter ging es zum Greben Belvedere, dieses Mal teilweise über asphaltierte Straßen, bevor die letzten 300 Meter wieder über einen sehr steilen und steinigen Pfad führten. Der Rückweg verlief hauptsächlich über geteerte Straßen – was meinen Beinen allerdings ganz recht war, denn sie waren mittlerweile so platt, dass ich froh war, mich nicht mehr auf den Untergrund konzentrieren zu müssen. 🏃‍♂️⛰️

    Gastfreundschaft pur in der Konoba Siloko

    Da sich unsere Zeit auf Korčula langsam dem Ende neigt, wollten wir den Sonntagabend mit einem richtig guten Essen krönen. Bei meinen morgendlichen Gassirunden war ich immer wieder an der Konoba Siloko vorbeigekommen, und genau dorthin zog es uns heute. Da auf der Insel noch absolute Vorsaison herrscht, waren wir die einzigen Gäste und hatten die volle Aufmerksamkeit unseres Kellners Dragan, der einen absoluten Spitzenjob machte.

    Wir brauchten nicht einmal eine Speisekarte, sondern vertrauten blind seinen Empfehlungen. Eine fantastische Entscheidung! Als Vorspeise servierte er uns ein sensationelles Thunfisch-Tatar, gefolgt von einem fangfrischen Fisch als Hauptgang, der absolut perfekt gebraten und geschmacklich ein Traum war. Begleitet wurde das Ganze von einem leichten, süffigen Hauswein. Zum krönenden Abschluss ließen wir uns noch zu einer Rožata überreden – dem traditionellen dalmatinischen Karamellpudding. Es war ohne Zweifel das beste Abendessen unseres bisherigen Urlaubs! 🐟🍷

    Die Geschichte hatte nur einen kleinen Haken: Die Konoba akzeptierte an diesem Abend nur Bargeld, da das Kartengerät noch nicht aktiv war. Ein kurzer Blick ins Portemonnaie verriet uns, dass wir gerade einmal 20 Euro bar dabei hatten. Doch Dragan winkte lachend ab – in der Vorsaison läuft alles entspannter. Es war überhaupt kein Problem, er meinte einfach, wir sollen morgen vorbeikommen und bezahlen. Diese Herzlichkeit macht die Konoba Siloko zu einer echten Empfehlung!

    Mein Zitat des Tages: „Manchmal ist das beste Rezept für einen unvergesslichen Abend, einfach die Speisekarte zuzuklappen und Vertrauen zu haben.“ ✨


    🏰 Abschied von der Insel, ein gelöstes Rätsel und die Perle der Adria

    Der heutige Tag begann mitten in der Nacht – zumindest gefühlt. Um pünktlich 5:15 Uhr schrillte der Wecker, damit wir sicherstellen konnten, dass Cara und Luca ihre Fähre um 6:20 Uhr erwischen. Nachdem das Weckkommando erfolgreich ausgeführt war und die beiden sich auf den Weg machten, kletterten Sandra und ich dankbar noch einmal zurück ins Bett, bis unser eigener Wecker uns um 7:30 Uhr endgültig in den Tag holte. Dann hieß es: Auto packen, Abschied nehmen von Vela Luka und ab zur Fähre von Korčula-Stadt hinüber nach Orebić.

    Das Fährglück war auch heute wieder auf unserer Seite. Kaum hatten wir uns eingereiht, standen wir nach kurzer Wartezeit schon auf dem Schiff. So setzten wir bereits um kurz nach elf wieder unsere Reifen auf das kroatische Festland. Die Reise ging weiter, doch vor uns lag noch ein ganz besonderer Zwischenstopp.

    Krimistimmung in Metković: Das Rätsel um das Mäppchen

    Unser erster Weg führte uns zur Polizeistation in Metković, direkt an der Grenze zu Bosnien-Herzegowina. Dort sollte ich endlich mein verlorenes Mäppchen wiederbekommen. Die Beamten vor Ort waren unglaublich nett und unkompliziert. Kurz darauf hielt ich es tatsächlich wieder in den Händen: Mein Führerschein, der Personalausweis und sogar 75 Euro Bargeld waren noch da! Das Kuriose allerdings: Alle anderen Karten (Kreditkarten etc.) fehlten spurlos. Ob sie jemand gezielt herausgenommen hat oder sie beim Sturz verloren gingen, bleibt wohl ein Rätsel. Der Zustand des Mäppchens spricht jedenfalls Bände: Es ist komplett demoliert und plattgedrückt, als wäre ein ausgewachsener LKW darübergerollt. 🚗💥

    Als kleines Dankeschön hatte ich den Polizisten eine Packung Merci mitgebracht. Der Beamte erklärte mir zwar pflichtbewusst, dass sie keine Geschenke annehmen dürfen, aber irgendwie habe ich die Schachtel beim Gehen ganz „aus Versehen“ auf seinem Schreibtisch liegen lassen. Ein bisschen Karma-Punkte schaden ja nie!


    Ankunft in Dubrovnik: Ein Zuhause für uns und das Auto

    Frisch legitimiert ging die Fahrt weiter in den Süden nach Dubrovnik. Nach der Ankunft bezogen wir schnell unser Apartment, das etwa 20 Gehminuten von der berühmten Altstadt entfernt liegt. Die Unterkunft ist ein echter Glücksgriff: Schön groß, wunderbar geräumig, mit einem separaten Schlafzimmer und – was in Dubrovnik Gold wert ist – einem eigenen privaten Stellplatz für das Auto. Die Parkpreise hier in der Stadt sind nämlich absolut astronomisch, da ist ein sicherer Parkplatz inklusive der halbe Urlaubsgewinn.

    Am späten Nachmittag zog erst einmal ein kräftiges Gewitter über die Stadt hinweg und kühlte die Luft ab. Als der Regen nachließ, nutzten wir die Gunst der Stunde für einen ersten Spaziergang hinunter zur Altstadt. Unser Golden Retriever Didi war von der neuen, wuseligen Umgebung allerdings mäßig begeistert. Er ist und bleibt eben ein echtes Landei und liebt seine Ruhe. Aber nach den vielen Stunden im Auto tat ihm die Bewegung sichtlich gut. 🐾

    Kulinarischer Tagesausklang: Otto Street Food

    Nach diesem langen Fahrtag hatten wir keine Lust mehr auf ein großes Restaurant-Gedöns. Das Abendessen fiel deshalb relativ unkompliziert, aber verdammt lecker aus: Wir haben uns Essen bei Otto Street Food geholt. Was soll ich sagen? Manchmal sind es die einfachen Dinge, die den Tag perfekt machen. Der Burger war absolute Spitzenklasse, die Pommes knusprig und der Caesar Salad knackig und frisch. Genau das Richtige, um den ersten Abend in dieser geschichtsträchtigen Stadt einzuläuten.

    Mein Zitat des Tages: „Manchmal kehren Dinge zu uns zurück, um uns zu zeigen, dass Ehrlichkeit existiert – auch wenn sie dabei aussehen, als wären sie unter die Räder gekommen.“ ✨


    🏰 Über den Dächern der „Perle er Adria“ und die Flucht in die grüne Oase

    Unser erster richtiger Tag in Dubrovnik startete früh – leider etwas unfreiwillig. Didi hatte wieder eine sehr unruhige Nacht hinter sich und stand bereits um 5:00 Uhr sehnsüchtig an meinem Bett. Um 7:00 Uhr hieß es dann für uns alle: Aufstehen! Unser Plan war es, so früh wie möglich auf die berühmte Stadtmauer zu kommen, um der extremen Hitze und den Touristenmassen zu entgehen. Also drehte ich eine kurze Gassirunde mit Didi, machte einen schnellen Abstecher zum Bäcker, sammelte Sandra ein und kurz darauf saßen wir auch schon in einem Bolt-Taxi Richtung Pile-Tor (Pile Gate), dem Haupteingang zur Altstadt.

    Zu dieser Uhrzeit war es vor den Toren noch angenehm leer. Wir hatten uns bereits am Vorabend den Dubrovnik Pass für zwei Tage gekauft. Mit rund 100 Euro pro Person tut das im ersten Moment zwar im Geldbeutel weh, aber es nimmt einem den Stress: Man muss nicht permanent überlegen, ob sich dieser oder jener Eintritt lohnt, sondern geht einfach rein. Dank des Passes konnten wir auch direkt und ohne jede Wartezeit die Stadtmauer besteigen.

    Atemberaubende Ausblicke auf der 2-Kilometer-Runde

    Schon bei den ersten Schritten unter strahlend blauem Himmel merkten wir, dass es ein verdammt heißer Tag werden würde. Die rund zwei Kilometer lange Runde auf der Stadtmauer ist jede Anstrengung wert, auch wenn es gefühlt unzählige Stufen rauf und runter geht. Die Ausblicke auf die berühmten roten Ziegeldächer der Altstadt auf der einen und das tiefblaue, glitzernde Meer auf der anderen Seite sind schlichtweg atemberaubend. Es waren zwar schon einige andere Frühaufsteher unterwegs, aber die Stimmung war total entspannt – man lief sich auf der Runde immer wieder über den Weg und grüßte sich fast schon vertraut.

    Nachdem wir die Mauer wieder verlassen hatten, steuerten wir direkt die Festung Lovrijenac (Tvrđava Lovrjenac) an, die majestätisch auf einem Felsen außerhalb der Stadtmauer thront. Sie ist nicht nur geschichtlich extrem faszinierend, sondern auch ein absoluter Pilgerort für Popkultur-Fans: Hier wurden zahlreiche Szenen für die Serie Game of Thrones (als Roter Bergfried von Königsmund) gedreht. Der Blick von hier oben zurück auf die Stadtmauer ist phänomenal! 🎬⚔️


    Zwischen Kreuzfahrt-Massen und einer Oase der Ruhe

    Von der Festung zog es uns noch einmal zurück in die Gassen der Altstadt. Zum Glück fanden wir schnell ein paar Wege abseits der Hauptrouten. In den engen, schattigen Seitengassen konnten wir die kühle Luft und die historische Ruhe so richtig genießen. Ein absoluter Glücksgriff war unser Stopp in der Eisdiele und dem Café Gianni nahe dem Hafen. Es entpuppte sich als wahre Oase der Ruhe – und das Beste: Didi wurde hier wie ein Ehrengast behandelt, bekam sofort frisches Wasser und sogar ein paar Hunde-Cookies an den Tisch gebracht! 🐾🍦

    Als wir danach jedoch wieder den alten Hafen und die Hauptstraße Stradun erreichten, traf uns fast der Schlag: Die Massen von den riesigen Kreuzfahrtschiffen waren mittlerweile in die Stadt eingefallen. Uns wurde es schlagartig zu wuselig, laut und eng. Zeit für uns, das Weite zu suchen und uns für eine ausgiebige Mittagspause in unser kühles Apartment zurückzuziehen.

    Durchatmen im Waldpark Velika i Mala Petka

    Da sowohl Sandra als auch Didi sichtlich k.o. von der drückenden Wärme und dem Trubel in der Altstadt waren, dehnten wir die Mittagspause bis in den Nachmittag aus. Um den Tag entspannt ausklingen zu lassen, suchten wir nach einem Kontrastprogramm zur steinernen Stadt und fanden es im Waldpark Velika i Mala Petka (Park šuma Velika i Mala Petka).

    Sobald man die Stadt hinter sich lässt und diesen geschützten Wald betritt, fällt der Stress sofort ab. Es war eine unglaubliche Erholung, unter den schattigen Bäumen spazieren zu gehen. Vor allem Didi hat es sichtlich genossen, endlich wieder Waldboden unter den Pfoten zu haben und der lauten Umgebung der Stadt komplett zu entfliehen. Ein perfekter, grüner Abschluss für einen geschichtsträchtigen Tag.

    Mein Zitat des Tages: „Die schönsten Orte verlangen oft, dass man früh aufsteht, um ihre wahre Magie zu sehen – und dass man weiß, wann es Zeit ist, sie wieder den Massen zu überlassen.“ ✨


    🌊 Didis Badespaß vor großem Publikum, Trailrun und der perfekte (gratis) Sonnenuntergang

    Unser zweiter Tag in Dubrovnik begann ganz entspannt. Nach einer kurzen Morgenrunde mit Didi und dem obligatorischen Abstecher zur Bäckerei, um uns mit frischen Leckereien zu stärken, ließen wir den Vormittag ruhig angehen. Erst gegen 10:00 Uhr machten wir uns auf den Weg, um die Stadt weiter zu erkunden. Um Didi und uns den morgendlichen Stress durch den Stadtverkehr zu ersparen, orderten wir wieder ein Bolt-Taxi.

    Kultur im Test: Zwischen moderner Kunst und maritimen Enttäuschungen

    Unser erstes Ziel war das MOMAD (Museum of Modern Art Dubrovnik / Umjetnička galerija Dubrovnik). Auch wenn Sandra und ich keine klassischen Kunstexperten sind, verspricht ein Museum für moderne Kunst eigentlich immer etwas Außergewöhnliches. Hier wurden wir allerdings enttäuscht: Weder Sandra noch mir hat die Ausstellung zugesagt.

    Da Didi verständlicherweise nicht mit hineindurfte, teilten wir uns auf. Während Sandra zuerst die Kunst inspizierte, suchte ich mit Didi einen Zugang zum Meer – und fand den absoluten Jackpot-Platz! Abseits des Trubels konnte ich Didi von der Leine lassen. Er fackelte nicht lange, stürzte sich in die Fluten, tobte im glasklaren Wasser und fing sogar an zu tauchen. Das Beste daran: Direkt über uns auf der mächtigen Stadtmauer spazierten die Touristen entlang. Als sie Didi beim Tauchen entdeckten, blieben einige von ihnen stehen und amüsierten sich köstlich über unseren wasserverrückten Golden Retriever. Ein echter Social-Media-Moment in Echtzeit! 🐾💦 Danach wechselten Sandra und ich: Ich warf einen schnellen Blick ins Museum, während Sandra mit Didi bei einem nahegelegenen Café auf mich wartete.

    Später wollten wir noch dem Maritimen Museum (Pomorski muzej) in der Altstadt eine Chance geben. Doch auch das war ein ziemlicher Reinfall. Im Grunde genommen war es nur ein einziger großer Raum. Nach gerade einmal fünf Minuten war ich durch – das kann man kaum als Museum bezeichnen. Unser Fazit: Die wahre Kunst und Geschichte Dubrovniks erlebt man definitiv draußen in den Gassen und nicht in diesen Ausstellungen.

    Auf dem Rückweg zu unserem Apartment gönnten wir Didi noch einmal eine ausgiebige Abkühlung im Meer. Er genoss das Bad in vollen Zügen und zog wieder die Blicke von hunderten Touristen auf sich. Man hatte fast das Gefühl, die Menschen hier hätten noch nie einen Hund gesehen, der das Wasser so abgöttisch liebt!


    Sportliche Motivation gegen die 30-Euro-Gondel

    Nach einer erholsamen Nachmittagspause packte mich der sportliche Ehrgeiz. Ich wollte unbedingt auf den Hausberg von Dubrovnik, den Berg Srđ. Wenn man sieht, dass ein Ticket für die Seilbahn rauf und runter stolze 30 Euro pro Person kostet, motiviert mich das nur umso mehr, die Laufschuhe zu schnüren und die schmalen, steilen Trails aus eigener Kraft zu bezwingen!

    Bei 25 Grad und purer Sonne wurde der Aufstieg zu einer schweißtreibenden Angelegenheit. Doch nach knackigen 400 Höhenmetern und einer Strecke von insgesamt 9 Kilometern hatte ich den Aussichtspunkt Dubrava (Dubrovnik vidikovac) erreicht. Der Trailrun hat unglaublich Spaß gemacht und die Aussicht auf Dubrovnik und die umliegende Inselwelt von hier oben ist einfach grandios.

    Oben angekommen erlebte ich allerdings eine absolute Frechheit: Da zahlen die Leute schon 30 Euro für die Gondelfahrt nach oben, und dann wird am besten Fotospot noch einmal dreist eine Gebühr von 3 Euro verlangt, nur um ein Bild machen zu dürfen! Eine kommerzielle Abzocke, die man wirklich nicht unterstützen muss.

    Das Highlight am Abend: Sonnenuntergang for free

    Nachdem wir am Abend in einem kleinen, nahegelegenen Restaurant ganz einfach aber lecker essen waren, hatten wir eine zündende Idee: Wir setzten uns alle ins Auto und fuhren die Serpentinenstraße noch einmal hoch zum Aussichtspunkt Dubrava, um den Sonnenuntergang gemeinsam anzuschauen.

    Was für eine Entscheidung! Der Sonnenuntergang war absolut spektakulär, die Atmosphäre friedlich und das Beste: Es hat uns keinen Cent gekostet. Die Fahrt mit dem eigenen Auto ist völlig unkompliziert und auch das Parken oben ist komplett kostenlos. Ein absoluter Geheimtipp für alle Dubrovnik-Besucher, die der Seilbahn-Abzocke entgehen wollen. 🌅✨

    Zurück im Apartment hieß es dann: Koffer packen. Die Zeit in Süddalmatien geht zu Ende. Morgen wartet das nächste große Kapitel unseres Roadtrips auf uns: Es geht weiter Richtung Slowenien in die grüne Hauptstadt Ljubljana!

    Mein Zitat des Tages: „Die schönsten Erlebnisse kann man nicht kaufen – man findet sie, wenn ein Hund glücklich im Meer taucht oder man aus eigener Kraft den Gipfel stürmt, während andere für die Aussicht bezahlen.“ 🌍 🥾


    🇸🇮 Vom Süden in den grünen Norden – Willkommen im charmanten Ljubljana

    Der heutige 15. Tag unseres Roadtrips startete extrem früh. Bereits um 6:00 Uhr schrillte der Wecker, denn vor uns lag die längste Etappe der gesamten Reise: Von Dubrovnik im tiefen Süden Kroatiens ging es hinauf nach Ljubljana, die Hauptstadt Sloweniens. Gute 660 Kilometer und rund 7,5 Stunden Fahrtzeit standen auf dem Programm. Natürlich haben wir unterwegs genügend Pausen eingelegt, damit sich Didi regelmäßig die Beine vertreten und im Schatten abkühlen konnte.

    Es war faszinierend zu beobachten, wie sich die Landschaft veränderte: Kaum hatten wir die Grenze nach Slowenien überquert, wich die schroffe, mediterrane Küstenlandschaft Dalmatiens einem saftigen Grün. Mit den dichten Wäldern und sanften Bergen kamen wir uns fast schon vor wie in Österreich. In Ljubljana angekommen, steuerten wir direkt unsere Unterkunft an und hatten wieder einmal absolutes Glück: Ein wunderschönes, großes Ein-Zimmer-Apartment in einem komplett neu renovierten Haus, das alles bot, was man für zwei Nächte braucht. Auch die Lage war ein Traum – in einer ruhigen Nebenstraße und kaum 200 Meter vom berühmten Tivoli-Park entfernt.

    Aufatmen im Tivoli-Park und slowenische Gemütlichkeit

    Nachdem wir das Auto geparkt und kurz verschnauft hatten, lösten wir direkt unser Versprechen an Didi ein. Wir schnappten ihn und starteten zu einer großen, ausgiebigen Runde durch den weitläufigen Tivoli-Park. Nach dem stressigen Pflaster und den Menschenmassen in der Altstadt von Dubrovnik blühte unser Golden Retriever hier regelrecht auf. Man merkte ihm sofort an, wie viel wohler er sich im Grünen fühlte! 🐾🌳

    Aber auch auf Sandra und mich sprang der Funke sofort über. Ljubljana hat uns vom ersten Moment an begeistert – eine unglaublich saubere, entspannte und angenehme Stadt, die eine wunderbare Ruhe ausstrahlt.

    Kulinarische Entdeckungen: Deftige Küche und das beste Eis der Stadt

    Zum Abendessen zog es uns ins Slovenska Hiša – Figovec. Hier wird traditionelle, deftige slowenische Küche serviert. Das Essen war absolut fantastisch und unglaublich lecker, allerdings auch so reichhaltig, dass es für den späten Abend fast schon zu viel des Guten war. Trotzdem durfte der krönende Abschluss bei Sandra natürlich nicht fehlen: Ein gutes Eis! Also spazierten wir weiter zum Vigò, wo es aktuell das unbestritten beste Eis in ganz Ljubljana geben soll. Was soll ich sagen? Die Gerüchte stimmen, es war ein absoluter Traum! 🍦✨

    Auf dem Heimweg ließen wir uns noch ein wenig durch die wunderschön beleuchtete Altstadt entlang des Flusses treiben. Eine wirklich zauberhafte Stadt, die uns schon am ersten Abend komplett verzaubert hat.

    Mein Zitat des Tages: „Manchmal tut ein Landschaftswechsel nicht nur der Seele gut, sondern zeigt uns auch, dass das größte Urlaubsglück oft im tiefen Grün eines Stadtparks und einer Kugel perfektem Eis liegt.“ 🌍🇸🇮


    🏰 Asiatische Düfte, Dorfidylle in Krakovo und ein unvergesslicher Abschlussabend

    Unser Tag in Ljubljana begann gegen 7:30 Uhr. Obwohl Sandra und ich beide nicht besonders gut geschlafen hatten, hielt mich nichts in den Federn. Ich schnürte die Laufschuhe für eine 5 bis 6 Kilometer lange Runde durch den Tivoli-Park. Sandra nutzte die Zeit für eine gemütliche Morgenrunde mit Didi im selben Park. Um diese Uhrzeit war es unter den Bäumen noch herrlich ruhig, und ich lief kreuz und quer, um ein paar Kilometer zu sammeln. Genau als ich um die letzte Ecke bog, um den Park zu verlassen, kamen mir die beiden entgegen. Kurzentschlossen brach ich meinen Lauf ab und genoss stattdessen noch einen gemeinsamen Spaziergang im morgendlichen Grün.

    Nach einem schnellen Frühstück in unserem Apartment machten wir uns auf, die Stadt zu Fuß zu erobern. Unser erster Weg führte uns direkt zu den berühmten Drei Brücken (Tromostovje) und von dort weiter zur legendären Drachenbrücke (Zmajski most). Die steinernen Drachen an den Brückenköpfen sind wirklich genial und unglaublich detailliert gearbeitet – ein echtes Wahrzeichen! Gleich nebenan ließen wir uns über den lebhaften Wochenmarkt treiben. Zwischen den Ständen mit frischem Gemüse, reifem Obst, duftenden Kräutern und bunten Blumen herrschte ein buntes Treiben, dem man stundenlang einfach nur zuschauen könnte. 🧺🍎

    Geheimtipps abseits des Trubels: Das historische Krakovo

    Anschließend schlenderten wir ganz entspannt durch die Gassen zwischen Mestni trg und Stari trg (Stadtplatz und Alter Platz), die von vielen kleinen, charmanten Läden gesäumt sind. Ein absoluter Glücksgriff war unser Stopp in der winzigen Kaffeerösterei Mala Pražarna. Dort gönnten wir uns einen hervorragenden Cappuccino – ganz abseits des typischen Touristenstroms.

    Die Rösterei liegt im wunderschönen, historischen Viertel Krakovo. Wenn man hier durch die engen Gassen spaziert, vergisst man sofort, dass man sich in einer europäischen Hauptstadt befindet – plötzlich fühlt man sich wie in einem kleinen, idyllischen Dorf. Auf dem Rückweg Richtung Zentrum hatten wir extremes Glück: Auf den Straßen fand zufällig das Festivasia (ein asiatisches Food-Festival) statt, kombiniert mit dem ARTish-Kunsthandwerksmarkt. Kein Wunder, dass die Stadt so voller Leben war! Wir ergatterten an den unzähligen Ständen ein fantastisches Mittagessen, bevor wir uns in der Unterkunft eine wohlverdiente Pause gönnten. 🍜✨


    Der Schlossberg-Krimi und ein grandioses Final-Dinner

    Nach unserer Pause wollten wir am frühen Abend eigentlich ganz entspannt mit der Standseilbahn auf das Laibacher Schloss (Ljubljanski grad) fahren. Da wir allerdings etwas spät dran waren – es war schon kurz vor sieben –, hatte die Bahn ihren Dienst bereits eingestellt. Also beschlossen wir, ganz dekadent ein Taxi zu nehmen.

    Das erste Taxi kam auch nach fünf Minuten, doch als der Fahrer Didi sah, winkte er mürrisch ab und fuhr einfach ohne uns weiter. Also rief ich direkt bei der Taxizentrale an und schilderte die Situation. Das zweite Taxi war ein Volltreffer: Der Fahrer war selbst stolzer Hundebesitzer, super drauf und fuhr uns völlig tiefenentspannt den Berg hinauf zum Schloss. Nach der Besichtigung wollten wir eigentlich gemütlich den Berg hinunterwandern, allerdings war der erste Wanderweg wegen einer Sperrung dicht. Nach einem kleinen Umweg kamen wir schließlich um kurz nach 20:00 Uhr an unserem Ziel an: dem Restaurant Gostilnica 5-6 kg.

    Dieses Restaurant war unserem letzten Urlaubsabend mehr als würdig! Es liegt wunderschön, wir konnten herrlich draußen sitzen und das Essen war absolute Spitzenklasse. Satt und glücklich wanderten wir zu später Stunde ein letztes Mal durch die beleuchtete Altstadt und durch den nächtlichen Tivoli-Park zurück zu unserer Unterkunft. 🍷🥩

    Eine spontane Planänderung zum Wohl von Didi

    Eigentlich hatten wir geplant, die Heimreise zu splitten, über Salzburg zu fahren und dort am Sonntag noch den Tierpark zu besuchen. Als wir jedoch sahen, dass der Wetterbericht für den Sonntag drückende 31 Grad vorhersagte, stand die Entscheidung sofort fest: Das ist viel zu heiß für uns und vor allem für Didi. Wir cancelten kurzerhand das letzte Hotel und beschlossen, am nächsten Morgen direkt durchzufahren nach Hause nach Erlangen. Ein Roadtrip der Kontraste geht zu Ende – erschöpft, aber mit einem Rucksack voller unvergesslicher Erinnerungen!

    Mein Zitat des Tages: „Pläne sind dazu da, umgeworfen zu werden – besonders wenn es darum geht, den letzten Abend perfekt zu genießen und am Ende des Tages die beste Entscheidung für die vier Pfoten an unserer Seite zu treffen.“ 🐾🚗


    🚗 Kilometerfressen ohne Stau und der Blick auf das nächste Abenteuer

    Da wir am Vorabend beschlossen hatten, unseren geplanten Zwischenstopp in Salzburg der Vernunft und der extremen Hitze zu opfern, klingelte der Wecker heute Morgen um 7:30 Uhr. Das bedeutete als allererstes: Koffer zu, Apartment aufräumen und das Auto ein letztes Mal strategisch packen. Nachdem alles im Kofferraum verstaut war, nutzte ich die Zeit für eine letzte, gemütliche Abschiedsrunde mit Didi im Tivoli-Park.

    Da heute Pfingstsonntag war – was auch in Slowenien ein hoher Feiertag ist –, standen wir allerdings vor einer kleinen Herausforderung: Fast alle Bäckereien in der Stadt hatten geschlossen. Zum Glück wurden wir nahe der Innenstadt an einem Stand fündig, der frisches Burek verkaufte. Genau der richtige Proviant für eine lange Autofahrt! Um Punkt 9:00 Uhr hieß es dann endgültig: Servus Ljubljana, ab nach Hause Richtung Erlangen.

    Was soll ich sagen? Die Entscheidung, direkt durchzufahren, war goldrichtig. Nach sechs Stunden Fahrt kamen wir völlig entspannt und ohne einen einzigen Zentimeter Stau zu Hause an. Die knapp 600 Kilometer flogen fast wie im Flug an uns vorbei. Ein perfektes Ende für einen Roadtrip, der uns so viel geboten hat.


    🌍 Das Fazit unserer Reise: Kontraste, Kilometer und pures Glück

    Das war er also – unser erster großer Urlaub für dieses Jahr. Wenn ich die vergangenen 17 Tage Revue passieren lasse, bin ich einfach nur dankbar. Wir haben über 2.500 Kilometer zurückgelegt, haben die barocke Eleganz von Graz erlebt, sind durch die geschichtsträchtigen Gassen von Split und Dubrovnik geschlendert und haben auf Korčula ein kleines Inselparadies gefunden. Wir sind Trails gelaufen, haben prähistorische Grotten bestaunt und die unbezahlbare kroatische Gastfreundschaft abseits der Hauptsaison genossen. Und vor allem hat uns Didi mal wieder gezeigt, dass ein Urlaub im Grünen oder am Wasser mit Hund einfach unschlagbar ist.

    Für uns beginnt jetzt erst einmal eine kleine „Urlaubs-Durststrecke“ im heimischen Franken. Doch der nächste Meilenstein steht schon fest im Kalender: Ende Oktober / Anfang November brechen wir auf zu unserem nächsten großen Abenteuer. Dann lassen wir das Auto stehen und es geht per Langstreckenflug in ein echtes Südseeparadies: Die Seychellen warten auf uns! Bis dahin zehren wir von den wunderschönen Erinnerungen an diesen unvergesslichen Roadtrip durch Mitteleuropa.

    Danke fürs Mitreisen und bis zum nächsten Mal! 🏝️✈️

    Meine finale Erkenntnis der Reise: „Die besten Reisen misst man nicht in Kilometern, sondern in den Momenten, in denen man alles um sich herum vergisst – und in der Gewissheit, dass das nächste Abenteuer immer schon am Horizont wartet.“ ✨

    Abenteuer Island: Unser Roadtrip durch das Land aus Feuer und Eis

    Island – ein Land, das uns mit seiner wilden Natur, den faszinierenden Vulkanlandschaften, tosenden Wasserfällen und dem ganz besonderen Charme seiner Städte von der ersten Sekunde an verzaubert hat. Unsere 16-tägige Reise wurde zu einem unvergesslichen Roadtrip, der uns von der quirligen Hauptstadt Reykjavík bis in die entlegensten Fjorde führte. Wir passierten majestätische Gletscher, wärmten uns an heißen Quellen und ließen uns den Wind an tiefschwarzen Sandstränden um die Nase wehen. In diesem Reisebericht nehmen wir euch mit zu den Highlights, die uns besonders tief beeindruckt haben – natürlich gespickt mit ein paar spannenden Funfacts und ganz viel Inspiration für eure eigene Island-Tour!

    Island

    🇮🇸 Reykjavík – Das pulsierende Herz Islands

    Unser Abenteuer startete in Reykjavík, der nördlichsten Hauptstadt der Welt. Schon beim Verlassen des Flugzeugs und der ersten Landung spürt man diese ganz besondere, isländische Atmosphäre: Es ist eine faszinierende Mischung aus moderner, kreativer Stadt und der rauen, unberührten Natur, die direkt hinter den bunten Häuserzeilen beginnt. Die Stadt hat uns sofort in ihren Bann gezogen.

    Hallgrímskirkja – Islands ikonisches Wahrzeichen

    Die Hallgrímskirkja überragt stolz die Stadt und ist als echtes Wahrzeichen von Reykjavík absolut nicht zu übersehen. Mit ihren stolzen 74,5 Metern zieht sie alle Blicke auf sich. Uns hat das Design total begeistert: Inspiriert von den markanten Basaltsäulen, die man überall in der isländischen Landschaft findet, wirkt die Architektur fast wie ein futuristischer, versteinerter Vulkan. Wir haben es uns natürlich nicht nehmen lassen, den Turm zu erklimmen. Von dort oben wird man mit einem grandiosen Panoramablick über die bunten Dächer der Stadt und das tiefblaue Meer belohnt! Ein kleiner Fact am Rande, der uns zum Staunen brachte: Wusstet ihr, dass die Kirche fast 40 Jahre Bauzeit verschlungen hat? Ein echtes Geduldsspiel, das sich aber definitiv gelohnt hat!

    Harpa – Das gläserne Konzerthaus

    Direkt am lebendigen Hafen von Reykjavík stießen wir auf die Harpa, ein wahres architektonisches Juwel. Die gigantische, gläserne Fassade ist so konstruiert, dass sie an filigrane Eiskristalle erinnert. Je nachdem, wie das arktische Licht einfällt, spiegelt es sich spektakulär in tausend Facetten wider – besonders zur goldenen Stunde im Sonnenuntergang ein absoluter Traum für jeden Fotografen! Das Gebäude ist aber weit mehr als nur ein reiner Konzertsaal. Es fungiert als lebendiger, kultureller Treffpunkt voller stylischer Cafés, toller Restaurants und wechselnder Ausstellungen, in denen man wunderbar verweilen kann. Funfact: Für diese grandiose Meisterleistung wurde die Harpa im Jahr 2013 mit dem renommierten Architekturpreis Mies van der Rohe Award ausgezeichnet.

    Sun Voyager & Uferspaziergang

    Bei unserem Spaziergang entlang der Küste durfte ein Stopp an der berühmten „Sun Voyager“ (isländisch: Sólfar) natürlich nicht fehlen. Diese elegante, moderne Skulptur aus glänzendem Stahl ist einem stilisierten Wikingerschiff nachempfunden. Sie soll jedoch kein Kriegsschiff darstellen, sondern symbolisiert vielmehr den zeitlosen Traum von unentdeckten Welten, Freiheit und Fortschritt. Direkt am Ufer gelegen, bettet sich das Kunstwerk in eine grandiose Kulisse ein. Der Weg eignet sich perfekt für einen ausgiebigen, entspannten Uferspaziergang, bei dem man den Blick über den rauen Atlantik und die schneebedeckten Berge im Hintergrund schweifen lassen kann. Für uns der perfekte Ort für eine kleine Verschnaufpause oder um einen magischen Sonnenuntergang zu genießen.

    Laugavegur – Bunte Einkaufsstraße mit Charme

    Wer das urbane Leben atmen möchte, muss auf die Laugavegur! Sie ist die pulsierende Lebensader und Haupteinkaufsstraße von Reykjavík. Wir haben es geliebt, an den herrlich bunten Holzhäusern vorbeizuschlendern, die der Straße so viel Charakter verleihen. Hier reihen sich süße, kleine Boutiquen, gemütliche Cafés und einladende Bars aneinander. Überall stolpert man über innovatives, isländisches Design und lokale Spezialitäten in einer herrlich unaufgeregten, entspannten Atmosphäre. Unser persönlicher Insider-Tipp: Schnappt euch unterwegs unbedingt einen der legendären isländischen Hot Dogs – mit den Röstzwiebeln und der speziellen Sauce ein absolutes kulinarisches Must-have, an dem kein Weg vorbeiführt! 🌭

    Tjörnin-See & Austurvöllur-Platz

    Ein wunderbarer Ort zum Durchatmen ist der kleine Tjörnin-See, der sich idyllisch mitten in der Stadt an die Häuser schmiegt. Er ist ein extrem beliebter Treffpunkt für Einheimische und Besucher gleichermaßen. Rund um das Ufer kann man herrlich die Seele bammeln lassen, spazieren gehen und die unzähligen, lautstarken Wasservögel beobachten, die hier ihr Zuhause haben. Nur ein paar Schritte weiter liegt der geschichtsträchtige Austurvöllur-Platz. Er bildet das grüne Herz Reykjavíks, auf dem im Sommer bei gutem Wetter Straßenkünstler, Live-Musik und kleine Märkte für eine wunderbar ausgelassene Stimmung sorgen.

    Weitere Eindrücke aus dieser wunderschönen Stadt


    🚗 Auf in den Westen: Von Reykjavík nach Grundarfjörður

    Nach den Stadteindrücken hieß es für uns: Koffer packen und ab in die Wildnis! Mit unserem treuen Suzuki Jimny starteten wir voller Vorfreude in Richtung Westen. Für uns zwei war der kleine Flitzer einfach ideal – kompakt, wendig, mit einem überraschend geräumigen Kofferraum für all unser Gepäck und natürlich voll geländetauglich. Je weiter wir uns von der Hauptstadt entfernten, desto dramatischer und ungezähmter wurde die Landschaft um uns herum. Ein Highlight jagte das nächste! Genau das richtige Terrain für unseren „Jimmy“, der sich schnell als das perfekte kleine Abenteuerfahrzeug für Island-Entdecker entpuppte.

    Die skurrile Story hinter unserer „Bananenkiste“: Da wir auf unserer Islandreise als Selbstversorger unterwegs waren und quasi komplett aus dem Kofferraum lebten, brauchten wir dringend eine praktische, robuste Faltbox für all unsere Lebensmittel und den täglichen Kleinkram – eben so, wie man es klassisch aus deutschen Supermärkten kennt. Doch in Reykjavík gestaltete sich die Suche danach als echtes, kleines Drama! In den Läden schien niemand zu verstehen, was wir suchten. Als wir schließlich völlig verzweifelt in einem Supermarkt einen Mitarbeiter um Hilfe baten, schüttelte dieser nur lächelnd den Kopf – verschwand kurz im Lager und kam stolz mit einer massiven Bananenkiste aus Pappe zurück. Was sollen wir sagen? Diese simple Kiste begleitete uns treu über beeindruckende 2.700 Kilometer quer durch Island. Am Ende war sie stabiler, praktischer und charmanter als jede Plastik-Faltbox, die wir uns hätten wünschen können! Ein echter Roadtrip-Held. 🍌

    🦭 Ytri Tunga Beach – Robbenbeobachtung hautnah

    Unser erster großer Naturstopp führte uns zum Ytri Tunga Beach auf der wunderschönen Halbinsel Snæfellsnes. Der Strand ist weltberühmt für seine tiefenentspannten Seehundkolonien. Und tatsächlich: Wir hatten Glück! Die Tiere lagen herrlich faul im Sand und auf den von Algen bedeckten Felsen und schienen uns Besucher mit ihren großen Kulleraugen mindestens genauso neugierig zu beobachten wie wir sie. Ein absolut faszinierender Funfact, den wir gelernt haben: Robben können bis zu 30 Minuten am Stück unter Wasser bleiben! Um das in den eiskalten isländischen Gewässern zu schaffen, verlangsamen sie ihren Herzschlag drastisch, sparen so extrem viel Energie und können problemlos abtauchen. Was uns außerdem auffiel: Die Tiere am Ytri Tunga Beach haben ganz unterschiedliche Fellzeichnungen, von einem fast strahlenden Weiß bis hin zu einem tiefen Dunkelbraun. Ein unglaublich fotogenes Naturschauspiel, das uns restlos begeistert hat.

    🏞️ Bjarnarfoss – Der majestätische, versteckte Wasserfall

    Weiter ging es zum Bjarnarfoss, einem Wasserfall, der sich spektakulär an den Klippen hinabstürzt. Er wird komplett von eisigem Schmelzwasser gespeist, das direkt von den majestätischen, umliegenden Bergen und Gletschern kommt. Wir hatten das Glück, ihn in seiner vollen Pracht zu erleben: Besonders im Frühling und Sommer, wenn das Eis oben in den Höhen taut, schwillt der Fluss hinter den Kaskaden massiv an und sorgt für ein ohrenbetäubendes, kraftvolles Naturschauspiel. Das eiskalte, kristallklare Wasser bahnt sich seinen Weg über Jahrtausende altes, vulkanisches Gestein, was dem sprudelnden Bachlauf eine fast magische Reinheit verleiht. Für uns war der Bjarnarfoss ein perfektes Beispiel dafür, wie eng Islands ungezähmte Gletschermassen und die spektakuläre Vielfalt der Landschaft miteinander verwoben sind.

    ⛪ Búðakirkja – Die geheimnisvolle schwarze Kirche

    Inmitten einer weiten, rauen Gras- und Lavalandschaft stießen wir auf die berühmte Búðakirkja. Diese kleine, pechschwarze Holzkirche auf der Halbinsel Snæfellsnes wirkt auf den allerersten Blick minimalistisch und fast unscheinbar, doch sie birgt eine düstere, mystische Vergangenheit. Im 17. Jahrhundert war die einsame Gegend rund um Búðir nämlich Schauplatz von harten Hexenverfolgungen – mehrere Frauen wurden hier damals der dunklen Magie bezichtigt und grausam hingerichtet. Bis heute hält sich unter den Isländern hartnäckig die Legende, dass die Kirche auf einem uralten, heidnischen Kultplatz errichtet wurde, was ihr eine unheimlich dichte, fast greifbare Aura verleiht. Manche Einheimische erzählen sich sogar flüsternd von mysteriösen, unerklärlichen Geräuschen und einem plötzlichen Gefühl der Beklemmung, wenn man sich in stockdunkler Nacht allein der Kirche nähert… Uns hat der Ort auf jeden Fall eine wohlige Gänsehaut verpasst!

    🌊 Arnarstapi Cliff mit Gatklettur und Músagjá

    Nächster Halt: Die dramatische Steilküste von Arnarstapi! Die Klippen dort haben uns mit ihren bizarren, perfekt geformten Basaltsäulen absolut den Atem geraubt. Das absolute Highlight ist die weltberühmte Felsbrücke Gatklettur, die sich wie ein monumentales, natürliches Tor mitten in die peitschende Meeresbrandung stemmt. Ein wunderschöner, poetischer Funfact: Der Name „Gatklettur“ bedeutet übersetzt schlicht „Lochfelsen“. Die Isländer sagen gern, dass man, wenn man ganz still ist und durch die Felsöffnung lauscht, den tiefen, alten Herzschlag der gesamten Insel hören kann – und ganz ehrlich, wenn der arktische Wind kraftvoll durch das Steintor pfeift, fühlt es sich genau so an! Nur ein paar Schritte weiter stießen wir auf die winzige, versteckte Schlucht Músagjá. Ihren kuriosen Namen („Mäuseschlucht“) verdankt sie angeblich den unzähligen kleinen Seevögeln, die in den Felsspalten nisten und deren Zwitschern wie ein lebendiges, fröhliches Konzert durch die Wände hallt. Wer hier entlangwandert, taucht tief ein in eine Welt voller isländischer Naturmagie.

    🪨 Rauðfeldsgjá Gorge – Die geheimnisvolle Sagen-Schlucht

    Zum Abschluss des Tages wartete noch ein echtes Mysterium auf uns: die Rauðfeldsgjá, eine extrem schmale, tiefe Schlucht, die wie ein gigantischer Schwerthieb mitten ins Berginnere führt. Wenn sich der isländische Nebel um die Felsen legt, wirkt der Ort fast unwirklich. Was viele Reisende gar nicht wissen und oft achtlos übersehen: Diese Schlucht ist der Schauplatz einer jahrhundertealten, dramatischen Island-Saga! Der Legende nach wurde hier vor langer Zeit der junge Rauðfeldur nach einem Familienstreit von seinem Onkel hineingestoßen und versteckt – eine Geschichte, die dem Ort eine herrlich schaurige Note verleiht. Der Weg hinein ist ein kleines Abenteuer: Es ist feucht, das Wasser plätschert am Boden und es kann stellenweise spiegelglatt werden. Festes Schuhwerk und Trittsicherheit sind hier absolute Pflicht! Doch das fantastische, intensive Echo in den engen Höhlenwänden und die monumentalen Felsformationen über den eigenen Köpfen entlohnen für jeden rutschigen Schritt. Man kann die alten isländischen Geschichten beim Wandern förmlich spüren!

    Nach diesem Tag voller unvergesslicher Eindrücke, Wind und rauer Natur hatten wir uns eine Belohnung redlich verdient. Zum krönenden, gemütlichen Abschluss des Tages genossen wir ein fantastisches Abendessen im Bjargarsteinn Mathús – einem unglaublich urigen Restaurant, das uns mit fangfrischen, traditionellen isländischen Spezialitäten und einer herzlichen Atmosphäre den perfekten Tagesausklang beschert hat.


    Kirkjufell & Kirkjufellsfoss – Das meistfotografierte Naturwunder Islands

    Am nächsten Morgen hieß es Abschied nehmen von Grundarfjörður – doch ein absolutes Weltklasse-Motiv lag quasi direkt vor unserer Haustür: der majestätische Kirkjufell. Mit seiner unverkennbaren, steil aufragenden und fast symmetrisch spitz zulaufenden Form zieht dieser Berg jeden Betrachter sofort in seinen Bann. Er gilt völlig zu Recht als einer der markantesten und am häufigsten fotografierten Berge des gesamten Landes. Direkt nebenan stürzt der malerische Wasserfall Kirkjufellsfoss in mehreren Stufen herab. Die Kombination aus dem rauschenden, kristallklaren Wasser im Vordergrund und der markanten Bergsilhouette im Hintergrund bildet eine absolut perfekte, Postkarten-reife Kulisse.

    Besonders zur goldenen Stunde, wenn die Sonne tief steht, oder in den kalten Wintermonaten, wenn die magischen grünen Nordlichter den Nachthimmel über dem Gipfel erhellen, wird dieser Ort zu einem absoluten Sehnsuchtsort für Fotografen aus aller Welt. Und für alle Serien-Freaks unter euch haben wir noch einen genialen Funfact parat: Erkennen euch die eisigen Formen des Berges irgendwie bekannt vor? Kein Wunder! Der Kirkjufell diente nämlich in der weltberühmten Fantasy-Serie Game of Thrones als spektakuläre Kulisse und wurde dort als der mystische „Berg wie eine Pfeilspitze“ (Arrowhead Mountain) jenseits der Mauer unsterblich gemacht. Ein echtes Must-see, das live noch viel beeindruckender wirkt als auf jedem Bildschirm! 🎬

    Guðrúnarlaug Hot Spring – Ein warmes Bad inmitten lebendiger Geschichte

    Wir verließen die Halbinsel Snæfellsnes und steuerten unseren Suzuki Jimny weiter in Richtung Norden. Nach einer längeren Fahrt durch die einsame, weite Landschaft war es Zeit für eine ganz besondere Belohnung: die Guðrúnarlaug. Diese winzige, unglaublich urige und liebevoll mit Natursteinen eingefasste heiße Quelle liegt herrlich idyllisch im Westen Islands. Das herrlich warme Quellwasser lädt sofort dazu ein, die Seele baumeln zu lassen, die kühle arktische Luft im Gesicht zu spüren und den Blick über die friedlichen, saftig grünen Hügel der Umgebung schweifen zu lassen. Ein absoluter Wellness-Traum mitten im Nirgendwo!Doch dieser magische Badeort ist weit mehr als nur ein schöner Hot Pot – er ist ein echtes, lebendiges Stück isländischer Kulturgeschichte. Die Quelle wurde nämlich nach der legendären Guðrún Ósvífrsdóttir benannt, einer der schillerndsten Hauptfiguren aus den berühmten isländischen Laxdæla-Sagas. Guðrún galt in den jahrhundertealten Überlieferungen als eine der klügsten, schönsten, aber auch stolzesten Frauen ihrer Zeit, deren dramatisches Liebesleben und schicksalhafte Entscheidungen die isländische Literatur bis heute prägen. Genau an diesem Ort soll sie vor über tausend Jahren schon gesessen und Kraft geschöpft haben. Wer also Ruhe, Natur und die tief verwurzelten Mythen Islands miteinander verbinden möchte, findet hier die perfekte, tiefenentspannte Mischung.

    Kolugljúfur – Die wilde, vom Geist einer Riesin bewachte Schlucht

    Gut aufgewärmt setzten wir unsere Reise fort und stießen tiefer im Norden auf ein echtes Naturmonument abseits der typischen Touristenpfade: die atemberaubende Kolugljúfur-Schlucht. Hier bricht sich der mächtige Fluss Víðidalsá mit einem ohrenbetäubenden, unbändigen Rauschen seinen Weg durch das tief aufgerissene, dunkle Gestein. Wenn man am Rand der Klippen steht und zusieht, wie die Wassermassen in mehreren tosenden Wasserfällen in die Tiefe stürzen, packt einen die raue, ungezähmte Kraft der isländischen Natur sofort.Wie so viele magische Orte in Island hat auch diese Schlucht eine wunderbar geheimnisvolle Entstehungsgeschichte, die auf alten Volkssagen basiert. Ihr Name stammt nämlich von der sagenumwobenen Riesin Kola. Der Legende nach war Kola eine unvorstellbar mächtige Riesenfrau, die tief in dieser Schlucht ihr Lager aufschlug. Sie soll die weiten Betten im Fels ausgehoben haben, um darin zu schlafen, und fing die Lachse im Fluss direkt mit ihren bloßen Händen. Die Isländer erzählen sich bis heute mit einem Schmunzeln, dass Kolas unbändige Wut und ihre magischen Kräfte die wilden, tosenden Strudel im Wasser verursachen – und manche schwören sogar, dass ihr Geist noch immer tief unten in den schattigen Felsspalten spukt. Wenn man den feinen Sprühnebel im Gesicht spürt und dem tiefen Grollen des Wassers lauscht, hinterlässt dieser Ort definitiv ein herrlich mystisches Kribbeln im Bauch!

    Hvítserkur – Der versteinerte Fels-Drache an der Nordküste

    Zum spektakulären Abschluss dieses Tagesausflugs zog es uns an die wilde Nordwestküste Islands, genauer gesagt an den einsamen Sandstrand der Halbinsel Vatnsnes. Dort ragt ein echtes geologisches Kunstwerk stolz aus den rauen Wellen des Atlantiks: der Hvítserkur. Dieser markante, stolze 15 Meter hohe Basaltfelsen besitzt eine absolut faszinierende Form. Je nachdem, aus welchem Blickwinkel man ihn betrachtet und wie viel Fantasie man mitbringt, sieht er für den einen aus wie ein riesiger, versteinerter Troll und für den anderen wie ein gigantischer Drache, der friedlich den Kopf senkt, um aus dem eiskalten Meerwasser zu trinken.Die alten isländischen Legenden erzählen sich natürlich eine ganz eigene, wunderbar schaurige Geschichte dazu: Demnach war Hvítserkur einst ein grausames, finsteres Monster aus den Bergen, das wütend das nahegelegene Kloster Þingeyrar mit dicken Steinen zertrümmern wollte. Doch der Troll achtete in seinem blinden Zorn nicht auf die Zeit – und als die ersten Strahlen der isländischen Morgensonne den Horizont durchbrachen, erstarrte das Ungeheuer augenblicklich zu ewigem Stein. Besonders atemberaubend ist der Anblick während eines feurigen Sonnenaufgangs oder bei stürmischem, mystischem Wetter, wenn die schäumende, weiße Gischt der Wellen unaufhörlich gegen das uralte Vulkangestein peitscht. Ein absolut magischer Ort, der einem einmal mehr zeigt, wie eng Naturphänomene und Sagen in diesem Land miteinander verschmelzen!


    Ólafsfjörður & Umgebung – Zwischen Bergen, Tunneln und einsamen Fjorden

    Die Weiterreise führte uns tief in den Norden in die wunderschöne, dramatische Region rund um Ólafsfjörður. Dieses kleine, idyllische Fischerstädtchen liegt absolut spektakulär eingebettet in einem tiefen, von steil aufragenden Bergmassiven umrahmten Fjord. Allein die Anfahrt hierher ist ein echtes Erlebnis für sich: Man passiert abenteuerliche, teils einspurige Tunnel, die direkt durch das massive Gestein der isländischen Berge geschlagen wurden. Wenn man auf der anderen Seite das Tageslicht erblickt, eröffnet sich einem eine fast unwirklich friedliche Kulisse.Die Gegend verzaubert sofort mit ihrer rauen, unberührten Einsamkeit – abseits der Hauptstraßen spürt man hier das authentische, vom Rhythmus des Meeres geprägte Island. Auf unserem Weg durch den Norden passierten wir außerdem wunderschöne Küstenabschnitte, an denen wir einfach anhalten, durchatmen und die grandiose Aussicht auf den endlosen arktischen Ozean genießen mussten. Ein perfektes Fleckchen Erde, um die unendliche Weite der Insel auf sich wirken zu lassen!

    Fosslaug – Heiße Quelle mitten in der Natur

    Nach so viel Kultur und Autofahrt stand uns der Sinn nach Entspannung – und Island wäre nicht Island, wenn es dafür nicht das perfekte, versteckte Abenteuer bereithalten würde: die Fosslaug! Dieser winzige, völlig naturbelassene Hot Pot liegt herrlich abgelegen im Norden Islands und ist ein absoluter Traum für alle, die das authentische Island-Feeling suchen. Das herrlich warme Quellwasser sprudelt hier direkt aus deähmten, wilden Naturkulisse drumherum hat uns absolut verzaubert – ein echter Geheimtipp, den wir so schnell nicht vergessen werden!

    Torfkirche Gröf – Ein historisches, grünes Kleinod aus vergangener Zeit

    Am Wegesrand stießen wir auf ein ganz besonderes, historisches Juwel: die Torfkirche Gröf (Grafarkirkja). Diese winzige, wunderschöne Kirche gilt als die älteste erhaltene Torfkirche des gesamten Landes und stammt in ihrer heutigen Form im Kern aus dem späten 17. Jahrhundert. Sie ist ein absolut faszinierendes Beispiel für die traditionelle isländische Bauweise, bei der Holzkonstruktionen kunstvoll mit dicken Wänden und Dächern aus Grassoden und Torf kombiniert wurden. Diese Bauart fügt sich nicht nur optisch perfekt und fast unsichtbar in die umgebende Natur ein, sondern schützte die Menschen damals auch optimal vor den eisigen arktischen Stürmen.Wenn man vor diesem liebevoll gepflegten, mit Gras bewachsenen Häuschen steht, fühlt man sich augenblicklich in eine ganz andere Zeit zurückversetzt. Die Kirche strahlt eine unbeschreibliche, ehrfürchtige Ruhe aus und erzählt auf ganz leise Weise viel über das harte, entbehrungsreiche Leben und die tiefe Gläubigkeit der frühen Isländer. Ein absolut magischer Ort, den man einfach gesehen haben muss!

    Tröllaskagi – Die Halbinsel der Trolle, dramatischen Berge und Fischerdörfer

    Unsere Route führte uns auf eine der spektakulärsten und am tiefsten vom rauen Atlantik geformten Regionen des isländischen Nordens: die Halbinsel Tröllaskagi. Ihr Name, der übersetzt so viel wie „Halbinsel der Trolle“ bedeutet, könnte kaum treffender gewählt sein. Wer diese Region durchquert, versteht sofort, warum die alten Siedler glaubten, dass in dieser mystischen, ungezähmten Bergwelt riesige Fabelwesen hausen. Die Landschaft ist geprägt von majestätischen, teils weit über 1.000 Meter hoch aufragenden Bergmassiven, deren Gipfel selbst im Hochsommer noch von tiefen Schneefeldern und kleinen Gletschern bedeckt sind. Zwischen den schroffen Felswänden schneiden sich immer wieder tiefblaue, malerische Fjorde in das Land.Tröllaskagi gilt völlig zu Recht als ein absolutes Eldorado für Outdoor-Enthusiasten und Naturliebhaber. Während im Sommer endlose, einsame Wanderwege zu spektakulären Aussichtspunkten über den arktischen Ozean einladen, verwandelt sich die Region im Winter in ein weltweit bekanntes Paradies zum Skifahren und Freeriden. Doch nicht nur die Natur fasziniert: Entlang der Küste thronen winzige, historisch gewachsene Fischerdörfer, die sich ihren authentischen, vom Rhythmus des Meeres geprägten Charme bis heute bewahrt haben. Orte wie das idyllische Hofsós – berühmt für seinen historischen Handelsplatz und das direkt in die Klippen gebaute Thermalbad – oder das charmante Siglufjörður prägen das unverwechselbare und wunderschöne Landschaftsbild dieser nordischen Halbinsel und laden dazu ein, die Uhren für einen Moment bewusst langsamer drehen zu lassen.

    Siglufjörður – Charmantes Hering-Idyll und die besten Fish & Chips Islands

    Ein absolutes Juwel an der wilden Nordküste der Halbinsel ist das charmante, kleine Städtchen Siglufjörður. Das malerische Fischerdorf liegt absolut spektakulär und tief versteckt eingebettet in einen engen, von steil aufragenden, majestätischen Bergen umrahmten Fjord. Heute strahlt der Ort eine wunderbare, farbenfrohe Ruhe aus, doch das war nicht immer so: Einst war Siglufjörður das absolute, pulsierende Zentrum der isländischen Heringsfischerei und erlebte im frühen 20. Jahrhundert einen regelrechten Goldrausch. Während des „Heringsbooms“ strömten Tausende Menschen hierher, und das Dorf wickelte zeitweise über 20 Prozent der gesamten Exporte des Landes ab. Diese goldene Ära hat den Ort tief geprägt und hinterließ eine reizvolle Kombination aus unberührter Natur, lebendiger Geschichte und einer überraschend reichen Kulturszene mit bunten Holzhäusern und liebevoll gestalteten Museen.Ein Spaziergang durch die gemütlichen Straßen macht aber natürlich auch hungrig – und hier hält Siglufjörður ein ganz besonderes, kulinarisches Highlight bereit: Hier gibt es schlichtweg die **Best Fish & Chips** der gesamten Region! Der Fisch kommt fangfrisch direkt von den Kuttern im Hafen in die Küche, wird in einem federleichten, herrlich knusprigen Teigmantel ausgebacken und zusammen mit perfekt frittierten Pommes serviert. Außen wunderbar kross, innen saftig und zart – dieses einfache, aber absolut meisterhafte Gericht vor der Kulisse der im Fjord spiegelnden Boote und schneebedeckten Gipfel zu genießen, war ein absoluter Gaumenschmaus. Wer den isländischen Norden bereist, sollte diesen charmanten Ort und den kulinarischen Zwischenstopp keinesfalls verpassen!


    Whale Watching Hauganes – Gin idyllisches Küstendorf im Zeichen der sanften Riesen

    Unsere Reise führte uns weiter in das kleine, charmante Küstendorf Hauganes, das idyllisch an den Ufern des Eyjafjörður liegt. Der beschauliche Ort hat sich in den letzten Jahren völlig zu Recht als einer der beliebtesten Geheimtipps für Whale-Watching-Touren im Norden Islands etabliert. Von dem urigen Hafen aus starten regelmäßig liebevoll geführte Bootsausflüge hinaus auf den weiten Fjord, um nach den sanften Riesen der Meere Ausschau zu halten. Und die Chancen stehen hier fantastisch!Die tiefen, kalten Gewässer rund um Hauganes sind extrem nährstoffreich und bilden den perfekten Lebensraum für eine Vielzahl faszinierender Meeressäuger. Regelmäßig werden hier majestätische Buckelwale gesichtet, die mit etwas Glück spektakulär ihre Fluken aus dem Wasser strecken, sowie flinke Zwergwale und neugierige Delfine. Sogar die gigantischen Blauwale verirren sich gelegentlich in den Fjord! Begleitet wird das maritime Abenteuer oft von unzähligen, drolligen Papageientauchern, die elegant über die Wellen gleiten – ein absolutes Paradies für jeden Tierfreund!

    Goðafoss – Der geschichtsträchtige „Wasserfall der Götter“

    Unser Weg führte uns weiter zu einem der bekanntesten und geschichtsträchtigsten Wasserfälle Islands: dem imposanten Goðafoss. Auf einer Breite von rund 30 Metern stürzt das strahlend blau-türkise Wasser des Flusses Skjálfandafljót in einem weiten, elegant geschwungenen Halbkreis etwa 12 Meter in die Tiefe. Das majestätische Bild, das sich uns bot, war absolut atemberaubend und versprühte eine unbeschreiblich erhabene Ruhe.Doch der Goðafoss ist weit mehr als nur ein wunderschönes Fotomotiv – er ist eng mit einem der wichtigsten Wendepunkte der isländischen Geschichte verknüpft. Um das Jahr 1000 nach Christus stand Island vor einer Zerreißprobe: Die Entscheidung über die offizielle Staatsreligion stand an. Der weise Althing-Gesetzessprecher Þorgeir Ljósvetningagoði zog sich daraufhin für einen Tag und eine Nacht schweigend unter eine Decke zurück, um eine friedliche Lösung zu finden. Er entschied, dass das Christentum fortan die offizielle Religion sein sollte, das Ausüben des alten, heidnischen Glaubens im Geheimen jedoch erlaubt blieb. Um diese Entscheidung symbolisch und unumkehrbar zu besiegeln, ritt er auf dem Heimweg zu diesem Wasserfall und warf seine alten, geschnitzten Holzstatuen der nordischen Götter – darunter Odin, Thor und Freyr – mitten in die tosenden Fluten. Genau dieser legendären Geste verdankt der „Wasserfall der Götter“ bis heute seinen mystischen Namen.

    Aldeyjarfoss – Das brachiale Hochland-Naturwunder im schwarzen Basaltkleid

    Zum krönenden und absolut atemberaubenden Abschluss dieses Roadtrip-Kapitels wagten wir uns abseits der Ringstraße tiefer in Richtung Hochland vor, um ein echtes Monument der Naturgewalten zu besuchen: den Aldeyjarfoss. Hier stürzt das mächtige, weiß schäumende Wasser des Flusses Skjálfandafljót – einem der längsten und wasserreichsten Flüsse des Landes – mit einer unbändigen, brachialen Kraft gut 20 Meter tief in ein gigantisches Auffangbecken. Das ohrenbetäubende Tosen der Wassermassen vibriert förmlich im ganzen Körper, wenn man am Rand steht.Was den Aldeyjarfoss jedoch zu einem der unbestritten fotogensten und faszinierendsten Wasserfälle in ganz Island macht, ist seine einzigartige geologische Kulisse: Das herabstürzende Wasser ist komplett umrahmt von perfekt geformten, tiefschwarzen, symmetrischen Basaltsäulen. Diese erstarrten, uralten Lavaformationen wirken wie ein monumentales, von Meisterhand geschaffenes Amphitheater der Natur. Die Umgebung hier oben ist wild, karg und absolut unberührt. Wichtig zu wissen: Da der Aldeyjarfoss bereits am Rande des isländischen Hochlands liegt, ist die Anfahrt über die unbefestigten Schotterstraßen holprig und anspruchsvoll. Ein geländegängiges Allradfahrzeug wie unser treuer Suzuki Jimny ist hier absolut unverzichtbar! Doch für jeden Abenteurer und Fotoliebhaber ist dieses versteckte Hochland-Juwel ein absolutes, unvergessliches Highlight der gesamten Island-Tour!

    Hverir (Námafjall) – Das zischende und kochende Tor zur Unterwelt

    Zum Abschluss des Tages tauchten wir ein in eine Welt, die spektakulärer nicht sein könnte: das Geothermalgebiet Hverir am Fuße des Berges Námafjall. Schon bei der Annäherung lag der intensive, typische Schwefelgeruch (nach faulen Eiern) in der Luft – doch was das Auge hier erblickt, lässt einen den Geruch sofort vergessen. Die Erde kocht, blubbert und zischt hier sprichwörtlich an jeder Ecke!Die Landschaft schimmert in den wildesten Farben von Ocker über Tiefrot bis hin zu Schwefelgelb und Graublau. Überall brodeln riesige Schlammtöpfe voller grauer, kochender Masse, während aus steinernen Fumarolen mit ohrenbetäubendem Druck kochend heißer Wasserdampf in den Himmel schießt. Wenn man auf den markierten Pfaden durch diese Szenerie wandert und den feuchten Dampf im Gesicht spürt, fühlt man sich wie auf einem völlig fremden, unbewohnten Planeten. Die unbändige, rohe Energie, die hier direkt unter der Erdoberfläche pulsiert, ist gleichermaßen einschüchternd wie faszinierend und macht Hverir zu einem absoluten Must-see auf jeder Island-Rundreise!

    Die vulkanische Aktivität macht Hverir zu einem faszinierenden Ort, um die rohe Kraft der Erde hautnah zu erleben. Der Geruch von Schwefel liegt in der Luft, und dampfende Erdspalten sorgen für eine fast außerirdische Atmosphäre. Gut angelegte Wege und Stege ermöglichen es Besuchern, das Gebiet sicher zu erkunden.

    Hverarönd ist ein absolutes Highlight für Naturfreunde, Geologie-Interessierte und Fotografen und bietet spektakuläre Eindrücke der isländischen Vulkanlandschaft.

    Krafla – Vulkanisches Kraftzentrum im Norden Islands

    Krafla ist ein aktives vulkanisches Gebiet in der Nähe des Mývatn-Sees im Norden Islands. Es gehört zu den bekanntesten geothermischen Regionen des Landes und beeindruckt mit einer vielfältigen Landschaft aus Kratern, Lavafeldern, heißen Quellen und dampfenden Fumarolen.

    Das Gebiet rund um den Krafla-Vulkan bietet zahlreiche Wanderwege, die zu beeindruckenden Sehenswürdigkeiten wie dem Krater Víti, einem mit türkisfarbenem Wasser gefüllten Explosionstrichter, führen. Die vulkanische Aktivität der Region ist auch Grundlage für geothermische Kraftwerke, die nachhaltige Energie erzeugen.

    Krafla ist ein faszinierendes Ziel für alle, die sich für Vulkanismus, Geothermie und die rohe Kraft der Natur interessieren. Die Landschaft wirkt fast außerirdisch und bietet spektakuläre Fotomotive.

    Hot Spring Shower – Die wohl kurioseste Dusche Islands

    Nur ein kurzes Stück weiter wartete ein absolut skurriles und unvergessliches Highlight am Wegesrand auf uns: die berühmte Hot Spring Shower! Mitten im Nirgendwo, umgeben von karger Lava- und Geotermal-Landschaft, ragt hier einfach ein Duschkopf samt Armatur aus einer alten Rohrleitung nach oben – und das Beste daran: Es kommt das ganze Jahr über dampfendes, herrlich warmes Thermalwasser direkt aus der Erde! Dieses kleine, feine Outdoor-Abenteuer ist ein absoluter Spaß und zeigt einmal mehr, wie allgegenwärtig die vulkanische Energie in dieser Region ist. Wer mutig genug ist, schlüpft kurz in die Badesachen und genießt eine herrlich warme Dusche unter freiem Himmel, während der kühle isländische Wind vorbeizieht. Ein echtes Unikat für die Bucket List!

    Ob nach einer Wanderung oder als erfrischende Pause unterwegs – die Hot Spring Shower ist ein kleines, aber feines Abenteuer in der isländischen Natur.

    Skútustaðagígar – Die faszinierenden Pseudokrater am Mývatn-See

    Am wunderschönen Mývatn-See angekommen, stießen wir direkt am Südufer auf eine geologische Besonderheit, die auf den ersten Blick wie eine Kraterlandschaft auf dem Mond wirkt: die Skútustaðagígar. Auch wenn sie täuschend echt wie echte kleine Vulkane aussehen, handelt es sich hierbei um sogenannte Pseudokrater. Diese entstanden vor rund 2.300 Jahren durch ein faszinierendes Naturschauspiel: Glühend heiße Lava floss über das feuchte Feuchtgebiet und die Sümpfe des Sees. Durch die extreme Hitze wurde das darunter liegende Wasser schlagartig zum Kochen gebracht, was zu gewaltigen Wasserdampfexplosionen führte. Diese Explosionen sprengten die perfekt geformten, kreisrunden Kraterkegel in die Landschaft, ohne dass jemals selbst Lava aus ihnen emporgestiegen ist.Heute sind die grasbewachsenen Pseudokrater hervorragend über schöne Wanderwege erschlossen. Beim Spaziergängen auf den Kraterrändern genossen wir atemberaubende Ausblicke über den weiten Mývatn-See und die umliegende Vulkanlandschaft. Zudem ist das Gebiet ein absolutes Paradies für Vogelliebhaber, da die geschützten Buchten unzähligen seltenen Entenarten als Heimat dienen.

    Die Krater sind leicht zugänglich und bieten schöne Wanderwege mit spektakulären Ausblicken auf den Mývatn-See und die umliegende Vulkanlandschaft. Die Region ist auch bekannt für ihre reiche Vogelwelt und vielfältige Flora, was Skútustaðagígar zu einem beliebten Ziel für Naturliebhaber und Fotografen macht.

    Ein Besuch der Skútustaðagígar ist ein faszinierender Einblick in die vulkanische Geschichte Islands und ein Highlight im Mývatn-Gebiet.


    Hengifoss – Der zweithöchste Wasserfall Islands

    Hengifoss ist mit einer Fallhöhe von etwa 128 Metern einer der höchsten Wasserfälle Islands und liegt im Osten des Landes, nahe dem Dorf Litlanesfjörður. Besonders beeindruckend sind die auffälligen roten Schichten in den Basaltfelsen, die den Wasserfall umgeben und ihm eine einzigartige, farbenfrohe Kulisse verleihen.

    Der Wanderweg zum Hengifoss ist etwa 2,5 Kilometer lang (einfach) und führt durch eine abwechslungsreiche Landschaft mit weiteren Wasserfällen, wie dem kleineren Litlanesfoss, der ebenfalls von Basaltsäulen umgeben ist. Die Wanderung ist gut markiert und bietet unterwegs tolle Ausblicke auf die umliegende Natur.

    Hengifoss ist ein absolutes Muss für Wanderfreunde und Naturliebhaber, die Islands beeindruckende Geologie und Landschaft erleben möchten.

    Seyðisfjörður – Das farbenfrohe Künstlerparadies im tiefen Fjord

    Nach der Einsamkeit des Hochlands steuerten wir die spektakuläre Ostküste an, wo uns ein echtes Postkartenmotiv erwartete: das malerische Städtchen Seyðisfjörður. Allein die Anfahrt über eine steile Passstraße, die sich an majestätischen Bergen vorbeischlängelt, ist ein unvergessliches Erlebnis. Der Ort selbst liegt absolut idyllisch und geschützt am innersten Ende eines tiefen, von steilen Bergwänden und unzähligen kleinen Wasserfällen umrahmten Fjords.Seyðisfjörður hat uns sofort mit seinem ganz besonderen, charmanten Flair verzaubert. Bekannt für seine wunderschön erhaltenen, bunten norwegischen Holzhäuser aus dem 19. Jahrhundert, versprüht der Ort eine unglaublich lebendige und kreative Atmosphäre. Das absolute Markenzeichen ist die charmante, hellblaue Kirche, zu der ein weltberühmter, in Regenbogenfarben gestalteter Fußweg führt – ein absoluter Traum für jeden Fotografen! Neben der blühenden Kunstszene und den kleinen Galerien hat der Ort auch historische Bedeutung: Als wichtiger Fährhafen verbindet er Island direkt mit dem europäischen Festland. Ein Spaziergang durch die gemütlichen Gassen, vorbei an den im Fjord spiegelnden Bergen, vergisst man so schnell nicht.

    Die Umgebung bietet zahlreiche Wanderwege, Wasserfälle und Möglichkeiten zur Vogelbeobachtung. Das klare Wasser des Fjords und die idyllische Lage machen Seyðisfjörður zu einem beliebten Ziel für Naturliebhaber und Reisende, die Ruhe und Authentizität suchen.

    Seyðisfjörður verbindet isländische Tradition mit moderner Kultur und ist ein Highlight im Osten Islands.


    Öxi Pass & Schotterpiste 939 – Nervenkitzel und Offroad-Abenteuer pur im Osten

    Ein echtes, fahrerisches Highlight und eine gehörige Portion Nervenkitzel erwartete uns im Osten der Insel: die Fahrt über den berühmt-berüchtigten Öxi-Pass. Diese spektakuläre Gebirgspassage führt mitten durch die ungezähmte Wildnis der isländischen Ostfjorde und gilt als eine der dramatischsten Abkürzungen des Landes. Die Passstraße verbindet die Region rund um die Ortschaft Djúpivogur auf direktem, aber steilem Weg mit Egilsstaðir und führt über eine extrem kurvenreiche, komplett unbefestigte Schotterpiste, die auf den Karten schlicht als Route 939 verzeichnet ist.Eine Fahrt über den Öxi-Pass ist ein echtes, unvergessliches Abenteuer für sich und erfordert höchste Konzentration sowie absolut vorsichtiges Fahren. Die Piste windet sich mit teils extremen Steigungen von bis zu 17 Prozent den Berghang hinauf, vorbei an tiefen Abgründen, tosenden, namenlosen Wasserfällen und schroffen Felswänden. Besonders bei den berüchtigten, isländischen Wetterumschwüngen – wenn plötzlich dichter Nebel aufzieht und die Sicht gegen Null sinkt oder kräftiger Regen den Schotter aufweicht – wird die Strecke zu einer echten Geduldsprobe. Ein spannender Funfact für Roadtrip-Planer: Obwohl die Piste fahrtechnisch anspruchsvoll ist, handelt es sich offiziell nicht um eine reine F-Straße, weshalb sie im Sommer auch ohne absolutes Hochlandfahrzeug befahrbar ist. Dennoch waren wir mehr als froh, am Steuer unseres treuen, allradgetriebenen Suzuki Jimny zu sitzen, der die steilen Schotterkurven mit Bravour meisterte!Die Mühe und das Adrenalin werden jedoch im Sekundentakt belohnt. Entlang der Passhöhe bieten sich immer wieder monumentale Aussichtspunkte und unzählige grandiose Fotomotive, die einfach zu Pausen einladen. Wenn man oben anhält, den Motor ausschaltet und den Blick über die schier endlosen Fjorde, die tiefen, grünen Täler und die wolkenverhangenen Berggipfel schweifen lässt, spürt man die raue, einsame Schönheit Islands so intensiv wie an kaum einem anderen Ort. Für uns war der Öxi-Pass und die Schotterpiste 939 das perfekte Ziel, um das echte Island abseits der asphaltierten Ringstraße zu entdecken – ein absolutes Must-Do für alle Naturliebhaber und Offroad-Fans!

    Foldalafoss – Das unentdeckte Hochland-Juwel abseits der Massen

    Unsere Reise führte uns wieder ein Stück abseits der klassischen Touristenpfade, hin zu einem echten Geheimtipp für Ruhesuchende und Entdecker: dem idyllischen Foldafoss. Dieser wunderschöne Wasserfall liegt eingebettet in die karge, ungezähmte und faszinierende Kulisse des isländischen Hochlands. Während an den bekannten Hotspots der Ringstraße oft reger Trubel herrscht, offenbart sich am Foldafoss die pure, unberührte Einsamkeit Islands.Das Wasser stürzt hier elegant über die rauen Felsstufen inmitten einer weiten, fast meditativen Stille. Für uns war dieser Ort ein perfekter Rückzugsort, um einfach auf den Steinen zu sitzen, dem gleichmäßigen Rauschen zuzuhören und die grandiose, raue Naturkulisse auf uns wirken zu lassen. Wer die ungezähmte Schönheit des Hochlands in absoluter Ruhe genießen möchte, sollte sich diesen magischen Ort nicht entgehen lassen!

    Die Anfahrt zum Foldalafoss erfordert in der Regel ein geländegängiges Fahrzeug, da die Straßen ins Hochland oft rau und unbefestigt sind. Die Region bietet zudem zahlreiche Möglichkeiten für ausgedehnte Wanderungen und Erkundungen der wilden isländischen Natur.

    Fauskasandur Black Sand Beach – Die mystische, unberührte Küste des Ostens

    Auf unserem Weg entlang der rauen Ostküste stießen wir auf ein echtes, fast vergessenes Naturjuwel abseits der klassischen Touristenpfade: den faszinierenden Fauskasandur Black Sand Beach. Während die weltberühmten schwarzen Strände rund um das südisländische Vík oft von Scharen von Besuchern belagert werden, offenbarte sich uns am Fauskasandur eine vollkommen unberührte, tief friedliche Kulisse. Wer die magische Kombination aus tiefschwarzem Vulkansand und den ungezähmten Wellen des Nordatlantiks in absoluter Einsamkeit auf sich wirken lassen möchte, ist an diesem geheimnisvollen Küstenabschnitt genau richtig.Der Strand besticht durch seine dramatische Geologie und wird von schroffen, steil aufragenden Klippen und einer wilden, vom Wind gezeichneten Küstenlandschaft malerisch eingerahmt. Das absolute Markenzeichen von Fauskasandur ist jedoch eine monumentale, markante Basaltfelsnadel, die wie ein versteinerter Wächter direkt am Flutsaum aus dem pechschwarzen Sand emporragt und ein fantastisches Fotomotiv bietet. Wir nutzten den Zwischenstopp für einen ausgiebigen Spaziergang, atmeten die herrlich frische, salzige Meeresluft ein und beobachteten die zahlreichen Seevögel, die in den Spalten der umliegenden Felswände nisten. Für uns war dieser Strand ein absoluter Geheimtipp und der perfekte Ort, um die raue, stille Seele Islands ganz intensiv und abseits der großen Massen zu spüren!

    Viking Village Stokksnes – Zeitreise in eine mystische Wikinger-Filmkulisse

    Direkt an der dramatischen Halbinsel Stokksnes, im Schatten des weltberühmten und messerscharfen Vestrahorn-Berges, wartete ein ganz besonderes Highlight auf uns: das faszinierende Viking Village. Wenn man das hölzerne Eingangstor passiert, fühlt man sich augenblicklich um ein Jahrtausend in die Vergangenheit zurückversetzt. Überall stehen urige, wettergegerbte Holzhäuser mit dicken, saftig grünen Grasdächern, detailreichen Holzschnitzereien, schweren Zäunen und sogar einem tiefen Verlies, das unter einem künstlichen Felsbrocken angelegt wurde. Seit Kurzem liegt auf dem angrenzenden kleinen See sogar ein originalgetreuer Nachbau eines majestätischen Wikinger-Langschiffs vor Anker.Doch hinter diesem vermeintlich uralten Freilichtmuseum steckt eine absolut kuriose Geschichte: Es handelt sich hierbei nicht um eine echte archäologische Fundstätte, sondern um eine monumentale, verlassene Filmkulisse! Das Dorf wurde im Jahr 2010 mit extrem viel Liebe zum Detail und historischer Genauigkeit für ein geplantes Wikinger-Epos des berühmten isländischen Regisseurs Baltasar Kormákur errichtet. Wegen plötzlicher Finanzierungsprobleme wurde der Film jedoch niemals fertiggestellt. Statt das Set wieder abzureißen, ließ der ansässige Farmer die Gebäude einfach stehen. Der isländische Wind und das raue Wetter haben das Holz über die Jahre so perfekt verwittert, dass das Dorf heute absolut authentisch wirkt. Inzwischen diente die Kulisse sogar für namhafte internationale Großproduktionen wie die Netflix-Serie *The Witcher: Blood Origin*.Für uns war der Spaziergang durch die verlassenen Gassen, während im Hintergrund die düsteren Zacken des Vestrahorns in den Himmel ragten, ein unvergessliches und tief atmosphärisches Erlebnis. Es ist ein absolutes Traumziel für Geschichtsinteressierte, Familien und Fotografen gleichermaßen. Man bezahlt den Eintritt unkompliziert am gemütlichen Viking Café am Eingang der Halbinsel, wo man sich danach auch perfekt mit Kaffee und frischen Waffeln stärken kann. Dieses skurrile Stück Filmgeschichte rundet das gewaltige Naturerlebnis rund um die schwarzen Sanddünen von Stokksnes einfach perfekt ab!

    Stokksnes & Vestrahorn – Das epische Paradies aus schwarzen Dünen und messerscharfen Bergen

    Ein absolutes landschaftliches Meisterwerk und eines der wohl begehrtesten Fotomotive des gesamten Landes erwartete uns an der äußersten Südostküste: die atemberaubende Halbinsel Stokksnes. Schon bei der Annäherung stockt einem unweigerlich der Atem, wenn am Horizont der monumentale, tiefschwarze Berg Vestrahorn emporragt. Mit seinen schroffen, messerscharfen Zacken und steilen Flanken, die stolze 454 Meter senkrecht aus dem Atlantik in den Himmel schießen, wirkt das Bergmassiv wie aus einer anderen Welt. Die Kombination aus den endlosen, mit goldgrünem Gras bewachsenen schwarzen Sanddünen, dem wilden, tosenden Ozean und den düsteren Gipfeln macht Stokksnes zu einem absoluten Paradies für Fotografen, Künstler und Naturliebhaber gleichermaßen.Das absolute Phänomen und der Grund, warum dieser Ort weltberühmt ist, zeigt sich jedoch direkt am flachen Strand. Wenn die Flut zurückweicht, bleibt auf dem pechschwarzen, spiegelglatten Sand eine hauchdünne Wasserschicht zurück. Bei Windstille verwandelt sich die gesamte Küste in einen gigantischen, natürlichen Riesenspiegel, in dem sich die dramatische Silhouette des Vestrahorns perfekt verdoppelt – ein unbeschreiblicher Anblick von fast unwirklicher, meditativer Symmetrie! Wer dieses Naturschauspiel in Ruhe erleben möchte, sollte sich viel Zeit nehmen, um durch die weiten Dünen zu wandern und die salzige Gischt im Gesicht zu spüren. Da die Halbinsel auf privatem Grund liegt, bezahlt man am charmanten Viking Café eine kleine Gebühr für das Ticket, welches praktischerweise auch direkt den Zugang zum nahegelegenen Wikingerdorf beinhaltet. Für uns war Stokksnes ein absoluter Höhepunkt echten Island-Feelings abseits der klassischen Massen!

    Otto Matur & Drykkur – Kulinarischer Hochgenuss in historischem Ambiente

    Ein ereignisreicher Tag voller grandioser Eindrücke verlangt natürlich nach einem gebührenden Abschluss. Den fanden wir im fantastischen Restaurant „Otto Matur & Drykkur“. In einem liebevoll restaurierten, historischen Gebäude gelegen, kombiniert dieses gemütliche Lokal urigen Island-Charme mit einer exzellenten, modernen Küche.Hier wird allergrößter Wert auf frische, regionale Zutaten gelegt, die mit viel Liebe zum Detail zubereitet werden. Wir durften uns durch die hervorragenden Spezialitäten der Region probieren und waren schlichtweg begeistert. Von traditionellen Gerichten mit modernem Pfiff bis hin zu himmlischen Desserts – das Essen war ein absolutes Geschmackserlebnis und hat den Tag im Osten Islands perfekt abgerundet. Wer hier vorbeikommt, sollte sich diesen kulinarischen Zwischenstopp unbedingt gönnen!


    Jökulsárlón & Diamond Beach – Das funkelnde arktische Märchen aus Eisriesen und Diamantenstränden

    Unsere Reise führte uns im Südosten der Insel an einen Ort, dessen schiere, fast unwirkliche Schönheit einem unweigerlich Freudentränen in die Augen treibt: die weltberühmte Gletscherlagune Jökulsárlón. Direkt am Fuße des majestätischen Vatnajökull – Europas größtem Gletscher außerhalb der Polarregionen – erstreckt sich ein riesiges, tiefes Seebecken, das ein absolut atemberaubendes Panorama bietet. Die Lagune ist berühmt für ihre gigantischen, jahrtausendealten Eisberge, die sich mit lautem Getöse von der Breiðamerkurjökull-Gletscherzunge losreißen und anschließend wie eine lautlose, majestätische Prozession in Richtung Ozean treiben. Die Eisriesen leuchten dabei im arktischen Licht in den faszinierendsten Farben: von strahlendem Kristallweiß über tiefes, intensives Himmelblau bis hin zu dunklen Streifen aus vulkanischer Asche, die von vergangenen Eruptionen zeugen. Wer diese eisige Welt ganz intensiv spüren möchte, kann mit einem Amphibienfahrzeug oder einem Zodiac-Boot direkt zwischen den gigantischen Skulpturen hindurchmanövrieren, während neugierige Robben immer wieder elegant ihre Köpfe aus dem eiskalten Wasser strecken – ein absolut unvergessliches Highlight!Doch das magische Spektakel ist hier noch lange nicht vorbei: Direkt auf der gegenüberliegenden Seite der Ringstraße, wo die Lagune in den wilden Atlantik mündet, wartete der legendäre Diamond Beach (Breiðamerkursandur) auf uns. Die Gezeiten und die unbändige Brandung des Meeres spülen die kleineren, glattgeschliffenen Eisbrocken aus der Lagune zurück an den tiefschwarzen Vulkansandstrand. Wenn man diesen Küstenabschnitt betritt, versteht man sofort, woher der Strand seinen treffenden Namen hat: Unzählige glasklare Eisformationen liegen verstreut auf dem dunklen Untergrund und funkeln im Sonnenlicht wie Millionen von frisch geschliffenen, riesigen Diamanten. Der Kontrast zwischen dem pechschwarzen Sand, den glitzernden Eisjuwelen und den weißen Schaumkronen der heranrollenden Wellen ist von einer so dramatischen, poetischen Schönheit, dass es weltweit kaum einen vergleichbaren Ort gibt. Ein absolutes Paradies für Fotografen und ein tief bewegendes Erlebnis, das die ungezähmte, arktische Natur von ihrer spektakulärsten Seite zeigt!

    Fjallsárlón – Die unberührte, magische Ruhe der treibenden Eisberge

    Unsere Reise führte uns weiter in den tiefen Süden Islands zu einem Ort von fast unwirklicher, erhabener Schönheit: der Gletscherlagune Fjallsárlón. Während die weltberühmte Nachbarlagune Jökulsárlón oft Scharen von Touristen anzieht, offenbarte sich uns am Fjallsárlón eine wunderbar friedliche, fast andächtige Atmosphäre. Wer die majestätische isländische Gletscherwelt abseits der großen Massen in aller Ruhe auf sich wirken lassen möchte, ist an diesem magischen Fleckchen Erde genau richtig.Hier schiebt sich die gewaltige Zunge des Vatnajökull-Gletschers spektakulär den Berghang hinunter und mündet direkt in die Lagune. Auf dem stillen, spiegelglatten Wasser treiben unzählige, majestätische Eisberge, die im arktischen Licht in den faszinierendsten Nuancen von strahlendem Weiß über tiefes Himmelblau bis hin zu vulkanischem Ascheschwarz schimmern. Wenn man am Ufer steht und dem leisen, gelegentlichen Knacken des ewigen Eises lauscht, spürt man die unbändige Kraft der Natur ganz intensiv. Mit etwas Glück kann man im Wasser sogar neugierige Robben beobachten, die elegant zwischen den Eisriesen hindurchtauchen – ein unvergessliches Highlight, das uns tief beeindruckt hat!

    Die Lagune ist leicht zugänglich und ein perfekter Ort für Fotografen und Naturliebhaber, die die majestätische isländische Gletscherwelt abseits der Massen entdecken möchten.

    Svartifoss & Skaftafellsjökull – Das ultimative Wanderhighlight im Herzen des Vatnajökull-Nationalparks

    Ein absolutes Muss für jeden Natur- und Wanderliebhaber führte uns tief hinein in das Skaftafell-Gebiet, eine grüne Oase inmitten des monumentalen Vatnajökull-Nationalparks. Unser erstes Ziel dort war der weltberühmte Svartifoss – der „Schwarze Wasserfall“. Schon der rund 45-minütige Aufstieg über einen wunderschön angelegten Wanderweg belohnt einen mit immer spektakuläreren Ausblicken auf die weiten Sanderebenen des Südens. Wenn man schließlich um die letzte Kurve biegt, offenbart sich ein Anblick von faszinierender, fast mathematischer Schönheit: Das Wasser stürzt hier rund 20 Meter tief über eine hufeisenförmige Klippe, die komplett aus pechschwarzen, hängenden Basaltsäulen besteht. Diese hexagonalen Gesteinsformationen entstanden vor Jahrtausenden durch das extrem langsame Abkühlen von Lavaströmen im Inneren der Erde. Ein genialer Funfact für Kulturliebhaber am Rande: Das einzigartige, geometrische Design des Svartifoss diente dem isländischen Staatsarchitekten Guðjón Samúelsson als direkte, visuelle Inspiration für die markante Fassade der berühmten Hallgrímskirkja in Reykjavík! Es ist ein zutiefst beeindruckender Ort, der perfekt zeigt, wie die Natur selbst zur größten Künstlerin wird.Nach diesem kulturell-geologischen Highlight setzten wir unsere Wanderung fort und steuerten den majestätischen Skaftafellsjökull an, eine gewaltige und unübersehbare Ausläuferzunge des riesigen Vatnajökull-Gletschers. Ein flacher, gut begehbarer Pfad führt direkt vom Besucherzentrum bis ganz nah an den Rand der lagunenartigen Gletscherzunge. Der Anblick, der sich einem hier bietet, ist schlichtweg monumental: Eine gigantische, zerklüftete Wand aus ewigem Eis schiebt sich unaufhaltsam aus den Bergen hinunter in das Tal. Wenn man am Aussichtspunkt steht, spürt man förmlich den eisigen Atem des Gletschers und sieht das faszinierende Zusammenspiel aus strahlend blauem Eis und dunklen Moränenstreifen aus Vulkanasche. Für Abenteuerlustige ist das Areal zudem der perfekte Ausgangspunkt, um sich mit Steigeisen und Eisaxt einer geführten Gletscherwanderung oder einer Eisklettertour anzuschließen. Das gesamte Gebiet rund um den Svartifoss und den Skaftafellsjökull war für uns ein absolutes Outdoor-Highlight, das die unbändige Vielfalt Islands auf engstem Raum perfekt erlebbar macht!

    Lómagnúpur – Der sagenumwobene Felsengigant an der Ringstraße

    Direkt an der Route 1, der isländischen Ringstraße, ragt plötzlich ein monumentales Naturdenkmal empor, das einem unweigerlich den Atem raubt: der Lómagnúpur. Dieser markante Tafelberg erhebt sich mit seinen extrem steilen, fast senkrecht abfallenden Klippen stolze 764 Meter über die weiten, kargen Sanderebenen des Südens. Seine gewaltige, unübersehbare Silhouette ist schon aus vielen Kilometern Entfernung ein absoluter Blickfang und gehört zweifelsohne zu den fotogensten Panoramen der gesamten Strecke.Der Lómagnúpur ist jedoch nicht nur geologisch faszinierend, sondern auch tief in der isländischen Mythologie verwurzelt. Er ist von zahlreichen alten Sagen und Legenden umwoben – so wird in der berühmten Njáls-Saga berichtet, dass im Inneren des Berges ein mächtiger Riese wohnt, der im Traum eines Propheten mit einem eisernen Stab heraustrat, um die feindlichen Geister Islands abzuwehren. Wenn man im Schatten dieses uralten Felsriesen steht und die raue, epische Kulisse auf sich wirken lässt, kann man die Magie dieser alten Geschichten förmlich in der Luft spüren!


    Südliche Highlights rund um Vik & Umgebung

    Fossálar Waterfall – Versteckte, moosbewachsene Schönheit an der Ringstraße

    Auf unserem Roadtrip entlang der südisländischen Ringstraße stießen wir auf ein weiteres, wunderbar idyllisches Naturjuwel, das von den allermeisten Reisenden unbemerkt passiert wird: den malerischen Fossálar Wasserfall. Dieser verträumte, mehrstufige Wasserfall liegt etwa 16 Kilometer nordöstlich der kleinen Ortschaft Kirkjubæjarklaustur und ist ein absoluter Geheimtipp für alle, die eine kurze Pause abseits der überlaufenen Touristenmagnete suchen. Während die bekannten Riesen des Südens oft schon von Weitem im Fokus stehen, schmiegt sich der Fossálar fast schüchtern, aber ungemein fotogen in die umliegende Kulisse.Das Besondere am Fossálar ist seine herrlich friedliche Atmosphäre. Das klare Wasser des Flusses breitet sich hier über breite, sanfte Kaskaden aus und plätschert malerisch über uralte, dicht mit sattgrünem Islandmoos bewachsene Felsen. Die Umgebung wirkt wie aus einem skandinavischen Märchenbuch entsprungen. Ein kleiner, unbefestigter Parkplatz direkt an der Route 1 ermöglicht es, das Auto kurz abzustellen. Von dort aus führen kurze, gut begehbare Pfade am Flussufer entlang, die Naturfotografen immer wieder neue, wunderschöne Perspektiven auf das herabstürzende Wasser und die weite, raue Lavalandschaft der Region bieten. Für uns war dieser spontane Zwischenstopp perfekt, um tief durchzuatmen, die frische arktische Luft zu genießen und die unaufgeregte, stille Schönheit Islands ganz in Ruhe aufzusaugen!

    Fjaðrárgljúfur – Die märchenhafte, tiefgrüne Schlucht der Elfen und Trolle

    Ein absolutes landschaftliches Juwel im tiefen Süden Islands führte uns zu einem Ort, dessen Anblick so surreal schön ist, dass er direkt einem Fantasy-Film entsprungen sein könnte: die atemberaubende Schlucht Fjaðrárgljúfur. Dieser monumentale Canyon erstreckt sich über eine Länge von etwa zwei Kilometern und schneidet sich bis zu 100 Meter tief in die isländische Landschaft. Geformt wurde dieses Naturwunder vor rund 9.000 Jahren am Ende der letzten Eiszeit durch das unbändige Schmelzwasser der abziehenden Gletscher. Der Fluss Fjaðrá hat sich seither unaufhaltsam und beharrlich seinen Weg durch das weiche Palagonit-Gestein gegraben und dabei ein Labyrinth aus bizarren, geschwungenen Felsformationen hinterlassen.Wenn man oben am Schluchtkamm entlangwandert, bietet sich ein unvergleichliches Panorama: Die steilen, schroffen Klippen sind über und über von einem dicken, weichen Teppich aus sattgrünem Islandmoos bewachsen, während tief unten am Grund das glasklare, türkisfarbene Flusswasser malerisch durch die engen Felswindungen plätschert. Entlang des Canyons führt ein wunderschön angelegter, gut gesicherter Wanderweg zu mehreren Aussichtsplattformen, die spektakuläre Tiefblicke und grandiose Fotomotive bieten. Ein extrem wichtiger Reisetipp am Rande: Die Schlucht erlangte vor einigen Jahren durch ein Musikvideo von Justin Bieber weltweite Berühmtheit, was zu einem enormen Ansturm führte. Da das uralte Moos und die empfindlichen Böden unter den Menschenmassen stark gelitten haben, ist das Verlassen der offiziellen Holzstege und Pfade heute strengstens verboten (und wird rigoros überwacht). Wer sich an die Regeln hält, erlebt hier jedoch ein absolut unvergessliches Wanderhighlight, das die magische, fast verwunschene Seite der isländischen Natur perfekt verkörpert!

    Die lutherische Kirche von Vík – Das rote Juwel hoch über dem schwarzen Strand

    Unsere Fahrt führte uns schließlich in das malerische, weltberühmte Küstendorf Vík í Mýrdal. Schon von Weitem erblickt man das unbestrittene und wunderschöne Wahrzeichen des Ortes: die lutherische Kirche von Vík. Mit ihrer schlichten, strahlend weißen Fassade und dem markanten, leuchtend roten Dach thront sie majestätisch auf einem grünen Hügel hoch über dem restlichen Dorf.Die Kirche ist nicht nur ein spirituelles Zentrum der Gemeinde, sondern auch ein absoluter Traum für jeden Fotografen. Wenn man den Hügel hinaufsteigt, eröffnet sich einem ein absolut grandioser Panoramablick über die charmanten Häuser des Dorfes, den tiefschwarzen Sandstrand und den wilden, tosenden Atlantik, aus dem die markanten Basaltnadeln der Reynisfisdrangar ragen. Ein friedlicher und zutiefst isländischer Ort, der die enge Verbindung der Menschen hier mit der gewaltigen Natur ringsum perfekt symbolisiert!

    Hálsanefshellir & Loftsalahellir – Faszinierende Höhlenabenteuer im vulkanischen Herzen des Südens

    Die dramatische Region rund um das Küstendorf Vík í Mýrdal hält neben den endlosen Stränden auch zwei absolut spektakuläre Höhlensysteme bereit, die tiefe Einblicke in die feurige, vulkanische Vergangenheit der Insel gewähren: die Höhlen Hálsanefshellir und Loftsalahellir. Direkt am weltberühmten, pechschwarzen Sandstrand von Reynisfjara stießen wir auf die monumentale Hálsanefshellir. Diese gewaltige, natürliche Basalthöhle ist ein absolutes geologisches Meisterwerk, denn ihre Decke und Wände bestehen komplett aus perfekt geformten, tiefschwarzen Basaltsäulen, die wie eine gigantische, steinerne Orgel aussehen. Wenn das Licht in einem bestimmten Winkel in die Höhlenöffnung fällt, entstehen hier einzigartige, mystische Stimmungen – ein absoluter Traum für jeden Fotografen! Aber Achtung vor den Gezeiten: Da die berüchtigten Sneaker-Waves des Atlantiks regelmäßig mit unbändiger Wucht direkt in die Höhle schlagen, sollte man sie nur bei absoluter Ebbe und mit einem wachsamen Auge aufs Meer betreten.Nur ein kleines Stück weiter westlich, verborgen in den steilen Klippen nahe der Halbinsel Dyrhólaey, wartete mit der Loftsalahellir ein echter historischer Geheimtipp auf uns. Diese markante Tuffstein-Höhle thront erhöht in einer Felswand und ist über einen kurzen, knackigen Pfad erreichbar. Die Loftsalahellir diente den Isländern in früheren Jahrhunderten als geschützter Versammlungsort für das regionale Gericht (Dyrhólaþing). Wenn man im schützenden Inneren der felsigen Öffnung steht und den Blick nach draußen schweifen lässt, eröffnet sich ein absolut atemberaubender Panoramablick über die weiten, schwarzen Sandstrände, die grünen Marschländer und die tosenden Wellen des Ozeans. Beide Höhlen sind unglaublich faszinierende, leicht zugängliche Erkundungsziele, die das Abenteuer an der Südküste einfach perfekt abrunden!

    Reynisdrangar – Die versteinerten Trolle im tosenden Atlantik vor Vík

    Direkt vor der Küste des malerischen Dorfes Vík í Mýrdal ragt ein absolut monumentales und weltberühmtes Naturdenkmal spektakulär aus den schäumenden Fluten des Nordatlantiks: die Reynisdrangar. Diese markanten, tiefschwarzen Basaltnadeln schießen bis zu 66 Meter steil aus dem Ozean empor und bilden zusammen mit dem pechschwarzen Sandstrand eine der dramatischsten und melanchonischsten Kulissen der gesamten Insel. Geologisch gesehen handelt es sich bei diesen bizarren Felsformationen um die Überreste einer einstigen, weitaus größeren Klippenlinie, die über Jahrtausende hinweg den unbarmherzigen, anstürmenden Wellen und Kräften des Meeres trotzen musste, während das weichere Gestein ringsum längst weggespült wurde.Doch wie fast jeder magische Ort in Island, sind auch die Reynisdrangar tief in der isländischen Mythologie und dem Volksglauben verwurzelt. Der alten, spannenden Legende nach handelt es sich bei den Zacken in Wahrheit um ein versteinertes Trollvolk. Die Trolle versuchten in einer stürmischen Nacht verzweifelt, ein dreimastiges Schiff an Land zu ziehen. Da sie jedoch zu lange brauchten und die Arbeit unterschätzten, wurden sie vom ersten, gleißenden Strahl des Sonnenaufgangs überrascht und augenblicklich zu ewigem Stein verwandelt. Wenn man am Ufer steht, während der Wind peitscht und die Wellen lautstark an den Felsen zerschellen, kann man die Magie dieser alten Geschichten förmlich greifen. Ein absolut überlebenswichtiger Reisetipp für diesen Stopp: Die Brandung an diesem Küstenabschnitt gehört zu den gefährlichsten der Welt. Die berüchtigten, tückischen „Sneaker-Waves“ (Riesenwellen) tauchen völlig unvorhersehbar aus dem Nichts auf und haben schon mehrfach unvorsichtige Touristen ins eiskalte Meer gerissen. Daher gilt hier die goldene Regel: Niemals dem Wasser den Rücken zukehren und stets einen großen Sicherheitsabstand zur Flutlinie einhalten!

    Arnardrangur & Papageientaucher-Beobachtung – Zu Besuch bei den charmanten Clowns der Meere

    An der dramatischen Südküste, genauer gesagt am geschichtsträchtigen Kap Dyrhólaey ganz in der Nähe von Vík, stießen wir auf ein absolutes Highlight für jeden Tier- und Naturliebhaber: den majestätischen Arnardrangur. Dieser beeindruckende, freistehende Basaltfelsen ragt wie ein riesiger, dunkler Monolith direkt aus dem pechschwarzen Sandstrand empor. Sein Name bedeutet übersetzt „Adlerfelsen“ und geht auf eine Zeit zurück, in der hier tatsächlich noch wilde Seeadler nisteten. Heute ist die markante Felsnadel ein absolut begehrtes Fotomotiv und ein stolzes Symbol für die ungezähmte, raue Schönheit der südisländischen Küstenlandschaft. Von den Klippen oberhalb des Felsens hat man einen schier endlosen, atemberaubenden Blick über den tosenden Atlantik.Doch der wahre Grund, warum wir an diesem windgepeitschten Kap aus dem Staunen nicht mehr herauskamen, flatterte direkt vor unseren Augen: Dyrhólaey ist im Sommer die Heimat einer riesigen Kolonie von Papageientauchern! Die liebevoll „Puffins“ genannten Vögel sind die unbestrittenen Stars der isländischen Tierwelt. Besonders in den Sommermonaten während der Brutzeit kann man die kleinen Kerle mit ihren charakteristischen, leuchtend orange-roten Schnäbeln und dem eleganten schwarz-weißen Gefieder aus allernächster Nähe beobachten. Es ist ein absolut herzerwärmendes Schauspiel zu sehen, wie sie geschäftig aus ihren kleinen Erdhöhlen in den steilen, grasbewachsenen Klippen gucken, mit erstaunlicher Geschwindigkeit aufs offene Meer hinausschießen und kurze Zeit später mit dem Schnabel voller kleiner Silberfische im Zickzack-Flug zurückkehren. Für uns war dieser Stopp ein unvergessliches Erlebnis, das uns mit einem riesigen Lächeln im Gesicht zurückgelassen hat!

    Sólheimasandur Flugzeugwrack – Mystischer Lost Place auf schwarzem Sand

    Ein absolutes Kontrastprogramm zu den unberührten Naturwundern wartete an der südisländischen Küste auf uns: das weltberühmte Flugzeugwrack von Sólheimasandur. Mitten in einer endlosen, surreal wirkenden Wüste aus tiefschwarzem Vulkansand trotzt hier seit Jahrzehnten das verlassene und verrostete Gerippe einer US Navy DC-3 den rauen Elementen der isländischen Natur. Im Jahr 1973 ging der Maschine auf dem Flug der Treibstoff aus, was den Piloten zu einer Notlandung auf dem Strand zwang. Wie durch ein Wunder überlebten damals alle Insassen den Vorfall unbeschadet.Heute zieht dieser geschichtsträchtige Lost Place Fotografen, Musikvideoproduzenten und Abenteurer aus aller Welt magisch an. Da das Befahren des Strandes strengstens verboten ist, erreicht man das Wrack nur über eine rund 45-minütige Wanderung pro Strecke über die weite, völlig offene Ebene. Die Monotonie des Weges verstärkt das Gefühl der Isolation nur noch mehr. Sobald die silberne, vom Wind und Sand gezeichnete Silhouette des Flugzeugs schließlich am Horizont auftaucht, bietet sich ein unbeschreiblich dramatisches Bild. Ein absolut mystischer Ort, der perfekt zeigt, wie die Natur sich über die Zeit hinweg alles Menschengemachte einverleibt!

    Skógafoss – Der donnernde Vorhang aus purem Gletschereis

    Nur ein kurzes Stück weiter die Ringstraße hinauf stießen wir auf einen der unbestrittenen Giganten unter Islands Wasserfällen: den majestätischen Skógafoss. Auf einer beeindruckenden Breite von 25 Metern stürzt das Wasser des Flusses Skógá hier vollkommen schnurgerade und ohne Unterbrechung stolze 60 Meter in die Tiefe. Die schiere Kraft und das ohrenbetäubende Donnern, mit dem die Wassermassen unten aufschlagen, sind absolut respekteinflößend. Durch die enorme Gischt, die permanent in die Luft gewirbelt wird, bildet sich an sonnigen Tagen fast immer ein wunderschöner, leuchtender Doppelregenbogen direkt vor dem weißen Wasservorhang – ein absolut magisches Fotomotiv!Das Besondere am Skógafoss is, dass man sich ihm auf dem flachen Kieselbett fast bis auf wenige Meter nähern kann, um die Gischt im Gesicht zu spüren (Regenkleidung ist hier Pflicht!). Wer eine andere Perspektive sucht, kann über eine steile Holztreppe mit rund 400 Stufen an der rechten Flanke des Wasserfalls nach oben steigen. Von der dortigen Aussichtsplattform hat man nicht nur einen spektakulären Blick auf die Kante des herabstürzenden Wassers, sondern schaut auch weit über die weite Südküste bis zum Atlantik. Zudem startet hier der berühmte Fimmvörðuháls-Wanderweg, der quer durch das Hochland führt.

    Skógar Museum – Eine faszinierende Zeitreise in Islands Vergangenheit

    Direkt in der Nachbarschaft des donnernden Wasserfalls nutzten wir die Gelegenheit für einen Besuch im wunderschönen Skógar Museum. Dieses liebevoll gestaltete Regional- und Freilichtmuseum ist die perfekte Ergänzung zu den gewaltigen Natureindrücken, da es die bewegte Kulturgeschichte und das harte Überleben der Isländer über die Jahrhunderte hinweg greifbar macht.Das absolute Highlight des Museumsgeländes ist die historische Sammlung originalgetreuer Gebäude, allen voran die charmanten, mit grünem Gras bewachsenen traditionellen Torfhäuser. Beim Blick in die engen, urigen Räume wird einem erst so richtig bewusst, wie geschickt die Isländer Materialien wie Holz, Stein und Torf kombinierten, um sich gegen die eisigen arktischen Winter zu isolieren. Neben den Wohnhäusern gibt es eine alte Schule, eine wunderschöne Holzkirche sowie riesige Ausstellungen zu Handwerk, Seefahrt, Landwirtschaft und Technik. Ein unglaublich lohnenswerter und charmanter Zwischenstopp, der die Vergangenheit Islands auf wunderbare Weise lebendig werden lässt!

    Der Bra Fence – Das skurrilste und bunteste Zaun-Mysterium an der Südküste

    Neben all den monumentalen Gletschern, donnernden Wasserfällen und mystischen Höhlen hält Island am Straßenrand auch eine ganz andere, herrlich skurrile Überraschung parat: den legendären „Bra Fence“ (BH-Zaun). Unweit der kleinen Ortschaft Hvolsvöllur, direkt an einer Kurve der südisländischen Ringstraße, flattert an einem ganz normalen Weidezaun eine gigantische, kunterbunte Sammlung von Damenunterwäsche im kräftigen arktischen Wind. Es ist wohl einer der kuriosesten und am häufigsten fotografierten Zwischenstopps der gesamten Insel, der garantiert jedem vorbeifahrenden Roadtripper ein breites Schmunzeln ins Gesicht zaubert.Die Entstehungsgeschichte dieses Phänomens ist so einfach wie genial: Alles begann im Jahr 2012 als eine Handvoll Touristinnen (oder Einheimische – so ganz genau weiß das niemand mehr) als spontanen, witzigen Streich heimlich ein paar BHs an den Stacheldraht hängten. Der Besitzer des Zauns ließ sie einfach hängen. Es dauerte nicht lange, bis Reisende aus aller Welt von der Aktion erfuhren, das Ganze in den sozialen Medien viral ging und eine Eigendynamik entwickelte. Inzwischen ist die Sammlung auf weit über tausend Stück angewachsen – in allen erdenklichen Farben, Mustern und Körbchengrößen. Was jedoch als skurriler Scherz begann, hat heute einen zutiefst wunderbaren Zweck: Mittlerweile steht am Zaun eine offizielle Spendenbox, und die ungewöhnliche Tradition wird aktiv genutzt, um Gelder für die isländische Krebshilfe zur Erforschung und Bekämpfung von Brustkrebs zu sammeln. Ein absolut fantastisches, kleines Highlight auf unserer Route, das perfekt beweist, wie viel Humor, Kreativität und Herz in dieser rauen Insel stecken!

    DC-3 Eyvindarholt – Das geheime „Zwei-Minuten-Flugzeugwrack“ an der Ringstraße

    Jeder Island-Fan kennt die epischen Bilder des verlassenen US-Navy-Flugzeugwracks auf dem endlosen schwarzen Sandstrand der Südküste. Was jedoch die wenigsten wissen: Wer keine Lust hat, den stundenlangen, oft windgepeitschten und anstrengenden Acht-Kilometer-Fußmarsch (Hin- und Rückweg) zum überlaufenen Wrack von Sólheimasandur auf sich zu nehmen, findet unweit des berühmten Seljalandsfoss-Wasserfalls einen absolut genialen, geheimen Zwilling: das DC-3-Flugzeugwrack von Eyvindarholt!Hinter diesem markanten Flugzeug, das mit seinen olivgrünen und leuchtend orangefarbenen Akzenten an Nase und Heck sofort ins Auge springt, steckt eine faszinierende Geschichte. Es handelt sich um eine Douglas DC-3 (Militärversion C-47) der US-Navy, die im Sommer 1969 aufgrund von Triebwerksproblemen im fernen Nordosten Islands bei Sauðanes notlanden musste. Alle Insassen überlebten glücklicherweise unverletzt. Jahrzehntelang diente der Rumpf auf einer dortigen Farm als skurriler Unterschlupf für Schafe und Pferde sowie als Abenteuerspielplatz für die Kinder des Farmers. Da der Ansturm der Island-Touristen in der abgelegenen Region jedoch den landwirtschaftlichen Betrieb störte, wurde das historische Wrack kurzerhand gerettet, aufwendig transportiert und hier bei Eyvindarholt im Süden wieder aufgestellt.Für uns war dieser Stopp ein absoluter Volltreffer und der ultimative Roadtrip-Hack! Man biegt einfach von der Route 1 ab, stellt das Auto auf dem kleinen, gebührenpflichtigen Parkplatz ab und erreicht die majestätischen Überreste nach einem gemütlichen, gerade einmal 100 Meter langen Spaziergang. Die Kulisse aus dem rostenden, geschichtsträchtigen Metall und den saftig grünen Wiesen im Hintergrund ist unfassbar fotogen und strahlt eine ganz eigene, mystische Ruhe aus. Wer die Faszination eines „Lost Place“ hautnah erleben möchte, ohne wertvolle Stunden seiner Island-Rundreise auf einer Wanderung zu verlieren, sollte diesen genialen Zwischenstopp in Eyvindarholt keinesfalls verpassen!

    Nauthúsafoss – Das verborgene Schluchten-Abenteuer unter Ebereschen

    Abseits der stark frequentierten Hauptrouten des Südens stießen wir auf ein echtes, abenteuerliches Naturjuwel, das oft im Schatten der bekannteren Riesen liegt: den faszinierenden Nauthúsafoss. Dieser außergewöhnliche Wasserfall ist ein absoluter Geheimtipp für all jene, die den Nervenkitzel suchen und unberührte Wildnis hautnah erleben möchten. Das Besondere am Nauthúsafoss ist seine Lage, denn er versteckt sich tief im Inneren einer extrem schmalen, fast mystisch anmutenden Felsschlucht.Um überhaupt bis zum Fuß des Wasserfalls vorzudringen, muss man sich auf eine kleine, aufregende Kletterpartie einlassen. Der Weg führt direkt durch das plätschernde Bachbett der Schlucht, vorbei an feuchten, dicht mit sattgrünem Moos bewachsenen Felswänden. An den engsten Stellen balanciert man vorsichtig von Stein zu Stein und hält sich an ausgelegten Ketten fest, die an den Felsen verankert sind. Über den Köpfen der Entdecker formen wilde Ebereschen, die auf den Kanten der Klippen wachsen, ein natürliches, schützendes Dach. Belohnt wird das kleine Abenteuer am Ende der Schlucht mit dem atemberaubenden Anblick des Nauthúsafoss, dessen Wasserfall sich elegant durch eine Felsöffnung in ein klares Becken stürzt – ein Ort voller wilder Kraft und geheimnisvoller Magie!

    Seljavallalaug Swimming Pool – Nostalgischer Retro-Charme im geheimen Tal

    Nach so viel Action stand uns der Sinn nach Entspannung – und wo könnte man das in Island besser als in einem traditionsreichen, geschichtsträchtigen Hot Pot? Unsere Suche führte uns zum legendären Seljavallalaug Swimming Pool, einem der ältesten noch erhaltenen Schwimmbäder des gesamten Landes. Eingebettet in ein tiefes, grünes Tal direkt am Fuße des berühmt-berüchtigten Vulkans Eyjafjallajökull, versprüht dieser abgelegene Ort einen ganz besonderen, unberührten Retro-Charme.Das schlichte Betonbecken wurde bereits im Jahr 1923 von engagierten Isländern erbaut, um der damaligen Landbevölkerung – vor allem den vielen Fischern – das lebenswichtige Schwimmen beizubringen. Bis heute wird das Freibad auf völlig natürliche Weise mit herrlich warmem Quellwasser gespeist, das direkt aus der vulkanischen Erde an einer der Felswände in das beckensprudelt. Die Ausstattung ist spartanisch, die alten Umkleidekabinen sind verwittert, doch genau das macht die einzigartige, nostalgische Atmosphäre aus. Nach einer kurzen Wanderung durch die malerische Kulisse in das warme, dampfende Wasser einzutauchen, während ringsum die monumentalen Berghänge aufragen, ist ein absolut unvergessliches und authentisch isländisches Erlebnis!


    Selfoss & Golden Circle

    Seljalandsfoss – Das magische Abenteuer hinter dem 60 Meter hohen Gletscherschleier

    Ein absolutes und weltberühmtes Highlight jeder Islandreise erwartete uns direkt an der Ringstraße im tiefen Süden der Insel: der majestätische Seljalandsfoss. Schon von Weitem sieht man die weißen Wassermassen spektakulär über eine steile, ehemalige Küstenklippe in die Tiefe stürzen. Der Wasserfall besitzt eine stolze Höhe von rund 60 Metern und wird vom Schmelzwasser des berühmt-berüchtigten Gletschervulkans Eyjafjallajökull gespeist – ja genau jenem Vulkan, der im Jahr 2010 mit seiner gigantischen Aschewolke den gesamten europäischen Flugverkehr tagelang komplett lahmlegte! Doch der Seljalandsfoss ist nicht einfach nur ein schöner Wasserfall zum Anschauen, er hält ein absolut einzigartiges, interaktives Abenteuer parat: Er ist einer der ganz wenigen Wasserfälle der Welt, die man komplett hintergehen kann!Ein schmaler, oft rutschiger und vom ewigen Sprühnebel nasser Pfad führt neugierige Entdecker direkt hinter den tosenden Wasserschleier in eine weitläufige, natürliche Felsgrotte. Wenn man dort steht, während die gigantischen Wassermassen nur wenige Meter vor einem mit ohrenbetäubendem Donnern in die Tiefe krachen, spürt man die unbändige, rohe Urgewalt der isländischen Natur in jeder einzelnen Faser seines Körpers. Besonders am späten Nachmittag oder während der magischen Stunden des Sonnenuntergangs, wenn die tiefstehende Sonne das herabstürzende Wasser in ein goldenes, fast überirdisches Licht taucht, entstehen hier atemberaubende Fotos von seltener Poesie. Ein überlebenswichtiger Insider-Tipp für diesen Stopp: Wer das Abenteuer hinter dem Wasserfall wagt, wird garantiert von oben bis unten nass! Packt also unbedingt eure komplette Regenbekleidung (inklusive Regenhose) ein und schützt eure Kameraausrüstung gut vor dem dichten, permanenten Sprühnebel. Für uns war dieser magische Spaziergang hinter die Kulissen der Natur ein absolut unvergesslicher Moment echten Island-Glücks!

    Keldur Turf House – Auf den Spuren der Wikinger im ältesten Torfhof Islands

    Zum Abschluss dieses erlebnisreichen Tages reisten wir weit zurück in die raue Vergangenheit der Insel und besuchten das geschichtsträchtige Gehöft Keldur. Es ist eines der ältesten erhaltenen Torfhaus-Ensembles Islands und ein absolut faszinierendes Meisterwerk traditioneller, isländischer Baukunst. Wer verstehen möchte, wie zäh und einfallsreich die Isländer über die Jahrhunderte hinweg lebten, sollte diesen historischen Ort unbedingt auf seine Bucket List setzen.Die Gebäude von Keldur wurden mit einer raffinierten Kombination aus Treibholz, schweren Feldsteinen und dicken, lebendigen Grassoden (Torf) errichtet. Diese einzigartige Bauweise bot den Menschen über Generationen hinweg eine optimale, natürliche Isolation gegen die eisigen, unbarmherzigen arktischen Stürme und Winter – ein cleverer Funfact am Rande: Diese traditionellen Torfhäuser isolierten so hervorragend, dass es in ihrem Inneren im Winter oft deutlich wärmer und gemütlicher war als in den ersten modernen Häusern der Insel! Keldur hat zudem eine tiefe historische Bedeutung, da es bereits in der berühmten Njáls-Saga namentlich erwähnt wird und einst der Sitz mächtiger Clanchefs war. Beim Spaziergang vorbei an den sanften, grasbewachsenen Dächern, die förmlich mit der umliegenden Hügellandschaft verschmelzen, fühlt man sich unweigerlich in die Epoche der Wikinger zurückversetzt.

    Þjófafoss – Der geschichtsträchtige „Wasserfall der Diebe“ im Schatten der Hekla

    Abseits der klassischen Touristenströme, eingebettet in die raue, weite Lavalandschaft des Merkurhraun-Feldes am Rande des malerischen Þjórsárdalur-Tals, stießen wir auf ein echtes, geschichtsträchtiges Naturjuwel: den Þjófafoss. Übersetzt bedeutet sein Name schlicht „Wasserfall der Diebe“ – und dieser Name ist kein Zufall, sondern geht auf ein düsteres Kapitel der isländischen Geschichte zurück. Der alten Überlieferung nach wurden im tiefen Mittelalter verurteilte Diebe und Verbrecher zu diesem Wasserfall geführt und zur Vollstreckung ihres Todesurteils von den schroffen Klippen direkt in die reißenden, eiskalten Fluten gestürzt. Diese historische, fast unheimliche Aura verleiht dem Ort noch heute eine ganz besonders geheimnisvolle und mystische Stimmung.Landschaftlich ist der Þjófafoss ein absolutes Meisterwerk und ein Traum für jeden Fotografen. Das milchig-türkisfarbene Schmelzwasser des mächtigen Flusses Þjórsá stürzt hier in einem breiten, kraftvollen und perfekt geformten Vorhang elf Meter tief in ein tiefblaues Becken. Umrahmt wird das Ganze von bizarren, dunklen Basaltformationen, die im Sommer von einem leuchtenden Meer aus lila Lupinen kontrastiert werden. Das absolute Highlight zeigt sich jedoch bei klarer Sicht im Hintergrund: Direkt hinter dem Wasserfall thront majestätisch die berüchtigte Hekla, einer der aktivsten und gefürchtetsten Vulkane Islands. Da der Þjófafoss nur über eine kurze Schotterpiste erreichbar ist, verirren sich nur wenige Reisende hierher. Wir hatten diesen magischen, geschichtsträchtigen Ort fast ganz für uns allein und konnten die ungezähmte Energie der isländischen Natur in absoluter Stille aufsaugen!

    Hjálparfoss – Der Wasserfall der Hilfe

    Hjálparfoss, was „Wasserfall der Hilfe“ bedeutet, liegt nur wenige Kilometer von Þjófafoss entfernt und besticht durch seine ungewöhnliche Form: Zwei Wasserfälle vereinigen sich hier in einem ruhigen Becken. Der Name soll darauf hinweisen, dass der Wasserfall einst als Orientierungspunkt für Reisende diente, die in der rauen Landschaft Hilfe suchten. Ein friedlicher und fotogener Ort, perfekt für eine kleine Pause auf der Fahrt.

    Geysir Park – Die spektakuläre Heimat der sprudelnden Naturgewalten

    Unsere Reise führte uns auf den weltberühmten Golden Circle, wo wir im geschichtsträchtigen Geysir Park Zeugen der unbändigen, geothermalen Kräfte Islands wurden. Dieses dampfende und brodelnde Thermalgebiet im Haukadalur-Tal ist weltbekannt, denn es beherbergt den Großen Geysir, der einst allen anderen Springquellen der Erde ihren Namen gab. Auch wenn der Große Geysir selbst heute nur noch extrem selten ausbricht, zieht das Areal Besucher aus aller Welt magisch an, da die Erde hier im Minutentakt ihre Muskeln spielen lässt.Das absolute Highlight des Parks ist der hochaktive, treue Nachbar namens Strokkur. Verlässlich alle paar Minuten kocht das Wasser in seinem tiefen Schlund tiefblau auf, formt eine faszinierende, gläserne Wasserblase und schießt dann mit einem ohrenbetäubenden Fauchen eine kochend heiße Wasser- und Dampffontäne bis zu 30 Meter in den isländischen Himmel. Wenn man am Absperrband steht und das rhythmische Brodeln beobachtet, spürt man die immense, glühende Energie direkt unter den eigenen Füßen. Der gesamte Park ist ein faszinierendes Freilichtmuseum der Geologie: Überall dampft es aus kleinen Erdspalten, schwefelgelbe Krusten säumen kochend heiße Schlammtöpfe und glasklare, türkisfarbene Quellen wie die Blesi-Quelle laden zum Staunen ein. Ein absolutes Must-see, das eindrucksvoll zeigt, warum Island den Beinamen „Insel aus Feuer und Eis“ trägt!

    Gullfoss – Der goldene Wasserfall

    Gullfoss, der „goldene Wasserfall“, ist einer der beeindruckendsten Wasserfälle Islands. Das Wasser stürzt in zwei Stufen mit enormer Kraft in eine tiefe Schlucht und erzeugt oft wunderschöne Regenbögen im Sprühnebel. Die Legende erzählt von einer mutigen Frau, die den Wasserfall vor dem Bau eines Kraftwerks rettete – heute ist Gullfoss ein Symbol für Naturschutz in Island. Ein absolutes Muss auf jeder Islandreise!

    Bruarfoss – Der „blaue Wasserfall“

    Bruarfoss ist ein verstecktes Juwel im Golden Circle und bekannt für sein unglaublich blaues Wasser, das fast schon surreal leuchtet. Der Wasserfall ist zwar nicht besonders groß, aber die intensive Farbe und die kleinen Kaskaden machen ihn zu einem echten Fotomagneten. Der Weg dorthin führt durch eine idyllische Landschaft und ist ein schöner kleiner Spaziergang abseits der großen Touristenströme. Funfact: Bruarfoss wird oft als „der schönste Wasserfall Islands“ bezeichnet – ein Geheimtipp, den man sich nicht entgehen lassen sollte!

    Friðheimar Tomatenfarm – Kulinarischer Gewächshaus-Zauber mit grünem Flair

    Direkt im Anschluss an die heißen Quellen erlebten wir eine kulinarische Überraschung, die man im kühlen, subarktischen Island wohl kaum erwarten würde: einen Besuch auf der einzigartigen Tomatenfarm Friðheimar. Mitten in einer rauen Vulkanlandschaft betritt man hier ein riesiges, lichtdurchflutetes Gewächshaus und findet sich plötzlich in einer südländisch duftenden, sattgrünen Oase wieder, in der Tausende von saftigen Tomaten an meterhohen Stauden reifen.Das absolut geniale Konzept von Friðheimar verbindet Landwirtschaft direkt mit einem erstklassigen Restaurant-Erlebnis. Man nimmt an rustikalen Holztischen mitten zwischen den grünen Pflanzenreihen Platz und darf sich durch eine Speisekarte probieren, auf der sich absolut alles um die Tomate dreht. Das unbestrittene Highlight ist die legendäre, unbegrenzte Tomatensuppe, die mit frisch gebackenem Brot, Saurer Sahne und frischem Basilikum serviert wird – ein absoluter Traum! Wer mutig ist, probiert ausgefallene Kreationen wie Tomateneis, hausgemachten Tomatenkuchen oder einen erfrischenden Tomaten-Cocktail. Ein spannender Funfact zur Technik: Damit die roten Früchte im kühlen Island das ganze Jahr über perfekt gedeihen, wird das Gewächshaus komplett mit umweltfreundlicher, geothermischer Energie aus eigenen Bohrungen beheizt und künstlich beleuchtet. Sogar Tausende importierte Hummeln fliegen frei durch die Hallen, um die Blüten ganz natürlich zu bestäuben. Ein absolut faszinierender und köstlicher Zwischenstopp abseits von traditionellem Fisch und Lamm, den man unbedingt rechtzeitig reservieren sollte!


    Þorlákshöfn & Umgebung

    Öxarárfoss – Der majestätische Graben-Wasserfall im historischen Þingvellir

    Der krönende Abschluss unserer Golden-Circle-Tour führte uns in den geschichtsträchtigen Þingvellir-Nationalpark, ein UNESCO-Weltkulturerbe und die wahre Wiege der isländischen Nation. Hier, wo das älteste noch bestehende Parlament der Welt im Jahr 930 gegründet wurde, stießen wir auf den beeindruckenden Öxarárfoss. Dieser Wasserfall fasziniert nicht nur durch seine Schönheit, sondern auch durch seine absolut einzigartige, geologische Lage.Das Wasser des Flusses Öxará stürzt hier über eine markante, schnurgerade Kante direkt in die Almannagjá-Schlucht. Diese Schlucht ist nichts Geringeres als der sichtbare, gigantische Riss zwischen der nordamerikanischen und der eurasischen Kontinentalplatte, die hier jedes Jahr unaufhaltsam weiter auseinanderdriften. Der Anblick des weißen Wassers vor den tiefschwarzen, schroffen Basaltwänden ist von wilder, fast dramatischer Schönheit. Ein wunderschön angelegter Holzsteg führt Wanderer direkt durch die tektonische Spalte bis an das klare Auffangbecken des Wasserfalls. Geschichtsinteressierte aufgepasst: Alten Sagen nach wurde der Fluss Öxará vor Jahrhunderten von den Siedlern künstlich umgeleitet, um die Schlucht während der alljährlichen Parlamentsversammlungen (Althing) gezielt mit Trinkwasser zu versorgen. Ein magischer Ort, an dem Geologie und die bewegte Geschichte Islands auf spektakuläre Weise miteinander verschmelzen!

    Kontinental-Spalte & Silfra-Spalte – Das magische Wandeln und Tauchen zwischen zwei Kontinenten

    Ein absolutes geologisches Weltwunder und eines der faszinierendsten Highlights unserer gesamten Island-Rundreise erwartete uns im geschichtsträchtigen Þingvellir-Nationalpark: die Kontinental-Spalten. Das gesamte Tal liegt genau auf der aktiven Nahtstelle des Mittelatlantischen Rückens, wo die nordamerikanische und die eurasische tektonische Platte unaufhaltsam mit einer Geschwindigkeit von etwa zwei Zentimetern pro Jahr auseinanderdriften. Wenn man hier durch die monumentale Almannagjá-Schlucht wandert, befindet man sich buchstäblich im Niemandsland zwischen zwei Welten – links ragen die schroffen Felswände Amerikas empor, während rechts bereits Europa beginnt. Dieses Gefühl, zwischen den Kontinenten zu wandeln, ist von einer so gewaltigen, spürbaren Energie, dass es einem unweigerlich eine Gänsehaut verpasst.Doch das absolute Kronjuwel dieses geologischen Grabensystems liegt tief im glasklaren Wasser verborgen: die legendäre Silfra-Spalte. Diese wassergefüllte Erdspalte ist weltweit berühmt und gilt unter Tauchern und Snorklern völlig zu Recht als einer der absolut besten und spektakulärsten Tauchspots unseres Planeten. Das Wasser, das die Spalte füllt, ist geschmolzenes Gletscherschleier-Wasser vom nahen Langjökull-Gletscher, welches auf seinem Weg hierher jahrzehntelang durch dicke Schichten aus porösem Lavagestein gefiltert wurde. Das Ergebnis ist ein Wasser von so unvorstellbarer Reinheit, dass die Sichtweite unter der Oberfläche sagenhafte 100 Meter und mehr beträgt! Wenn man im dicken Trockentauchanzug durch diese schmale, tiefblaue Felsspalte schwebt, während das Sonnenlicht magische Muster an die Basaltwände wirft, fühlt man sich vollkommen schwerelos wie im Weltall. Für uns war das Erlebnis, die Nahtstellen unserer Erde sowohl an Land als auch im eisigen, kristallklaren Wasser zu erkunden, ein absolut unvergesslicher Gänsehaut-Moment!

    Koma Auðar djúpúðgu (Audur’s Arrivals) – Auf den Spuren einer starken Wikinger-Pionierin

    Zum Abschluss unserer geschichtsträchtigen Erkundungen im Þingvellir-Gebiet stießen wir auf ein ganz besonderes, spirituelles Kulturdenkmal: „Koma Auðar djúpúðgu“ (Audur’s Arrivals). Dieser geschichtsträchtige Ort erinnert an eine der faszinierendsten und einflussreichsten Persönlichkeiten der isländischen Besiedlungsgeschichte – Auður die Tiefsinnige (Auður djúpúðga).Als eine der wenigen weiblichen Anführerinnen der Wikingerzeit floh Auður nach dem Tod ihres Mannes und ihres Sohnes von den britischen Inseln, befehligte ihr eigenes Schiff und führte ihre Gefolgschaft sicher bis an die fernen Küsten Islands. Doch sie brachte nicht nur Mut und Entschlossenheit mit, sondern auch etwas für die damalige Zeit absolut Ungewöhnliches: Sie war überzeugte Christin. An diesem Ort, an dem heute ein schlichtes, aber tief beeindruckendes Steinkreuz sowie ein modernes Denkmal stehen, errichtete Auður einst einen privaten Gebetsplatz auf den Hügeln. Da sie keine Kirche besaß, betete sie unter freiem Himmel inmitten der gewaltigen, unberührten Natur. Ein faszinierender Funfact: Obwohl nach ihrem Tod viele ihrer Nachkommen zum alten heidnischen Glauben an die Thron- und Odinsgötter zurückkehrten, blieb die Erinnerung an ihren tiefen Glauben und ihre außergewöhnliche Klugheit über ein Jahrtausend lang lebendig. Ein zutiefst friedlicher Ort, der uns noch einmal vor Augen führte, wie stark die Menschen geprägt sein mussten, die dieses raue Land besiedelten.


    Zurück nach Reykjavík (14.07.)

    Zum Abschluss unserer Reise genossen wir noch einmal das Flair von Reykjavík, schlenderten durch die Straßen, besuchten den alten Hafen und die Skulptur Þúfa, die mit bunten Pflanzen bepflanzt ist – ein toller Ort für einen letzten Kaffee.

    Leider Verpasst: Der Vulkan-Ausbruch bei Grindavík

    Ein kleines Island-Märchen am Rande: Am 16. Juli 2025, also einen Tag nach unserer Abreise, brach der Vulkan bei Grindavík aus – der zwölfte Ausbruch seit 2021. Wir hatten eigentlich geplant, dort zu wandern, haben es aber wegen Zeitmangels gelassen. Vielleicht ein Grund mehr, bald wiederzukommen!


    Fazit: Unser unvergessliches 2.700-Kilometer-Abenteuer auf IslandHinter uns liegen 16 Tage voller ungläubigem Staunen, unendlicher Weiten und Naturwunder, die sich kaum in Worte fassen lassen. Insgesamt haben wir mit unserem treuen Suzuki Jimny stolze 2.700 Kilometer auf der Ringstraße und entlegenen Pisten zurückgelegt. Von den quirligen, bunten Straßen Reykjavíks über die einsamen, tiefen Fjorde des Nordens bis hin zu den epischen Gletscherlagunen und schwarzen Sandstränden des Südens – Island hat uns vollkommen in seinen Bann gezogen.Dank unserer robusten und improvisierten Bananenkiste im Kofferraum waren wir als Selbstversorger völlig flexibel und konnten die raue Insel in unserem ganz eigenen Tempo entdecken. Natürlich mussten wir auf so einer langen Tour auch den einen oder anderen Kompromiss eingehen: Einige entlegene heiße Quellen und versteckte Highlights im rauen Hochland mussten wir schweren Herzens aufgrund von plötzlichen Wetterumschwüngen oder akutem Zeitmangel links liegen lassen. Doch wir sehen es positiv – das ist für uns einfach nur der perfekte Grund mehr, um ganz bald wiederzukommen!


    Island hat uns mit seiner rauen Schönheit, den unbeschreiblich freundlichen Menschen und unvergesslichen Momenten tief beeindruckt. Wer einmal hier war und die frische, arktische Luft geatmet hat, während neben ihm ein Geysir ausbricht oder ein Wasserfall donnert, wird die Sehnsucht nach dem Land aus Feuer und Eis nie ganz los. Wir hoffen von Herzen, dass unser ausführlicher Reisebericht euch inspiriert, eure Koffer zu packen und selbst auf Entdeckungsreise zu gehen!Wenn ihr Fragen zu unserer Route habt, Tipps für den passenden Mietwagen braucht oder einfach mehr über das Leben aus der Bananenkiste wissen wollt, meldet euch gern bei uns – wir teilen unsere Erfahrungen und Island-Liebe mit großer Freude!Viel Spaß beim Träumen, Nachreisen und Planen eurer eigenen Island-Abenteuer!

    Erlanger Triathlon 2023

    Der Wettkampf in der eigenen Homezone – Ein Fest für mich!

    Zu Beginn vielleicht kurz etwas zu meinen Vorbereitungen auf diese Mitteldistanz beim M-net Erlanger Triathlon. Eigentlich bereite ich mich immer sehr gut auf meine Wettkämpfe vor, doch dieses Jahr lief bis Mitte April relativ wenig. Ich hatte zu viele private Projekte und so mussten dieses mal 14 Wochen Vorbereitung ausreichen.

    Diese 14 Wochen waren gespickt mit 6-8 Einheiten pro Woche und am Ende kamen 420 Laufkilometer, 1.760 km auf dem Rad und 43 km im Wasser zusammen. Zum Glück kam ich komplett verletzungsfrei und ohne krankheitsbedingte Ausfälle durch das Training.

    Während der Vorbereitungszeit hatte ich zwei kleinere Wettkämpfe, zum einen eine Sprintdistanz beim Triathlon in Feucht und dann noch einen Lauf über die Halbmarathon-Disatanz beim Panorama-Baumwipfel-Lauf. Feucht war ein Desaster, der Halbmarathon ein Highlight, also alles gut!

    In der Woche vor dem Wettkampf fühlte ich mich extrem ausgeruht und gut vorbereitet, also stand einem erfolgreichen Wettkampf nicht im Weg.

    Die Startunterlagen holte ich bereits am Samstag ab und nahm an der Wettkampfbesprechung teil. In der Besprechung gab es für mich nicht viel wirklich interessantes, die Strecken kenne ich auswendig und auch die Gegebenheiten im Start-, Wechsel- und Zielbereich kenne ich nur zu gut. Danach ging es schnell nach Hause, alles fertig gepackt und dann ging es relativ früh ins Bett.

    Die Nacht vor dem Wettkampf war gut und ich fühlte mich ausgeruht und innerlich sehr ruhig. Nach einem kleinen Frühstück ging es gemeinsam mit meiner Tochter in Richtung Wettkampf-Location, um in Ruhe die Wechselzone einzurichten.

    Vorort traf ich auf immer mehr bekannte Gesichter, hier ein Schwätzchen, da ein Schwätzchen und schon war es kurz vor 9:00 Uhr,

    Zuerst starteten die Kurzdistanzler und 5 Minuten später folgten die ersten Teilnehmer auf die Mitteldistanz. Mein Startslot war um 9:15 Uhr und ich war immer noch überraschend ruhig.

    Wer mich kennt weiß, dass das Schwimmen im Wettkampf nicht mein Ding ist und schon öfters schief gegangen ist. Als der Startschuss für meine Gruppe fiel hielt ich mich auf der linken Seite des Feldes. Hier war es am ruhigsten und ich konnte in Ruhe die ersten Meter schwimmen. Ich spürte keine innere Hektik oder Panik aufkommen und so konzentrierte ich mich weiter darauf langsam in meinen Rhythmus zu kommen.

    Lief es auf den ersten 100m noch etwas unrund wurde es dann von Meter zu Meter besser. Ich konnte in aller Ruhe schwimmen, bekam keine Schläge ab und wurde auch nicht rüde überschwommen, wie man es nur zugut kennt. Mein erstes Ziel war die Brücke in 700m Entfernung und bis dahin lief es verdammt gut. Das zweite Ziel war die Wendeboje 300m später, hier wurde es kurz etwas eng, aber es ging relativ zivilisiert zu. In der Entfernung erspähte ich schon den Ausstieg, nur zwei Brücken weit weg bzw. 1.000m. Ab jetzt überholte ich sogar ein paar langsamere Schwimmer, spürte aber selber langsam die Ermüdung in den Armen. Konzentriert ging es weiter und nach für mich guten 43:41 Minuten, hatte ich den Ausstieg erreicht.

    Beim Ausstieg gab es zum Glück einige kräftige Hände, die mir beim Ausstieg halfen und so war ich schnell auf dem Weg in die Wechselzone.

    Mein kompletter Wechsel dauerte 3:44 Minuten und es gab sehr engagierte Helfer im Wechselzelt, die einem den Beutel ausleerten und die Schwimmutensilien wieder einpackten. Ich blieb hier ganz ruhig, nahm mir die Zeit einmal durchzuschnaufen, um mich dann auf die 80km Radstrecke zu begeben. Beim Schwimmen hatte man schon den stärker werdenden Wind gespürt, doch jetzt war er noch einmal etwas stärker geworden, kam in Böen mit bis zu 60 km/h aus Richtung Südwest und ließ nichts gutes erahnen.

    Auch beim Radfahren versuchte ich möglichst schnell in einen ruhigen und gleichmäßigen Rhythmus zu kommen, doch die Windböen verlangten einem einiges ab. Gerade auf den offenen Flächen war an ein entspanntes Fahren nicht zu denken, es war viel mehr ein Kampf in der Spur zu bleiben. Das Fahren in der Aeroposition war für mich bei dem Wind eine sehr unsichere Sache und so kam ich in diese Position nur recht selten. Noch dazu hatte ich beim Schwimmen auf den letzten paar 100m meinen Rücken gespürt und die Schmerzen nahmen leider immer mehr zu.

    Nicht in der Aeroposition fahren zu können, kostete mich sehr viel Kraft und auf der ersten Runde konnte ich gerade so einen 30km/h Schnitt halten. Die Verpflegungsstation, war optimal organisiert und die Annahme der Flaschen verlief gut. Die zweite Runde verlief relativ ähnlich und so brauchte ich am Ende für die gut 80 km 2:42:40 Stunden. Nicht optimal, hier hatte ich mir mehr erhofft, doch der Wind war einfach ein harter Gegner.

    Auch der zweite Wechsel verlief gut und auch hier waren wieder helfende Hände zur Stelle. Ich schnaufte einmal kurz durch und nach 2:28 min machte ich mich auf die Laufstecke.

    Ich glaube mein Gesichtsausdruck sagt fast alles, das Radfahren hatte mich wirklich viel Kraft gekostet. Die Beine waren schwer wie Blei, doch zum Glück waren nach wenigen Schritten Rückenschmerzen Geschichte. Jetzt ging es 3 Runden durch den nahegelegenen Wald, wobei es jede Runde über eine der Kanalbrücke ging.

    Die ersten 700m verlief die Strecke am Kanal und das Laufen fühlte sich auf Grunde des Rückenwindes sehr locker an. Dann ging es über eine der Brücken des Kanals und in mir keimte sofort der Wunsch auf zu gehen, doch zumindest die erste Runde wollte ich noch hoch laufen. Auf der 3 km Runde durch den Wald, lief ich bis zur Verpflegungsstation, versorgte mich ausgiebig im Gehen und lief dann wieder an. Doch 300m später musste ich wieder gehen. Ich kann nicht mal sagen, ob es der Kopf war der gehen wollte oder die Beine, doch die folgenden 100m gehen taten gut und danach konnte ich auch wieder locker anlaufen. Bis zur Kanalbrücke lief es gut und sogar die Pace war plötzlich so wie geplant, doch dann kam sie wieder … diese Brücke – über den Kanal! Die Hälft der Strecke lief ich die Brücke hoch, doch dann musste ich leider gehen.

    Das Bild lässt etwas erahnen, wie es mir zu diesem Zeitpunkt ging.

    Nach der Brücke ging es dann wieder am Kanal zurück (gegen den Wind) bis zu einem Wendepunkt. Am Wendepunkt gab es dann das Bändchen für die erste absolvierte Rund und dazu noch ein paar aufmunternde Worte von der Moderatorin, die hier wirklich einen top Job gemacht hat.

    Mit dem Wind ging es jetzt wieder Richtung meiner geliebten Kanalbrücke. Dieses mal habe ich die Verpflegungsstation am Kanal auch mitgenommen, an Essen war nicht zu denken, doch ein Becher Cola und Wasser erweckten wieder neue Energie in mir. Erste jetzt nahm ich auch Jochen wahr, der kurz hinter der Verpflegungsstation sein Motivationsprogramm lieferte. Es tat so gut ihn zu sehen, was mich noch weiter motivierte und mich sogar wieder die Brücke laufend hinauftrieb.

    Diese und die dritte und letzte Runde verliefen relativ ähnlich. Nach der Brücke laufen bis zur Verpflegungsstation im Wald; im Gehen versorgen; wieder laufen bis zur Brücke; etwas die Brücke hochlaufen, den Rest hoch gehen; gegen den Wind am Kanal ankämpfen; mit Jochen abklatschen; Verpflegungsstation am Kanal mitnehmen und die Brücke hochquälen.

    Nach der dritten Runde durch den Wald ging es endlich Richtung Innenstadt, also nur noch 5 km bis zum Ziel. Leider waren die ersten 1,5 km davon noch einmal gegen den Wind und langsam wurde meine Laune bzgl. des Windes immer schlechter. Dann ging es endlich weg vom Kanal, weg vom Wind! Der letzte Teil der Strecke führte uns durch den Erlanger Wiesengrund, ein sehr flacher Streckenabschnitt. Meine Motivation stieg wieder, nur meine Beine hatten keine Lust mehr. Bis zur letzten Verpflegungsstation lief ich durch und gönnte mir dort noch mal eine Cola und ein Wasser. So gestärkt ging es Richtung Innenstadt, besser gesagt Richtung des Erlanger Schlossgartens wo dieses Jahr der Zieleinlauf war.

    Kurz vor dem Ziel tauchte meine ganze Familie und Sabrina auf, dass gab mir noch einmal einen Motivationsschub, um voller Elan die letzten Meter Richtung Ziel zu laufen.

    Dann war es endlich geschafft. YES !!!

    Es lief nicht alles optimal, die Zeit für die 2 km Schwimmen, 80 km Radfahren und 20 km Laufen war ok. Insgesamt habe ich diesen Triathlon in meiner Homezone sehr genossen. Die vielen bekannten Gesichter an der Streck waren zu jedem Zeitpunkt so motivierend, dass es noch so hart hätte sein können, ein DNF wäre heute nie eine Option gewesen.

    Danke an Alle, die mich entlang der Strecke unterstützt haben.

    Danke an die Helfer, die in allen Bereichen tätig waren, Ihr habt einen super Job gemacht, ohne Euch wäre eine solch tolle Veranstaltung nicht möglich gewesen.

    Ein ganz besonderer Dank geht noch an meine Tochter Cara, die mich den ganzen Tag begleitet, unterstützt, angefeuert und fotografiert hat 🙌

    Die letzten Dankesworte gehen an meine Frau Sandra, die in den letzten Wochen, Monaten sehr viel Verständnis für meinen Sport aufgebracht hat.

    DANKE MEIN SCHATZ

    Triathlon Feuchtwangen 2023

    Mit wenig Training in den ersten Triathlon des Jahres, kann nur heißen … „Kein Stress und alles locker angehen!“

    Nach einer Woche mit extrem viel Regen und Temperaturen um die 10-14 Grad meinte es der Wettergott am vergangenen Sonntag gut mit uns. Zumindest regnete es nicht mehr und sogar die Sonne kam etwas zum Vorschein. Die Temperaturen lagen aber leider immer noch bei nur 12 Grad und so schnell würde es wohl auch nicht wärmer werden.

    Die ganze Woche hatte wohl jeder Teilnehmer des Feuchtwanger Triathlons, die Entwicklung der Wassertemperaturen verfolgt und es sah nicht gut aus. Es wurden am Wettkampftag dann gerade so 16 Grad Wassertemperatur erreicht. Dass bedeutete es gab keine Neopflicht mehr, doch 95% aller Teilnehmer entschieden sich für den Neopren, mich eingeschlossen.

    Kaltes Wasser war und ist nicht mein Ding und ich habe schon zwei Mal schlechte Erfahrungen bei solchen Bedingungen gemacht.

    „DIE KÄLTE“

    Positiv Denken war hier angesagt und nach dem Einstellen vom Rad und dem einrichten der Wechselzone hieß es warten bis zur Wettkampfbesprechung.

    Wechselzone – Klein aber fein!

    In der Wettkampfbesprechung gab es nichts wirklich Neues, wichtigstes Thema war auch hier die niedrige Wassertemperatur. Jetzt hieß es sich auf den Start vorzubereiten und alle schlechten (kalten) Gedanken auf Seite zu schieben.

    Mein Gruppe startete als 2tes und bevor es losging war sogar noch etwas Zeit, sich mit dem kühlen Nass vertraut zu machen. Beim erste Eintauchen schoss mir die Kälte sofort in den Körper, doch nach ein paar Zügen fühlte es sich gar nicht mehr so schlimm an.

    Einschwimmen bei 16 Grad

    Wir waren nur zu viert auf der Bahn, was genügen Platz für alle bedeutete und pünktlich um 10:50 Uhr viel der Startschuss. Die ersten zwei Bahnen liefen noch richtig gut. Ich kam zwar nicht in meinen Rhythmus, war aber guter Dinge.

    Die dritte Bahn war dann der Horror! Ich merkte wie mein Puls in die Höhe schoss und ich fast keine Luft mehr bekam … nicht schon wieder!

    Das Bild sagt wohl Alles!

    Irgendwie schaffte ich es noch bis zum Ende der Bahn und musste erst einmal eine Pause einlegen um wieder zu Atem zu kommen. Es kam mir vor als würde mir der Neopren den Brustkorb zuschnüren. Der Puls raste und ich schnappte nach Luft. Mein Supporting Team (Tochter mit Freund) kamen sofort zu mir und wollten wissen was los ist. Ihre Anwesenheit tat so gut und langsam beruhigte sich mein Puls etwas und ich bekam wieder besser Luft.

    Aufgeben oder es weiter probieren?

    Ich ging auf die nächste Bahn. Nach ca. 25 m war der Puls wieder extrem hoch und die Atemnot wieder da. Also Stellte ich auf Brustschwimmen um, was das Ganze aber nicht wirklich verbesserte. Immer wieder kam mir der Gedanke auszusteigen, aber es waren nur 500 m zu schwimmen. Die paar Meter sind normalerweise überhaupt kein Problem, doch heute schienen sie kaum machbar. Am anderen Ende der dritten Bahn wurde ich auch gleich gefragt, ob alles ok sei. Ich machte wieder eine Pause und so ging es dann Bahn für Bahn. Irgendwann durfte ich endlich aus dem Wasser, jetzt konnte es nur besser werden.

    Hinweis: An alle, die einmal in eine ähnliche Situation kommen: „STEIGT AUS!“ Ich habe mich erst danach schlau gemacht, was so etwas bedeuten kann –> SIPE-Syndrom

    Am Anfang noch recht benommen verlief der erste Wechsel ganz gut. Die Wege zum Rad und zur Strecke waren kurz, ich nahm mir etwas Zeit um wieder zur inneren Ruhe zu kommen. Da die Temperaturen immer noch nicht besser waren, beschloss ich ein Shirt über den Einteiler anzuziehen, um ja nicht noch mehr auszukühlen.

    Endlich auf dem Rad, eiskalte Beine, aber einen extrem starken Willen, jetzt endlich Gas zu geben.

    Die Strecke war ein leicht welliger Rundkurs, die Anstiege nicht zu hart und fast kein Wind. Meine Beine tauten nur langsam auf, doch es lief immer besser und ich konnte die, die mich im Wasser „zurückgelassen“ hatten, langsam wieder einsammeln.

    Ab Kilometer 10 war alles was vorher passiert ist vergessen und es lief wie geplant. Der Schnitt von fast 30 km/h nach 20 Kilometern, war auf Grund der Bedingungen mehr als ok. Jetzt ging es mit Vollgas in den zweiten Wechsel.

    Beim Einlaufen in die Wechselzone hab ich nicht richtig zugehört, wo ich lang laufen muss. Nach einer kurzen Korrektur durch den Sprecher und ein paar aufmunternden Worten, fand ich dann doch noch den richtigen Weg. Das Publikum amüsierte es und zauberte mich ein lächeln ins Gesicht.

    So viel Spaß kann Triathlon machen

    Nicht mal eine Minute dauerte der zweite Wechsel und schon war ich auf der 5 km Laufrunde.

    Immer noch mit einem kleinen Grinsen im Gesicht verließ ich die Wechselzone, was ich zu dem Zeitpunkt wirklich gedacht habe … keine Ahnung.

    Auch die Laufstecke war recht wellig. Die leichten Anstiege spürte man sofort in den Beinen, um so lockerer ging es in die kurzen bergab Stücke. Anvisiert war eine Pace von 4:45 – 5:00 min/km, doch es lief und so war es am Ende ein Durchschnittspace von 4:31 min/km.

    Nach insgesamt einer Stunde und zwanzig Minuten war er dann da, der Zieleinlauf. Zwischenzeitlich hatte ich gar nicht mehr damit gerechnet diesen Triathlon zu beenden, um so erleichterter war ich im Ziel.

    Erleichtert und total glücklich im Ziel

    Der Blick auf die Zeiten sagt alles und wäre das Schwimmen nicht gewesen, wäre es ein guter erster Triathlon in diesem Jahr gewesen.

    Am Ende möchte ich mich noch einmal bei allen Bedanken, die diesen Triathlon ausgerichtet haben. Ihr habt für eine tolle Stimmung gesorgt, wenn beim nächsten Mal das Wasser noch etwas wärmer ist, ist alles TOP!

    Verspäteter Trainingsbeginn in 2023

    Es ist wichtig, dass man in bestimmten Phasen des Lebens Prioritäten setzt und da kann der Sport leider nicht immer an erster Stelle stehen.

    Ich hatte zu Beginn dieses Jahres zunächst keine hohen Erwartungen für die Triathlon-Saison 2023 und wollte nur an 1-2 Wettkämpfen teilnehmen und dabei lediglich das Ziel haben, anzukommen.

    Es dauerte noch bis Ende März, Anfang April bis ich mir den Erlanger Triathlon, der Ende Juli stattfindet, als Hauptwettkampf für dieses Jahr festlegte. Daraufhin begann ich , einen Trainingsplan für die kommenden 14 Wochen bis zum Wettkampf aufzusetzen und war fest entschlossen, diesen durchzuziehen.

    Zwar hatte ich in den Monaten zuvor Sport getrieben und meine Grundfitness war immer noch sehr gut, doch sich in nur 14 Wochen auf eine Mitteldistanz vorzubereiten bedeutet viel Willenskraft und ein bisschen Mut zur Lücke.

    Genau am 14. Mai startete meine Vorbereitung für die Mitteldistanz und aktuell habe ich den ersten 4 Wochen Block fast hinter mir. Die erhöhte Belastung ist deutlich spürbar. Vor allem in der 3ten, der harten Woche, ging ich fast jedes Mal müde in die nächste Trainingseinheit und beendete sich doch immer mit einem kleinen Grinsen im Gesicht.

    Gute 3 Wochen mit 23 Trainingseinheiten haben mir aber gezeigt, dass wenn ich weiter so trainiere, ich höchstwahrscheinlich nicht über die Ziellinie kriechen werde, sondern sie grinsend und laufen überschreite.

    Aktuell befinde ich mich in meiner Jokerwoche (Regenerationswoche) in der eigentlich nur 4 lockere Einheiten mit jeweils maximal 1 Stunde stehen. Doch am Sonntag steht der erste kurze Test beim Feuchtwanger Triathlon über die Sprintdistanz an. Hier hatte ich mich eigentlich angemeldet, um den ersten Triathlon mit meiner Tochter zu bestreiten, doch leider kann sie nicht teilnehmen und so liegt es am mir, die Familienehre zu retten.

    Die Wetteraussichten für Sonntag sind miserabel und meine Lust auf eine Teilnahme liegen aktuell bei 10%. Hoffentlich wird die Wetterprognose besser! Drückt mir und allen anderen Startern die Daumen.