[Patch] 95_holiday.pm: Support für YYYY-MM-DD

Begonnen von Loredo, 27 Juni 2019, 00:27:22

Vorheriges Thema - Nächstes Thema

Loredo

Hallo Rudi,


um auch die Feiertage für andere als das aktuelle Jahr abfragen zu können, habe ich den angehängten Patch erstellt.


Außerdem werden doppelte Einträge am selben Tag verhindert, um zu ermöglichen, dass man Events auf unterschiedliche Arten gleichzeitig definieren kann. Das hilft beispielsweise, wenn man Die Zeit zwischen dem 4. Advent und Heilig Abend abdecken möchte.


Besteht die Chance, dass du den Patch übernimmst bzw. als Vorlage und Inspiration für einen eigenen Patch in deiner Programmierart nutzt?




Viele Grüße
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

#1
Wenn Interesse an sowas besteht, dann wuerde ich das selbst einbauen.
Mit Interesse meine ich, dass es eine Aufgabe gibt, die eine Hausautomatisierung erledigen sollte.

Mit den Patches habe ich zunehmend Probleme: Beim Support weiss ich nach eine Weile nicht mehr, wie es gedacht war, weil es nicht von mir stammt.

betateilchen

die ganzen patches, die zum holiday-Modul in den vergangenen zwei Jahren diskutiert und vorgeschlagen wurden, hatten in den allermeisten Fällen nichts mit der ursprünglichen Intention des holiday-Moduls (und dessen konkretem Zweck) zu tun.

Wer solche speziellen Dinge braucht wie "den Zeitraum zwischen 4. Advent und Heilig Abend" kann das auch einfach über einen eingebundenen Kalender abdecken, in dem dieser Zeitraum ermittelt wird. Dafür gibt es das Calendar-Modul, das inzwischen hervorragende Dienst für solche Aufgaben leistet.

Keep it simple - lasst bitte das holiday-Modul so, wie es ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

#3
Hallo Rudi,


Mein Interesse bekunde ich hiermit, denke ich  :)
Wenn ich die Planung und Programmierung meiner Hausautomation vornehme und dabei ein variabler Feiertag eine Rolle spielt, dann möchte ich ziemlich sicher wissen, wie sich die Automation wohl nächstes Jahr und im Jahr darauf verhalten wird. Dafür möchte ich nicht die Systemzeit umstellen müssen. Außerdem existieren Module, die mit Holiday als Eingangsgröße weiterarbeiten und dort ebenfalls ermöglichen sich eine Vorschau der zu erwartenden Events anzusehen. Es ist oft sehr aufschlussreich bei der Planung und Programmierung, wenn man einen Vergleich nicht nur zwischen heute, morgen, nächste Woche und nächsten Monat vornehmen kann, sondern auch zum exakt selben Datum in den nächsten Jahren (natürlich auch in der Vergangenheit).


Bisher hast du den Patch ja nicht geöffnet. Er fügt im wesentlichen 11 Zeilen hinzu.


Ich bin bei der Erstellung von Patches immer hin und her gerissen, denn einerseits betonst du immer, dass du alles selbst machen möchtest (was ich nachvollziehen kann). Auf der anderen Seite möchte ich bei meinen Wünschen nicht so rüberkommen, dass ich mir ständig etwas wünsche und andere das dann umsetzen sollen. Daher ist die Erstellung eines Patches doch eine gute "Machbarkeitsstudie", auch im Sinne der Aufwandsabschätzung.


In diesem Fall zeige ich mit dem Patch, dass der Aufwand gering ist - bei voller Kompatibilität, von der ich weiß, dass sie dir auch sehr am Herzen liegt.


Anders ausgedrückt: Natürlich verspreche ich mir vom Erstellen eines Patches eine höhere Wahrscheinlichkeit, dass du etwas einbaust, denn ich frage ja nicht aus Lust und Laune und möchte die Funktionen gerne haben  ;)


In welcher Weise kann man es dir denn so angenehm und mühelos wie möglich machen, wenn es um funktionelle Erweiterungen geht?
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

#4
Zitat von: betateilchen am 27 Juni 2019, 08:36:38
Keep it simple - lasst bitte das holiday-Modul so, wie es ist.

Leute, ehrlich - es sind 11 Zeilen Code, worüber diskutieren wir hier wieder?  ::)
Die Diskussion dauert bald schon länger als ich gebraucht habe um die 11 Zeilen zu schreiben ...

Manchmal glaube ich, ihr macht das mit Absicht.


Zum Thema KIS: Der Umgang mit Holiday Dateien ist weitaus unproblematischer als mit einem Kalender und dem Calendar Modul. Außerdem wo ist der Open Source Gedanke und "I can do it my way" hin? Schließlich spreche ich nicht davon das Holiday Modul zu vergewaltigen oder eine völlig abwegige Funktion einzubauen. Es erhöht nur mal wieder die Chance auf einen Fork...
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Ich habe die Jahr-Abfrage eingebaut.
Das Filtern der doppelten Werte leuchtet mir noch nicht ein, vmtl. brauche ich ein Beispiel.

Loredo

#6
Vielen Dank, Rudi! Das hilft sehr.

Nach der Änderung erhalte ich jedoch diese Meldungen im Log:

PERL WARNING: Useless use of negative pattern binding (!~) in void context at ./FHEM/95_holiday.pm line 62


Ich verwende hier Perl Version 5.030.
Grundsätzlich funktioniert es jedoch.

Ein Beispiel, bei dem es hilft, doppelte Einträge auszusortieren, wäre dies hier:


# Adventszeit
5 -4 Sun 12 25 1. Advent
5 -4 Sun 12 25 Adventszeit
5 -3 Mon 12 25 Adventszeit
5 -3 Tue 12 25 Adventszeit
5 -3 Wed 12 25 Adventszeit
5 -3 Thu 12 25 Adventszeit
5 -3 Fri 12 25 Adventszeit
5 -3 Sat 12 25 Adventszeit
5 -3 Sun 12 25 2. Advent
5 -3 Sun 12 25 Adventszeit
5 -2 Mon 12 25 Adventszeit
5 -2 Tue 12 25 Adventszeit
5 -2 Wed 12 25 Adventszeit
5 -2 Thu 12 25 Adventszeit
5 -2 Fri 12 25 Adventszeit
5 -2 Sat 12 25 Adventszeit
5 -2 Sun 12 25 3. Advent
5 -2 Sun 12 25 Adventszeit
5 -1 Mon 12 25 Adventszeit
5 -1 Tue 12 25 Adventszeit
5 -1 Wed 12 25 Adventszeit
5 -1 Thu 12 25 Adventszeit
5 -1 Fri 12 25 Adventszeit
5 -1 Sat 12 25 Adventszeit
5 -1 Sun 12 25 4. Advent
5 -1 Sun 12 25 Adventszeit
1 12-19 Adventszeit
1 12-20 Adventszeit
1 12-21 Adventszeit
1 12-22 Adventszeit
1 12-23 Adventszeit
1 12-24 Adventszeit


Die letzten Zeilen sorgen dafür, dass je nach Lage des 4. Advent die Zeit bis zu Heiligabend ebenfalls noch als Adventszeit markiert werden kann. Das ist der einfachste Weg, ohne dass man eine eigene Perl Funktion braucht (für die es ja derzeit auch keinen geeigneten Ort im SVN gäbe). Die doppelten Einträge filtere ich in meinen Modulen heraus, aber wenn jemand Holiday direkt verwendet, bleiben diese natürlich trotzdem dort sichtbar.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

ZitatPERL WARNING: Useless use of negative pattern binding (!~) in void context at ./FHEM/95_holiday.pm line 62
Danke fuer den Hinweis, !~ ist von einer Testvariante uebriggeblieben.
Ich wundere mich, wieso perl sich an !~ stoert, und an ~ nicht: in beiden Faellen werte ich das Ergebnis nicht aus, sonder nur die Nebeneffekte.

ZitatEin Beispiel, bei dem es hilft, doppelte Einträge auszusortieren, wäre dies hier:
Danke, habs jetzt verstanden, eingebaut und eingecheckt.
War mAn eine unsaubere Anzeige, die Funktionalitaet war aber gegeben.

betateilchen

Zitat von: Loredo am 28 Juni 2019, 10:44:31
Das ist der einfachste Weg, ohne dass man eine eigene Perl Funktion braucht (für die es ja derzeit auch keinen geeigneten Ort im SVN gäbe).

Die Adventszeitberechnung kannst Du über einen Typ 6 im holiday file durchführen, dort kannst du eine eigene Funktion benennen, die irgendwo (!) in FHEM verfügbar ist. Beispielsweise in der 99_myUtils.pm. Dann muss man die Daten überhaupt nicht fix in die Datei schreiben.

Bei mir sieht die Adventberechnung im holiday file so aus:


6 calcAdvent 21 1.Advent
6 calcAdvent 14 2.Advent
6 calcAdvent  7 3.Advent
6 calcAdvent  0 4.Advent


Und in der 99_myUtils.pm steht


sub calcAdvent {
  my ($aNum) = shift;
  $aNum //= 21;
  my $jahr = (localtime(time))[5]+1900;
  my $time = str2time("$jahr-12-25");
  my $wday = (localtime($time))[6];
  $wday = $wday ? $wday : 7;
  $time -= ($wday+$aNum)*86400;
  my $m = (localtime($time))[4]+1;
  my $d = (localtime($time))[3];
  return sprintf("%02d-%02d",$m,$d);
}

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

#9
Zitat von: betateilchen am 28 Juni 2019, 12:38:01
... die irgendwo (!) in FHEM verfügbar ist. Beispielsweise in der 99_myUtils.pm. Dann muss man die Daten überhaupt nicht fix in die Datei schreiben.


Ich weiß, ich habe die CommandRef auch gelesen. Es gibt jedoch keine Möglichkeit diese Funktion in FHEM mitzuliefern (außer in ./contrib), so dass nicht jeder wieder selbst diese Funktion irgendwohin tun muss. Sprich, man kann nichts darauf aufbauen und sich darauf verlassen, dass die Funktion vorhanden ist.


Für die Berechnung der Adventsonntage alleine braucht es aber keine eigene Funktion.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

Zitat von: Loredo am 28 Juni 2019, 13:41:53
Es gibt jedoch keine Möglichkeit diese Funktion in FHEM mitzuliefern

Wenn es eine (Hilfs-)Funktion ist, die tatsächlich mehreren Anwendern helfen würde, kann man diese Funktion jederzeit für die Aufnahme in die 99_Utils.pm vorschlagen. Diese Datei wird sehr wohl mit FHEM ausgeliefert. Und das funktioniert sogar per update, im Gegensatz zu Dateien in ./contrib
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

Richtig, weil man ja auch so einfach etwas in solche Dateien hinein bekommt, ohne viel Gerede  ;)
Die Frage ist ja, weshalb es calcAdvent() zwar als Beispiel in die CommandRef von 95_Holiday geschafft hat, aber darüber hinaus nicht ins SVN. Ich für meinen Teil nehme an, dass es dafür Gründe, beispielsweise weil es abgelehnt wurde, denn es ist nicht unbedingt eine allgemeine Funktion, sondern macht halt zusammen mit dem Holiday Modul mehr Sinn.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

Zitat von: Loredo am 28 Juni 2019, 14:46:40
Die Frage ist ja, weshalb es calcAdvent() zwar als Beispiel in die CommandRef von 95_Holiday geschafft hat, aber darüber hinaus nicht ins SVN. Ich für meinen Teil nehme an, dass es dafür Gründe, beispielsweise weil es abgelehnt wurde,

Wenn man die Entstehungsgeschichte für den Typ=6 hier im Forum durchliest, findet man alle Antworten auf Deine Fragen. Und man wird auch feststellen, dass Deine Vermutung, die Funktion sei abgelehnt worden, falsch ist, weil die Aufnahme dieser Funktion nie vorgeschlagen wurde. Sie dient in der commandref ausschließlich als Syntax-Beispiel dafür, WIE man eine eigene Funktion in diesem Typ=6 verwendet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

Ob nun abgelehnt oder gar nicht erst vorgeschlagen - haut in etwa in die selbe (irrelevante) Kerbe.
Mag ja sein, dass du als Neunmalkluger gerne Menschen darauf verweist die Historie im Forum nachzulesen, aber ich tue das sicherlich nicht.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

#14
Zitat von: Loredo am 28 Juni 2019, 20:27:47
die Historie im Forum nachzulesen, aber ich tue das sicherlich nicht.

Das steht Dir natürlich frei. Dann solltest Du Dich aber bitte auch mit unqualifizierten Vermutungen über das wie und warum bestimmter Dinge zurückhalten.

Du hattest gefragt, warum die in der commandref erwähnte Funktion nicht in FHEM vorhanden ist, und da ich seinerzeit sowohl den Typ=6 als auch den zugehörigen commandref-Eintrag beigesteuert habe, wollte ich eigentlich nichts weiter tun, als Deine Frage zu beantworten. Mit Neunmalklug hat das nichts zu tun.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!