Seite 1 von 4
Beregnung Timer
Verfasst: 11. Jun 2020 18:39
von Pepe1907
Hallo ihr Lieben,
ich habe nun meine Bregnungsanlage für den Rasen über Openhab erfolgreich installiert.
Kann die Pumpe, und die einzelnen Ventile Problemlos über die BasicUI schalten.
Nun würde ich gerne eine Rule erstellen bzw. habe schon eine Rule erstellt, diese funktioniert nur leider nicht.
Meine Items
Code: Alles auswählen
//Datum
DateTime Date "Date [%1$tA, %1$td.%1$tm.%1$tY %1$tH:%1$tM]" { channel="ntp:ntp:demo:dateTime" }
//Ventile
Switch channel1 "Channel 1" <lawnmower> { gpio="pin:26 activelow:yes initialValue:high" }
Switch channel2 "Channel 2" <lawnmower> { gpio="pin:19 activelow:yes initialValue:low" }
Switch channel3 "Channel 3" <pump> { gpio="pin:13 activelow:yes"}
Switch channel4 "Channel 4" <garden> { gpio="pin:6 activelow:yes"}
//Regen
Number RainToday "Rain_today [%.2f mm]"
Number RainYesterday "Rain_lastday [%.2f mm]"
//Beregnung
Switch beregnung "Automatische Beregnung" <rain>
Meine beregnung.rules
Code: Alles auswählen
var Timer timer = null
rule "Beregnung 2min"
when
Item beregnung received update ON
then
if(timer === null ) {
logInfo("FILE", "Setting to ON and creating timer")
channel1.sendCommand(ON)
channel2.sendCommand(ON)
channel3.sendCommand(ON)
timer = createTimer(now.plusMinutes(2), [|
logInfo("FILE", "Beregnung fertig")
Beregnung.postUpdate(OFF)
channel1.sendCommand(OFF)
channel2.sendCommand(OFF)
channel3.sendCommand(OFF)
timer = null
])
}
end
Die Items werden eingeschaltet und der Timer startet auch. Nur leider wird nichts ausgeschaltet
Re: Beregnung Timer
Verfasst: 11. Jun 2020 19:01
von Pepe1907
LOG
Code: Alles auswählen
2020-06-11 18:59:52.078 [INFO ] [.eclipse.smarthome.model.script.FILE] - Beregnung fertig
2020-06-11 18:59:52.083 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.Timer 2 2020-06-11T18:59:52.066+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>)
<XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<null>.timer = <XNullLiteralImplCustom>
} ] threw an unhandled Exception:
java.lang.reflect.UndeclaredThrowableException: null
at com.sun.proxy.$Proxy140.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [bundleFile:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: The name 'Beregnung' cannot be resolved to an item or type; line 14, column 13, length 9
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:141) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:991) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:954) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:235) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:857) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
... 4 more
2020-06-11 18:59:52.139 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.Timer 2 2020-06-11T18:59:52.066+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>)
<XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
<null>.timer = <XNullLiteralImplCustom>
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [bundleFile:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
Caused by: java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy140.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: The name 'Beregnung' cannot be resolved to an item or type; line 14, column 13, length 9
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:141) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:991) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:954) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:235) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:857) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
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.$Proxy140.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
Re: Beregnung Timer
Verfasst: 11. Jun 2020 19:09
von Darkwin101
Achte bitte auf Groß und Kleinschreibung die rule startet mit beregnung(klein) in der rule benutzt du aber Beregnung.postUpdate(OFF)(Groß)
In Openhab ist wichtig das Groß/Kleinschreibung beachtet wird.
Re: Beregnung Timer
Verfasst: 11. Jun 2020 20:19
von Pepe1907
Perfekt passt super danke dir.
Kann man jetzt noch ne uhrzeit mittels timecron einfügen und dann beregnung postupdate rausgehen. Dass es dann jeden Tag um z.b. 21 00 aktiviert wird?
Re: Beregnung Timer
Verfasst: 11. Jun 2020 21:04
von desidia
dafür brauchst du nur den when-Bereich mit einem Cron versehen
das bedeutet jeden Tag um 21:00 Uhr würde dann dein automatismus durchlaufen.
wäre aber wirklich jeder Tag.
daher sollte man dann prüfen ob das Item "beregnung" auf ON steht (das kannst du ja manuell machen, z.B. wenn es am Tag schon geregnet hat, oder nicht mehr gesprengt werden muss...
dann wäre es:
Code: Alles auswählen
when Time cron "0 0 21 * * ?"
then if (beregnung.state == ON)
{
hier deine jetzige Regel
}
das würde jeden Tag um 21 Uhr prüfen ob Beregnung angeschaltet ist und wenn das WAHR (also ON) ist, würde die nächste Ebene geprüft, was dann deine eigentliche Regel ist.
aber andere Frage, du schaltest gleichzeitig alle Ventile an, lässt zwei Minuten sprengen und dann wieder aus?
das ist viel zu kompliziert über den Timer und das ganze geschnörkel...
die eigentliche Rule könnte auch sein:
Code: Alles auswählen
rule "Beregnung"
when Time cron "0 0 21 * * ?"
then if (beregnung.state == ON){
channel1.sendCommand(ON)
channel2.sendCommand(ON)
channel3.sendCommand(ON)
createTimer(now.plusMinutes(2)) [| channel1.sendCommand(OFF)]
createTimer(now.plusMinutes(2)) [| channel2.sendCommand(OFF)]
createTimer(now.plusMinutes(2)) [| channel3.sendCommand(OFF)]}
end
bzw. alle in eine Gruppen packen und dann die Gruppe schalten wäre wahrscheinlich noch einfacher (benutze ich nicht, weiß daher nicht 100% wie es geht, da ich meine Sprenger nacheinander schalte mit Abstand)
Re: Beregnung Timer
Verfasst: 11. Jun 2020 21:30
von Pepe1907
Vielen dank für die schnelle und sehr hilfreiche Antwort.
aber andere Frage, du schaltest gleichzeitig alle Ventile an, lässt zwei Minuten sprengen und dann wieder aus?
Die 2 min habe ich nur gesetzt um die Regel zu testen. Ich lasse beide Kreise gleichzeitig laufen da die Brunnenpumpe genügend Durchfluss hat.(mehr als 4m²/h)
Würde die Regel auch so funktionieren? Da ich den ersten Kreis(Ventil 1) länger bewässern möchte als den anderen Kreis.
Code: Alles auswählen
rule "Beregnung"
when Time cron "0 0 21 * * ?"
then if (beregnung.state == ON){
channel1.sendCommand(ON)
channel2.sendCommand(ON)
channel3.sendCommand(ON)
createTimer(now.plusMinutes(60)) [| channel1.sendCommand(OFF)]
createTimer(now.plusMinutes(45)) [| channel2.sendCommand(OFF)]
createTimer(now.plusMinutes(60)) [| channel3.sendCommand(OFF)]}
end
Desweitern ist ja noch geplant die Wetterdaten bzgl. Regen in MySql zu speichern um so den gestrigen Tag auszuwerten um eine Beregnung evtl. für einen Tag auszusetzen wenn es zuvor viel geregnet hat.
Re: Beregnung Timer
Verfasst: 11. Jun 2020 21:56
von Pepe1907
Wieso funktioniert diese Rule nicht?
leider wird beim starten meines Raspberrys die Relais geschaltet, um dies zu verhindern habe ich diese kleine Regel geschrieben
rule “Stromausfall”
when
System started
then
channel2.sendCommand(OFF)
channel1.sendCommand(OFF)
channel3.sendCommand(OFF)
end
Re: Beregnung Timer
Verfasst: 11. Jun 2020 22:59
von desidia
Was sagt das log? Bzw mach mal einen timer rein für 20 Sekunden oder so, ggf sind die Kanäle einfach noch nicht "online" um geschaltet werden zu können
Re: Beregnung Timer
Verfasst: 12. Jun 2020 11:31
von udo1toni
Die Rule wird schon funktionieren, aber sie wird an Deinem Problem nichts ändern. Suche lieber den Grund, warum der Pi beim Starten die Relais schaltet, das darf nicht sein!
Gesendet von meinem SM-G973F mit Tapatalk
Re: Beregnung Timer
Verfasst: 12. Jun 2020 11:50
von Pepe1907
desidia hat geschrieben: ↑11. Jun 2020 22:59
Was sagt das log? Bzw mach mal einen timer rein für 20 Sekunden oder so, ggf sind die Kanäle einfach noch nicht "online" um geschaltet werden zu können
2020-06-12 11:48:46.945 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Stromausfall.rules' has errors, therefore ignoring it: [1,6]: no viable alternative at input '“'
udo1toni hat geschrieben: ↑12. Jun 2020 11:31
Die Rule wird schon funktionieren, aber sie wird an Deinem Problem nichts ändern. Suche lieber den Grund, warum der Pi beim Starten die Relais schaltet, das darf nicht sein!
Gesendet von meinem SM-G973F mit Tapatalk
Das verstehe ich leider auch nicht. hat das vielleicht irgendetwas mit der pinbelegung zu tun?