Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule mit Datums Vergleich

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

    [Codebeispiel] Rule mit Datums Vergleich

    Hallo Code Profis.

    Ich komme bei einem Problem nicht weiter.

    Ich habe zweit ITEM die Datum mit Uhr Zeit ausgeben.

    Code:
    DateTime        Date            "Date [%1$tA, %1$td.%1$tm.%1$tY]"    <calendar>    (gCal){ ntp="Europe/Berlin:de_DE" }
    DateTime caltodayTime1 "Beginn[%1$tA, %1$td.%1$tm.%1$tY]"            <calendar> (gCal) { caldavPersonal="calendar:main type:ACTIVE eventNr:1 value:START" } //eventNr for concurrent events
    Beide Werte möchte ich in einer Rule vergleichen und wenn das Datum übereinstimmt soll die Rule auslösen.
    Das Grundgerüst steht aber ich verstehe noch nicht wie ich nur das Datum auslese.

    Code:
    rule "Calendar event"
    when
        Time cron "0 00 07 * * ?"
    then
    
            if (date.state == upcomingTime1.state)
            
            {
            squeezeboxSpeak("master", "Guten Morgen, folgender Termin steht heute an")
            Thread::sleep(150)
            squeezeboxSpeak("master","Termin 1, " + caltoday1.state  )
            }
    
    end

    #2
    Du bekommst ein Joda-DateTime wenn du schreibst:
    Code:
    [B]import org.joda.time.DateTime[/B]
    var DateTime = new DateTime(Date.state.getCalendar().getTime())
    Dadrauf kannst du die Datumsoperationen aufrufen die du auch bei now() bekommst. Der Designer unterstützt dort Autovervollständigung.
    Dort gibt es auch sowas wie isEquals.

    P. S. Wenn du vom calDAV Binding aber die anstehenden Termine haben willst muss
    type=UPCOMING
    sein.

    Kommentar


      #3
      Danke für den Denk anstoss. Aber leider bringt mich dass nicht weiter.
      Ausser dem scheint an der Variablen etwas nicht gut zu sein, ich bekomme Fehlermeldungen.

      Code:
       
       2015-09-10 23:14:00.339 [ERROR] [.o.m.r.i.engine.ExecuteRuleJob] - Error during the execution of rule Calendar event java.lang.RuntimeException: The name '<XMemberFeatureCallImplCustom>.getCalendar()' cannot be resolved to an item or type. 	at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:67) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:549) ~[na:na] 	at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) ~[na:na] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:545) ~[na:na] 	at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) ~[na:na] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:751) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateConstructorCall(XbaseInterpreter.java:510) ~[na:na] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_80] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateVariableDeclaration(XbaseInterpreter.java:601) ~[na:na] 	at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source) ~[na:na] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na] 	at sun.reflect.GeneratedMethodAccessor86.invoke(Unknown Source) ~[na:na] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 	at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na] 	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na] 	at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na] 	at org.openhab.model.rule.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:55) ~[na:na] 	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-all-2.1.7.jar:na] 	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-all-2.1.7.jar:na]

      Kommentar


        #4
        Ich habe folgenden Lösungsansatz gefunden.
        Weis jemand wie ich bei now,isBefor hin bekomme das es nur dann auslöst, wenn now 3 Stunden vor dem Datum ist.

        Code:
        rule "cal experiment"
        when
            Time cron "0 05 7 ? * SUN"
        then
             
            if (now.isBefore((upcomingTime1.state as DateTimeType).calendar.timeInMillis))
            {
            squeezeboxSpeak("master", "Guten Morgen, folgender Termin steht heute an.")
            Thread::sleep(150)
           squeezeboxSpeak("master","Termin experiment"+ upcoming1.state )
            }
           
        end
        Zuletzt geändert von napoleonmm83; 13.09.2015, 21:24.

        Kommentar


          #5

          Meinst du sowas? Also das das Event in frühestens 3 Stunden beginnt.
          Code:
           now.isBefore(new DateTime((upcomingTime1.state as DateTimeType).getCalendar().getTime()).minusHours(3)

          Kommentar

          Lädt...
          X