Hi,
ich versuche gerade, mein erstes größeres Rulekonstrukt zu implementieren, scheitere aber schon im Ansatz.
Ich möchte Rollos abhängig vom Sonnenunter bzw Sonnenaufgang runter bzw rauffahren. Dazu gibt es 3 Rules. Start des Zeitfensters (also frühester Zeitpunkt), Ende des Zeitfensters (da passiert es in jedem Fall) und die Sonnenaufgangs/Sonnenuntergangs Rule.
Es gibt 3 Variablen
var Number Var_Status_Buero_Sun
var Number Var_Status_Buero_First
var Number Var_Status_Buero_Last
Diese werden auch fein initialisiert, wie das in den Samplen auch erklärt ist.
Zwei der Rules (Start und Sonnenstand) setzen ...First und ...Sun auf 1 (vorher waren sie 0...nicht NULL), die LAST Rule setzt die variable ...Last auf 2.
Anschließend werden alle 3 Variablen addiert und per postupdate eine Rule getriggert, die dann das rauf und runterfahren übernimmt.
Soweit so gut...und es funktioniert sogar...aber nicht immer.
In den Logs finde ich (seit der letzten Änderung) Fehlermeldungen und die Rules funktionieren nicht. Mit Logging der Variableninhalte habe ich herausbekommen, dass die
...First ...Last und ...Sun Variablen zwar von der Initialisierungsroutine (läuft um Mitternacht und um 12:00) zwar auf 0 gesetzt werden, wenn die oben beschriebenen Rules aufgerufen werden, dann ist aber nur die eine veränderte Variable auf dem gewünschten Wert (1 oder 2), die anderen beiden aber auf NULL...nicht immer aber häufig.
Hab ich was gravierendes vergessen? Sind solche Probleme bekannt?
Ich kann auch den gesamten Code hier einhängen, auch wenn der derzeit entwas konfus und mit Logmeldungen übersäht ist.
Außerdem ist mir noch was aufgefallen: Ich hatte die Variablen ursprünglich in der Definition mit "= 0" versehen. Aber wenn ich das richtig beobachtet habe, dann wird diese Zuweisung bei jedem speichern der Datei wieder ausgeführt. Ist das so?
Die verwendeten Variablen sind -nur- in diesem .rules File definiert (und derzeit auch nur da verwendet).
Hier noch ein Beispiel der Fehlermeldung.
Gruß
Peter
ich versuche gerade, mein erstes größeres Rulekonstrukt zu implementieren, scheitere aber schon im Ansatz.
Ich möchte Rollos abhängig vom Sonnenunter bzw Sonnenaufgang runter bzw rauffahren. Dazu gibt es 3 Rules. Start des Zeitfensters (also frühester Zeitpunkt), Ende des Zeitfensters (da passiert es in jedem Fall) und die Sonnenaufgangs/Sonnenuntergangs Rule.
Es gibt 3 Variablen
var Number Var_Status_Buero_Sun
var Number Var_Status_Buero_First
var Number Var_Status_Buero_Last
Diese werden auch fein initialisiert, wie das in den Samplen auch erklärt ist.
Zwei der Rules (Start und Sonnenstand) setzen ...First und ...Sun auf 1 (vorher waren sie 0...nicht NULL), die LAST Rule setzt die variable ...Last auf 2.
Anschließend werden alle 3 Variablen addiert und per postupdate eine Rule getriggert, die dann das rauf und runterfahren übernimmt.
Soweit so gut...und es funktioniert sogar...aber nicht immer.
In den Logs finde ich (seit der letzten Änderung) Fehlermeldungen und die Rules funktionieren nicht. Mit Logging der Variableninhalte habe ich herausbekommen, dass die
...First ...Last und ...Sun Variablen zwar von der Initialisierungsroutine (läuft um Mitternacht und um 12:00) zwar auf 0 gesetzt werden, wenn die oben beschriebenen Rules aufgerufen werden, dann ist aber nur die eine veränderte Variable auf dem gewünschten Wert (1 oder 2), die anderen beiden aber auf NULL...nicht immer aber häufig.
Hab ich was gravierendes vergessen? Sind solche Probleme bekannt?
Ich kann auch den gesamten Code hier einhängen, auch wenn der derzeit entwas konfus und mit Logmeldungen übersäht ist.
Außerdem ist mir noch was aufgefallen: Ich hatte die Variablen ursprünglich in der Definition mit "= 0" versehen. Aber wenn ich das richtig beobachtet habe, dann wird diese Zuweisung bei jedem speichern der Datei wieder ausgeführt. Ist das so?
Die verwendeten Variablen sind -nur- in diesem .rules File definiert (und derzeit auch nur da verwendet).
Hier noch ein Beispiel der Fehlermeldung.
Code:
2015-04-16 20:42:03.383 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Sonnenstand erreicht' java.lang.NullPointerException: null at org.openhab.model.script.lib.NumberExtensions.operator_plus(NumberExtensions.java:30) ~[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na] at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na] at sun.reflect.GeneratedMethodAccessor350.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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.GeneratedMethodAccessor348.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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._featureCallOperation(XbaseInterpreter.java:712) ~[na:na] at sun.reflect.GeneratedMethodAccessor350.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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.GeneratedMethodAccessor348.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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._evaluateAssignment(XbaseInterpreter.java:843) ~[na:na] at sun.reflect.GeneratedMethodAccessor363.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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.GeneratedMethodAccessor352.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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.GeneratedMethodAccessor352.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0] at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0] 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.core.scriptengine.ScriptExecutionThread.run(ScriptExecutionThread.java:44) ~[na:na]
Peter
Kommentar