Dynamische Zeit erzeugen mit einem Template-Sensor

Hallo! Ich möchte eine dynamische Zeit erstellen, die ich für Jalousien / Licht Automationen und Add-ons nutzen kann.

Testweise wollte ich es Abhängig von dem Sonnenuntergang und dem Wochentag und Kalender (sensor.Cal_FreeDay) für die Jalousien machen. Hier mein Code:

      - name: cover_close_time
        unique_id: fhc4d5n35sff
        device_class: timestamp
        icon: mdi:window-shutter-settings
        
        availability: >
          {{ state_attr("sun.sun", "next_rising") is not none }}
        
        state:  >
          {% set sunrise = as_datetime(state_attr("sun.sun", "next_rising")).astimezone(now().tzinfo) %} 
            
            #Prüfen ob der Sonnenaufgang schon war
            {% if sunrise.date() != now().date() %}
              {% set sunrise = sunrise - timedelta(days=1) %}
            {% endif %}
          
          #Offset auf den Sonnenaufgang setzen: 
          {% set offset_time = sunrise + timedelta(minutes=30) %}
          
          #Feste Zeit setzen
          {% set min_time = as_datetime(strptime(now().date() ~ ' 08:00', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}
          {% set max_time = as_datetime(strptime(now().date() ~ ' 09:40', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}

          #Prüfung ob ein freier Tag ist
          {% set cover_start_time = fix_time %}
          {% if states('sensor.Cal_FreeDay') == 'True' %}
            {% set cover_start_time = [max_time, offset_time] | max %}
          {% else %}
            {% set cover_start_time = [min_time, offset_time] | max %}
          {% endif %}        
          {{ cover_start_time.isoformat() }}

Wenn ich es unter Entwicklerwerkzeuge / Template-Editor eintrage:

          {% set sunrise = as_datetime(state_attr("sun.sun", "next_rising")).astimezone(now().tzinfo) %} 
            {% if sunrise.date() != now().date() %}
              {% set sunrise = sunrise - timedelta(days=1) %} :::{{ sunrise }}:::
            {% endif %}
          {% set offset_time = sunrise + timedelta(minutes=30) %}
          {% set min_time = as_datetime(strptime(now().date() ~ ' 08:00', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %} :::{{ min_time }}:::
          {% set max_time = as_datetime(strptime(now().date() ~ ' 09:40', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %} :::{{ max_time }}:::
          {% if states('sensor.Cal_Ferien') == 'True' %}
            {% set cover_start_time = [max_time, offset_time] | max %}
          {% else %}
            {% set cover_start_time = [min_time, offset_time] | max %}
          {% endif %}        
          {{ cover_start_time.isoformat() }}

wird die Zeit angezeigt, der Sensor gibt aber immer nur ‘unknown’ zurück.

Ich stehe total auf dem Schlauch und habe keinen Ansatzpunkt mehr für eine Verbesserung des Codes

Ggf ist timestamp die falsche device Class.

Was soll den der Sensor für einen Wert zurückgeben? Eine Uhrzeit?

Erstelle Dir den Template Sensor als Helfer in der GUI, dann kannst auch gleich live das Ergebnis prüfen auch in Kombination mit der jeweiligen Device Class.

Gruß Osorkon

Nachtrag

Die Abfrage {{ cover_start_time.isoformat() == timestamp }} ist übrigens Quatsch und hab ich mal wieder gelöscht! So kann man timestamp gar nicht abfragen - auch, wenn die angezeigte Farbe im Template etwas anderes suggeriert. :expressionless_face:

Aber ich hab was anderes gefunden! Dieser kleine, schlimme Finger! Mal ganz genau hingucken. Mit dieser Eingabe …

{% set sunrise = as_datetime(state_attr("sun.sun", "next_rising")).astimezone(now().tzinfo) %} 
{% if sunrise.date() != now().date() %}
SNR: {% set sunrise = sunrise - timedelta(days=1) %} :::{{ sunrise }}:::
{% endif %}
{% set offset_time = sunrise + timedelta(minutes=30) %}
MIN: {% set min_time = as_datetime(strptime(now().date() ~ ' 08:00', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}:::{{ min_time }}:::
MAX: {% set max_time = as_datetime(strptime(now().date() ~ ' 09:40', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}:::{{ max_time }}:::
{% if states('sensor.Cal_Ferien') == 'True' %}
{% set cover_start_time = [max_time, offset_time] | max %}
{% else %}
{% set cover_start_time = [min_time, offset_time] | max %}
{% endif %}        
CST:    {{ cover_start_time.isoformat() }}

… bekommst Du im Template diese Ausgabe

Hängst Du ganz am Ende noch das an …

CST_ad: {{ as_datetime(cover_start_time.isoformat(), none) }}

… bekommst Du das:

Bildschirmfoto 2025-10-25 um 10.38.05

Probier es mal damit @DasWalle ! :wink:

Weitere Detail findest Du in der doku zu advanced configuration → templating → time

Habe ich geändert - kommt immer noch “unknown” als Ergebnis raus. Sollte eigentlich nur eine Urzeit sein, damit ich andere Automationen etc. mit einem dynamischen Start bzw. Ende füttern kann.

Das ist das Ergebnis von Deinem Template

Dimm die ganzen Kommentare raus, diese sind da Fehl am Platz!!

Ein Kommentar gehört so geschrieben

{## Das ist ein Kommentar :grinning_face: ##}

          {% set sunrise = as_datetime(state_attr("sun.sun", "next_rising")).astimezone(now().tzinfo) %} 
            
            {## Prüfen ob der Sonnenaufgang schon war ##}
            {% if sunrise.date() != now().date() %}
              {% set sunrise = sunrise - timedelta(days=1) %}
            {% endif %}
          
          {##O ffset auf den Sonnenaufgang setzen: ##}
          {% set offset_time = sunrise + timedelta(minutes=30) %}
          
          {## Feste Zeit setzen ##}
          {% set min_time = as_datetime(strptime(now().date() ~ ' 08:00', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}
          {% set max_time = as_datetime(strptime(now().date() ~ ' 09:40', '%Y-%m-%d %H:%M')).astimezone(now().tzinfo) %}

          {## Prüfung ob ein freier Tag ist ##}
          {% set cover_start_time = fix_time %}
          {% if states('sensor.Cal_FreeDay') == 'True' %}
            {% set cover_start_time = [max_time, offset_time] | max %}
          {% else %}
            {% set cover_start_time = [min_time, offset_time] | max %}
          {% endif %}        
          {{ as_datetime(cover_start_time.isoformat(), none) }}

Gruß Osorkon

Ja, jetzt klappt es!!

Danke, währe ich wahrscheinlich NIE drauf gekommen!

1 „Gefällt mir“