Ankündigung

Einklappen
Keine Ankündigung bisher.

Umstieg Holiday-script => Ephemeris

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Umstieg Holiday-script => Ephemeris

    Hallo zusammen,

    das Thema Ephemeris hat mich in den letzten Tagen (fast schon Wochen) nicht losgelassen und ich habe einiges getestet und bin nun dabei mein durchaus treu laufendes "Holiday-script" abzulösen. Wie heißt es so schon "Alles hat seine Zeit" und die neue Action ist nun einmal felxibler. Ich gehe hier nicht auf die Konfiguration vom Ephemeris ein, dies ist bereits in diversen Posts enthalten.

    Für den Umstieg habe ich folgende Items:
    Code:
    Switch Holiday        "Feiertag"
    String SpecialDay   "Heute ist: [MAP(de.map):%s]"
    String TodayIs         "Heute ist: [%s]"
    DateTime Datum    "Datum [%1$td.%1$tm.%1$tY]" <calendar>          {channel="knx:device:bridge:Vopenhab:datum",channel="ntp:ntp:home:dateTime"}
    Things
    Code:
    /* Virtuelle Items, keine Hardware */
        Thing device Vopenhab "virtuelle" @ "KNX" [
         ] {
            Type datetime-control : uhrzeit "Zeit und Tag"  [ ga="10.001:0/8/15" ]
            Type datetime-control : datum   "Datum"         [ ga="11.001:0/47/11" ]
       }
    Dateien im System
    1. holidays_de.xml (wird für Feiertage verwendet und ist eine Kopie des Originals, erweitert um pers. Feiertage wie z.B. Ostersonntag)
    2. holiday_descriptions_de.properties (enthält die Übersetzungen, es sind aber nicht alle pers. Feiertage enthalten)
    3. specialdays.xml (pers. Tage zur besonderen Verwendung wie z.B. Adventsonntage, usw)

    Rule
    Code:
    rule Feiertage
    when
        Time cron "0 0 0 * * ?" or
        System started
    then
        if (Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.now().plusDays(0), '<myPath>/holidays_de.xml') == true) {
            postUpdate(TodayIs, Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(new DateTimeType().zonedDateTime.now().plusDays(0), '<myPath>/holidays_de.xml')))
            postUpdate(Holiday, ON)
        } else if (Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.now().plusDays(0), '<myPath>/holidays_de.xml') == false && Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.now().plusDays(0), '<myPath>/specialdays.xml') == true) {
            postUpdate(TodayIs, Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(new DateTimeType().zonedDateTime.now().plusDays(0), '<myPath>/specialdays.xml')))
            postUpdate(Holiday, OFF)
        } else {
            postUpdate(TodayIs, Datum.state.toString)
            postUpdate(Holiday, OFF)
        }
        logInfo("Ephemeris", "Heute ist: {}", TodayIs.state)
    end
    Mit den längeren Pfaden muss gearbeitet werden, da eine kürzere Funktion zwar vorhanden, aber derzeit noch nicht funktioniert.

    Sitemap
    Code:
    Text item=TodayIs
    Leider wird das Datum immer noch als
    2020-03-02T22:33:20.343+0100
    angezeigt, hier wäre es schön nur das Datum zu haben und am liebsten als tt.mm.yy

    Ansonsten arbeitet das Script schon so weit, auch wenn sicher noch Optimierungspotential vorhanden ist

    Viele Grüße,
    Jörg

    #2
    Du musst ja "nur" statt in einem String Item die Information nach DateTimeType wandeln und in einem DateTime Item speichern. Schau mal hier:
    https://community.openhab.org/t/date...nversion/54266

    Kommentar


      #3
      Zitat von udo1toni Beitrag anzeigen
      Du musst ja "nur" statt in einem String Item die Information nach DateTimeType wandeln und in einem DateTime Item speichern. Schau mal hier:
      https://community.openhab.org/t/date...nversion/54266
      Danke Udo, dies hat schon etwas geholfen und der Befehl
      Code:
      postUpdate(TodayIs, now.toString("dd.MM.yyyy") + "\n")
      Bewirkt zumindest, das setzen des Items
      20:18:30.615 [INFO ] [smarthome.event.ItemStateChangedEvent] - TodayIs changed from NULL to 03.03.2020
      Aber der Inhalt wird nicht in der Sitemap angezeigt

      Kommentar


        #4
        Habe noch etwas weiter gelesen und getestet und nun => DateTime "issue" solved

        Code:
        postUpdate(TodayIs, Datum.state.format("%1$tA, %1$td.%1$tm.%1$ty"))
        20:56:57.148 [INFO ] [smarthome.event.ItemStateChangedEvent] - TodayIs changed from 03.03.20 to Dienstag, 03.03.20
        Nun zeigt mir das Item in der Sitemap entweder den entsprechenden Feiertag, meine "besonderen" Tage oder einfach nur das aktuelle Datum an.

        Kommentar


          #5
          Nun habe ich doch noch ein weiteres Problem

          Bei der folgenden Rule wird die now() Funktion angemeckert, also 5x
          Code:
          rule Feiertage
          when
              Time cron "0 0 0 * * ?" or
              System started
          then
              if (Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.[COLOR=#e74c3c]now[/COLOR]().plusDays(0), '<myPath>/holidays_de.xml') == true) {
                  postUpdate(TodayIs, Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(new DateTimeType().zonedDateTime.[COLOR=#e74c3c]now[/COLOR]().plusDays(0), '<myPath>/holidays_de.xml')))
                  postUpdate(Holiday, ON)
              } else if (Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.[COLOR=#e74c3c]now[/COLOR]().plusDays(0), '<myPath>/holidays_de.xml') == false && Ephemeris.isBankHoliday(new DateTimeType().zonedDateTime.[COLOR=#e74c3c]now[/COLOR]().plusDays(0), '<myPath>/specialdays.xml') == true) {
                  postUpdate(TodayIs, Ephemeris.getHolidayDescription(Ephemeris.getBankHolidayName(new DateTimeType().zonedDateTime.[COLOR=#e74c3c]now[/COLOR]().plusDays(0), '<myPath>/specialdays.xml')))
                  postUpdate(Holiday, OFF)
              } else {
                  postUpdate(TodayIs, Datum.state.format("%1$tA, %1$td.%1$tm.%1$ty"))
                  postUpdate(Holiday, OFF)
              }
              logInfo("Ephemeris", "Heute ist: {}", TodayIs.state)
          end
          The static method now() should be accessed in a static way(org.eclipse.xtext.xbase.validation.IssueCodes. ins tance_access_to_static_member)
          leider finde ich dazu nichts brauchbares im Internet :-(

          Kommentar


            #6
            Das now hat an dieser Stelle auch nichts zu suchen. new DateTimeType() ist schon mit dem aktuellen Zeitpunkt gefüllt. plusDays(0) sollte ebenso unnötig sein.

            Kommentar


              #7
              Zitat von udo1toni Beitrag anzeigen
              Das now hat an dieser Stelle auch nichts zu suchen. new DateTimeType() ist schon mit dem aktuellen Zeitpunkt gefüllt.
              Danke, der Wald vor Bäumen :-/

              Zitat von udo1toni Beitrag anzeigen
              plusDays(0) sollte ebenso unnötig sein.
              Stimmt, aber so kann ich zum testen auf einen beliebigen Tag springen ;-) Wenn alles läuft, was schon gut aussieht, kommt dies noch raus.

              Kommentar

              Lädt...
              X