Seite 13 von 16
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 13. Jun 2020 11:48
von Romel
Hallo an alle !
Ich brauch wieder eure Hilfe.
Ich möchte einen "Schönheitsfehler" "reparieren".
Bei der Startzeit wird bei den Minuten unter 10 nur z.B.: 22:1 angezeigt.
Es fehlt die 0. (22:01)
Hab schon gesucht aber nix gefunden.
Das ist vermutlich die Stelle um die es geht:
Code: Alles auswählen
var int minutes = 0 // Initialwert für Minuten definieren
if(Startzeit_Minuten.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
minutes = (Startzeit_Minuten.state as Number).intValue // Setze minutes auf diese Zahl
if(minutes > 59) minutes = 0 // Falls Obergrenze überschritten setze auf 0
if(minutes < 0) minutes = 59 // Falls Untergrente unterschritten setze auf 59
}
Startzeit_Minuten.postUpdate(minutes) // Schreibe Wert in das Item
var int hours = 0 // Initialwert für Sunden definieren
if(Startzeit_Stunden.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
hours = (Startzeit_Stunden.state as Number).intValue // Setze hours auf diese Zahl
if(hours > 23) hours = 0 // Falls Obergrenze überschritten setze auf 0
if(hours < 0) hours = 23
Danke für eure Hilfe.
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 13. Jun 2020 14:51
von udo1toni
Nein, an der Stelle im Code geht es ja nur um das Über/Unterschreiten der Limits.
welches Item lässt Du anzeigen? Wo werden Stunde und Minute in das Item übernommen?
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 15. Jun 2020 05:54
von Romel
Guten Morgen !
Das Item "Info" zeigt die Zeit an.
Das ist der Code:
Code: Alles auswählen
var Timer tRegner = null
var int iRegner = 0
var Timer tStartRegner = null
rule "Startzeit einstellen"
when
Member of gWeekdays changed or // Wochentag geändert
Item Startzeit_Minuten changed or // Minuten geändert
Item Startzeit_Stunden changed or // Stunden geändert
Time cron "1 0 0 * * ?" // täglich um 00:00:01 Uhr
then
// Alle Wochentag-Items müssen in der Gruppe gWeekdays zusammengefasst sein, damit der Trigger oben funktioniert
var dayOfWeekSetting = newArrayList(
Monday.state,
Tuesday.state,
Wednesday.state,
Thursday.state,
Friday.state,
Saturday.state,
Sunday.state
)
var int minutes = 0 // Initialwert für Minuten definieren
if(Startzeit_Minuten.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
minutes = (Startzeit_Minuten.state as Number).intValue // Setze minutes auf diese Zahl
if(minutes > 59) minutes = 0 // Falls Obergrenze überschritten setze auf 0
if(minutes < 0) minutes = 59 // Falls Untergrente unterschritten setze auf 59
}
Startzeit_Minuten.postUpdate(minutes) // Schreibe Wert in das Item
var int hours = 0 // Initialwert für Sunden definieren
if(Startzeit_Stunden.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
hours = (Startzeit_Stunden.state as Number).intValue // Setze hours auf diese Zahl
if(hours > 23) hours = 0 // Falls Obergrenze überschritten setze auf 0
if(hours < 0) hours = 23 // Falls Untergrente unterschritten setze auf 23
}
Startzeit_Stunden.postUpdate(hours) // Schreibe Wert in das Item
val int startMinutes = hours * 60 + minutes // Zeit in Minuten
tStartRegner?.cancel
logInfo("watering","Kontrolliere Wochentag") // geplante Beregnung canceln
if(dayOfWeekSetting.get(now.getDayOfWeek-1) == ON) { // Falls heute Beregnung gewünscht
if(now.getMinuteOfDay < startMinutes) {
logInfo("watering","Warte auf Startzeit")
Info.sendCommand("Starte Beregnung um " + (Startzeit_Stunden.state as Number) + ":" + (Startzeit_Minuten.state as Number))
tStartRegner = createTimer(now.withTimeAtStartOfDay.plusMinutes(startMinutes),[| // Setze einen Timer auf gewünschte Startzeit
WetterPrognose.sendCommand(ON) // Starte zur gewünschten Zeit
])
}
}
else logInfo("watering","Wochentag ist Ausgeschaltet")
end
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 15. Jun 2020 08:23
von udo1toni
Frage: Warum schreibst Du den fixen Teil des Labels mit hinein?
Am einfachsten bekommst Du die führende 0 mittels String::format() rein, aber Du kannst natürlich auch in den String ein
Code: Alles auswählen
+if((Startzeit_Minuten.state as Number) < 10)"0" else ""+
einbauen (an der richtigen Stelle, hinter dem Doppelpunkt).
Gesendet von meinem SM-G973F mit Tapatalk
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 15. Jun 2020 08:45
von Romel
Ok. Danke
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 20. Jun 2020 18:31
von JoergB
Hallo zusammen,
ich habe nun auch meine Gartenbewässerung erfolgreich unter die Erde gebracht und versuche alles mit openhab zu automatisieren. In dem Zuge bin ich auf diesen Thread gestoßen und habe ein paar Fragen dazu, bei denen Ihr mir hoffentlich helfen könnt.
Ein wichtigen Punkt bei der Automatisierung macht der Scale Factor aus. Zur Berechnung werden neben Luftfeuchtigkeit und Temperatur vor allem der Regen des Vortages und des aktuellen Tages herangezogen. Dabei wird in RainToday alle Stunde der Regen der letzten Stunde fortlaufend aufaddiert, während der Regen des Vortages um 23.59 Uhr in RainYesterday geschrieben wird. Dazu verwendet Cyrelian die Persistenz, wie er schreibt...
Meine Frage jetzt ist: warum? Der Wert von RainYesterday wird doch nur einmal um 23:59 Uhr am Tag geschrieben und ändert sich erst wieder 24h später. D.h. für die Berechnung des Rain Scale Factors könnte ich doch einfach den Wert von RainToday und RainYesterday nehmen und brauche gar keine Persistenz...
Und was ich auch nicht verstehe: wo wird der Wert von RainToday wieder auf 0 gesetzt? Müsste das nicht mit dem Schreiben von RainYesterday um 23:59 Uhr erfolgen?
Viele Grüße,
Jörg
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 8. Jul 2020 05:35
von Romel
Guten Morgen !
Meine Beregnung ist installiert und läuft jetzt seit ein paar Tagen.
Es funktioniert alles ganz gut, bis auf ein Problem:
Die Beregnung startet nicht am nächsten Tag von selbst. Wenn ich aber Manuel eine Startzeit eingebe die am gleichen Tag ist funktioniert alles. Ist die Zeit aber erst am nächsten Tag, wird nicht ausgelöst.
Noch eine Info: Jeden Tag um 1 Uhr wird ein Backup erstellt und neu gestartet.
Danke für eure Hilfe !
Hier eine Log mit einen Fehler:
Code: Alles auswählen
2020-07-08 05:13:19.743 [vent.ItemStateChangedEvent] - Schalter3rssi changed from -49.00 to -50.00
2020-07-08 05:13:30.760 [vent.ItemStateChangedEvent] - Schalter1rssi changed from -70.00 to -71.00
==> /var/log/openhab2/openhab.log <==
2020-07-08 05:14:03.381 [INFO ] [ipse.smarthome.model.script.watering] - Kontrolliere Wochentag
2020-07-08 05:14:03.386 [INFO ] [ipse.smarthome.model.script.watering] - Warte auf Startzeit
==> /var/log/openhab2/events.log <==
2020-07-08 05:14:03.392 [ome.event.ItemCommandEvent] - Item 'Info' received command Starte Beregnung um 5:16
2020-07-08 05:14:03.396 [ome.event.ItemCommandEvent] - Item 'bInfo' received command ON
2020-07-08 05:14:03.404 [vent.ItemStateChangedEvent] - Info changed from to Starte Beregnung um 5:16
2020-07-08 05:14:03.405 [vent.ItemStateChangedEvent] - bInfo changed from OFF to ON
2020-07-08 05:14:09.815 [vent.ItemStateChangedEvent] - Schalter5volt changed from 3.29 to 3.27
2020-07-08 05:14:10.674 [vent.ItemStateChangedEvent] - ext3000_Pingzeit changed from 2.0 to 1.0
2020-07-08 05:14:13.815 [vent.ItemStateChangedEvent] - Schalter4volt changed from 3.01 to 3.02
2020-07-08 05:14:15.814 [vent.ItemStateChangedEvent] - Schalter2rssi changed from -69.00 to -70.00
2020-07-08 05:14:19.820 [vent.ItemStateChangedEvent] - Schalter3rssi changed from -50.00 to -49.00
2020-07-08 05:14:24.837 [vent.ItemStateChangedEvent] - Schalter7rssi changed from -74.00 to -75.00
2020-07-08 05:15:09.884 [vent.ItemStateChangedEvent] - Schalter6volt changed from 3.20 to 3.21
2020-07-08 05:15:09.899 [vent.ItemStateChangedEvent] - Schalter5volt changed from 3.27 to 3.25
2020-07-08 05:15:13.906 [vent.ItemStateChangedEvent] - Schalter4volt changed from 3.02 to 3.01
2020-07-08 05:16:00.014 [ome.event.ItemCommandEvent] - Item 'WetterPrognose' received command ON
==> /var/log/openhab2/openhab.log <==
2020-07-08 05:16:00.011 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.Timer 9 2020-07-08T05:16:00.000+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
} ] threw an unhandled Exception:
java.lang.NullPointerException: null
at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:65) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:140) ~[?:?]
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.evaluateArgumentExpressions(XbaseInterpreter.java:1205) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1135) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:861) ~[?:?]
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.$Proxy464.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:?]
2020-07-08 05:16:00.057 [INFO ] [ipse.smarthome.model.script.watering] - RegenPrognose_24: 0.0
2020-07-08 05:16:00.051 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.Timer 9 2020-07-08T05:16:00.000+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
} ] 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.NullPointerException
at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:65) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:140) ~[?:?]
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.evaluateArgumentExpressions(XbaseInterpreter.java:1205) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1135) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:861) ~[?:?]
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.$Proxy464.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
==> /var/log/openhab2/events.log <==
2020-07-08 05:16:00.088 [ome.event.ItemCommandEvent] - Item 'Beregnung' received command ON
2020-07-08 05:16:00.107 [vent.ItemStateChangedEvent] - Beregnung changed from OFF to ON
==> /var/log/openhab2/openhab.log <==
2020-07-08 05:16:00.113 [INFO ] [clipse.smarthome.model.script.regner] - 1. Durchlauf
==> /var/log/openhab2/events.log <==
2020-07-08 05:16:00.118 [vent.ItemStateChangedEvent] - Sperre changed from OFF to ON
2020-07-08 05:16:00.123 [vent.ItemStateChangedEvent] - Info changed from Starte Beregnung um 5:16 to Beregnung gestartet !
Hier die Rule:
Code: Alles auswählen
rule "Startzeit einstellen"
when
Member of gWeekdays changed or // Wochentag geändert
Item Startzeit_Minuten changed or // Minuten geändert
Item Startzeit_Stunden changed or // Stunden geändert
Time cron "1 0 0 * * ?" // täglich um 00:00:01 Uhr
then
// Alle Wochentag-Items müssen in der Gruppe gWeekdays zusammengefasst sein, damit der Trigger oben funktioniert
var dayOfWeekSetting = newArrayList(
Monday.state,
Tuesday.state,
Wednesday.state,
Thursday.state,
Friday.state,
Saturday.state,
Sunday.state
)
var int minutes = 0 // Initialwert für Minuten definieren
if(Startzeit_Minuten.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
minutes = (Startzeit_Minuten.state as Number).intValue // Setze minutes auf diese Zahl
if(minutes > 59) minutes = 0 // Falls Obergrenze überschritten setze auf 0
if(minutes < 0) minutes = 59 // Falls Untergrente unterschritten setze auf 59
}
Startzeit_Minuten.postUpdate(minutes) // Schreibe Wert in das Item
var int hours = 0 // Initialwert für Sunden definieren
if(Startzeit_Stunden.state instanceof Number) { // Falls das Item eine gültige Zahl enthält
hours = (Startzeit_Stunden.state as Number).intValue // Setze hours auf diese Zahl
if(hours > 23) hours = 0 // Falls Obergrenze überschritten setze auf 0
if(hours < 0) hours = 23 // Falls Untergrente unterschritten setze auf 23
}
Startzeit_Stunden.postUpdate(hours) // Schreibe Wert in das Item
val int startMinutes = hours * 60 + minutes // Zeit in Minuten
tStartRegner?.cancel
logInfo("watering","Kontrolliere Wochentag") // geplante Beregnung canceln
if(dayOfWeekSetting.get(now.getDayOfWeek-1) == ON) { // Falls heute Beregnung gewünscht
if(now.getMinuteOfDay < startMinutes) {
logInfo("watering","Warte auf Startzeit")
Info.sendCommand("Starte Beregnung um " + (Startzeit_Stunden.state as Number) + ":" + if((Startzeit_Minuten.state as Number) < 10)"0" + (Startzeit_Minuten.state as Number) else (Startzeit_Minuten.state as Number) )
bInfo.sendCommand(ON) // Falls Startzeit noch nicht erreicht
tStartRegner = createTimer(now.withTimeAtStartOfDay.plusMinutes(startMinutes),[| // Setze einen Timer auf gewünschte Startzeit
WetterPrognose.sendCommand(ON) // Starte zur gewünschten Zeit
])
}
}
else logInfo("watering","Wochentag ist Ausgeschaltet")
end
rule "Wetter und Feuchtigkeit einbinden"
when
Item WetterPrognose received command
then
//Wind
var wind = 0
if(WetterAktuellWindgesch.state instanceof Number){
wind = ((WetterAktuellWindgesch.state as Number).floatValue).intValue
var maxwind = 0
if(maxWind.state instanceof Number)
maxwind = ((maxWind.state as Number).floatValue).intValue
if(wind >= maxwind){
Beregnung.sendCommand(OFF)
logWarn("watering","Derzeit ist es zu windig! {} km/h: Abbruch!", wind)
Info.sendCommand("Windgeschwidigkeit zu hoch: Abbruch!")
bInfo.sendCommand(ON)
}
//Regen
if(WetterAktuellRegen.state instanceof Number && Wetter3hRegen.state instanceof Number && Wetter6hRegen.state instanceof Number && Wetter12hRegen.state instanceof Number && Wetter24hRegen.state instanceof Number && Wetter72hRegen.state instanceof Number){
RegenPrognose_24.postUpdate(((WetterAktuellRegen.state as Number + Wetter3hRegen.state as Number + Wetter6hRegen.state as Number + Wetter12hRegen.state as Number + Wetter24hRegen.state as Number) * 1000) * 2)
logInfo("watering","RegenPrognose_24: " + RegenPrognose_24.state)
if((RegenPrognose_24.state as Number) >= (minRegen.state as Number)){
logWarn("watering","Es wird genug Regnen! {} mm/m²: Abbruch !", RegenPrognose_24.state)
Info.sendCommand("Es wird genug Regnen: Abbruch!")
Beregnung.postUpdate(OFF)
}
//Feuchtigkeit
if(gFeuchtDurchschnitt.state <= 300) {
logWarn("watering","Feuchtigkeit ist {} : Abbruch !", gFeuchtDurchschnitt.state)
//Info.postUpdate("Feuchtigkeit ist {} : Abbruch !", gFeuchtDurchschnitt.state)
Beregnung.postUpdate(OFF)
}
else
{
Beregnung.sendCommand(ON)
}
}
}
end
rule "Beregnung EIN"
when
Item Beregnung received command
then
if(receivedCommand == OFF) {
logWarn("watering","Beregnung wird abgebrochen!")
sendBroadcastNotification("Beregnung wird abgebrochen!") //Nachricht an openhab APP
postUpdate(Info, "Beregnung abgebrochen !")
bInfo.sendCommand(ON) // Info Bestätigung einschalten
tRegner?.cancel // Timer stoppen
tRegner = null // Variable leeren
gRegner.members.filter[i|i.name.contains("Power")].filter[j| j.state != OFF].forEach[r|r.sendCommand(OFF)] // alle Regner abschalten
//Pumpe.sendCommand(OFF) // Pumpe abschalten
Sperre.postUpdate(OFF) // Bediensperre aufheben
}
else
{
if(tRegner !== null) {
logWarn("watering","Regner scheint noch zu laufen! Abbruch")
return;
}
iRegner = 0
Sperre.postUpdate(ON)
//Pumpe.sendCommand(ON)
postUpdate(Info, "Beregnung gestartet !")
sendBroadcastNotification("Beregnung gestartet !")
tRegner = createTimer(now.plusMillis(10),[|
iRegner++ // nächsten Regener anwählen
logInfo("regner","{}. Durchlauf",iRegner)
gRegner.members.filter[i|i.name.contains("Power")].filter[j| j.state != OFF].forEach[r|r.sendCommand(OFF)] // alle Regner abschalten
val maxRegner = gRegner.members.filter[i|i.name.contains("Sperre")].filter[j| j.state == OFF].size // wieviele Regner sollen insgesamt beregnen?
logInfo("regner","{}. Durchlauf von {} Durchläufen.",iRegner,maxRegner)
if(iRegner > maxRegner) { // letzten Regner schon erreicht?
logInfo("regner","Alle Regner sind schon gelaufen!")
sendBroadcastNotification("Beregnung Fertig !")
postUpdate(Info, "Beregnung Fertig !")
bInfo.sendCommand(ON) // Info Bestätigung einschalten
tRegner = null // Dann Schluss!
Sperre.postUpdate(OFF)
Beregnung.postUpdate(OFF) // Item zurücksetzen
//Pumpe.sendCommand(OFF)
return;
}
Thread::sleep(15000) // kleine(15 sec) Pause einlegen
val strRegner = gRegner.members.filter[i|i.name.contains("Sperre")].filter[j| j.state == OFF].sortBy[name].get(iRegner-1).name.split("_").get(2) //Namen des Regner ermitteln
logInfo("regner","Nächster Regner: {}",strRegner)
gRegner.members.filter[i|i.name.contains("Power") && i.name.contains(strRegner)].head.sendCommand(ON) // Regner einschalten
val Dauer =(gRegner.members.filter[i|i.name.contains("Dauer") && i.name.contains(strRegner)].head.state as Number).intValue
logInfo("regner","Regenr wird nach {} Minuten wieder abgeschaltet.",Dauer)
tRegner.reschedule(now.plusMinutes(Dauer)) // Nächste Ausführung planen
])
}
end
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 8. Jul 2020 05:58
von PeterA
Eventuell fehlt hier ein
"System started" im when Teil der Rule
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 8. Jul 2020 06:02
von Romel
Hab ich mir auch schon gedacht.
Schon dazu geschrieben.
Re: Automatisch Gartenbewässerung / Beregnung mit openHAB und Sonoff
Verfasst: 8. Jul 2020 23:29
von udo1toni
Nur so als Hinweis: openHAB muss für ein Backup nicht angehalten werden.
Und es wird zwar in einigen Beiträgen beschrieben, wie man openHAB neu automatisch neu startet, das ist aber nicht erstrebenswert.
Wenn openHAB nicht ohne ständige Neustarts stabil läuft, dann liegt ein Fehler in der Konfiguration vor und sollte beseitigt werden.
Regelhafte Neustarts verdecken nur ein Problem, man sollte keine Symptome bekämpfen, sondern deren Ursache(n).