Rule Trigger detektieren
Verfasst: 15. Mai 2019 09:37
Hallo zusammen,
Ich habe eine Rule die über Cron zu zwei Zeiten (6:00 u. 18:00) durchgeführt wird. In dieser Rule werden als erstes verschiedene Parameter überprüft und dann entsprechende Aktionen durchgeführt. (wenn die Parameter erfüllt sind).
Allerdings sollen je nach Ausführungszeit unterschiedliche Variablen benutzt werden. (z.B. 6:00 -> optDurationMorning = 12min u. 18:00 -> optDurationEvening = 18min).
Bisher habe ich zwei einzelne Rules benutzt. Diese möchte ich jetzt optimieren, da die Vorraussetzungen bei beiden gleich sind.
Kann ich in einer Rule den auslösenden Trigger detektieren und so entsprechende Variablen verwenden?
*) an dieser Stelle sollte die CronZeit abgefragt werden.
If (Time cron "0 00 6 * * ?")
{
var int actDuration = optDurationMorning.intValue
}
If (Time cron "0 00 18 * * ?")
{
var int actDuration = optDurationEvening.intValue
}
wäre Nett wenn mir jmd sagen könnte ob und wie das zu realisieren wäre.
Ich habe eine Rule die über Cron zu zwei Zeiten (6:00 u. 18:00) durchgeführt wird. In dieser Rule werden als erstes verschiedene Parameter überprüft und dann entsprechende Aktionen durchgeführt. (wenn die Parameter erfüllt sind).
Allerdings sollen je nach Ausführungszeit unterschiedliche Variablen benutzt werden. (z.B. 6:00 -> optDurationMorning = 12min u. 18:00 -> optDurationEvening = 18min).
Bisher habe ich zwei einzelne Rules benutzt. Diese möchte ich jetzt optimieren, da die Vorraussetzungen bei beiden gleich sind.
Kann ich in einer Rule den auslösenden Trigger detektieren und so entsprechende Variablen verwenden?
Code: Alles auswählen
rule "AUTO-Bewässerung - morgens"
when
Time cron "0 00 6 * * ?" OR
Time cron "0 00 18 * * ?"
then
if (autoBewaesserung.state == OFF)
{
//Die Automatische Bewässerung ist deaktiviert.
logInfo(filename,"AUTO-Bewässerung: -> deaktiviert!")
return
}
if (autoBewaesserung.state == ON)
{
var boolean delay1day = false
// Es hat gestern geregnet min. 4mm
if (RainYesterday.state >= minPrecip)
{
delay1day = true
}
// Es hat heute geregnet min. 4mm;
if (RainToday.state >= minPrecip)
{
delay1day = true
}
// Regen im Forecast min. 4mm
if (RainForecast.state >= minPrecip)
{
delay1day = true
}
// Regenwahrscheinlichkeit im Forecast min. 60%
if (PrecipForecast.state >= minPrecipPercent)
{
delay1day = true
}
// ScaleFaktor zu niedrig min. 5
if (vScaleFactor < minScaleFactor)
{
delay1day = true
}
// Wenn "delay1day" gesetzt
if (delay1day)
{
logInfo(filename,"AUTO-Bewässerung: -> keine Bewässerung nötig!")
return
}
else
{
// in die tatsächlichen Laufzeiten umrechnen (durch Anwendung des Skalierungsfaktors)
var int optDuration = ((nomDuration * vScaleFactor) / 100).intValue
// anpassen der opt. Laufzeit an die prozentuale Verteilung morgens/abends
var int optDurationMorning = (probDurationMorning * optDuration).intValue
var int optDurationEvening = (probDurationEvening * optDuration).intValue
*) an dieser Stelle sollte die CronZeit abgefragt werden.
If (Time cron "0 00 6 * * ?")
{
var int actDuration = optDurationMorning.intValue
}
If (Time cron "0 00 18 * * ?")
{
var int actDuration = optDurationEvening.intValue
}
Code: Alles auswählen
// Bewässerung starten
Sonoff_45CD46.sendCommand(ON)
if(BewTimer === null)
{
BewTimer = createTimer(now.plusMinutes(actDuration),
[|
Sonoff_45CD46.sendCommand(OFF)
logInfo(filename,"AUTO-Bewässerung: -> beendet!")
])
}
else
{
BewTimer = null
BewTimer.reschedule(now.plusMinutes(5))
logInfo(filename,"AUTO-Bewässerung: -> Neustart wartet!")
}
}
}
end