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.
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?
Hi,
ich habe dies so lösen können
Ephemeris.getBankHolidayName(new DateTimeType(„2020-12-25“).zonedDateTime)
liefert z.B. den entsprechenden Feiertag
Hallo, gibt es denn eine Möglichkeit auch die Schulferien einzubeziehen?
Schöne Grüße,
Ingo
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.
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 :-/