Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule mit Datums und Zeit Vergleich

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

    Rule mit Datums und Zeit Vergleich

    Hallo zusammen

    ich möchte mich dran erinnern lassen wenn meine Pflanzen Dünger brauchen.
    Dazu habe ich Zwei Item die Datums angaben enthalten die ich miteinander vergleiche und mit grösser oder kleiner gleich ein Befehl ausführe.


    Code:
    DateTime        Date            "Date [%1$tA, %1$td.%1$tm.%1$tY]"    <calendar>    { ntp="Europe/Berlin:de_DE" }
    
    ausgabe ist:
      
     2015-06-21 06:08:45 - Date state updated to 2015-06-21T06:08:45 2015-06-21 06:23:45 - Date state updated to 2015-06-21T06:23:45 2015-06-21 06:38:45 - Date state updated to 2015-06-21T06:38:45 2015-06-21 06:53:45 - Date state updated to 2015-06-21T06:53:45 2015-06-21 07:08:45 - Date state updated to 2015-06-21T07:08:45 2015-06-21 07:23:45 - Date state updated to 2015-06-21T07:23:45
    
    DateTime    gluecksfeder_ferteliser                  "Nächste Düngung [%1$td.%1$tm.%1$tY %1$tT]"<grass> (gPL)     { koubachi="plant:XXXXXXX:nextFertilizerAt" }
    
    ausgabe ist:
      
     2015-06-21 10:38:53 - gluecksfeder_ferteliser state updated to 2015-07-19T09:37:51 2015-06-21 10:39:03 - gluecksfeder_ferteliser state updated to 2015-07-19T09:37:51 2015-06-21 10:39:13 - gluecksfeder_ferteliser state updated to 2015-07-19T09:37:51 2015-06-21 10:39:22 - gluecksfeder_ferteliser state updated to 2015-07-19T09:37:51 2015-06-21 10:39:32 - gluecksfeder_ferteliser state updated to 2015-07-19T09:37:51

    Mit folgende Rule wollte ich es lösen:

    Code:
      
    rule "time to fertelize"
    when     Time cron "0 43 10 * * ?"
    then  
      if (Date.state <= gluecksfeder_ferteliser.state )  
      squeezeboxSpeak("master", "Bitte gib Glücksfeder heute Dünger.")
     end

    Leider bekomme ich beim versuch die Rule auszuführen folgende Meldung im Log

    Code:
     2015-06-21 10:43:00.068 [ERROR] [.o.m.r.i.engine.ExecuteRuleJob] - Error during the execution of rule time to fertelize java.lang.IllegalStateException: Could not invoke method: org.openhab.model.script.lib.NumberExtensions.operator_lessEqualsThan(org.openhab.core.types.Type,java.lang.Number) on instance: null at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:738) ~[na:na] at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na] at sun.reflect.GeneratedMethodAccessor56.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.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na] at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658) ~[na:na] at sun.reflect.GeneratedMethodAccessor53.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._evaluateIfExpression(XbaseInterpreter.java:327) ~[na:na] at sun.reflect.GeneratedMethodAccessor57.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.GeneratedMethodAccessor68.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] Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@3bfd1d5c at sun.reflect.GeneratedMethodAccessor107.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.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na] ... 29 common frames omitted

    #2
    Du versuchst, zwei States zu vergleichen. Da steckt zwar ein Datum dahinter, aber ein State ist ein State, kein numerischer Wert. Leider hab ich keine Ahnung, wie es korrekt funktioniert, allerdings habe ich an einer Stelle bei mir auch was mit Datum, da sieht das so aus:
    Code:
    DateTimeType::DATE_FORMATTER_WITH_TZ.format(Date.state)
    Ob das allerdings für einen Vergleich taugt, keine Ahnung. Wichtig ist dann noch, die passenden Imports zu machen:
    Code:
    import java.util.Date
    import java.util.Calendar
    import java.util.GregorianCalendar
    auch da bin ich mir nicht sicher, welche(r) wirklich notwendig sind/ist.

    Kommentar


      #3
      Dank dem Astro Wiki habe ich eine Lösung gefunden.

      Code:
      rule "time to fertelize"
      when
          Time cron "0 00 8 ? * SUN"
      then
           
          if (now.isAfter((gluecksfeder_fertelizer.state as DateTimeType).calendar.timeInMillis)
          squeezeboxSpeak("master", "Bitte gib Gluecksfeder heute Duenger.")
      
          if (now.isAfter((zierbanane_fertelizer.state as DateTimeType).calendar.timeInMillis)
          squeezeboxSpeak("master", "Bitte gib Zierbanane heute Duenger.")
          
          if (now.isAfter((friedenslilie_fertelizer.state as DateTimeType).calendar.timeInMillis)
          squeezeboxSpeak("master", "Bitte gib Friedenslilie heute Duenger.")
          
          if (now.isAfter((yucca_fertelizer.state as DateTimeType).calendar.timeInMillis)
          squeezeboxSpeak("master", "Bitte gib Yucca heute Duenger.")
          
      end

      Kommentar

      Lädt...
      X