Hauptmenü

Holiday-Datei

Begonnen von Superposchi, 08 Januar 2023, 21:32:54

Vorheriges Thema - Nächstes Thema

Superposchi

Bin noch neu im Umgang mit dem Holiday-Modul.
Wenn ich es richtig verstehe wird die Datei durch ein Fhem-Update ebenfalls aktualisiert.
Wenn man eigene Tage in die Datei aufnimmt, werden diese dann bei einem Update überschrieben?

Mir fehlt zum Beispiel Heiligabend und Silvester. Auch wenn es keine echten Feiertage sind würde ich doch gerne an diesen Tagen reagieren.

betateilchen

Falsches Unterforum für Fragen zu holiday.

ZitatModule: 95_holiday.pm Maintainer: rudolfkoenig Forum: Sonstiges

Ein Blick in die commandref beantwortet Deine Frage vollumfänglich:

Zitat
Set
createPrivateCopy
if the holiday file is opened from the FHEM/holiday directory (which is refreshed by FHEM-update), then it is readonly, and should not be modified.
With createPrivateCopy the file will be copied to the FHEM directory, where it can be modified.

Du brauchst also nur ein "set <deviceName> createPrivatCopy" in Deinem holiday-device ausführen, danach kannst Du die Kopie der holiday-Datei über "Edit files" um eigene Einträge erweitern.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Dann wird die Kopie aber auch gar nicht mehr aktualisiert, oder sehe ich das falsch?

Das Zitat habe ich in der deutschen Commandref nicht gesehen. Fehlt es dort oder habe ich es doch nur übersehen?

yersinia

#3
Zitat von: Superposchi am 09 Januar 2023, 07:47:01Dann wird die Kopie aber auch gar nicht mehr aktualisiert, oder sehe ich das falsch?
Wie oft ändern sich die Feiertage denn? ::) Und ja, die per update gelieferte holiday Datei wird dann überschrieben.

Zitat von: Superposchi am 09 Januar 2023, 07:47:01Das Zitat habe ich in der deutschen Commandref nicht gesehen. Fehlt es dort oder habe ich es doch nur übersehen?
Hast du
ZitatcreatePrivateCopy

    Falls die Datei in der FHEM/holiday Verzeichnis geöffnet wurde, dann ist sie nicht beschreibbar, da dieses Verzeichnis mit FHEM update aktualisiert wird. Mit createPrivateCopy kann eine private Kopie im FHEM Verzeichnis erstellt werden.
https://fhem.de/commandref_DE.html#holiday

Man kann übrigens mehrere holiday Dateien und Devices im FHEM nutzen. Du kannst also deine "Feiertage" Silvester und Heiligabend in eine extra Datei eintragen (und Urlaub und Wintersonnenwende und Cthulhu-Gedenktag usw) und darauf zugreifen.

Du kannst auch die holiday-Datei editieren via cli und diese dann aus dem update exkludieren.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Superposchi

Ich dachte dabei an die beweglichen Feiertage wie Oster, Pfingsten etc..
Habe ich wohl überlesen, ich verstehe eh immer nur die Hälfte der Anweisungen.

yersinia

Christliche Pfeiertage wie Pfingsten, Happy Kadaver, Christi Himmelfahrt und co hängen idR von Ostern ab; alle anderen sind imho fix - und grundsätzlich je nach Bundesland unterschiedlich. Heiligabend und Silvester sind auch keine gesetzlichen Feiertage; daher durchaus sinnvoll, dass sie in der Bundeslandspezifischen holiday Datei nicht auftauchen. Silvester und co sind übrigens in der de_social.holiday enthalten.
Struktur der holiday Einträge sind in der commandref gut erklärt.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Superposchi

Alles verständlich, wobei Ostern selbst auch nicht Fix ist sondern soweit ich weiß vom ersten Vollmond nach Frühlingsanfang abhängt.

Was Heiligabend und Silvester angeht war es ja nur eine Frage, da an diesen Tagen eben oft auch abweichende Programmierungen genutzt werden. Für mich persönlich wäre zum Beispiel auch noch Karneval interessant.
Stehen die zufällig auch in der de_social mit drin?

betateilchen

#7
Zitat von: Superposchi am 09 Januar 2023, 07:47:01
Dann wird die Kopie aber auch gar nicht mehr aktualisiert, oder sehe ich das falsch?

Das ist Sinn und Zweck der "privaten Kopie": Deine individuellen Änderungen sollen erhalten bleiben.
Deshalb wird die Kopie von FHEM respektiert und beim Update eben nicht mehr angefasst.
Das Original "gehört" nach wie vor FHEM und kann auch im Update aktualisiert werden.

Zitat von: yersinia am 09 Januar 2023, 08:16:46
Du kannst auch die holiday-Datei editieren via cli und diese dann aus dem update exkludieren.

Dann hätten wir uns nicht vor einiger Zeit die Arbeit machen brauchen, die privateCopy einzuführen - damit man genau das nicht mehr tun muss.

Zitat von: Superposchi am 09 Januar 2023, 12:13:18
Ich dachte dabei an die beweglichen Feiertage wie Oster, Pfingsten etc..

Zitat von: Superposchi am 09 Januar 2023, 18:50:20
Alles verständlich, wobei Ostern selbst auch nicht Fix ist sondern soweit ich weiß vom ersten Vollmond nach Frühlingsanfang abhängt.

So clever ist das holiday-Modul durchaus, um das zu berücksichtigen. Deshalb gibt es mehrere (afaik aktuell 6) verschiedene Typen von Einträgen in einer .holiday Datei, erkennbar an der ersten Ziffer einer Zeile in der Datei. Die Ostern-abhängigen sind Einträge mit einer 2 am Anfang.

Wie schon geschrieben wurde:

Zitat von: yersinia am 09 Januar 2023, 12:31:38
Struktur der holiday Einträge sind in der commandref gut erklärt.

Zitat von: Superposchi am 09 Januar 2023, 18:50:20
Für mich persönlich wäre zum Beispiel auch noch Karneval interessant.

Auch Karneval hängt von Ostern ab und könnte dementsprechend automatisch errechenbar in Deine "private Datei" eingetragen werden.

Zitat von: Superposchi am 09 Januar 2023, 18:50:20
Stehen die zufällig auch in der de_social mit drin?

Nein, die stehen da nicht zufällig drin.
Sondern absichtlich, weil sich in der Vergangenheit schonmal jemand vor Dir Gedanken zu dem Thema gemacht hat.

Zitat von: Superposchi am 09 Januar 2023, 18:50:20
Was Heiligabend und Silvester angeht war es ja nur eine Frage, da an diesen Tagen eben oft auch abweichende Programmierungen genutzt werden.

Das musst Du mir bitte genauer erklären. In all den vielen Jahren, die ich inzwischen auf dem Planeten Erde lebe, war Heiligabend in Deutschland immer am 24.12. und Silvester am 31.12. eines Jahres. Nur Feiertage (im gesetzlichen Sinne) sind das eben nicht.

Edit: achso, Du meinst mit "Programmierungen" eventuell Aktionen in FHEM? Dann vergiss bitte meine Frage.



(offtopic)

Zitat von: yersinia am 09 Januar 2023, 08:16:46
Wie oft ändern sich die Feiertage denn?

Nun, in den vergangenen paar Jahren gab es durchaus mehrere Fälle, in denen das passiert ist. So wurde in einigen Bundesländern der Reformationstag neu als Feiertag eingeführt und Berlin hat beispielsweise den Frauentag zum Feiertag gemacht.
Aber auch solche Fälle sind ja problemlos - die trägt man dann eben einmalig von Hand in die privateCopy ein und alles ist gut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Gut erklärt, das ist hilfreich.
Nachdem ich mich jetzt etwas eingearbeitet habe habe ich eine abschließende Frage und das meine ich nicht böse.

Mit dem Holiday-Modul wird im State der Name des Feiertags angezeigt. Es muss also auf jeden Namen einzeln geprüft werden. Nun also die Frage wo der Vorteil liegt ob ich jetzt in einer DOIF auf die Feiertagsnamen oder mit $md auf das Datum Abfrage. Zumindest auf Weihnachten oder andere feste Feiertage. Vorteil sehe ich nur bei flexiblen Feiertagen.

betateilchen

Zitat von: Superposchi am 09 Januar 2023, 22:06:10
Mit dem Holiday-Modul wird im State der Name des Feiertags angezeigt.

Ja, das ist aber nur ein Nebeneffekt eines holiday devices, aber nicht die Hauptaufgabe.

Hauptaufgabe ist es, festzustellen, ob es überhaupt einen Eintrag in den readings für gestern/heute/morgen gibt und somit (irgend)ein Feiertag ist.
Welcher Feiertag das ist, ist an dieser Stelle grundsätzlich zweitrangig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Ja das ist klar.
Aber im anderen Thread hast du ja behauptet, dass das holiday-device für den damals genannten Zweck viel besser wäre.
Und da muss ich einfach sagen das ich da keinen Unterschied sehe. Ob ich jetzt im DOIF mit or auf drei feste Datumsangaben prüfe oder auf drei Feiertagsnamen ist doch das gleiche.

Sogesehen war es damals die richtige Entscheidung es erstmal über die Datumsfunktion zu machen und mich in Ruhe und nicht unter Zeitdruck in das Modul einzulesen.

Wobei ich es im Punkt "irgendein Feiertag" etwas anders sehe, denn immerhin muss man zur Prüfung ja wissen um welchen Feiertag es sich handelt.

Damian

Zitat von: Superposchi am 09 Januar 2023, 22:06:10
Gut erklärt, das ist hilfreich.
Nachdem ich mich jetzt etwas eingearbeitet habe habe ich eine abschließende Frage und das meine ich nicht böse.

Mit dem Holiday-Modul wird im State der Name des Feiertags angezeigt. Es muss also auf jeden Namen einzeln geprüft werden. Nun also die Frage wo der Vorteil liegt ob ich jetzt in einer DOIF auf die Feiertagsnamen oder mit $md auf das Datum Abfrage. Zumindest auf Weihnachten oder andere feste Feiertage. Vorteil sehe ich nur bei flexiblen Feiertagen.

Der Trick an der Sache ist, dass man Wochentage um Feiertage erweitern kann, ohne die eigentliche Zeitsteuerung anpassen zu müssen.

Wenn du im Device global das Attribut holiday2we auf deine holiday-Device setzt, dann erweiterst du das Wochenende um die Feiertage.

z. B.

DOIF ([06:00-09:00|AT] or [08:00-09:00|WE]) (set lampe on) DOELSE (set lampe off)

Wochenende (WE) inkludiert dann auch die Feiertage aus deiner holiday-Datei und damit ist die Bedeutung von WE bewusst zwar verfälscht, dafür stimmt dann eher die Bedeutung von Arbeitstagen (AT) als das Gegenteil von WE, zumindest bei den meisten :)



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Superposchi

Ich habe mir gerade das de_social File angesehen.
Wenn ich z.b. den 6. Jan auslesen lasse, wird Heilige Drei Tage, Jahreswechsel, Weihnachtszeit ausgegeben.

Wenn ich auf heilige drei Könige prüfen lasse muss ich das dann mit .* angeben?
Steht der Feiertagsname immer als erstes oder kann er auch mitten drin stehen? Dann müsste ja zusätzlich ein .* davor geschrieben werden.

Also müsste die Bedingung im DOIF so aussehen:
... DOIF [de_social] = ".*Heilige drei Könige.*" ...

Beta-User

Zitat von: Superposchi am 09 Januar 2023, 23:37:51
Also müsste die Bedingung im DOIF so aussehen:
... DOIF [de_social] = ".*Heilige drei Könige.*" ...
Interessehalber: Für was braucht man so eine kleinteilige Logik?

Wenn überhaupt eine Unterscheidung zu "normalen" Feiertagen erforderlich ist, könnte man daraus eine (nicht in holiday2we eingebundene) eigene holiday-Datei generieren, und dann Logiken bauen, die berücksichtigen, ob heute (bzw. gestern oder morgen) so ein Tag war, und dann aber alle diese Tage gleich behandeln.

Ansonsten würde jedenfalls ich den Überblick verlieren, warum wann was passiert...

PS: Man kann solche holiday-Dateien auch relativ einfach selber automatisiert aus Calendar-Devices ableiten und so dann z.B. einen Familien-Kalender oä. auswerten. Mache ich z.B. für Mülltermine (kein $we) oder Ferien (auch bewegliche!) und Urlaubstage ($we).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Superposchi

Also den Begriff Kleinteile verstehe ich in dem Zusammenhang nicht.
Es geht um den Ausdruck nach dem in der Bedingung gesucht wird. Ist der Falsch oder Unvollständig greift die Bedingung ja nicht.
Wenn im STATE "Heilige Drei Könige, Jahreswechsel, Weihnachtszeit" drin steht und ich lediglich nach "Heilige Drei Könige" suche würde das DOIF ja nicht anschlagen