[solved] Ein Newbie benötigt Hife bei einer Rule
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Also, ehrlich gesagt verstehe ich nur Bahnhof. Zeige doch mal bitte eine konkrete Konfiguration (so wie Du es bisher gemacht hast in der Sitemap) und auch wie Du die Items definiert hast.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
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:
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:
Nun habe ich den nächsten Feiertag in englisch (meine ephemeris.cfg ist richtig).
Ich übergebe ihn nun nach AFeiertag:
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:
Udo, verstehst Du das???? (Das wär' ein (kleines) Wunder, ich kann halt nicht erklären).
Danke und schöne Grüße. PJH
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
In OH 4 gibt es ein entsprechendes Binding.
Thing:
Code: Alles auswählen
Thing ephemeris:holiday:local "Ephemeris Feiertage"
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"}
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 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:
Udo, verstehst Du das???? (Das wär' ein (kleines) Wunder, ich kann halt nicht erklären).
Danke und schöne Grüße. PJH
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ja, Dir fehlt halt eine Datei 
Lege unter /openhab/conf/services/ eine Datei holiday_descriptions_de.properties an. Den Inhalt der Datei findest Du bei jollyday: https://github.com/focus-shift/jollyday ... scriptions. Dies ist die Übersetzung der Feiertagsnamen (also, aller Feiertagsnamen...) soweit jollyday diese im Repertoir hat. Das mit dem Mapping hat es nie gebraucht.
Auch wenn Du die Rule in der Form nicht mehr verwendest, möchte ich zumindest zeigen, wie es etwas übersichtlicher wäre (Deine Rule hatte außerdem einen Fehler...)

Lege unter /openhab/conf/services/ eine Datei holiday_descriptions_de.properties an. Den Inhalt der Datei findest Du bei jollyday: https://github.com/focus-shift/jollyday ... scriptions. Dies ist die Übersetzung der Feiertagsnamen (also, aller Feiertagsnamen...) soweit jollyday diese im Repertoir hat. Das mit dem Mapping hat es nie gebraucht.
Auch wenn Du die Rule in der Form nicht mehr verwendest, möchte ich zumindest zeigen, wie es etwas übersichtlicher wäre (Deine Rule hatte außerdem einen Fehler...)
Code: Alles auswählen
rule "Feiertage"
when
Item naechsterFeiertag received update or
Time cron "1 0 0 * * ?" or
System started or
Item vSystemRestart changed to ON
then
val String FeiertagName = Ephemeris.getNextBankHoliday() // gesetzliche Feieertage
val Integer TagebisFeiertag = (Ephemeris.getDaysUntil(Ephemeris.getNextBankHoliday())).intValue // Integer Objekt ist die bessere Wahl
val String naechsterTag = Ephemeris.getNextBankHoliday('/openhab/conf/services/holidays_de.xml') // eigene Feiertage
val Integer TagebisnaechsterTag = (Ephemeris.getDaysUntil(naechsterTag, '/openhab/conf/services/holidays_de.xml')).intValue
var String strFeiertag = FeiertagName + " ("
var String strMeinTag = naechsterTag + " ("
switch(TagebisFeiertag) {
case 2 : strFeiertag = strFeiertag + "übermorgen)"
case 1 : strFeiertag = strFeiertag + "morgen)"
case 0 : strFeiertag = strFeiertag + "heute)"
default : strFeiertag = strFeiertag + "in " + TagebisFeiertag.toString + " Tagen)"
}
Afeiertag.postUpdate(strFeiertag)
switch(TagebisnaechsterTag) {
case 2 : strMeinTag = strMeinTag + "übermorgen)"
case 1 : strMeinTag = strMeinTag + "morgen)"
case 0 : strMeinTag = strMeinTag + "heute)"
default : strMeinTag = strMeinTag + "in " + TagebisnaechsterTag.toString + " Tagen)"
}
Xfeiertag.postUpdate(strMeinTag.toString)
/*
Vfeiertag.postUpdate("Heute: " + FeiertagName)
Zfeiertag.postUpdate("Heute: " + naechsterTag)
Y1feiertag.postUpdate(TagebisnaechsterTag)
Y2feiertag.postUpdate(TagebisFeiertag)
*/
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Guten Morgen, danke für die Hilfe.
Ja, nach einstellen der Datei wird "NaechsterFeiertag" in deutsch ausgegeben.
Jetzt habe ich aber immer noch ein Problem.
In der rule "Feiertage" klappt die Datenübergabe von "NaechsterFeiertag" nach "AFeiertag" nicht.
"AFeiertag" wird in englisch ausgegeben, "NaechsterFeiertag" hingegen in deutsch.
Würdest Du Dir das nocheinmal anschauen? Vielen Dank und einen schönen Gruß. PJH
PS: Die Datei ist ja wohl nicht des Entwicklers Ernst. An die Entdeckung Amerikas will ich doch (lieber) gar nicht erinnert werden.
Aber ich denke, wenn 'mal alles funktioniert, kann ich sie auch abändern!?
Ja, nach einstellen der Datei wird "NaechsterFeiertag" in deutsch ausgegeben.
Jetzt habe ich aber immer noch ein Problem.
In der rule "Feiertage" klappt die Datenübergabe von "NaechsterFeiertag" nach "AFeiertag" nicht.
"AFeiertag" wird in englisch ausgegeben, "NaechsterFeiertag" hingegen in deutsch.
Würdest Du Dir das nocheinmal anschauen? Vielen Dank und einen schönen Gruß. PJH
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
FFeiertag.postUpdate(NaechsterFeiertag.state)
logInfo("Feuertage", "******************** Die Feiertage wurden aktualisiert ******************** {}", restJZ.state.format("%.0f"))
end
Aber ich denke, wenn 'mal alles funktioniert, kann ich sie auch abändern!?
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ja, das kann ich leider bestätigen. Da ist leider ein wenig Voodoo aktiv, weil das Item NaechsterFeiertag tatsächlich eine Bindung an Ephemeris hat und damit automatisch die passende Formatierung erbt. Der "echte" Wert im Item ist aber weiterhin die internationale Form des Feiertags.
Da man innerhalb Rules leider nicht so ohne Weiteres auf den displayState eines Items zugreifen kann, ist das eine Sackgasse. Die einzig vernünftige Variante wäre also, hier dennoch mit einer MAP Transformation zu arbeiten.
AFeiertag und FFeiertag sind identisch
Natürlich kannst Du die Datei einkürzen, aber warum?
Viel interessanter wäre, die (openHAB) Entwickler darauf aufmerksam zu machen, dass die Übersetzung der Feiertagsnamen nicht optional ist, sprich, es sollte unbedingt eine saubere Möglichkeit gefunden werden, wie das konfiguriert werden kann.
Da man innerhalb Rules leider nicht so ohne Weiteres auf den displayState eines Items zugreifen kann, ist das eine Sackgasse. Die einzig vernünftige Variante wäre also, hier dennoch mit einer MAP Transformation zu arbeiten.
AFeiertag und FFeiertag sind identisch

Aber doch. Jollyday stellt alle Feiertage zur Verfügung, nicht nur Deine

Viel interessanter wäre, die (openHAB) Entwickler darauf aufmerksam zu machen, dass die Übersetzung der Feiertagsnamen nicht optional ist, sprich, es sollte unbedingt eine saubere Möglichkeit gefunden werden, wie das konfiguriert werden kann.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ja, hallo udo1toni,
AFeiertag und FFeiertag sind identisch, FFeiertag dient nur zu Experimenten.
Also doch Mappen, aber wie und wo? Ich habe eine "emphemeris.map" in der ich alle (gängigen) Feiertag angepasst habe.
Danke, schöne Grüße. PJH
AFeiertag und FFeiertag sind identisch, FFeiertag dient nur zu Experimenten.
Also doch Mappen, aber wie und wo? Ich habe eine "emphemeris.map" in der ich alle (gängigen) Feiertag angepasst habe.
Danke, schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Na, bei der Übergabe...
Code: Alles auswählen
rule "Feuertage"
when
Item NaechsterFeiertag received update or
Time cron "0 1 0 * * ?" or
System started or
Item vSystemRestart changed to ON
then
val strFTag = transform("MAP","ephemeris.map",NaechsterFeiertag.state.toString) // transform
AFeiertag.postUpdate(strFTag) // 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
FFeiertag.postUpdate(NaechsterFeiertag.state)
logInfo("Feuertage", "*** Die Feiertage wurden aktualisiert *** {}", restJZ.state.format("%.0f"))
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Da sag' ich doch gleich mal DANKE.
2024-12-29 21:30:34.996 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'AFeiertag' changed from NEW_YEAR to Neujahr
Schöne Grüße. Paul-Joachim Haucke
2024-12-29 21:30:34.996 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'AFeiertag' changed from NEW_YEAR to Neujahr
Schöne Grüße. Paul-Joachim Haucke
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Immer gerne 

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet