Seite 8 von 14

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 22. Dez 2023 22:58
von peter-pan
PJH hat geschrieben: 22. Dez 2023 13:30 Peter, ich würde dann, wenn Du gestattest, noch einmal auf dich zukommen.
Gerne, wenn ich helfen kann :)

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 24. Dez 2023 13:58
von PJH
Hallo udo1toni,

ich habe mich mit Ephemeris ein bisschen umgesehen, richtig verstehen tue ich es (noch) nicht.

Ab er sehe ich es richtig, dass man für jedes Jahr die Holiday-Datei händisch anpassen muss?

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 24. Dez 2023 23:53
von udo1toni
PJH hat geschrieben: 24. Dez 2023 13:58 sehe ich es richtig, dass man für jedes Jahr die Holiday-Datei händisch anpassen muss?
Nein :) In der xml-Datei stehen die Regeln drin, nachdem die Tage berechnet werden, also z.B. 2 Tage vor Ostersonntag -> Karfreitag, oder auch 1.5. -> Tag der Arbeit usw. Die Datei enthält dabei beliebig viele Feiertage beliebig vieler Regionen, Du könntest z.B. auch den 4.7. oder Thanksgiving mit eintragen (einmalig) und wenn Du dazu schreibst, dass der nur in den USA gilt, wird er bei Dir nicht angezeigt, bzw. nur, wenn Du aktiv danach fragst.

Du kannst selbstverständlich auch andere (bevorzugt wiederkehrende) Ereignisse hier einspeichern, z.B. Geburtstage oder Ferien.
Bei den Ferien ist es natürlich so, dass Du die pro Jahr händisch anpassen musst, weil es halt leider keine vernünftige Schnittstelle der Kultusministerien für die Ferientermine gibt (ist wohl auch zu viel verlangt - das Internet ist schließlich Neuland für uns alle... :lol: )
Allerdings kannst Du einfach die Ferientermine für die nächsten Jahre eintragen, Du musst das also nicht jährlich anpassen, sondern nur dann, wenn die Termine ausgehen :)
Als Beispiel wäre in der verlinkten Datei der Reformationstag, der früher einmal Feiertag war, jetzt nur noch in einigen Bundesländern, aber zum 500. Jubiläum (Äh... Geburtstag von Luther) wurde er einmalig bundesweit begangen und ist auch so in der xml-Datei hinterlegt.
Auch der Tag der deutschen Einheit ist hier mit dem 17. Juni hinterlegt, halt nur bis 1990 und ab da war es dann der 3. Oktober. Interessanterweise werden hier zwei unterschiedliche Namen verwendet, das ist aber nicht zwingend.

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 12:54
von int5749
udo1toni hat geschrieben: 22. Dez 2023 14:55 Man kann in dieser Datei auch die Adventssonntage mit abbilden.
Moin Udo (da zitiert) aber auch alle anderen ;)

Erst einmal hoffe ich, dass Alle ein besinnliches Weihnachtsfest hatten.

Wie Du schreibst, habe ich die Extratage (nicht als Feiertag deklariert) bei Ephemeris eingearbeitet. Das funktioniert auch, bis auf die deutsche Übersetzung :-/ Hast Du damit schon weiter experimentiert?

Meine Rule dazu lautet

Code: Alles auswählen

rule Feiertage
when
    Time cron "5 0 0 * * ?" or
    Item vSystemRestart changed to ON or
    System started
then
    val String strHoliday = '/etc/openhab/services/holidays_de.xml'
    val String strSpecialday = '/etc/openhab/services/specialdays.xml'
    val dtDate = new DateTimeType().zonedDateTime.plusDays(0)

    var String strToday = "regular"

    if  (Ephemeris.isBankHoliday(dtDate, strHoliday)) {
        strToday = Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(dtDate, strHoliday))
        Holiday.postUpdate(ON)
    } else {
        Holiday.postUpdate(OFF)
        if (Ephemeris.isBankHoliday(dtDate, strSpecialday))
            strToday = Ephemeris.getBankHolidayName(dtDate, strSpecialday)
    }
    TodayIs.postUpdate(strToday)
    logInfo("Ephemeris", "Heute ist: {}", strToday)
    logInfo("Ephemeris", "Feiertag: {}", Holiday.state.toString)
end
specialdays.xml

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<tns:Configuration hierarchy="de" description="Germany" xmlns:tns="http://www.example.org/Holiday"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.example.org/Holiday /Holiday.xsd">
    <tns:Holidays>
        <tns:ChristianHoliday type="CARNIVAL"/> <!-- dayOfYear==easterSunday.getDayOfYear-48 -->
        <tns:ChristianHoliday type="MAUNDY_THURSDAY"/> <!-- dayOfYear==easterSunday.getDayOfYear-3 -->
        <tns:Fixed day="29" month="JUNE" descriptionPropertiesKey="ST_PETER_PAUL"/>
        <!-- dayOfYear==stAdvent.getDayOfYear-14 // "remembrance_day" // Volkstrauertag -->
        <!-- dayOfYear==stAdvent.getDayOfYear-7 // "sunday_in_commemoration_of_the_dead" // Totensonntag -->
        <tns:Fixed day="04" month="DECEMBER" descriptionPropertiesKey="ST_BARBARAS_DAY"/> <!-- Barbara Tag -->
        <tns:Fixed day="06" month="DECEMBER" descriptionPropertiesKey="ST_NICHOLAS"/> <!-- Nicolaus Tag -->
        <tns:FixedWeekdayRelativeToFixed which="FIRST" weekday="SUNDAY" when="BEFORE" descriptionPropertiesKey="FOURTH_ADVENT" localizedType="OFFICIAL_HOLIDAY">
            <tns:day month="DECEMBER" day="25"/>
        </tns:FixedWeekdayRelativeToFixed>
        <tns:FixedWeekdayRelativeToFixed which="SECOND" weekday="SUNDAY" when="BEFORE" descriptionPropertiesKey="THIRD_ADVENT" localizedType="UNOFFICIAL_HOLIDAY">
            <tns:day month="DECEMBER" day="25"/>
        </tns:FixedWeekdayRelativeToFixed>
        <tns:FixedWeekdayRelativeToFixed which="THIRD" weekday="SUNDAY" when="BEFORE" descriptionPropertiesKey="SECOND_ADVENT" localizedType="UNOFFICIAL_HOLIDAY">
            <tns:day month="DECEMBER" day="25"/>
        </tns:FixedWeekdayRelativeToFixed>
        <tns:FixedWeekdayRelativeToFixed which="FOURTH" weekday="SUNDAY" when="BEFORE" descriptionPropertiesKey="FIRST_ADVENT" localizedType="UNOFFICIAL_HOLIDAY">
            <tns:day month="DECEMBER" day="25"/>
        </tns:FixedWeekdayRelativeToFixed>
    </tns:Holidays>
</tns:Configuration>
In der holiday_descriptions_de.properties habe ich folgendes ergänzt

Code: Alles auswählen

holiday.description.FIRST_ADVENT                   = 1. Advent
holiday.description.SECOND_ADVENT                  = 2. Advent
holiday.description.THIRD_ADVENT                   = 3. Advent
holiday.description.FOURTH_ADVENT                  = 4. Advent
Die Abfrage an sich funktioniert, nur das eben FIRST_ADVENT anstatt von 1. Advent angezeigt wird.

Evtl. liegt es daran, dass ich keinen Verweis auf meine lokale holiday_descriptions_de.properties angegeben habe? Jedoch hatte ich bisher keinen Hinweis gefunden, wo man das angeben müsste?

Viele Grüße
Jörg

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 15:28
von peter-pan
...müsstest du da nicht auch mit der Methode "Ephemeris.getHolidayDescription" im Else-Zweig arbeiten ? Also etwa so

Code: Alles auswählen

strToday = Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(dtDate, strSpecialday))

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 15:59
von nw378
Ich - und auch zuvor andere in diesem Forum - haben sich die Finger gebrochen an der deutschen Übersetzung mittels getHolidayDescription:

viewtopic.php?p=57463&hilit=getHolidayD ... ion#p57463

Was stattdessen funktioniert ist die MAP Transformation (MAP muss als Addon installiert sein):

Code: Alles auswählen

strToday = transform("MAP", "holidays_DE.map", Ephemeris.getBankHolidayName(dtDate, strHoliday).toString)

Inhalt der holidays_DE.map Datei (gespeichert unter /etc/openhab/transform):

Code: Alles auswählen

ALL_SAINTS                     = Allerheiligen
ALL_SOULS                      = Aller Seelen
ASSUMPTION_DAY                 = Mari\u00E4 Himmelfahrt
ASSUMPTION_MARY                = Mari\u00E4 Himmelfahrt
BANK_HOLIDAY                   = Bank Feiertag
BEER_DAY                       = Bier Tag
CHRISTMAS                      = Weihnachten
CHRISTMAS_EVE                  = Heiligabend
CONSOLIDATION                  = Tag der Einheit
CONSTITUTION_DAY               = Tag der Verfassung
CYBER_MONDAY                   = Cyber Monday
DAY_AFTER_NEW_YEAR             = Tag nach Neujahr
EUROPE_DAY                     = Europatag
LABOUR_DAY                     = Tag der Arbeit
MAY_DAY                        = Mai-Tag
MOTHERS_DAY                    = Muttertag
NATIONAL_DAY                   = Nationalfeiertag
NEW_YEAR                       = Neujahr
NEW_YEARS_EVE                  = Silvester
REFORMATION_DAY                = Reformationstag
REGIONAL                       = Regionaler Feiertag
THREE_HIERARCHS                = Die 3 Heiligen
UNIFICATION                    = Tag der Wiedervereinigung
UNIFICATION_GERMANY            = Tag der Deutschen Einheit
christian.ASCENSION_DAY        = Christi Himmelfahrt
christian.ASH_WEDNESDAY        = Aschermittwoch
christian.CARNIVAL             = Karneval
christian.CLEAN_MONDAY         = Aschermontag
christian.CORPUS_CHRISTI       = Fronleichnam
christian.EASTER               = Ostern
christian.EASTER_MONDAY        = Ostermontag
christian.EASTER_SATURDAY      = Ostersamstag
christian.EASTER_TUESDAY       = Fastnachtdienstag
christian.GENERAL_PRAYER_DAY   = Allg. Bettag
christian.GOOD_FRIDAY          = Karfreitag
christian.MAUNDY_THURSDAY      = Gr\u00FCndonnerstag
christian.PENTECOST            = Pfingsten
christian.PENTECOST_MONDAY     = Pfingstmontag
christian.SHROVE_MONDAY        = Aschermontag
christian.WHIT_MONDAY          = Pfingstmontag
christian.WHIT_SUNDAY          = Pfingstsonntag
FIRST_CHRISTMAS_DAY            = 1. Weihnachtsfeiertag
SECOND_CHRISTMAS_DAY           = 2. Weihnachtsfeiertag
-=-
undefined=-
no_holiday=kein Feiertag
UNDEF=-
NULL=-
kein Feiertag=kein Feiertag

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 16:03
von udo1toni
Ich kann bestätigen, dass entgegen der Dokumentation die Datei mit der Übersetzung gar nicht verwendet wird, stattdessen übersetzt Ephemeris fröhlich, ohne dass die Datei überhaupt existiert.
Einen Hinweis, wie und wo man das fixen kann, suche ich aber auch gerade.

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 16:12
von peter-pan
Ich bin auch gerade am suchen. Ich habe auch die Bemühungen von Jörg in 12/2021 im internationalen Forum gesehen. Aber es ist wohl seither nichts passiert, oder es wurde nichts gemacht bzw. es wurde nicht darauf reagiert.
Es sollte ja eigentlich nicht nötig sein, "von hinten durch die Brust ins Auge" mit einer zusätzlichen Transformation zu arbeiten.

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 17:14
von int5749
peter-pan hat geschrieben: 29. Dez 2023 16:12 Ich habe auch die Bemühungen von Jörg in 12/2021 im internationalen Forum gesehen. Aber es ist wohl seither nichts passiert, oder es wurde nichts gemacht bzw. es wurde nicht darauf reagiert.
:shock: Ich werde ge-stalked :? :lol: :lol:

Ich habe dazu mal ein neues Issue aufgemacht, mal sehen ob dort eine Reaktion kommt => Community

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Verfasst: 29. Dez 2023 17:15
von udo1toni
So ist es :) Noch dazu wo die Übersetzung ja sehr wohl funktioniert, nur halt nicht mit einer selbst angelegten Datei, sondern nur über den Cache, den jollyday selbst verwaltet (wenn ich den Code richtig interpretiert habe... da kein "ernsthaftes" Java Program ohne hundertfache Weiterleitung um tausend Ecken auszukommen scheint, ist das für Nicht-Programmierer etwas schwer zu verstehen.
Bei mir entsteht immer wieder mal der Eindruck, dass diese Art Code zu schreiben Selbstzweck ist - wäre ja noch schöner, wenn jeder Hans und Franz da eingreifen könnte...