Moin,
ich habe ein kleines Problem in einem DOIF mit sunrise. Geschaltet werden soll zwischen 6:30 und Sonnenaufgang. Ich habe verstanden, dass ich in einem Zeitintervall
[6:30 - {sunrise("HORIZON=3.5",0)}]
das Problem bekomme, dass irgendwann der Sunrise früher oder gleich zu 6:30 auftritt und dies dann nicht mehr funktioniert. Nun habe ich versucht, irgendwie per and-Verknüpfung in die Bedingung zu bekommen, dass dieser DOIF-Zweig nur einschaltet, wenn {sunrise("HORIZON=3.5",0)} nach 6:30 liegt. Ich habe alle möglichen Klammervarianten und < > gt lt, etc. versucht, bekomme es aber nicht hin.
Würde mir jemand kurz unter die Arme greifen und ein DOIF formulieren, welches zwischen 6:30 und sunrise einschaltet und sonst ausschaltet? Sobald der sunrise also vor 6:30 liegt, soll erst garnicht eingeschaltet werden.
Vielen Dank
Michael
Die Zeitangabe ist vekehrt, daher [HH:MM- ...]
Ja, sorry... das kommt vom schnellen Schreiben, ist aber nicht das eigentliche Problem. Insgesamt läuft das DOIF
[06:30 - {sunrise("HORIZON=3.5",0)}]
irgendwann in den Zustand, da liegt der Sonnenaufgang vor oder gleichauf mit 06:30 und dann ist im Zeitintervall das Ende vor dem Anfang, so dass der Ende-Timer korrekterweise auf dem nächsten Tag liegt.
Ich wollte nun diesen Teil des DOIF per und-Verknüpfung mit der Bedingung (hier ins Unreine geschrieben)
and {sunrise("HORIZON=3.5",0)} < 06:30
dazu bringen, nur dann überhaupt zu triggern, wenn der Sonnenaufgang vor 06:30 liegt. Ansonsten soll das DOIF immer im DOELSE-Zweig stehen. An dieser Stelle komme ich nun nicht weiter.
Gruß
Michael
and {sunrise("HORIZON=3.5",0)} lt "06:30"
Die Zeitangabe ist eine Zeichenkette, daher musst Du einen Operator für Zeichenkettenvergleiche nehmen und die Zeichenkette auch als solche Kennzeichnen mit "".
Alles klar, danke! Das war mir so nicht bewusst, werde ich später ausprobieren.
Danke
Michael
Irgendwie habe ich das mit dem Zeichenkettenvergleich nicht geschafft. Es hat immer geschaltet. Nach vielen Versuchen bin ich nun anscheinend testweise hiermit erfolgreich (sunrise liegt bei 08:00 und ein paar Sekunden:
(
[ 19:57:30 - 19:58 ] and [{ sunrise("HORIZON=3.5",0)}] < [08:10]
)
()
DOELSE
()
Hiermit schaltet das Teil beim Anfang in CMD1 und beim Ende nach CMD2. Mit dem Vergleichsoperator > schaltet es gleich nach CMD2, es scheint also zu gehen.
Sunrise liefert HH:MM:SS, kann sein, dass der Vergleich nur mit "06:30:00" klappt.
Zitat von: Ellert am 12 Oktober 2016, 20:09:08
Sunrise liefert HH:MM:SS, kann sein, dass der Vergleich nur mit "06:30:00" klappt.
Das hatte ich auch versucht, geht nicht.
Zitat von: MichaelO am 11 Oktober 2016, 21:47:22
Moin,
ich habe ein kleines Problem in einem DOIF mit sunrise. Geschaltet werden soll zwischen 6:30 und Sonnenaufgang. Ich habe verstanden, dass ich in einem Zeitintervall
[6:30 - {sunrise("HORIZON=3.5",0)}]
das Problem bekomme, dass irgendwann der Sunrise früher oder gleich zu 6:30 auftritt und dies dann nicht mehr funktioniert. Nun habe ich versucht, irgendwie per and-Verknüpfung in die Bedingung zu bekommen, dass dieser DOIF-Zweig nur einschaltet, wenn {sunrise("HORIZON=3.5",0)} nach 6:30 liegt. Ich habe alle möglichen Klammervarianten und < > gt lt, etc. versucht, bekomme es aber nicht hin.
Würde mir jemand kurz unter die Arme greifen und ein DOIF formulieren, welches zwischen 6:30 und sunrise einschaltet und sonst ausschaltet? Sobald der sunrise also vor 6:30 liegt, soll erst garnicht eingeschaltet werden.
Vielen Dank
Michael
Du kannst doch bei sunrise weitere Parameter angeben, nämlich wann frühestens die Sonne aufgehen soll, dort musst du 06:30:01 angeben, dann würde DOIF im schlimmsten Falle ein Intervall von 06:30 bis 06:30:01 bekommen.
Ein Intervall 06:30-06:30 ist z. Zt. beim DOIF ungünstig, da es um 06:30 einschaltet und nicht mehr ausschaltet. Zukünftig soll es gar nicht schalten und nicht wahr sein, wenn die Einschalt- und die Ausschaltzeit gleich sind.
Gruß
Damian
Hi Damian,
das hatte ich so auch zuerst. Dann schaltet das DOIF aber im ungünstigsten Fall die Verbraucher für eine Sekunde ein und wieder aus. das wollte ich irgendwie vermeiden. Ich hab es ungefähr so testweise formuliert...
(
[06:30|12345] and [{ sunrise("HORIZON=3.5",0)}] > [06:30]
)
...einschalten
DOELSEIF
(
[{ sunrise("HORIZON=3.5",0)}]
)
...ausschalten
Bin mal gespannt, ob das geht. Die Problematik beim DOIF mit Intervall Anfang = Ende hatte ich verfolgt. Ich bekam nur irgendwie den Zeitvergleich nicht formuliert. Mal sehen, ob das nun klappt.
Ich verwende sowas in einer Definition
and sunrise_abs(7200) ge $hms
das funktioniert.
sunrise muss nur in geschweifte Klammern gesetzt werden wenn es in eckigen Klammern verwendet wird. Das war mir bei den vorherigen Beiträgen entfallen
Also richtig wäre
([{sunrise("HORIZON=3.5",0)}|8] and sunrise("HORIZON=3.5",0) lt "06:30:00")
(set ...)
...
Das ist ja alles garnicht so trivial. Ich hatte es dank des Hinweises nun ohne jede Klammer versucht, nix ging. Egal ob mit lt, gt, le, ge... immer schien diese Bedingung false zu liefern. Komischerweise funktionierte der Vergleich aber anstatt der festen Zeit in "" mit $hms. Dann hab ich im Vergleich die Sekunden in den "" weggelassen und siehe da, es scheint zu gehen.
Im Test funktionierte diese Bedingung also erst einmal wie erwartet, Sunrise mit Horizon = -3.5 lag bei kurz nach 8 Uhr.
Dieses DOIF schaltet beim Eintritt in die Zeitspanne ein und beim Verlassen aus:
(
[12:25:50 - 12:25:55] and sunrise("HORIZON=3.5",0) gt "06:30"
)
(
## Dinge an
)
DOELSE
(
## Dinge aus
)
Und dieses schaltet bereits beim Eintritt aus (Startpunkt war initialized)
(
[12:25:50 - 12:25:55] and sunrise("HORIZON=3.5",0) lt "06:30"
)
(
## Dinge an
)
DOELSE
(
## Dinge aus
)
ZitatUnd dieses schaltet bereits beim Eintritt aus (Startpunkt war initialized)
Das ist klar, denn sunrise ist um 12:25:50 grösser als 6:30, daher ist die Bedingung logisch unwahr und der DOELSE-Fall tritt ein.
Ich gehe mal davon aus, dass Du dies
Zitatein DOIF formulieren, welches zwischen 6:30 und sunrise einschaltet und sonst ausschaltet? Sobald der sunrise also vor 6:30 liegt, soll erst garnicht eingeschaltet werden.
noch erreichen möchtest.
Probiers mal so
([06:30] and sunrise("HORIZON=3.5",0) ge $hms) Schaltet 6.30 Uhr ein, wenn sunrise größer oder gleich dieser Uhrzeit ist.
(set ...)
DOELSEIF ([{sunrise("HORIZON=3.5",0)}]) Wenn eingeschaltet war, wird zu sunrise ausgeschaltet.
(set ...)
Sorry für die Verwirrung. Ich hatte die beiden DOIF nur gepostet, um zu zeigen, dass der Syntax so korrekt ist. Ich hatte ja geschrieben, dass es so funktioniert.
Bei Deiner Formulierung klappt das aber nicht ganz, denn Du vergleichst mit "ge $hms". Wenn hier der Sonnenaufgang exakt 05:30:00 wäre, dann stünde in der ersten Bedingung (06:30 und 06:30:00 später oder gleich 06:30:00) und das ist wahr. In der Else-Bedingung triggert 06:30:00 ebenfalls, so dass ein undefinierter Zustand entsteht.
Ich habe den Vergleich deswegen mit gt durchgeführt, dann sollte es klappen.
Danke für die Hilfe nochmal!
Hallo,
ich teste auch schon länger an einer Formel für dieses Problem. Da ich irgendwann der Meinung war, dass meine Logik eigentlich stimmen müsste, es aber trotzdem nicht funktionierte, gab ich einfach mal {sunrise()} in die Befehlszeile ein. Und das erhalte ich heute als Antwort: 31:09:51 ??? sunset gibt mir etwas ähnlich Unlogisches zurück. Da können ja keine Vergleiche mit normalen Zeiten zu einem sinnvollen Ergebnis führen.
Hat jemand eine Idee, wie das zustande kommt?
Zitat von: Qualle am 14 November 2016, 20:38:32
Hallo,
ich teste auch schon länger an einer Formel für dieses Problem. Da ich irgendwann der Meinung war, dass meine Logik eigentlich stimmen müsste, es aber trotzdem nicht funktionierte, gab ich einfach mal {sunrise()} in die Befehlszeile ein. Und das erhalte ich heute als Antwort: 31:09:51 ??? sunset gibt mir etwas ähnlich Unlogisches zurück. Da können ja keine Vergleiche mit normalen Zeiten zu einem sinnvollen Ergebnis führen.
Hat jemand eine Idee, wie das zustande kommt?
ganz einfach, der nächste Schaltpunkt ist morgen um (31-24):09:51 also 07:09:51. Damit kann at und DOIF umgehen.
Edit:
{sunrise_abs()}
macht das so wie du es erwartest.
;D ;D ;D Danke, man lernt nie aus...
Moin Moin,
Gestern Abend ging der Twilight falsch.
Der Grund ist einfach, die Zeitvershiebung. Twilight setzt seine Readings um Mitternacht, dannach wird umgestellt.
Frage: Lässt sich das irgendwie vermeiden? bekommtmal Twilight dazu die Zeitumsellung zu berücksichtigen?
Oderhilft evtl ein Reboot nachder Zeitumstellung?
Danke & Grüße
Frank