Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
_Morty432
Beiträge: 21
Registriert: 23. Sep 2019 19:09
Answers: 1

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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

Code: Alles auswählen

var int offset = Geburtstag_until.state as Number
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
Openhab2 auf Raspi-4; ESP8266; ESP32; z-wave; Hue; Harmony; Zigbee2MQTT

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

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

_Morty432
Beiträge: 21
Registriert: 23. Sep 2019 19:09
Answers: 1

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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!
:(
Openhab2 auf Raspi-4; ESP8266; ESP32; z-wave; Hue; Harmony; Zigbee2MQTT

_Morty432
Beiträge: 21
Registriert: 23. Sep 2019 19:09
Answers: 1

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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
Openhab2 auf Raspi-4; ESP8266; ESP32; z-wave; Hue; Harmony; Zigbee2MQTT

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

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

_Morty432
Beiträge: 21
Registriert: 23. Sep 2019 19:09
Answers: 1

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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!
Openhab2 auf Raspi-4; ESP8266; ESP32; z-wave; Hue; Harmony; Zigbee2MQTT

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

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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
Unfortunately exactly the isBankHoliday(<offset>, <file>) action is broken in OH 2.5.x and will probably not working before OH 3.0 - even if it is already fixed in our code base (see https://github.com/openhab/openhab-core/issues/1374 3)
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 :D

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

Benutzeravatar
Steinspiel
Beiträge: 396
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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?
bis dann, Steinspiel

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

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Beitrag 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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Antworten