Hallo
Ich bin gerade dabei einen Sonnenaufgang zu simulieren.
Würde soweit funktionieren, ich möchte jedoch die Möglichkeit haben, diese Simulation vorzeitig zu beenden.
Doch irgendwie komme ich aus der Whileschleife nicht raus
Sobald ich den Switch SchlafzimmerSunrise betätige (ON), bekommt auch der Switch Schlafzimmerlighpower ein ON
und die Simulation startet. Mein Ziel ist es, sobald ich den Switch Schlafzimmerpower abschalte (OFF) soll sich die Lampe einfach abschalten.
Dacht ich kann das mit:
while ((i=i+1) < 120 || Schlafzimmerlightpower == ON) {
umsetzen, doch die Lampe schlatet sich kurz aus und macht dann gleich wieder weiter.
rule "Sonnenaufgang Schlafzimmer"
when
Item SchlafzimmerSunrise received command ON
then
var DecimalType H = new DecimalType(355)
var PercentType S = new PercentType(0)
var PercentType B = new PercentType(1)
var HSBType Licht = new HSBType(H,S,B)
SchlafzimmerlightColor.sendCommand(Licht)
Schlafzimmerlightpower.sendCommand(ON)
var i = 1
var b = 1
Thread::sleep(3000)
while ((i=i+1) < 120 || Schlafzimmerlightpower == ON) {
(b=b+1)
var DecimalType H = new DecimalType(355)
var PercentType S = new PercentType(0)
var PercentType B = new PercentType(b)
var HSBType Licht = new HSBType(H,S,B)
SchlafzimmerlightColor.sendCommand(Licht)
Thread::sleep(3000)
}
end
rule "Sonnenaufgang Schlafzimmer aus"
when
Item SchlafzimmerSunrise received command OFF
then
Schlafzimmerlightpower.sendCommand(OFF)
var DecimalType H = new DecimalType(355)
var PercentType S = new PercentType(0)
var PercentType B = new PercentType(0)
var HSBType Licht = new HSBType(H,S,B)
SchlafzimmerlightColor.sendCommand(Licht)
end
Wie kann ich das lösen?
Danke
Exit aus While Schleife funkt nicht
- udo1toni
- Beiträge: 15307
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Exit aus While Schleife funkt nicht
Es ist keine gute Idee, Thread::sleep() mit hohen Werten zu verwenden. Was Du willst, ist ein Timer:
Falls das empfangene Kommando ON lautet, prüft die Rule, ob bereits ein Timer läuft. Ist das nicht der Fall, wird der Counter initialisiert und ein Timer erzeugt, der unmittelbar ausgeführt wird.
Im Timer wird der Counter hochgezählt, die Farbe gesetzt, anschließend geprüft, ob der Counter schon bei 100 angekommen ist, falls nein, wird der Counter erneut geplant, falls ja, wird der Timer gelöscht.
Wenn der empfangene Befehl OFF lautet, wird der Timer sofort beendet, gelöscht und das Licht ausgeschaltet.
Der grundsätzliche Unterschied zu Deinem Code ist, dass diese Rule nur wenige Millisekunden läuft. auch jeder einzelne Timerdurchlauf braucht nur wenige Millisekunden. Deine Rule blockiert einen Thread, bis die Abbruchbedingung erreicht ist. Weiterhin kann Deine Rule beliebig oft gestartet werden, potenziell kommt sie sich dabei selbst in die Quere. Mein Ansatz kann zwar auch beliebig oft gestartet werden, wird sich aber nicht in die Quere kommen (Prüfung, ob der Timer schon existiert).
Code: Alles auswählen
var Timer tSunrise = null
var Number nCount = 0
rule "Sonnenaufgang Schlafzimmer"
when
Item SchlafzimmerSunrise received command
then
if(receivedCommand == ON) {
if(tSunrise !== null) return;
nCount = 0
tSunrise = createTimer(now, [|
nCount += 1
SchlafzimmerlightColor.sendCommand(new HSBType(355,0,nCount))
if(nCount < 100)
tSunrise.reschedule(now.plusSeconds(3))
else
tSunrise = null
])
} else {
tSunrise?.cancel
tSunrise = null
SchlafzimmerlightColor.sendCommand(new HSBType(355,0,0))
}
end
Im Timer wird der Counter hochgezählt, die Farbe gesetzt, anschließend geprüft, ob der Counter schon bei 100 angekommen ist, falls nein, wird der Counter erneut geplant, falls ja, wird der Timer gelöscht.
Wenn der empfangene Befehl OFF lautet, wird der Timer sofort beendet, gelöscht und das Licht ausgeschaltet.
Der grundsätzliche Unterschied zu Deinem Code ist, dass diese Rule nur wenige Millisekunden läuft. auch jeder einzelne Timerdurchlauf braucht nur wenige Millisekunden. Deine Rule blockiert einen Thread, bis die Abbruchbedingung erreicht ist. Weiterhin kann Deine Rule beliebig oft gestartet werden, potenziell kommt sie sich dabei selbst in die Quere. Mein Ansatz kann zwar auch beliebig oft gestartet werden, wird sich aber nicht in die Quere kommen (Prüfung, ob der Timer schon existiert).
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)
-
- Beiträge: 43
- Registriert: 26. Jan 2019 13:27
Re: Exit aus While Schleife funkt nicht
ok, vielen Dank
Ich bekomme jedoch bei dieser Zeile eine Fehlermeldung:
var Timer tSunrise = null
2019-03-02 14:31:52.344 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'light.rules' has errors, therefore ignoring it: [102,1]: missing EOF at 'var'
Ich bekomme jedoch bei dieser Zeile eine Fehlermeldung:
var Timer tSunrise = null
2019-03-02 14:31:52.344 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'light.rules' has errors, therefore ignoring it: [102,1]: missing EOF at 'var'
-
- Beiträge: 43
- Registriert: 26. Jan 2019 13:27
Re: Exit aus While Schleife funkt nicht
ok ich hab jz eine neue Rules Datei erstellt.
Jz kommt zwar nicht mehr dieser Fehler, dafür...
2019-03-02 15:03:31.042 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.2019-03-02T15:03:31.036+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
<XFeatureCallImplCustom>.sendCommand(<XConstructorCallImplCustom>)
org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1babe75
} ] threw an unhandled Exception:
java.lang.IllegalArgumentException: Cannot convert number literal to typeorg.eclipse.smarthome.core.library.types.DecimalType
at org.eclipse.xtext.xbase.typesystem.computation.NumberLiterals.numberValue(NumberLiterals.java:161) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:322) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:250) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:746) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:238) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy175.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
2019-03-02 15:03:31.109 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.2019-03-02T15:03:31.036+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
<XFeatureCallImplCustom>.sendCommand(<XConstructorCallImplCustom>)
org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1babe75
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
Caused by: java.lang.IllegalArgumentException: Cannot convert number literal to typeorg.eclipse.smarthome.core.library.types.DecimalType
at org.eclipse.xtext.xbase.typesystem.computation.NumberLiterals.numberValue(NumberLiterals.java:161) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:322) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:250) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:746) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:238) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy175.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
Jz kommt zwar nicht mehr dieser Fehler, dafür...
2019-03-02 15:03:31.042 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.2019-03-02T15:03:31.036+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
<XFeatureCallImplCustom>.sendCommand(<XConstructorCallImplCustom>)
org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1babe75
} ] threw an unhandled Exception:
java.lang.IllegalArgumentException: Cannot convert number literal to typeorg.eclipse.smarthome.core.library.types.DecimalType
at org.eclipse.xtext.xbase.typesystem.computation.NumberLiterals.numberValue(NumberLiterals.java:161) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:322) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:250) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:746) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:238) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy175.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
2019-03-02 15:03:31.109 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.2019-03-02T15:03:31.036+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
<XFeatureCallImplCustom>.sendCommand(<XConstructorCallImplCustom>)
org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1babe75
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [107:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
Caused by: java.lang.IllegalArgumentException: Cannot convert number literal to typeorg.eclipse.smarthome.core.library.types.DecimalType
at org.eclipse.xtext.xbase.typesystem.computation.NumberLiterals.numberValue(NumberLiterals.java:161) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:322) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:250) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:746) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:238) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1116) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy175.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
-
- Beiträge: 43
- Registriert: 26. Jan 2019 13:27
Re: Exit aus While Schleife funkt nicht
Ich habs geschafft. Vielen Dank für die Hilfe.
Bin jz auch gleich dran, nicht nur einen Sonnenaufgang zu simulieren sondern auch ein Kerzenlicht.
Habe dieser über eine Zufallszahl die dann die Helligkeit verändert gelöst.
Allerdings habe ich den Syntax noch nicht ganz durchblickt.
(kerze = (Math::random * (32-24)).intValue + 18)
ist im Moment eher ein mit den Zahlen spielen, als wissen was ich mache.
Vielleicht kann mir ja jemand der Syntax erklären: Ich dachte immer ...(32-24)... steht für den Bereich aus dem die Zufallszahl ermittelt wird.
Also eine Zahl zwischen 24 und 32. Aber irgendwie war dem nicht ganz so und wofür steht das ...+18)?
Danke
Bin jz auch gleich dran, nicht nur einen Sonnenaufgang zu simulieren sondern auch ein Kerzenlicht.
Habe dieser über eine Zufallszahl die dann die Helligkeit verändert gelöst.
Allerdings habe ich den Syntax noch nicht ganz durchblickt.
(kerze = (Math::random * (32-24)).intValue + 18)
ist im Moment eher ein mit den Zahlen spielen, als wissen was ich mache.
Vielleicht kann mir ja jemand der Syntax erklären: Ich dachte immer ...(32-24)... steht für den Bereich aus dem die Zufallszahl ermittelt wird.
Also eine Zahl zwischen 24 und 32. Aber irgendwie war dem nicht ganz so und wofür steht das ...+18)?
Danke
- udo1toni
- Beiträge: 15307
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Exit aus While Schleife funkt nicht
Math::random liefert meines Wissens eine zufällige Zahl zwischen 0 und 1.
Ergo, wenn Du eine Zahl zwischen 0 und 100 haben möchtest, wäre die Formel
Wenn es zwischen 50 und 100 sein soll, entsprechend
Allerdings ist schon Deine Idee eher... na ja...
Sagen wir mal so: openHAB ist dafür nicht geeignet. Überleg mal, wie oft pro Sekunde(!) die Helligkeit geändert werden müsste, um ein natürlich wirkendes Flackern zu erzeugen. openHAB ist leistungsfähig, aber nicht für diese Art Steuerung.
Ergo, wenn Du eine Zahl zwischen 0 und 100 haben möchtest, wäre die Formel
Code: Alles auswählen
(Math::random *100).intValue
Code: Alles auswählen
(Math::random * 50).intValue + 50
Sagen wir mal so: openHAB ist dafür nicht geeignet. Überleg mal, wie oft pro Sekunde(!) die Helligkeit geändert werden müsste, um ein natürlich wirkendes Flackern zu erzeugen. openHAB ist leistungsfähig, aber nicht für diese Art Steuerung.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)