FHEM Forum

FHEM => Sonstiges => Thema gestartet von: bertl am 25 Oktober 2026, 12:50:04

Titel: 95_holiday.pm - Daylight saving time (DST) - Typ 5 - wird nicht angezeigt
Beitrag von: bertl am 25 Oktober 2026, 12:50:04
Hallo Leute,

mir ist heute am 25.10.2026 (Beginn Winterzeit) aufgefallen, dass mit "get Termine today" nichts angezeigt wird.

Termine.holiday - Teilausschnitt von der Typ 5 Definition:
5 -1 Sun 04 01 Beginn Sommerzeit
5  1 Sun 05 07 Muttertag
5  1 Sun 06 07 Vatertag
5  1 Sun 09 30 Erntedankfest
5 -1 Sun 11 01 Beginn Winterzeit
5 -1 Fri 11 30 Black Friday
5 -4 Sun 12 25 1. Adventsonntag
5 -3 Sun 12 25 2. Adventsonntag
5 -2 Sun 12 25 3. Adventsonntag
5 -1 Sun 12 25 4. Adventsonntag

list Termine
Internals:
   FUUID      61dd4ad2-f33f-3e1e-636e-73dbdf9bd1e98742
   FVERSION   95_holiday.pm:0.251870/2021-11-06
   HOLIDAYFILE ./FHEM/Termine.holiday
   NAME       Termine
   NR         584
   READONLY   0
   STATE      none
   TRIGGERTIME 1792965602.08219
   TYPE       holiday
   eventCount 1
   READINGS:
     2026-10-25 02:18:15   state           none
     2026-10-25 02:18:15   today           none
     2026-10-25 02:18:15   tomorrow        none
     2026-10-25 02:18:15   yesterday       none
Attributes:
   alias      sonstige Termine
   group      Termine
   icon       time_calendar
   room       Kalender
   sortby     3

Ich habe mal ein bisschen im Code von 95_holiday.pm herumgespielt und beim Aufruf von "mktime" den "isdst"-Wert von -1 auf 0 geändert.
Dann hat "get Termine today" den richtigen Wert "Beginn Winterzeit" geliefert.

diff -u 95_holiday.pm_test 95_holiday.pm
--- 95_holiday.pm_test  2026-10-25 12:24:40.844788215 +0100
+++ 95_holiday.pm       2026-10-25 11:50:45.363313206 +0100
@@ -190,11 +190,11 @@
       my $yday=$fd[7];
       # create time object of target date - mktime counts months and their
       # days from 0 instead of 1, so subtract 1 from each
-      my $tgt=mktime(0,0,1,$a[4],$a[3]-1,$fd[5],0,0,0);
+      my $tgt=mktime(0,0,1,$a[4],$a[3]-1,$fd[5],0,0,-1);
       my $tgtmin=$tgt;
       my $tgtmax=$tgt;
       my $weeksecs=7*24*60*60; # 7 days, 24 hours, 60 minutes, 60seconds each
-      my $cd=mktime(0,0,1,$fd[3],$fd[4],$fd[5],0,0,0);
+      my $cd=mktime(0,0,1,$fd[3],$fd[4],$fd[5],0,0,-1);
       if ( $a[1] =~ /^-([0-9])*$/ ) {
         $tgtmin -= $1*$weeksecs; # Minimum: target date minus $1 weeks
         $tgtmax = $tgtmin+$weeksecs; # Maximum: one week after minimum

Muss ich irgendwas spezielles bezüglich Zeitzone auf meinem Raspi einstellen, funktioniert die perl-Funktion mktime nicht richtig oder muss 95_holiday.pm angepasst werden?

Danke für die Unterstützung
Robert
Titel: Aw: 95_holiday.pm - Daylight saving time (DST) - Typ 5 - wird nicht angezeigt
Beitrag von: betateilchen am 25 Oktober 2026, 13:49:42
Zitat von: bertl am 25 Oktober 2026, 12:50:04Termine.holiday - Teilausschnitt von der Typ 5 Definition:

Da die Umstellung auf Winterzeit immer am letzten Sonntag im Oktober stattfindet, solltest Du vielleicht besser eine Typ3 Definition verwenden, die genau dafür gedacht ist.

3 -1 Sun 10 Beginn Winterzeit
Titel: Aw: 95_holiday.pm - Daylight saving time (DST) - Typ 5 - wird nicht angezeigt
Beitrag von: betateilchen am 25 Oktober 2026, 15:58:59
Zitat von: bertl am 25 Oktober 2026, 12:50:04oder muss 95_holiday.pm angepasst werden?

Vermutlich liegt das Problem in der Tatsache, dass der Bezugstag 01.11. in diesem Jahr selbst ein Sonntag ist und deshalb die Zählung bei -1 nicht wie erwartet arbeitet.

Wenn Du in der Definition vom Typ 5 testweise mit -2 arbeitest,

5 -2 Sun 11 01 Beginn Winterzeit
wird für heute korrekt der Beginn der Winterzeit ausgegeben.

Das wird sich Rudi als Modulautor sicher bei Gelegenheit anschauen.