Seite 10 von 14

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

Verfasst: 14. Jan 2024 18:38
von PJH
Hallo udo1toni,

danke, woher weiß die rule (das System) wo es die Datei (heißt übrigens holidayS_de.xml) findet?

Es ergibt einen Fehler, auch wenn ich den vollständigen Pfad zur Datei eingebe.

Schöne Grüße. PJH

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

Verfasst: 14. Jan 2024 22:04
von udo1toni
Gewöhnlich sollte die Datei in $OPENHAB_CONF/services/ liegen. Die xml Datei (holidays_de.xml ) soltle auch tatsächlich ausgewertet werden, im Gegensatz (wie erwähnt...) zur holiday_descriptions_de.properties, welche leider nicht berücksichtigt wird. Aber openHAB verwendet zumindest eine interne Version dieser Datei (die aber offensichtlich irgendwo verpackt liegt, denn im Dateisystem selbst ist sie nicht auffindbar).
Die holidays_de.xml liegt natürlich ebenfalls als default Version vor. Ob die eigene Datei verwendet wird, kann man also nur daran erkennen, dass ein in der Standard Datei nicht vorhandener Termin erkannt wird.
Insgesamt finde ich die Umsetzung suboptimal, sowohl was jollyday selbst betrifft als auch die Integration in openHAB, auf der anderen Seite stehen dadurch sehr viele Feiertage zur Verfügung, auch solche, die hier eher unbekannt sind, das hilft natürlich auch bei der potentiellen Verbreitung von openHAB :)

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

Verfasst: 17. Jan 2024 12:06
von PJH
Hallo udo1toni, ich benötige nochmal (vermutlich auch nochmal und nochmal ...) Deine Hilfe.

Ich bekomme die Datei holidays-de.xml (ich habe sie umbenannt, aber vorher mit holidays_de.xml ging's auch nicht) einfach nicht eingelesen.

Hie ist einmal meine (Versuchs) -rule.

Code: Alles auswählen

rule "dummy"


    when
        Time cron "0 01 00 ? * * *" or
        System started or
	    Item vSystemRestart changed to ON
    then
        // val FeiertagName1 = getHolidayDescription(getNextBankHoliday)
     val String FeiertagName = '/etc/openhab/conf/services/holidays-de.xml'
    //  val String  currentHoliday     =  Ephemeris.getNextBankHoliday() //Ephemeris.getBankHolidayName()
      // val String FeiertagName     =   Ephemeris.getNextBankHoliday()
       val long TagebisFeiertag    =   Ephemeris.getDaysUntil(FeiertagName)


        val String morgenWochenende =   Ephemeris.isWeekend(1)
        
    Nfeiertag.postUpdate(FeiertagName + " " + "(in " + TagebisFeiertag + " Tagen)") 
    Nfeiertag2.postUpdate(FeiertagName + " " + "(in " + TagebisFeiertag + " Tag)") 
    Afeiertag.postUpdate(TagebisFeiertag)
    TagebisFeiertag1.postUpdate(TagebisFeiertag)

        if (TagebisFeiertag < 2 || morgenWochenende == true) {
            logInfo("dummy","Morgen ist Wochenende oder Feiertag {}")
        }
        else {
            logInfo("dummy","Morgen ist kein Wochenende und Feiertag ist erst in " + TagebisFeiertag + " Tagen")
        }
        TbF.postUpdate(TagebisFeiertag)
end
Das Ergebnis:
Bildschirmfoto 2024-01-17 um 11.30.46.png
Die Datei liegt hier:
Bildschirmfoto 2024-01-17 um 11.50.44.png
Ob ich den Vorsatz /etc mit eingebe, oder nicht, ändert nix.

Ich betreibe openHAB in der Version 3.3 auf einer Synology NAS im Docker-Container.

Danke und einen schönen Gruß. PJH

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

Verfasst: 17. Jan 2024 19:00
von udo1toni
So wird eher ein Schuh draus:

Code: Alles auswählen

rule "Feiertag"
 when
    Time cron "0 0 0 * * ?" or // täglich um Mitternacht
    System started or
    Item vSystemRestart changed to ON
 then
    val strHolidays         = "/etc/openhab/conf/services/holidays_de.xml"       // Name der Datei
    val strNextHoliday      = Ephemeris.getNextBankHoliday(strHolidays)          // Original-Name des Feiertags
    val strFeiertag         = Ephemeris.getHolidayDescription(strNextHoliday)    // Übersetzung, falls Standard Feiertag. alternativ:
    val strFeiertag         = transform("MAP","holiday.map",strNextHoliday)      // Übersetzung aus Mapping solange eigene Feiertage nicht übersetzt werden können
    val nNextHoliday        = Ephemeris.getDaysUntil(strNextHoliday,strHolidays) // Tage bis zum Feiertag
    val bTomorrowWeekend    = Ephemeris.isWeekend(1)

    var strMeldung          = strFeiertag + " ("
    switch(nNextHoliday) {
        case 1  : strMeldung += "morgen)"
        case 2  : strMeldung += "übermorgen)"
        default : strMeldung += "in" + nNextHoliday.toString + "Tagen)"
    }
    Afeiertag.postUpdate(nNextHoliday)
    Nfeiertag.postUpdate(strMeldung)
    if(nNextHoliday < 2 || bTomorrowWeekend) {
        logInfo("holiday","Morgen ist Wochenende oder Feiertag.")
    } else {
        logInfo("holiday","Morgen ist kein Wochenende und {} ist erst in {} Tagen",strFeiertag,nNextHoliday)
    }
end
Die diversen doppelten Items habe ich mal weg gelassen, die brauchst Du nicht.

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

Verfasst: 17. Jan 2024 19:48
von peter-pan
Der Test mit der Rule von Udo hat bei mir soweit auch ganz gut geklappt. Ich habe allerdings noch zwei Änderungen vorgenommen.

a) Name der Datei "/etc/openhab/services/Holidays_de.xml", da hier so abgestellt.

b) den Pfad etwas gekürzt (ohne "/conf"), da $OPENHAB_CONF bei mir /etc/openhab. Info hier

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

Verfasst: 17. Jan 2024 20:30
von udo1toni
Stimmt, auf den Pfad hatte ich gar nicht mehr geschaut...

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

Verfasst: 18. Jan 2024 10:09
von PJH
Guten Morgen, also ich kann machen, was ich will, ich bekomme die Datei nicht eingelesen.

Muss man sie eventuell noch irgendwo deklarieren?

Und bitte, ich habe im Beitrag von Gestern (17.1.24) 12.06h meine Ordnerstruktur gepostet. Kann jemand bitte einmal nachschauen wie die Ordnerangabe richtig lauten muss?

Vielen Dank und einen schönen Gruß. PJH

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

Verfasst: 18. Jan 2024 10:41
von peter-pan
Also ich kenne mich mit Docker nicht aus, aber Udo hat schon Recht .Eigentlich sollte sich hinter der Umgebungsvariablen $OPENHAB_CONF der absolute Pfad für deine openHAB-Umgebung verbergen.

Code: Alles auswählen

hab3@oh3ssd:~ $ echo $OPENHAB_CONF
/etc/openhab
hab3@oh3ssd:~ $ ls -alF $OPENHAB_CONF/
insgesamt 68
drwxrwxr-x 17 openhab openhab 4096 18. Dez 09:55 ./
drwxr-xr-x 99 root    root    4096 10. Jan 17:30 ../
drwxrwxr-x  3 openhab openhab 4096 20. Dez 2021  automation/
drwxrwxr-x  3 openhab openhab 4096  9. Jan 12:21 html/
drwxrwxr-x  3 openhab openhab 4096 12. Dez 2021  icons/
drwxrwxr-x  2 openhab openhab 4096 10. Jan 11:22 items/
drwxrwxr-x  2 openhab openhab 4096 25. Apr 2023  misc/
drwxrwxr-x  2 openhab openhab 4096  9. Jan 12:21 persistence/
drwxrwxr-x  2 openhab openhab 4096 17. Jan 19:13 rules/
drwxrwxr-x  2 openhab openhab 4096 13. Jan 15:43 scripts/
drwxrwxr-x  2 openhab openhab 4096  9. Jan 12:21 services/
drwxrwxr-x  2 openhab openhab 4096  9. Jan 12:21 sitemaps/
drwxrwxr-x  2 openhab openhab 4096  9. Jan 12:21 sounds/
drwxr-xr-x  2 openhab openhab 4096  9. Jan 12:21 tags/
drwxrwxr-x  2 openhab openhab 4096  9. Jan 12:21 things/
drwxrwxr-x  2 openhab openhab 4096 10. Jan 14:25 transform/
drwxrwxr-x  2 openhab openhab 4096 23. Dez 2021  .vscode/
hab3@oh3ssd:~ $
Und im entsprechenden Unterverzeichnis sind dann normalerweise die einzelnen Dateien abgelegt. Das sieht dann bei mir so aus:

Code: Alles auswählen

hab3@oh3ssd:~ $ ls -alF /etc/openhab/services
insgesamt 156
drwxrwxr-x  2 openhab openhab  4096  9. Jan 12:21 ./
drwxrwxr-x 17 openhab openhab  4096 18. Dez 09:55 ../
-rw-rw-r--  1 openhab openhab  1547  2. Jul 2023  addons.cfg
-rw-r--r--  1 openhab openhab   425 25. Dez 2022  basicui.cfg
-rw-rw-r--  1 openhab openhab 23573 25. Dez 11:41 country_descriptions_de.properties
-rw-rw-r--  1 openhab openhab   137 29. Dez 17:41 ephemeris.cfg
-rw-rw-r--  1 openhab openhab 20795 29. Dez 18:09 holiday_descriptions_de.properties
-rw-rw-r--  1 openhab openhab  8744 25. Dez 10:59 Holidays1_de.xml
-rw-rw-r--  1 openhab openhab  7957 25. Dez 10:43 Holidays_de.xml
-rw-rw-r--  1 openhab openhab   333 12. Dez 2021  readme.txt
-rw-rw-r--  1 openhab openhab   551 12. Dez 2021  rrd4j.cfg
-rw-rw-r--  1 openhab openhab 48638  7. Dez 09:59 runtime.cfg
-rw-rw-r--  1 openhab openhab 10415 10. Sep 19:44 runtime.cfg.dpkg-dist
hab3@oh3ssd:~ $
...und so oder so ähnlich sollte das auch bei dir aussehen.
Ob es natürlich in Docker noch spezielle Mechanismen zu beachten gilt, kann ich natürlich nicht beurteilen, aber vielleicht hilft dir der Linux-Befehl echo $OPENHAB_CONF und folgende ja schon weiter, um Licht ins Dunkle zu bringen. Das musst du schon selbst heraus finden

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

Verfasst: 18. Jan 2024 12:41
von udo1toni
In einem Docker Container ist der vollständige Pfad ebenfalls /ect/openhab/services/Holidays_de.xml (immer vorausgesetzt, es handelt sich um das offizielle Docker Image)

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

Verfasst: 18. Jan 2024 12:55
von PJH
Das scheint im (Synology) Docker-Container etwas anders zu sein. Wenn ich direkt im openhab-Ordner echo $OPENHAB_CONF eingebe erhalte ich als Ausgabe nul.
Wenn ich die Abfrage vom root-Verzeichnis aus eingebe,erhalte ich nur eine Leerzeile.

Ich habe den kompletten Pfad zur holidays-Datei ermittelt und eingegeben (volume1/docker/openhab/conf/services/holidays_de.xml), aber auch das funktioniert nicht.

Ich werden wohl mein Ephemeris Experiment abbrechen müssen.

Jedenfalls vielen Dank für eure Bemühungen.

Schöne Grüße. PJH