Randomtimer von Sonnenuntergang bis: feste Zeit

Begonnen von topfi, 01 April 2014, 10:56:25

Vorheriges Thema - Nächstes Thema

topfi

Hallo,

ich habe zur Anwesenheitssimulation einen Randomtimer definiert. Dieser soll von Sonnenuntergang bis 19:30 Uhr aktiv sein. Das hat auch tadellos funktioniert, bis der Sonnenuntergang nach 19:30 Uhr gerutscht ist. Da jetzt die Einschaltzeit im Argument von Randomtimer NACH der Ausschaltzeit liegt, beginnt der Timer also irgendwann nach 19:30 aktiv zu werden und läuft die ganze Nacht und den Folgetag bis 19:30 durch. Wie kann ich es erreichen, dass der Timer deaktiviert wird, wenn die Einschaltzeit nach der Ausschaltzeit liegt?

Mein codeschnipsel:

define ZufallsTimerBad RandomTimer *{sunset_abs("HORIZON=-3")} Licht_Bad *{ReadingsVal("ZufallsTimerBad_aus","state","23:30")} 600
attr ZufallsTimerBad disableCond (!isabwesend())


ZufallsTimerBad_aus wird über ein webCmd eingestellt und steht derzeit auf 19:30 Uhr.

betateilchen

#1
Bitte nicht mit sunset_abs arbeiten, das macht immer irgendwann Kummer.

*{sunset("HORIZON=-3",0,"15:00","19:30")}

sorgt dafür, dass der Timer nicht vor 15 Uhr und nicht nach 19:30 Uhr eingeschaltet wird.

Steht übrigens auch in der commandref Dokumentation zum Nachlesen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

topfi

Manchmal sieht man den Wald vor Bäumen nicht.  ;) Dabei nutze ich sunset ohne _abs  für andere Timer. Jetzt habe ich aber dadurch gelernt, dass sunset_abs gerade bei länger werdenden Tagen Probleme macht, weil es zwischen dem alten und dem nächsten sunset keinen Tag addiert. Das war jetzt hier nicht das Problem, aber es ist interessant.

Mit dem puren sunset-Befehl habe ich natürlich die Möglichkeit, die ich brauche, danke.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

topfi

#4
Irgendwie funktioniert das nicht:
define ZufallsTimerBad RandomTimer *{sunset("HORIZON=-3",0,"15:00",{ReadingsVal("ZufallsTimerBad_aus","state","23:30")})} Licht_Bad *{ReadingsVal("ZufallsTimerBad_aus","state","23:30")} 600
Der RandomTimer soll frühestens 15:00 bis zur im Wert ZufallsTimerBad_aus eingestellten Zeit laufen. Jetzt bekomme ich immer nur 00:00 als Einschaltzeit.  Trage ich statt {ReadingsVal("ZufallsTimerBad_aus","state","23:30")})}  einfach "22:00" ein, geht es. Der Timer soll aber gar nicht erst anspringen, wenn der Sonnenuntergang nach ZufallsTimerBad_aus liegt. Momentan ist das 19:30. Wo liegt mein Fehler?

[Edit:] Ich glaube, ich habe es selbst gefunden: Die geschweiften Klammern um das erste ReadingsVal müssen weg. Dabei dachte ich, das sei Perl und kein FHEM... Naja, ich bin Anfänger, siehe die IF-Diskussion. Wobei: beim zweiten Readingsval müssen sie wieder hin. Das verstehe, wer will. :D

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

topfi

Nun ist der Randomtimer wieder angesprungen und lief die ganze Nacht. Anfangs- und Endzeit waren identisch auf 19:30 Uhr. Ich möchte (und hatte das auch so erwartet), dass der RandomTimer NICHT aktiviert wird, wenn Anfangs- und Endzeit identisch sind.  Gibt es da einen Trick oder muss ich wirklich eine IF-Abfrage einbauen?