Hauptmenü

[Gelöst] DOIF mit Sunset

Begonnen von Der_müde_Joe, 14 Dezember 2017, 13:16:19

Vorheriges Thema - Nächstes Thema

Der_müde_Joe

Hallo,

ich habe mal wieder ein Brett vorm Kopf und muss eine doofe Frage stellen. Ich brüte nuns chon zwei Tage über einer Lösung um mit Sonnenuntergang und ,sofern Advent ist, die Weihnachtsbeleuchtung bis 22:15 einzuschalten.

Folgende Idee hatte ich:
define Weihnachtsbeleuchtung_Abends DOIF ([{sunset("HORIZON=-2.5",0,"12:00","22:14")}] and Advent==1) ((set Weihnachtsbeleuchtung on-till 22:15:00);;(set Weihnachtsbaum_Out on-till 22:15:00))

Alle Einzelfunktionen funktionieren. Also sowohl Advent gibt mir ein 1 zurück als auch sunset klappt und auch das on-till funktioniert, wenn ich es einzeln eingebe. Ich vermute irgendwo in meiner Syntax ist ein Fehler. Bitte schaut da mal drauf.

Wenn ich mir die Funktion dann im Web Interface anschaue steht da nur ??? und ich bekomme keine Fehlermeldung beim Abspeichern.

Vielen Dank
Joe

kumue

muss Advent nicht auch in eckige Klammern ?
Was ist Advent ? Ein Dummy ?

Der_müde_Joe

Advent ist aus dem Codeschnipsel hier:

https://forum.fhem.de/index.php/topic,42209.0.html

aber den in Klammern zu setzen, ist ja nicht so das Problem.

kumue

#3
aha, und wo hast du sub Advent() eingetragen ?
In die 99_myUtils.pm ?


Auf der Konsole bekommst Du - wie du schreibst - ja auch eine 1 zurückgeliefert...
fhem> {Advent}
1

Der_müde_Joe

#4
Genau da. In der 99_myUtils.pm

kumue

Also an den Bedingungen liegt es nicht...
habe mal an der Uhr gedreht und folgendes funktionierte eben

([{sunset("HORIZON=10.8",0,"12:00","22:14")}] and Advent==1) (set dummy on)

Also stimmt wohl was im Ausführungsteil nicht...

Der_müde_Joe

Okay, jetzt wird es interessant. Wie zum Geier dreht man an der Uhr? Ich warte da jedes mal nach einer Änderung einen Tag. ^^

kumue

habe nur den Wert bei Horizon geändert.. Die Sonne steht jetzt ca. 10° überm Horizont... wollte nicht bis -2.5 warten...

Denke so sollte der Ausführungsteil aussehen...
(set Weihnachtsbeleuchtung on-till 22:15:00,set Weihnachtsbaum_Out on-till 22:15:00)

Der_müde_Joe

Hallo,

vielen vielen Dank für deine Hilfe. Mit folgendem Eintrag hat es nun gerade geklappt. Wieso es vorher nicht ging, ist mir allerdings schleierhaft.

define Weihnachtsbeleuchtung_Abends DOIF ([{sunset("HORIZON=8.5",0,"12:00","22:14")}] and Advent==1) (set Weihnachtsbeleuchtung on-till 22:15:00,set Weihnachtsbaum_Out on-till 22:15:00)

Trotzdem nochmal danke.
Joe

Der_müde_Joe

#9
Hallo,

ich musste leider das gelöst wieder weg nehmen, denn, als ich die Gradzahl auf -2,5 geändert habe passiert leider wieder nichts mehr. Ich habe dann dieGradzahl auch noch zweimal erhöht, den Versuch zu wiederholen und auch dann läuft es nicht. Letzter Versuch war jetzt gerade mit -17 Grad.

define Weihnachtsbeleuchtung_Abends DOIF ([{sunset("HORIZON=-17",0,"12:00","22:14")}] and Advent==1) (set Weihnachtsbeleuchtung on-till 22:15:00,set Weihnachtsbaum_Out on-till 22:15:00)

So langsam habe ich keinen Plan mehr, woran es noch liegen kann. Zumal es ja heute Nachmittag geklappt hat. Vielleicht hat ja einer von euch noch eine Idee? Ich bin echt mit meinem Latein am Ende.

Könnte das mit dem - vor der Gradzahl zusammen hängen?

Lieben Gruß
Jens

kumue

na ich denke, als du auf -2.5 gesetzt hast, war die Zeit schon vorbei...
Das Reading timer_01_c01 müsste dir den morgigen Zeitpunkt anzeigen.
Und schau dir mal das Attribut "do always" an....

Der_müde_Joe

Hi,

danke für den Hinweis. Ich habe mir eben mal do always durchgelesen. Wenn ich das richtig verstehe, wird damit das selbe Event mehrmals getriggert. Ich verstehe nicht, wie mir das helfen soll. Zweite Sache ist, dass ich wie oben angegeben auch -17 Grad verwendet habe und natürlich habe ich drauf gachtet, dass die Zeit auch wirklich noch vor der aktuellen Uhrzeit liegt und nicht am nächsten Tag.

Lieben Gruß

kumue

Dein DOIF ist sozusagen eine Einzeiler, kein DOELSEIF, kein DOLESE.
Wenn es morgen (hoffentlich) triggert, dann hat es dein STATE cmd_1.
Ohne DOELSEIF, DOELSE und dem Attribut do always würde sich an diesem Zustand nichts ändern.
Deshalb das Attribut, damit es am nächsten (also übernächsten) Tag wieder triggert.

Das Reading timer_01_c01 verweist doch sicher auf eine morgige Uhrzeit so um 16Uhr herum... oder ?

Der_müde_Joe

Ach so,

ah jetzt ja eine Insel :D.

Na dann haue ich da mal ganz entspannt das do always rein. Worauf man nicht alles achten muss... tzzz... Da wäre ich ja nie drauf gekommen.
Ja im Moment habe ich es auf 2 Grad anstatt 2,5 gestellt, um das Minus als Fehler ausschließen zu können. Somit steht es auf etwas nach 16 Uhr, da hast du Recht. An Sonsten bleibt mir ja nur morgen abzuwarten.

Lieben Gruß und danke
Joe

Damian

Zitat von: Der_müde_Joe am 14 Dezember 2017, 21:20:13
Ach so,

ah jetzt ja eine Insel :D.

Na dann haue ich da mal ganz entspannt das do always rein. Worauf man nicht alles achten muss... tzzz... Da wäre ich ja nie drauf gekommen.
Ja im Moment habe ich es auf 2 Grad anstatt 2,5 gestellt, um das Minus als Fehler ausschließen zu können. Somit steht es auf etwas nach 16 Uhr, da hast du Recht. An Sonsten bleibt mir ja nur morgen abzuwarten.

Lieben Gruß und danke
Joe

DOIF ist halt mehr als nur ein Eventhandler (den kannst du mit notify haben).

In der Einleitung zu DOIF steht ziemlich ausführlich:

ZitatDas DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Zustandswechsel stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF