Seite 3 von 9
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 16:53
von _Morty432
Vielen Dank für diese hilfreiche Anleitung!!!
Ich habe meinen eigene Geburtstags.xml angelegt und möchte nun zu dem nächsten Geburtstag auch noch den übernächsten angezeigt bekommen.
Dazu möchte ich
Ephemeris.getNextBankHoliday(<offset>,<file>) verwenden und habe ich folgende Rule erstellt:
Code: Alles auswählen
rule "Ephemeris Regel"
when System started
//or Time cron "0 0 * * * ?"
or Time cron "15 * * * * ?"
then
//Geburtstage
val String nextGeburtstag = Ephemeris.getNextBankHoliday('/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val long untilGeburtstag = Ephemeris.getDaysUntil(nextGeburtstag, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_next.postUpdate(nextGeburtstag)
Geburtstag_until.postUpdate(untilGeburtstag)
if(Eph_log) logInfo("Ephemeris >>>","1: " + Geburtstag_next.state + "`s Geburtstag in "+ Geburtstag_until.state + " Tagen!")
var int offset = Geburtstag_until.state as Number
val String nextGeburtstag2 = Ephemeris.getNextBankHoliday(offset,'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val long untilGeburtstag2 = Ephemeris.getDaysUntil(nextGeburtstag2, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_2_next.postUpdate(nextGeburtstag2)
Geburtstag_2_until.postUpdate(untilGeburtstag2)
if(Eph_log) logInfo("Ephemeris >>>","2: " + Geburtstag_2_next.state + "`s Geburtstag in "+ Geburtstag_2_until.state + " Tagen!")
Das Problem ist, das
Ephemeris.getNextBlankHoliday als Offset einen int-Wert braucht und nicht mit dem
zurecht kommt.
Code: Alles auswählen
2020-03-01 16:44:15.026 [INFO ] [smarthome.model.script.Ephemeris >>>] - 1: Melanie`s Geburtstag in 18 Tagen!
2020-03-01 16:44:15.031 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Ephemeris Regel': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.Ephemeris.getNextBankHoliday(int,java.lang.String) on instance: null
Ich müsste also long nach int umwandeln. Aber daran scheitere ich akuell. Ich habe schon einige Varianten versucht, aber immer ohne Erfolg.
Wenn ich anstatt Offset eine direkte Zahl eingebe, funktioniert es.
Code: Alles auswählen
val String nextGeburtstag2 = Ephemeris.getNextBankHoliday(20,'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Hat einer von Euch einen Tipp für mich?
Danke vorab
Morty
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 19:30
von udo1toni
Du solltest an dieser Stelle ohnehin nicht mit dem Item arbeiten. Das Problem ist nämlich, dass das postUpdate asynchron ausgeführt wird. Das heißt, es gibt keine Garantie, dass das Item zum Zeitpunkt des nächsten Zugriffs schon den aktualisierten Wert hat.. Nimm also lieber die Variable untilGeburtstag.
Diese Variable solltest Du auch besser nicht als long, sondern als Long definieren (das sollte möglich sein). Der Unterschied: long ist ein primitive, während Long ein Objekt ist. Für das Objekt könnte es dann auch die Methode .intValue geben.
Ausprobiert hab ich das aber jetzt nicht, notfalls müssen wir einen anderen Weg gehen.
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 20:11
von _Morty432
Danke udo1toni, wieder was dazugelernt.
Es gibt zwar jetzt keine Fehlermeldungen mehr, aber er macht den Offset nicht.
Code: Alles auswählen
rule "Ephemeris Regel"
when System started
//or Time cron "0 0 * * * ?"
or Time cron "15 * * * * ?" // jede Minute
then
//Geburtstage
val String nextGeburtstag = Ephemeris.getNextBankHoliday('/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag = Ephemeris.getDaysUntil(nextGeburtstag, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_next.postUpdate(nextGeburtstag)
Geburtstag_until.postUpdate(untilGeburtstag)
if(Eph_log) logInfo("Ephemeris >>>","1: " + Geburtstag_next.state + "`s Geburtstag in "+ Geburtstag_until.state + " Tagen!")
val String nextGeburtstag2 = Ephemeris.getNextBankHoliday(untilGeburtstag.intValue,'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag2 = Ephemeris.getDaysUntil(nextGeburtstag2, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_2_next.postUpdate(nextGeburtstag2)
Geburtstag_2_until.postUpdate(untilGeburtstag2)
if(Eph_log) logInfo("Ephemeris >>>","2: " + Geburtstag_2_next.state + "`s Geburtstag in "+ Geburtstag_2_until.state + " Tagen!")
val String nextGeburtstag3 = Ephemeris.getNextBankHoliday(untilGeburtstag2.intValue,'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag3 = Ephemeris.getDaysUntil(nextGeburtstag3, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_3_next.postUpdate(nextGeburtstag3)
Geburtstag_3_until.postUpdate(untilGeburtstag3)
if(Eph_log) logInfo("Ephemeris >>>","3: " + Geburtstag_3_next.state + "`s Geburtstag in "+ Geburtstag_3_until.state + " Tagen!")
end
Alle 3 Geburtstags-Einträge zeigen den ersten Treffer:
Code: Alles auswählen
2020-03-01 20:04:57.163 [INFO ] [smarthome.model.script.Ephemeris >>>] - 1: Melanie`s Geburtstag in 18 Tagen!
2020-03-01 20:04:57.175 [INFO ] [smarthome.model.script.Ephemeris >>>] - 2: Melanie`s Geburtstag in 18 Tagen!
2020-03-01 20:04:57.185 [INFO ] [smarthome.model.script.Ephemeris >>>] - 3: Melanie`s Geburtstag in 18 Tagen!

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 21:58
von _Morty432
Ich habe meinen Fehler gefunden!

Und zwar musste ich noch
+1 zum Offset addieren, damit der nächste Termin gefunden werden kann.
So funktioniert jetzt die Rules und zeigt mir die nächsten 3 Geburtstage an:
Code: Alles auswählen
rule "Ephemeris Regel"
when System started
//or Time cron "0 0 * * * ?"
or Time cron "15 * * * * ?" // jede Minute
then
//Geburtstage
val String nextGeburtstag = Ephemeris.getNextBankHoliday('/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag = Ephemeris.getDaysUntil(nextGeburtstag, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_next.postUpdate(nextGeburtstag)
Geburtstag_until.postUpdate(untilGeburtstag)
if(Eph_log) logInfo("Ephemeris >>>","1: " + Geburtstag_next.state + "`s Geburtstag in "+ Geburtstag_until.state + " Tagen!")
val String nextGeburtstag2 = Ephemeris.getNextBankHoliday((untilGeburtstag.intValue +1),'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag2 = Ephemeris.getDaysUntil(nextGeburtstag2, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_2_next.postUpdate(nextGeburtstag2)
Geburtstag_2_until.postUpdate(untilGeburtstag2)
if(Eph_log) logInfo("Ephemeris >>>","2: " + Geburtstag_2_next.state + "`s Geburtstag in "+ Geburtstag_2_until.state + " Tagen!")
val String nextGeburtstag3 = Ephemeris.getNextBankHoliday((untilGeburtstag2.intValue +1),'/srv/openhab2-conf/services/Eph_Geburtstage.xml')
val Long untilGeburtstag3 = Ephemeris.getDaysUntil(nextGeburtstag3, '/srv/openhab2-conf/services/Eph_Geburtstage.xml')
Geburtstag_3_next.postUpdate(nextGeburtstag3)
Geburtstag_3_until.postUpdate(untilGeburtstag3)
if(Eph_log) logInfo("Ephemeris >>>","3: " + Geburtstag_3_next.state + "`s Geburtstag in "+ Geburtstag_3_until.state + " Tagen!")
end
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 22:28
von int5749
_Morty432 hat geschrieben: ↑1. Mär 2020 21:58
Ich habe meinen Fehler gefunden!

Und zwar musste ich noch
+1 zum Offset addieren, damit der nächste Termin gefunden werden kann.
So funktioniert jetzt die Rules und zeigt mir die nächsten 3 Geburtstage an:
Code: Alles auswählen
if(Eph_log) logInfo("Ephemeris >>>","1: " + Geburtstag_next.state + "`s Geburtstag in "+ Geburtstag_until.state + " Tagen!")
Du "misbrauchst" aber den Logger

Der erste Parameter benennt den Logger und darf keine Leerzeichen enthalten. Du kannst Logger dann geziel ein/aus schalten und debuggen.
Viele Grüße
Jörg
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 22:30
von int5749
Wenn nun noch jemand einen Tipp hat, wie denn eigens eingefügte Tage denn auch Feiertage werden, könnte man die Funktion schon fast gut nutzen

Oder aber, wenn kein Feiertag, dann evtl. als SpecialDay deklariert?
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 1. Mär 2020 22:31
von _Morty432
Du "misbrauchst" aber den Logger
Hi Jörg, ja ich weiß. Den Logger richtig einzusezten steht noch auf meiner ToDo-Liste

Aber so komme ich im Moment eigentlich super klar.
Trotzdem Danke!
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 2. Mär 2020 18:56
von int5749
So, ein wenig weiter geggoglet und es geht voran
Die Lösung kann so einfach sein. (
https://community.openhab.org/t/wip-eph ... n/84536/29)
Demnach
Folgende Alternative (auch von dort) funktioniert bei mir
Code: Alles auswählen
isBankHoliday(<datetime>, <file>) and set new DateTimeType().zonedDateTime.now().plusDays(<offset>) for <datetime>
bzw alternativ für heute
Code: Alles auswählen
isBankHoliday(<datetime>, <file>) and set new DateTimeType().zonedDateTime.now() for <datetime>
Schon is der heutige Tag ein Feiertag, sofern in der xml gelistet und ich kann schon fast umsteigen. Denn nach diesen ganzen Tests auf OH3.0 warten möchte ich dann auch nicht
Viele Grüße,
Jörg
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 2. Mär 2020 22:55
von Steinspiel
Moin,
alkaline hat geschrieben: ↑5. Jan 2020 09:47
ich habe nach einigen Versuchen mit dem seit OH 2.5 enthaltenen Ephemeris Binding sehr schöne Erfolge erzielt, die ich gerne teilen will.
[...]
Na das passte ja,
meine Probleme den Google Kalender ein zu binden und
Dein Tip mit Ephemeris!

Ich denke damit bekomme ich auch das erreicht was ich mit calDAV machen wollte, Danke schon mal!
Im Log wird mir allerdings folgender Fehler angezeigt:
Code: Alles auswählen
[ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'Ephemeris Regel': Cannot instantiate configuration from URL 'file:/etc/openhab2/services/Holidays_de.xml'.
Die "Holidays_de.xml" liegt aber da wo sie liegen soll...
Allerdings werden mir im Rule "Ephemeris Regel" in Zeile 12,13 und 15 Fehler angezeigt:
Code: Alles auswählen
Invalid number of arguments. The method getHolidayDescription(String) is not applicable for the arguments (String,String)
Weiß Du wie ich den String ändern kann damit er passt?
Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)
Verfasst: 2. Mär 2020 23:15
von int5749
Steinspiel hat geschrieben: ↑2. Mär 2020 22:55
Moin,
alkaline hat geschrieben: ↑5. Jan 2020 09:47
ich habe nach einigen Versuchen mit dem seit OH 2.5 enthaltenen Ephemeris Binding sehr schöne Erfolge erzielt, die ich gerne teilen will.
[...]
Na das passte ja,
meine Probleme den Google Kalender ein zu binden und
Dein Tip mit Ephemeris!

Ich denke damit bekomme ich auch das erreicht was ich mit calDAV machen wollte, Danke schon mal!
Im Log wird mir allerdings folgender Fehler angezeigt:
Code: Alles auswählen
[ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'Ephemeris Regel': Cannot instantiate configuration from URL 'file:/etc/openhab2/services/Holidays_de.xml'.
Die "Holidays_de.xml" liegt aber da wo sie liegen soll...
Allerdings werden mir im Rule "Ephemeris Regel" in Zeile 12,13 und 15 Fehler angezeigt:
Code: Alles auswählen
Invalid number of arguments. The method getHolidayDescription(String) is not applicable for the arguments (String,String)
Weiß Du wie ich den String ändern kann damit er passt?
Hi,
Nur mit dem Fehler kann man schwerlich etwas anfangen. Hast Du denn Ephemeris schon installiert und konfiguriert? Wo liegen welche Dateien und wie schaut Deine Rule aus?
Viele Grüße,
Jörg