[gelöst] Macht 95_holiday was falsch?

Begonnen von Otto123, 15 November 2017, 08:05:40

Vorheriges Thema - Nächstes Thema

Otto123

Guten Morgen,

bei meinem FHEM ist offenbar heute Buss und Bettag  :o

Zumindest steht $we auf 1
Konfiguration:
holiday2we ist aktiv und in meiner holiday Datei steht# Siehe auch
# http://de.wikipedia.org/wiki/Feiertage_in_Deutschland

1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der deutschen Einheit
1 10-31 Reformationstag
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag

2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingsten
# 2 60 Fronleichnam

# (1 Mittwoch vor dem Nov, 23rd)
5 -1 Wed 11 23 Buss und Bettag


Kann ich der Sache irgendwie auf den Grund gehen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pte

kann ich bestätigen, bei mir auch
Lichtenstein/Sa. grüßt den Rest der Welt

pte

Fehler liegt wohl im Modul 95_holiday.pm

Ich glaube, die Annahme, dass mktime auch für den Tag des Monates mit 0 zu zählen beginnt ist falsch.

    } elsif($l =~ m/^5/) { # nth weekday since MM-DD / before MM-DD
      my @a = split(" +", $l, 6);
      # arguments: 5 <distance> <weekday> <month> <day> <name>
      my %wd = ("Sun"=>0, "Mon"=>1, "Tue"=>2, "Wed"=>3,
                "Thu"=>4, "Fri"=>5, "Sat"=>6);
      my $wd = $wd{$a[2]};
      if(!defined($wd)) {
        Log 1, "Wrong weekday spec: $l";
        next;
      }
      next if $wd != $fd[6]; # check wether weekday matches today
      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]-1,$a[3]-1,$fd[5],0,0,-1);                            <------ hier sollte stehen:      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,-1);
      if ( $a[1] =~ /^-([0-9])*$/ ) {
        $tgtmin -= $1*$weeksecs; # Minimum: target date minus $1 weeks
        $tgtmax = $tgtmin+$weeksecs; # Maximum: one week after minimum
# needs to be lower than max and greater than or equal to min
        if( ($cd ge $tgtmin) && ( $cd lt $tgtmax) ) {
          $found=$a[5];
}
      } elsif ( $a[1] =~ /^\+?([0-9])*$/ ) {
        $tgtmin += ($1-1)*$weeksecs; # Minimum: target date plus $1-1 weeks
        $tgtmax = $tgtmin+$weeksecs; # Maximum: one week after minimum
# needs to be lower than or equal to max and greater min
        if( ($cd gt $tgtmin) && ( $cd le $tgtmax) ) {
          $found=$a[5];
}
      } else {
        Log 1, "Wrong distance spec: $l";
        next;
      }
    }
Lichtenstein/Sa. grüßt den Rest der Welt

nils_

da ist fhem wohl eine woche zu früh.
in 2017 ist er am 22.11., oder?
viele Wege in FHEM es gibt!

Otto123

Exakt. Und pte bestätigt meine Vermutung, dass FHEM einen Tag falsch rechnet weil der 1. Mittwoch vor dem 23.11. dieses Jahr nur einen Tag davor liegt.  ;)
Danke für die Aufklärung.

Mal schauen was Rudi dazu sagt  8)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Elektrolurch

Kann ich auch bestätigen, denn meine Rollos fahren auf Feiertagsmodus.
Ok. Dann brauche ich nicht weiter suchen und warte auf den Patch.

Elektrolurch
configDB und Windows befreite Zone!

rudolfkoenig

ZitatMal schauen was Rudi dazu sagt
Rudi sagt, dass pte Recht hat.
Der Bug ist 8 Jahre alt, statistisch gesehen haette es schon frueher auffallen muessen.
Habs gefixt und eingecheckt.

pte

mit der Statistik ist das so eine Sache.
Feiertage nach Regel "5" sind ja eh nicht viele und für den Buss und Bettag war das kritische Datum nach meiner Recherche letztmalig 2006.
Und wer hatte da in Sachsen schon ein SmartHome.  ;D
Der Rest Deutschlands muss doch da sowieso arbeiten. :)
Danke für die schnelle Reparatur.
Lichtenstein/Sa. grüßt den Rest der Welt

nils_

Zitat von: pte am 15 November 2017, 11:25:53
Feiertage nach Regel "5" sind ja eh nicht viele und für den Buss und Bettag war das kritische Datum nach meiner Recherche letztmalig 2006.
Und wer hatte da in Sachsen schon ein SmartHome.  ;D

evtl. Otto :D
viele Wege in FHEM es gibt!

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz