Ephemeris mit Openhab2 (Feiertage / Wochenende / Geburtstag)

Durch | Dezember 22, 2019

Seit Openhab 2.5 gibt es jetzt Ephemeris. Damit lassen sich Feiertage, Geburtstage, Wochenende etc. erkennen. Somit können wir bestimmte Regeln prüfen ob gerade Wochenende / Feiertag etc. ist.

Eine Übersicht über diese „Action´s“ gibt es hier. Ich bin gerade dabei alles auszutesten. In der Openhab-Community ist noch nicht wirklich viel zu finden.

Als erstes sollte man entweder über Paper-UI oder per config-Datei die Grundeinstellungen vornehmen.

In PaperUI ist es unter Configuration –> System zu finden:

Alternativ lässt sich die ephemeris.cfg in /etc/openhab2/services anlegen:

Als nächstes benötigen wir noch die Holidays, zu finden auf dieser Seite:
https://github.com/svendiedrichsen/jollyday/tree/master/src/main/resources/holidays
In meinem Fall ist es z.B. die Holidays_de.xml die dann auch unter /etc/openhab2/services ablege.

Jetzt können wir z.B. den nächsten Feiertag abrufen oder prüfen auf „Wochenende“. Hier mal ein Beispiel:

rule "Ephemeris Regel"
when    System started or
        Item RefreshTage changed from OFF to ON or
        Time cron "0 0 * * * ?" 
then
   if (Ephemeris.isWeekend == true) {
       logInfo("FILE","Wochenende")
       }
   if (Ephemeris.isWeekend == false) {
       logInfo("FILE","Arbeitswoche")
       }

        val String nextHoliday  = Ephemeris.getNextBankHoliday('/etc/openhab2/services/Holidays_de.xml')
        val long untilHoliday    = Ephemeris.getDaysUntil(nextHoliday, '/etc/openhab2/services/Holidays_de.xml')
        logInfo("Nächster Feiertag", nextHoliday + " in Tagen: " + untilHoliday)
 end

Im Log schaut es dann so aus:

Es wird schön das Wochenende erkannt, genauso der nächste Feiertag ( 1. Weihnachtsfeiertag) Im Log sieht man noch den nächsten Geburtstag. Diesen haben ich in einer eigenen XML hinterlegt.
Hier mal meine Beispiel-Birthday-XML:

<?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:Fixed month="DECEMBER" day="26" descriptionPropertiesKey="Frank´s Geburtstag" />
        <tns:Fixed month="FEBRUARY" day="14" descriptionPropertiesKey="Valentina´s Geburtstag" />
        <tns:Fixed month="FEBRUARY" day="21" descriptionPropertiesKey="Dennis Geburtstag" />
        <tns:Fixed month="MAY" day="28" descriptionPropertiesKey="Melina´s Geburtstag" />
    </tns:Holidays>
</tns:Configuration>

Diese Datei habe ich als birthdays.xml in /etc/openhab2/services abgelegt und noch folgendes zur Regel hinzugefügt:

val String nextBirth = Ephemeris.getNextBankHoliday('/etc/openhab2/services/birthdays.xml')
val long untBirth = Ephemeris.getDaysUntil(nextBirth, '/etc/openhab2/services/birthdays.xml')
logInfo("Nächster Geburtstag", nextBirth + " in Tagen: " + untBirth)

Was Ihr damit jetzt anstellt ist eurem Smarthome überlassen. Man könnte sich z.B. Erinnerungen zum Geburtstag schicken, am Wochenende die Heizung anders regeln etc.

Damit anstatt FIRST_CHRISTMAS_DAY noch 1. Weihnachtsfeiertag angezeigt wird habe ich die Rule noch erweitert. Bedindung hierfür ist das wir noch die holiday-description (de) von hier herunterladen und in /etc/openhab2/services ablegen.

val String nameHoliday = Ephemeris.getHolidayDescription(nextHoliday)

Dazu

Ein wichtiger Hinweis noch zum Schluss. Wenn Ihr z.B. die birthday.xml zur Laufzeit bearbeitet, werden die Änderungen nicht angezeigt. Erst ein restart von Openhab2 liest die xml neu ein.

Gerne könnt Ihr das kommentieren, freue mich auch über Anregungen von Euch. Das Thema ist für mich auch ganz neu.

5 Gedanken an “Ephemeris mit Openhab2 (Feiertage / Wochenende / Geburtstag)

  1. Thomas

    Danke für die Beispiele, sie funktionieren bei mir. Auch das Prüfen auf ein anderes Set (zB eine Woche aus Arbeitstagen Montag bis Samstag per Eintrag in runtime.cfg) funktioniert.
    Was ich nicht hinbekomme ist, ein beliebiges Datum auf Feiertag und auf ein Set zu prüfen. Zum Beispiel, um innerhalb einer Schleife einen Zeitraum auf die Anzahl Feiertage und Sonntage zu durchsuchen.
    Hast Du dafür schon ein Beispiel?

    1. Joerg

      Hi,
      ich habe dies so lösen können

      Ephemeris.getBankHolidayName(new DateTimeType(„2020-12-25“).zonedDateTime)

      liefert z.B. den entsprechenden Feiertag

  2. Ingo

    Hallo, gibt es denn eine Möglichkeit auch die Schulferien einzubeziehen?
    Schöne Grüße,
    Ingo

    1. Joerg

      Ich denke, nicht automatisch als Abfrage, da es keine XML im richtigen Format gibt
      Aber Du kannst eine Custom XML erstellen und jweils „Start_SommerFerien“ und „Ende_SommerFerien“ etc anlegen.

  3. Jörg

    Hi,
    hat schon jemand versucht die Asvent-Sonntage to „berechnen“? Diese kann man ja ausgehend vom 25.12. berechnen, sprich die 4 Sonntage davor (Heiligabend kann ja 4. Advent sein)
    Ich versuche derzeit eine custom.xml

    FOURTH
    SUNDAY
    BEFORE

    THIRD
    SUNDAY
    BEFORE

    SECOND
    SUNDAY
    BEFORE

    FIRST
    SUNDAY
    BEFORE

    Aber dies funktioniert nicht :-/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.