Seite 1 von 1

Müllkalender mit Ephemeris: "isBankHoliday" immer "false"...

Verfasst: 26. Nov 2020 14:22
von harteknut
Hallo zusammen,

ich habe mir alle Mülltermine von 2021 in eine eigene Ephermeris-XML eingetragen, um am Display an der Tür anzuzeigen, wenn die Tonnen nach vorne geräumt werden müssen. Das Erstellen der XML war nicht schwer, grundsätzlich klappt auch alles,...
... außer der IF-Abfrage mit "isBankHoliday", und ich bin mit meinem Latein echt am Ende.

Hier die konkrete Fehlerbeschreibung. Meine Müll-XML heißt "muellkalender_fix1.xml" und sieht folgendermaßen aus:

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:Fixed month="NOVEMBER" 	day="26" validFrom="2020" validTo="2020" descriptionPropertiesKey="grau + braun"/>
		<tns:Fixed month="DECEMBER"		day="10" validFrom="2020" validTo="2020" descriptionPropertiesKey="grau + braun"/>		
		<tns:Fixed month="DECEMBER"		day="28" validFrom="2020" validTo="2020" descriptionPropertiesKey="grau + braun"/>
		<tns:Fixed month="JANUARY" 		day="13" validFrom="2021" validTo="2021" descriptionPropertiesKey="grau + braun"/>	
		<tns:Fixed month="JANUARY" 		day="25" validFrom="2021" validTo="2021" descriptionPropertiesKey="grau + braun"/>
		<tns:Fixed month="MARCH" 		day="11" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau"/>
		<tns:Fixed month="MARCH" 		day="25" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau"/>
		<tns:Fixed month="APRIL"	 	day="10" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau"/>
		<tns:Fixed month="APRIL" 		day="22" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau + braun"/>
		<tns:Fixed month="MAY" 			day="06" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau + braun"/>
		<tns:Fixed month="MAY" 			day="20" validFrom="2021" validTo="2021" descriptionPropertiesKey="blau + braun"/>
	 </tns:Holidays>
</tns:Configuration>
Die Abfrage scheint auch grundsätzlich zu funktionieren, denn genau heute ist ja "grau + braun" dran:
Die in der Rule eingetragenen Zeilen:

Code: Alles auswählen

logInfo("Anzeige", (Ephemeris.getNextBankHoliday("/etc/openhab2/services/muellkalender_fix1.xml")))
logInfo("Anzeige", (Ephemeris.getDaysUntil("grau + braun", "/etc/openhab2/services/muellkander_fix1.xml" ).toString)) 
führen zu

Code: Alles auswählen

2020-11-26 14:10:00.017 [INFO ] [lipse.smarthome.model.script.Anzeige] - grau + braun
2020-11-26 14:10:00.035 [INFO ] [lipse.smarthome.model.script.Anzeige] - 0
also scheint der heutige Eintrag gefunden zu werden. Die Abfragen

Code: Alles auswählen

logInfo("Anzeige", (Ephemeris.isBankHoliday(0, "/etc/openhab2/services/muellkalender_fix1.xml").toString))
logInfo("Anzeige", (Ephemeris.isBankHoliday(1, "/etc/openhab2/services/muellkalender_fix1.xml").toString))
mit denen ich abfrage, ob heute oder morgen ein Mülltag ist, ergeben aber

Code: Alles auswählen

2020-11-26 14:10:00.021 [INFO ] [lipse.smarthome.model.script.Anzeige] - false
2020-11-26 14:10:00.026 [INFO ] [lipse.smarthome.model.script.Anzeige] - false
Das verstehe ich nicht. Was mach ich denn falsch?

Re: Müllkalender mit Ephemeris: "isBankHoliday" immer "false"...

Verfasst: 26. Nov 2020 16:08
von harteknut
OK, habs gefunden: Ich mach gar nix falsch, es ist einfach nur kaputt. Im offiziellen Forum der Community habe ich den Hinweis gefunden, dass die Methode isBankHoliday(<offset>, <file>) in OH 2.5 nicht funktioniert.
Leider wurde das in der Doku bei getNextBankHoliday(<offset>, <file>) eingetragen, deshalb hab ichs nicht gesehen. K.A., ob evtl. beide Methoden nicht funktionieren, hier jedenfalls die Lösung auf deutsch:
1) ZonedDateTime importieren, indem man in der ersten Zeile der Rule die Zeile

Code: Alles auswählen

import java.time.ZonedDateTime
einträgt.
2) Dann bei der isBankHoliday-Abfrage ZonedDateTime verwenden:

Code: Alles auswählen

isBankHoliday(ZonedDateTime.now().plusDays(<offset>), <file>)
Den Aufruf .plusDays(<offset>) könnt Ihr einfach weglassen, wenn der heutige Tag abgefragt werden soll.

So, jetzt macht Ephemeris wieder Spaß!
Gruß,
Simon

Re: Müllkalender mit Ephemeris: "isBankHoliday" immer "false"...

Verfasst: 26. Nov 2020 16:42
von udo1toni
Das würde ich jetzt nicht als "kaputt", sondern als "statt offset in Tagen ist das absolute Datum als ZonedDateTimeType anzugeben" deklarieren.
:)

Re: Müllkalender mit Ephemeris: "isBankHoliday" immer "false"...

Verfasst: 26. Nov 2020 17:40
von harteknut
War nur meine Übersetzung der Meldung im Forum:
Unfortunately exactly the isBankHoliday(<offset>, <file>) action is broken in OH 2.5.x and will probably not working before OH 3.0 [...]
Aber Du hast Recht, der "Workaround" ist vollkommen in Ordnung und bringt keine Einschränkungen mit. Kann von mir aus so bleiben. ;)