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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

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

Beitrag von int5749 »

PJH hat geschrieben: 19. Jan 2024 11:48 Guten Morgen zusammen.

Udo1toni, das habe ich (natürlich) schon so probiert. openHAB erkennt einfach nicht, dass es sich um eine einzulesende Datei handelt.

Bildschirmfoto 2024-01-19 um 11.38.06.png

Das Einzige dass bei mir derzeit funktioniert ist die in einem Deiner Beispiele angegebene Codezeile:

val String FeiertagName = transform("MAP","ephemeris.map",getNextBankHoliday())

Das Ergebnis:

Bildschirmfoto 2024-01-18 um 23.46.26.png

Das stimmt zwar, so, PeterPan hat geschrieben, dass es zuvor keinen weiteren Feiertag gibt, aber das war ja genau meine Absicht im späteren Verlauf eine eigene Datei hinzuzufügen, in der ich halt die weiteren "Feiertage" erfasse und anzeigen lasse.

Warum wohl wird bei mir die Datei Holidays (holidays) nicht von OH eingelesen?

Danke wieder einmal und einen schönen Gruß. PJH
Moin zusammen,

in meinem System sind alle Dateien klein geschrieben, so auch holidays_de.xml und der Pfad ist dann auch entsprechend angegeben

Code: Alles auswählen

val String strHoliday = '/etc/openhab/services/holidays_de.xml'
Ist Deine Datei auch im System so wie im Pfad geschrieben? Evtl. mal alles klein schreiben?
Wie schon von Udo und Peter geschrieben, eigentlich funktioniert die holidays_de.xml und bei mir auch eine specialdays.xml in welcher ich persönliche Daten pflege. Jedoch funktioniert - auch schon mehrfach in diesem Threat geschrieben - die Übersetzung mit einer lokalen Datei nicht und natürlich sind persönliche Tage (z.B. auch Adventstage) nicht in der globalen Übersetzung enthalten :?

Viele Grüße,
int5749
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

Hallo int5749, ja, ist alles klein geschrieben.

Schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Also, ich habe das mal bei mir durchgespielt, und hier funktioniert der Zugriff auf die Datei.
Allerdings scheint das Ganze Konstrukt extrem anfällig zu sein.

1. Der Dateiname muss exakt Holidays_de.xml lauten, Groß- und Kleinschreibung sind dabei einzuhalten. Der Dateiname darf nicht anders lauten, weil die xml-Beschreibung den Begriff Holidays verwendet. Dieser ist ein in Jollyday definiertes Schlüsselwort und offensichtlich muss dieses Schlüsselwort auch beim Dateinamen verwendet werden.
Die Datei ist instanzierbar als landesspezifische Version, wobei die Landeskürzel ebenfalls exakt festgelegt sind (für Deutschland halt de) und nach dem Unterstrich hinter Holidays angegeben werden müssen. Man darf den Dateinamen keinesfalls frei wählen, was die Angabe des Dateinamens absurd erscheinen lässt.
2. Der Name muss selbstverständlich exakt so auch im Aufruf übergeben werden, also z.B.

Code: Alles auswählen

val strName = getNextBankHoliday("/etc/openhab/services/Holidays_de.xml")
wenn die Datei sich im Verzeichnis /etc/openhab/services/ (absoluter Pfad aus Sicht von openHAB) befindet.
3. Man muss openHAB komplett neu starten! Bei jeder Änderung an der Datei Holidays_de.xml und auch beim Anlegen der Datei. Offensichtlich wird diese Datei nur beim Start von openHAB eingelesen, das ist bei mir der wichtigste Schlüssel gewesen, um die Datei erfolgreich zu verwenden. Besonders unangenehm, weil es halt so vollkommen dem Verhalten von openHAB für den Rest des Systems widerspricht...
4. Die Übersetzung funktioniert trotzdem nicht (auch wenn die Dateinamen peinlich genau eingehalten werden... ist aber auch kein Wunder, es gibt ja keinen Verweis auf die zu verwendende Datei...)

Habe ich schon erwähnt, dass ich die Implementation der Funktion für misslungen halte?

Für die Nutzung in einem Docker Container bedeutet dies:

1. Datei im host-Ordner <OH_CONF_VOLUME>/services/ anlegen, mit dem Namen Holidays_de.xml (<OH_CONF_VOLUME> hat man selbst in der Container Konfiguration festgelegt...)
2. Als absoluten Dateinamen beim Aufruf /openhab/conf/services/Holidays_de.xml angeben, also z.B.

Code: Alles auswählen

getNextBankHoliday("/openhab/conf/services/Holidays_de.xml")
3. Container beenden, bzw. neu starten.

Unbedingt einen Blick ins Log werfen!
Meine Holidays_de.xml wurde zunächst nicht verarbeitet, vermutlich weil an irgendeiner Stelle ein überzähliges Leerzeichen stand (also zwei hintereinander statt nur eines) - was letztlich der Fehler war, ist für mich nicht nachvollziehbar (bzw. habe ich keinen Bock darauf...), jedenfalls hat es geholfen, "meine" Datei mit dem kompletten Inhalt des RAW Files aus dem Projekt zu ersetzen. Erst im Anschluss habe ich angefangen, mit einem einzelnen Termin in der unmittelbaren Zukunft zu experimentieren, weshalb ich auf die Sache mit dem Restart von openHAB gestoßen bin...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

Hallo udo1toni, ganz herzlichen Dank für Deine große Mühe.

Ich habe jetzt wieder stundenlang alles durchprobiert, Groß-, Kleinschreibung, alle möglichen Pfadangaben, unzählige (gefühlt) Neustarts, es will nicht.

Es fällt mir nicht leicht, aber ich gebe (erstmal) auf.

Schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Wie gesagt, bitte nichts probieren, sondern exakt die angegeben Schreibweise verwenden, an allen Stellen, die ist nicht optional. Und die Datei muss (aus Sicht von jollyday) fehlerfrei sein, das heißt, es ist wichtig, mit eines "sauberen" Datei zu starten.
Und immer openhab.log im Blick behalten, da kommen Fehlermeldungen, falls das nicht der Fall ist, ist was anderes faul.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

Ich habe die Datei frisch von Github geladen. Übrigens steht in der Datei "Holiday" und nicht "Holidays", aber auch das habe ich ausprobiert.

Schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Da steht "auch" Holiday, aber nicht als Schlüsselwort. Auszug aus der Datei:

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>
    ...
Und genau dieses <tns:Holidays> ist ein Schlüsselwort und gibt nach meinen Tests zwingend den Dateinamen vor.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

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

Beitrag von peter-pan »

... Also ich habe jetzt schon alles Mögliche mit diesem Binding oder System Setting ausprobiert, aber so richtig klar bin ich bisher nicht gekommen.

Jetzt habe ich sogar mal alle Dateien "deaktiviert", und natürlich den Cache gelöscht (openhab-cli clean-cache) und meinen Pi komplett neu gestartet (sudo reboot)

Code: Alles auswählen

hab3@oh3ssd:~ $ ls -alF /etc/openhab/services
insgesamt 180
drwxrwxr-x  2 openhab openhab  4096 23. Jan 09:36 ./
drwxrwxr-x 17 openhab openhab  4096 18. Dez 09:55 ../
-rw-rw-r--  1 openhab openhab  1547  2. Jul 2023  addons.cfg
-rw-r--r--  1 openhab openhab   425 25. Dez 2022  basicui.cfg
-rw-rw-r--  1 openhab openhab 23573 22. Jan 10:31 country_descriptions_de.properties_stopped
-rw-rw-r--  1 openhab openhab   126 22. Jan 13:44 ephemeris.cfg
-rw-rw-r--  1 openhab openhab 20805 22. Jan 13:49 holiday_descriptions_de.properties_stopped
-rw-rw-r--  1 openhab openhab 20801 22. Jan 11:04 holiday_descriptions.properties_stopped
-rw-rw-r--  1 openhab openhab  7957 25. Dez 10:43 Holidays_de.xml_orig
-rw-rw-r--  1 openhab openhab  9326 22. Jan 10:57 Holidays_de.xml_stopped
-rw-rw-r--  1 openhab openhab   333 12. Dez 2021  readme.txt
-rw-rw-r--  1 openhab openhab   551 12. Dez 2021  rrd4j.cfg
-rw-rw-r--  1 openhab openhab 48638  7. Dez 09:59 runtime.cfg
-rw-rw-r--  1 openhab openhab 10415 10. Sep 19:44 runtime.cfg.dpkg-dist
hab3@oh3ssd:~ $
und danach Test-Script laufen lassen, dass ich mir aus allem Möglichen zusammengebastelt habe. Da kommen trotzdem sogar zum Teil noch Ergebnisse raus.

Code: Alles auswählen

2024-01-23 12:27:33.965 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test_ephemeris.rules'
2024-01-23 12:27:36.389 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'test_ephemeris.rules', using it anyway:
The value of the local variable strFeiertag is not used
2024-01-23 12:27:37.796 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.798 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.800 [INFO ] [g.openhab.core.model.script.holiday1] - nächster Feiertag in null Tagen -1
2024-01-23 12:27:37.802 [INFO ] [g.openhab.core.model.script.holiday2] - übersetzter Name null Original-Name  null
2024-01-23 12:27:37.804 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.806 [INFO ] [.openhab.core.model.script.Feiertag1] - Heutiger Feiertagsname: null - Heutige Feiertagsbezeichnung null
2024-01-23 12:27:37.808 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.810 [INFO ] [.openhab.core.model.script.Feiertag2] - isBankHoliday:  false
2024-01-23 12:27:37.812 [WARN ] [rg.openhab.core.model.script.Rules 1] - Neujahr
2024-01-23 12:27:37.815 [WARN ] [rg.openhab.core.model.script.Rules 2] - Neujahr
2024-01-23 12:27:37.818 [WARN ] [org.openhab.core.model.script.Rules3] - Neujahr
2024-01-23 12:27:37.820 [WARN ] [org.openhab.core.model.script.Rules4] - NEW_YEAR
2024-01-23 12:27:37.823 [WARN ] [org.openhab.core.model.script.Rules5] - 2. Weihnachtsfeiertag
2024-01-23 12:27:37.829 [WARN ] [org.openhab.core.model.script.Rules6] - SECOND_CHRISTMAS_DAY
2024-01-23 12:27:37.832 [WARN ] [org.openhab.core.model.script.Rules7] - null
2024-01-23 12:27:37.838 [WARN ] [org.openhab.core.model.script.Rules8] - null
2024-01-23 12:27:37.839 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.841 [ERROR] [.core.model.script.actions.Ephemeris] - Error reading holiday user file /etc/openhab/services/Holidays_de.xml : /etc/openhab/services/Holidays_de.xml
2024-01-23 12:27:37.843 [INFO ] [org.openhab.core.model.script.Rules9] - nächster Feiertag ist null und das in -1 Tagen -1
Ich kann*s mir so richtig nicht mehr erklären.
Ich hab auch mal versucht das Datum und natürlich auch den Tag des Jahres für Ostern zu ermitteln und bin kläglich gescheitert. Vielleicht hat hier ja irgendwer noch ein paar Tipps zu diesem Thema. Ich bin durch :oops: :cry:
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

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

Beitrag von udo1toni »

:) so:

Code: Alles auswählen

rule "Feiertage"
 when
    Time cron "5 0 0 * * ?" or
    System started
 then
    val strFile         = "/etc/openhab/services/Holidays_de.xml"
    val firstAdvent     = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
        intStAdvent     = firstAdvent.getDayOfYear
    val strHoliDay      = getHolidayDescription(getBankHolidayName)
    val nextHoliDay     = getNextBankHoliday(strFile)
    val nextHoliDayDe   = getHolidayDescription(getNextBankHoliday(strFile))
    val nextHoliDayDays = getDaysUntil(nextHoliDay,strFile)
    val easterDays      = getDaysUntil("christian.EASTER",strFile)

    logInfo("holiday","Der erste Advent in {} ist am {}", now.getYear, firstAdvent)
    if(isBankHoliday(strFile))
        logInfo("holiday","Heute ist {}", strHoliDay)
    logInfo("holiday","Nächster Feiertag: {} in {} Tagen ({})", nextHoliDayDe, nextHoliDayDays, now.plusDays(nextHoliDayDays).toLocalDate)
    logInfo("holiday","Ostersonntag ist in {} Tagen ({})", easterDays, now.plusDays(easterDays).toLocalDate)
end
ergibt folgende Anzege:

Code: Alles auswählen

2024-01-24 13:57:44.987 [INFO ] [rg.openhab.core.model.script.holiday] - Der erste Advent in 2024 ist am 2024-12-01
2024-01-24 13:57:44.988 [INFO ] [rg.openhab.core.model.script.holiday] - Nächster Feiertag: Karfreitag in 65 Tagen (2024-03-29)
2024-01-24 13:57:44.988 [INFO ] [rg.openhab.core.model.script.holiday] - Ostersonntag ist in 67 Tagen (2024-03-31)
Voraussezung ist aber, dass Ostersonntag in Deinem Bundesland ein gesetzlicher Feiertag ist und dies auch korrekt in der Holidays_de.xml hinterlegt ist (für Hessen ist es fehlerhaft - ich habe deshalb bereits einen pullrequest bei jollyday angelegt, aber ich schätze, dass das Projekt tot ist. Letzter Build von 2019, letzte Änderungen am Source Code vor zwei Jahren, 17 offene Pullrequests, darunter auch solche, die wie mein Pullrequest nur eine Korrektur fehlerhafter Daten enthalten)
Das ist der Grund, warum ich auf "meine eigene" Holidays_de.xml verweise, was bei mir auch tadellos funktioniert - wie oben erwähnt, nach einem Neustart des Systems nach der letzten Änderung an der Datei selbst.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

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

Beitrag von peter-pan »

udo1toni hat geschrieben: 24. Jan 2024 14:21 Voraussezung ist aber, dass Ostersonntag in Deinem Bundesland ein gesetzlicher Feiertag ist
...ich hab das bei mir einfach im allgemeinen Teil ergänzt, hätte aber wahrscheinlich auch bei Baden-Württemberg geklappt.

Code: Alles auswählen

        <tns:ChristianHoliday type="WHIT_MONDAY"/>
        <tns:ChristianHoliday type="EASTER"/><!-- hab ich selbst eingesetzt, da bundesweiter Feiertag 22.01.2024 -->
        <tns:ChristianHoliday type="WHIT_SUNDAY"/><!-- hab ich selbst eingesetzt 22.01.2024 -->
Das hat jetzt Dank deiner Hilfe super geklappt 👍🏻. Das wichtigste, was ich dabei gelernt habe, dass man das "christian." vor das "EASTER" setzen muss, also

Code: Alles auswählen

val easterDays      = getDaysUntil("christian.EASTER",strFile)
Das mit Weihnachten, geht ja auch ohne "Ephemeris". Da hab ich schon in der Vergangenheit aus deinem Fundus für meine Weihnachts-Rules, die passenden Schnipsel "abgezweigt" ;)

Hast du evtl. noch eine Idee, wie man den Wert/Datum

Code: Alles auswählen

now.plusDays(easterDays).toLocalDate
"einfach" formatieren kann (TT.MM.JJ) ?
Ich verkünstle mich gerade mit split und get.

Auf jeden Fall schon mal herzlichen Dank für deine Hilfe.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten