[solved] Ein Newbie benötigt Hife bei einer Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
udo1toni
Beiträge: 15242
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von PJH »

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:

Code: Alles auswählen

Thing ephemeris:holiday:local "Ephemeris Feiertage"
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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

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...)

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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von PJH »

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

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
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!?
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

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 :)
PJH hat geschrieben: 29. Dez 2024 11:16 PS: Die Datei ist ja wohl nicht des Entwicklers Ernst.
Aber doch. Jollyday stellt alle Feiertage zur Verfügung, nicht nur Deine :) 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von PJH »

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
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von PJH »

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
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

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

Antworten