Hallo in die Runde,
ich habe relativ lange gesucht um dies umzusetzen.
Ggf. wird dies mal gebraucht bzw. gesucht oder jemand kann es gebrauchen.
Deshalb hier mal wie ich das bewerkstelligt habe.
Ob es schön ist oder nicht. Geschmackssache ![]()
Über folgenden Code bekommt man raus ob Sommerzeit oder Winterzeit herrscht.
now().timetuple().tm_isdst
Der Sensor sieht dann bei mir so aus:
# Sommer und Winterzeit (1=Sommerzeit 0=Winterzeit)
- sensor:
- name: "Sommer-Winterzeit"
unique_id: sommer_winterzeit
state: >
{% if now().timetuple().tm_isdst == 1 %}
Sommerzeit
{% else %}
Winterzeit
{%- endif %}
icon: mdi:hours-24
Erklärung zu now().timetuple().tm_isdst soweit ich das rausgefunden habe.
now(): gibt das aktuelle Datum und die aktuelle Uhrzeit zurück.
timetuple(): Diese Methode wandelt das datetime Objekt, das von now() zurückgegeben wird, in ein time.struct_time Objekt um.
u.a. auch Tag des Jahres und Sommerzeit-Flag.
tm_isdst: tm_isdst ist ein Flag, das anzeigt, ob die Sommerzeit aktiv ist oder nicht.
Wenn die Sommerzeit aktiv ist, ist tm_isdst 1, wenn sie nicht aktiv ist, ist tm_isdst 0 und (Vermutung meinerseits) wenn unbekannt ist, ob die Sommerzeit aktiv ist, ist tm_isdst -1.
Will man noch weiter ins Thema rein habe ich noch folgendes gefunden.
Nicht mein Gehirnschmalz. Gefunden nach Suche.
Sensoren für
- Datum nächste Zeitumstellung
- Tage bis zur nächsten Zeitumstellung
- Zeitumstellungsphase
Realisiert über REST.
rest:
- resource_template: "http://worldtimeapi.org/api/timezone/{{ now().tzinfo }}"
sensor:
- name: "Naechste Zeitumstellung"
unique_id: naechste_zeitumstellung
value_template: >
{{ ((value_json.dst_from, value_json.dst_until) | map('as_datetime') | map('as_local') | select('>', now()) | first).isoformat() }}
device_class: timestamp
- name: "Tage bis zur naechsten Zeitumstellung"
unique_id: tage_bis_zur_naechsten_zeitumstellung
value_template: >
{%- set next = (value_json.dst_from, value_json.dst_until) | map('as_datetime') | map('as_local') | select('>', now()) | first %}
{{ (next-today_at()).days }}
unit_of_measurement: days
- name: "Zeitumstellungsphase"
unique_id: zeitumstellungsphase
value_template: >
{%- macro phrase(seconds, name, divisor, mod=None) %}
{%- set value = ((seconds | abs // divisor) % (mod if mod else divisor)) | int %}
{%- set end = 's' if value > 1 else '' %}
{{- '{} {}{}'.format(value, name, end) if value > 0 else '' }}
{%- endmacro %}
{% set next = (value_json.dst_from, value_json.dst_until) | select('>', utcnow().isoformat()) | first %}
{% set name, value = value_json.items() | list | selectattr('1', '==', next) | first %}
{% set seconds = value_json.dst_offset %}
{%- set values = [
phrase(seconds, 'Stunde', 60*60, 60*60*24),
phrase(seconds, 'Minute', 60, 60),
] | select('!=','') | list %}
{{ 'plus' if name == 'dst_until' else 'minus' }} {{ values[:-1] | join(', ') ~ ' and ' ~ values[-1] if values | length > 1 else values | first }}
Sieht dann so aus:

Ich hoffe das verkürzt nun das Suchen ![]()
VG
Supergrobi