Seite 1 von 1
Timer einbauen
Verfasst: 5. Mai 2021 18:28
von Sadi191
Hallo Gemeinde,
habe mal wieder eine Dummyquestion
Habe folgende Rule:
Code: Alles auswählen
rule "Sonne geht unter, Licht geht an"
when
Channel 'astro:sun:home:set#event' triggered START
then
createTimer(now.plusMinutes(10))
[|
sendCommand(Echo_Speech, "Die Sonne geht unter, ich schalte jetzt das Licht ein.")
sendCommand(Outdoorplug, ON)
sendCommand(LichtSalz, ON)
sendCommand(LichtTV, ON)
sendCommand(LichtSchlafzimmer, ON)
sendCommand(Outdoorplug, ON)
sendCommand(LichtCouchSchalter, ON)
sendCommand(LichtVitrine, ON)
]
end
Diese Regel funktioniert prima. Allerdings moechte ich nun gern einen Timer zwischen den Echo_Speech und dem Outdoorplug von 5 Sekunden einbauen.
Koennt Ihr mir da helfen?
Re: Timer einbauen
Verfasst: 5. Mai 2021 18:57
von udo1toni
Warum baust Du da überhaupt einen Timer ein? Wenn Du das Astro Binding zum Triggern verwendest, kannst Du im entsprechenden Channel (hier sunset RangeEvent) ein Offset setzen. Du kannst also auf den 1. Timer verzichten und stattdessen ein Offset von 10 Minuten einstellen.
Danach musst Du lediglich den Timer etwas verschieben:
Code: Alles auswählen
rule "Sonne geht unter, Licht geht an"
when
Channel 'astro:sun:home:set#event' triggered START
then
Echo_Speech.sendCommand("Die Sonne geht unter, ich schalte jetzt das Licht ein.")
createTimer(now.plusSeconds(5), [|
Outdoorplug.sendCommand(ON)
LichtSalz.sendCommand(ON)
LichtTV.sendCommand(ON)
LichtSchlafzimmer.sendCommand(ON)
Outdoorplug.sendCommand(ON)
LichtCouchSchalter.sendCommand(ON)
LichtVitrine.sendCommand(ON)
])
end
Ich habe hier die Methode anstatt der Action verwendet, wann immer möglich, sollte man die Methode bevorzugen (die Action ist weniger flexibel).
Ich habe auch eine andere Form für createTimer gewählt, so wird etwas deutlicher, dass das Lambda (der Codeblock) ein Parameter der Funktion createTimer() ist. Beide Schreibweisen sind zulässig.
Outdoorplug ist zweimal in der Liste, ich nehme an, das ist Absicht wegen der Zuverlässigkeit?
Re: Timer einbauen
Verfasst: 5. Mai 2021 19:07
von Sadi191
Hallo udo1toni,
super, ich hab die Rule so uebernehmen koennen.
Kannst du mir noch sagen, wie ich den Offset im Channel einbaue?
Hier mein Item:
Code: Alles auswählen
//Anzeige Sonnenaufgang und Sonnenuntergang
DateTime Sunrise_Time "Uhrzeit Sonnenaufgang [%1$tH:%1$tM]" <sunrise> { channel="astro:sun:home:rise#start" }
DateTime Sunset_Time "Uhrzeit Sonnenuntergang [%1$tH:%1$tM]" <sunset> { channel="astro:sun:home:set#start" }
Re: Timer einbauen
Verfasst: 5. Mai 2021 22:08
von udo1toni
Wie Du schon selbst schreibst, das Offset nimmst Du im Channel vor. Das heißt, Du musst dazu das Thing bearbeiten. Und der Channel, der die Rule triggert, ist NICHT mit einem Item verknüpft! (das geht gar nicht, es ist ein Range Event Channel)
Re: Timer einbauen
Verfasst: 6. Mai 2021 17:06
von Sadi191
Hi,
hier ist das Thing:
Code: Alles auswählen
Thing astro:sun:home "11_Sonnendaten" [ geolocation="xx.xxxxxx, xx.xxxxxx", interval=60 ]
Wo muss da das Offset rein?
Re: Timer einbauen
Verfasst: 6. Mai 2021 23:01
von udo1toni
Wenn Du das Thing per textdatei definierst, musst Du die Channel mit dazu schreiben, die vom default abweichen. Z.B. so:
Code: Alles auswählen
// Astro
Thing astro:sun:home "11_Sonnendaten" [ geolocation="xx.xxxxxx, xx.xxxxxx", interval=60 ] {
Channels:
Type rangeEvent : civilDawn#event [
offset=10,
earliest="06:00",
latest="08:00"
]
Type rangeEvent : civilDusk#event [
offset=15,
earliest="16:00",
latest="22:00"
]
}
Positiver offset -> später als eigentliches Event. Negativer Offset -> früher als eigentliches Event. Die Zahl steht für Minuten.
earliest und latest sind die Grenzwerte, innerhalb denen der Trigger ausgelöst wird. Wenn also bei obigen Werten die Sonne um 5:45 Uhr aufgeht, triggert civilDawn um 6 Uhr. Geht die Sonne um 5:55 Uhr auf, triggert civilDawn um 6:05 Uhr. geht die Sonne um 7:55 Uhr auf, trigger civilDawn um 8:00 Uhr.
Re: Timer einbauen
Verfasst: 7. Mai 2021 16:51
von Sadi191
Das macht total Sinn, klasse.
Den Channel in der Rule muss ich dementsprechend nochmal anpassen oder?
Code: Alles auswählen
rule "Sonne geht unter, Licht geht an"
when
Channel 'astro:sun:home:set#event' triggered START
then
Echo_Speech.sendCommand("Die Sonne geht unter, ich schalte jetzt das Licht ein.")
createTimer(now.plusSeconds(10), [|
Outdoorplug.sendCommand(ON)
LichtSalz.sendCommand(ON)
LichtTV.sendCommand(ON)
LichtSchlafzimmer.sendCommand(ON)
Outdoorplug.sendCommand(ON)
LichtCouchSchalter.sendCommand(ON)
LichtVitrine.sendCommand(ON)
])
end
Re: Timer einbauen
Verfasst: 7. Mai 2021 21:36
von udo1toni
Nein, der Channel ändert sich nicht, nur der Zeitpunkt wird verschoben.
Re: Timer einbauen
Verfasst: 10. Mai 2021 17:11
von Sadi191
Danke, das passt prima.