Seite 1 von 9

Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 5. Jan 2020 09:47
von alkaline
Hallo

ich habe nach einigen Versuchen mit dem seit OH 2.5 enthaltenen Ephemeris Binding sehr schöne Erfolge erzielt, die ich gerne teilen will. Ich persönlich halte die existierende Doku für Ephemeris für sehr undurchsichtig die Actions sind unter dem Punkt Ephemeris hier beschrieben:
https://www.openhab.org/docs/configuration/actions.html

Die Inspiration habe ich hier gefunden: (Danke an Frank)
https://blog.zf2601.de/2019/12/ephemeri ... eburtstag/

Was wird benötigt?

Papuer UI: Ausfüllen der Standortinformationen.
Achtung: Nur aus der Dropdown Box wählen, nichts reinschreiben.
Bild
ephemeris.cfg: (liegt später unter Services ab und hält die in der Paper UI gemachten Einstellungen)

Code: Alles auswählen

country=de
region=bw
dayset-workday=[Monday,Tuesday,Wednesday,Thursday,Friday]
dayset-weekend=[Saturday,Sunday]
dayset-beforeWeekend=[Friday]
Wichtige infos zur ephemeris.cfg:
die eckigen Klammern wurden bei mir nicht automatisch gesetzt, die habe ich nachträglich eingefügt. Stand heute kann ich nicht ersehen, ob die zwingend benötigt werden, es gehen beide Wege.

Als nächstes benötigen wir noch die Feiertage, welche hier zu haben sind:
https://github.com/svendiedrichsen/joll ... s/holidays
Ihr nehmt euch die Holidays_de.xml und legt diese auch unter services.

Ferner holt ihr euch die Beschreibung dazu, zu finden hier:
https://github.com/svendiedrichsen/joll ... scriptions
Ihr nehmt euch dort die holiday_descriptions_de.properties und legt diese auch in Services ab.

*.items: (da sind einige mehr drin, mit welchen ich derzeit spiele)

Code: Alles auswählen

Group Holiday    	"Feiertag(e)"	        (Whg)  	 

Switch Feiertag 	    "Feiertag"	        (Holiday)
String FeiertagName     "Feiertagname"     (Holiday)
String NextFeiertagName "Näch. Feiertag"    (Holiday) 

Switch Urlaub 	    "Urlaub"	        (Holiday)
Switch Wochenende "Wochenende"   (Holiday)
Switch Lange_schlafen "Lange schlafen" 	(Holiday)
*.rules: (Achtung, enthält verschiedene Schreibweisen, aber allesamt arbeiten...probiert es einfach aus)

Code: Alles auswählen

/**
 * Feiertage prüfen (neuer Weg seit 2.5 mit Ephemeris)
 */
 
rule "Ephemeris Regel" 
when    System started or 
        Time cron "0 0 * * * ?" 
then
   val String currentHoliday  = Ephemeris.getBankHolidayName('/etc/openhab2/services/Holidays_de.xml')
   val String nextHoliday  = Ephemeris.getNextBankHoliday('/etc/openhab2/services/Holidays_de.xml')
   val long untilHoliday    = Ephemeris.getDaysUntil(nextHoliday, '/etc/openhab2/services/Holidays_de.xml')
   val String next_Holiday_Name = Ephemeris.getHolidayDescription(nextHoliday, '/etc/openhab2/services/holiday_description_de.properties')
   val String untilWeekend = Ephemeris.isInDayset("beforeWeekend")
   postUpdate(NextFeiertagName, next_Holiday_Name) 
   val String current_Holiday_Name = Ephemeris.getHolidayDescription(currentHoliday, '/etc/openhab2/services/holiday_description_de.properties')
   //logInfo("Nächster Feiertag", next_Holiday_Name + " ist in " + untilHoliday + " Tagen" )
   //logInfo("FILE","Heutiger Feiertag ist: " + current_Holiday_Name)
   if (Ephemeris.isBankHoliday == true) {
      //logInfo("FILE","Heute ist ein Feiertag")
      Feiertag.sendCommand(ON) // Schalter Feiertag setzen
      Urlaub.sendCommand(ON) // Schalter Urlaub setzen
      postUpdate(FeiertagName, current_Holiday_Name) 
      } 
   if (Ephemeris.isWeekend == true) {
      logInfo("FILE","Wochenende") 
      Wochenende.sendCommand(ON) 
      Lange_schlafen.sendCommand(ON) 
      } 
   if (Ephemeris.isWeekend == false) { 
       logInfo("FILE","Arbeitswoche")
      Urlaub.sendCommand(OFF)
      Wochenende.sendCommand(OFF) 
      Lange_schlafen.sendCommand(OFF) 
      } 
   if (Ephemeris.isBankHoliday == false) {
      logInfo("FILE","Heute ist kein Feiertag")
      Feiertag.sendCommand(OFF) 
      Urlaub.sendCommand(OFF)
      Lange_schlafen.sendCommand(if(Wochenende.state == ON) ON else OFF) 
      postUpdate(FeiertagName, current_Holiday_Name) 
      } 
   if (untilHoliday == 1) {
      logInfo("FILE","Nur noch ein Tag bis Feiertag") 
	 	Lange_schlafen.sendCommand(ON) // Lange schlafen ein
      }   
   if (untilWeekend == true) {
      logInfo("FILE","Nur noch ein Tag bis Wochenende") 
	 	Lange_schlafen.sendCommand(ON) // Lange schlafen ein
      } 
 end 
 
 rule "Ephemeris started rule"
when System started or 
      Time cron "0 0 * * * ?" 
then
   if (!isWeekend()) {
   logInfo("FILE","Heute ist ein Wochentag") 
   }
   if (isWeekend()) {
	logInfo("FILE","es ist Wochenende")
   }
   if (isWeekend(1)) {
	logInfo("FILE","Morgen ist auch noch Wochenende")
   }
   if (isInDayset("beforeWeekend")) {
	logInfo("FILE","heute ist Freitag, morgen ist Wochenende")
   Lange_schlafen.sendCommand(ON) // Lange schlafen ein
   }
   if (!isInDayset("beforeWeekend")) {
	logInfo("FILE","Heute ist nicht Freitag")
   }
end

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 5. Jan 2020 11:49
von djuscha
Super !
Danke schön muss ich mal testen :)

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 5. Jan 2020 20:39
von udo1toni
Nur als Zusatzinfo:
Die ephemeris.cfg sollte ein alternativer Konfigurationsweg sein. Wer über Paper UI konfiguriert, kann die Datei ignorieren.

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 07:55
von sihui
udo1toni hat geschrieben: 5. Jan 2020 20:39 Die ephemeris.cfg sollte ein alternativer Konfigurationsweg sein. Wer über Paper UI konfiguriert, kann die Datei ignorieren.
Korrekt, allerdings nicht zur Zeit da es ein Problem mit der Konfiguration über PaperUI gibt:

https://github.com/openhab/openhab-core/issues/1281

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 09:29
von Tokamak
Vielen Dank. Ich wollte mir das dieser Tage eh anschauen, nun wird das viel einfacher.

Was für mich noch offen ist, ist die Konfiguration eigener, "gefühlter" Feiertage wie Karneval, Heiligabend oder Silvester.

Kann man eine Konfig-Datei in OH ergänzen, wo diese konfiguriert sind, oder muss ich die Datei Holidays_de.xml selbst etwa so anpassen:

Code: Alles auswählen

    <tns:SubConfigurations hierarchy="nw" description="North Rhine-Westphalia">
        <tns:Holidays>
            <tns:Fixed month="NOVEMBER" day="1" descriptionPropertiesKey="ALL_SAINTS"/>
            <tns:ChristianHoliday type="CORPUS_CHRISTI"/>

            <tns:Fixed month="DECEMBER" day="24" descriptionPropertiesKey="CHRISTMAS_EVE"/>
            <tns:Fixed month="DECEMBER" day="31" descriptionPropertiesKey="NEW_YEARS_EVE"/>
            <tns:ChristianHoliday type="CARNIVAL"/>
        </tns:Holidays>
    </tns:SubConfigurations>

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 10:16
von sihui
Tokamak hat geschrieben: 6. Jan 2020 09:29 Kann man eine Konfig-Datei in OH ergänzen, wo diese konfiguriert sind,
Ja, einfach eine neue xml Datei anlegen und in services speichern.

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 11:21
von Tokamak
Also, ich lege eine weitere Datei "eigeneFeiertage.xml" der Form

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<tns:Configuration hierarchy="de" description="Germany" xmlns:tns="http://www.example.org/Holiday"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.example.org/Holiday /Holiday.xsd">
    <tns:Holidays>
            <tns:Fixed month="DECEMBER" day="24" descriptionPropertiesKey="CHRISTMAS_EVE"/>
            <tns:Fixed month="DECEMBER" day="31" descriptionPropertiesKey="NEW_YEARS_EVE"/>
            <tns:ChristianHoliday type="CARNIVAL"/>
    </tns:Holidays>
</tns:Configuration>
an?

Da ich dann zwei Files habe, muss ich umständlicher arbeiten:

Code: Alles auswählen

    ...
    then
        val boolean istFeiertag=Ephemeris.isBankHoliday(0,"/etc/openhab2/services/Holidays_de.xml") || Ephemeris.isBankHoliday(0,"/etc/openhab2/services/eigeneFeiertage.xml")
Oder ginge das einfacher?

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 14:14
von Cyrelian
alkaline hat geschrieben: 5. Jan 2020 09:47
Hi,

sehr schönes Beispiel, Dank Dir.

Hast Du in deiner Rule einen IMPORT gemacht?
One must import the Ephemeris Action and then call the above functions
CYA
Cyrelian

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 15:25
von alkaline
Nein, die Rule arbeitet so wie sie ist, keine weiteren IMPORTS notwendig.
Gruß
Marcus

Re: Ephemeris Binding OH 2.5 (Feiertage, Wochenende)

Verfasst: 6. Jan 2020 19:59
von Cyrelian
alkaline hat geschrieben: 6. Jan 2020 15:25 Nein, die Rule arbeitet so wie sie ist, keine weiteren IMPORTS notwendig.
Gruß
Marcus
Hi Marcus,

habs gerade mal implementiert.....läuft ;)

merci
Cyrelian