Also, ich versuch's nochmal.
Ich habe in OH 3.3 Ephemeris mit der Holiday-Datei gearbeitet und mehrere abgeänderte Dateien für Müllabfuhr, Konzert und Opernbesuche und Feiertage, die nicht automatisch von Ephemeris geliefert werden gearbeitet. Dazu reichte ja eine Rule:
Code: Alles auswählen
rule "Feiertage"
when
Item naechsterFeiertag received update or
Time cron "0 01 00 ? * * *" or
System started or
Item vSystemRestart changed to ON
then
val String FeiertagName = transform("MAP","ephemeris.map",Ephemeris.getNextBankHoliday()) // gesetzliche Feieertage
val long TagebisFeiertag = Ephemeris.getDaysUntil(getNextBankHoliday())
val String naechsterTag = Ephemeris.getNextBankHoliday('/openhab/conf/services/holidays_de.xml') // eigene Feiertage
val long TagebisnaechsterTag = Ephemeris.getDaysUntil(naechsterTag, '/openhab/conf/services/holidays_de.xml')
Vfeiertag.postUpdate("Heute: " + FeiertagName)
Zfeiertag.postUpdate("Heute: " + naechsterTag)
if (TagebisFeiertag < 2)
Afeiertag.postUpdate(FeiertagName + " " + "(in " + TagebisFeiertag + " Tag)")
if (TagebisnaechsterTag < 2)
Xfeiertag.postUpdate(naechsterTag + " " + "(in " + TagebisnaechsterTag + " Tag)")
if (TagebisFeiertag < 1)
Afeiertag.postUpdate(FeiertagName + " " + " (Heute)")
if (TagebisnaechsterTag < 1)
Xfeiertag.postUpdate(naechsterTag + " " + " (Heute)")
else
{Afeiertag.postUpdate(FeiertagName + " " + "(in " + TagebisFeiertag + " Tagen)")
Xfeiertag.postUpdate(naechsterTag + " " + "(in " + TagebisnaechsterTag + " Tagen)") }
Y1feiertag.postUpdate(TagebisnaechsterTag)
Y2feiertag.postUpdate(TagebisFeiertag)
end
Dabei war ja "Afeiertag" immer in deutsch, da ja "FeiertagName" so ausgelesen und mit "transform("MAP","ephemeris.map" in die richtige Form gebracht wurde. Alle anderen Ableitungen von "FeiertagName" waren so immer richtig.
In OH 4 gibt es ein entsprechendes Binding.
Thing:
Items:
Code: Alles auswählen
String NaechsterFeiertag "Nächster Feiertag" <calendar> {channel="ephemeris:holiday:local:next-title"}
Number TageBisNaechsterFeiertag "Tage bis nächster Feiertag" <calendar> {channel="ephemeris:holiday:local:days-remaining"}
DateTime DatumNaechsterFeiertag "Datum nächster Feiertag" <calendar> {channel="ephemeris:holiday:local:next-start"}
Nun habe ich den nächsten Feiertag in englisch (meine ephemeris.cfg ist richtig).
Ich übergebe ihn nun nach AFeiertag:
Code: Alles auswählen
rule "Feuertage"
when
Item NaechsterFeiertag received update or
Time cron "0 01 00 ? * * *" or
System started or
Item vSystemRestart changed to ON
then
AFeiertag.postUpdate(NaechsterFeiertag.state) // Nächster Feiertag Ephemeris
BFeiertag.postUpdate(TageBisNaechsterFeiertag.state) // Tage bis zum nächsten Feiertag Ephemeris
DFeiertag.postUpdate(DatumNaechsterFeiertag.state) // Datum bis zum nächsten Feiertag Ephemeris
Jetzt hätte ich gerne, dass AFeiertag nicht mehr NEW_YEAR heisst, sondern Neujahr.
Jetzt hätte ich gerne, dass später in der Sitemap angezeigt wird:
"Nächster Feiertag: Neujahr (in 3 Tagen)" wenn "BFeiertag" 3 ist.
"Nächster Feiertag: Neujahr (Morgen)" wenn "BFeiertag" 1 ist.
"Nächster Feiertag: Neujahr (Heute)" wenn "BFeiertag" 0 ist.
Das geht so zwar alles, aber der "Nächste Feiertag" ist halt in englisch.
Ich müsste also den aus "NaechsterFeiertag" gewonnen "AFeiertag", der ja in englisch ist, bereits in der rule Mappen können bevor ich ihn einem anderen String, der dann heissen würde "CFeiertag.postUpdate(AFeiertag.state) + " " + "(in " + BFeiertag + " Tag)")" und so weiter.
Das funktioniert ja so auch, nur der "AFeiertag" müsste, bevor er zum "CFeiertag" wird, bereit in deutsch "gemapt" sein.
Und so sieht's in OH3 aus:
Bildschirmfoto 2024-12-28 um 22.42.37.png
Udo, verstehst Du das???? (Das wär' ein (kleines) Wunder, ich kann halt nicht erklären).
Danke und schöne Grüße. PJH