Hallo liebe Smarthomer,
Ich sehe seit 2 Tagen ein Code an, und komme nicht weiter wieso es nicht funktioniert. (Ich habe sogar das Gefühl, dass ich von lauter Bäume den Wald nicht sehen kann ...)
Code unten ist was ich im DOIF's DEF Teil habe. Beim Sonnenuntergang an, und bei Sonnenaufgang aus sollen die Lichter gehen. Bei Sonnenuntergang war alles am besten (oder so ich dachte), aber heute Morgen habe ich immer noch um sonst gewartet, dass die Lichter ausgehen.
Habt ihr eine Idee was ich falsch gemacht habe?
Vielen Dank,
Martina
([{sunset("REAL", 0, "16:30", "21:00")}]) (
fhem("set group=light:FILTER=a:nightlight=yes on");;
my $date = FmtDateTime(time());;
fhem("set Telegram message nightlight on. $date");;
) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) (
fhem("set group=light:FILTER=a:nightlight=yes off");;
my $date = FmtDateTime(time());;
fhem("set Telegram message nightlight off. $date");;
)
Ergenzung: (latitude und longitute sind gesetzt, aus der Kommandozeile gibt {sunset()} und {sunrise()} richtige Daten zurück)
Moin,
ich denke: das DOIF hängt in cmd1 fest. Die Bedingung ändert sich nicht, es wird erst heute Abend wieder getriggert.
Ich würde das als Zeitraum machen -> ([ZeitAbends - ZeitMorgens]) (set Licht on) DOELSE (set Licht off)
Für solche Fälle ist es immer gut nicht in die DEF, sondern in das list zu schauen. Da steht wesentlich mehr drin!
Gruß Otto
Moin Otto,
danke für deine Hilfe! Ich war allerdings so Blind ... ich hätte die Frage direkt anders formulieren müssen :/
Nach dem ich jetzt nach mehreren Kaffee's in dem Mittagspause auf meine Seite ein Blick geworfen habe, sehe ich:
Zitat
error
fhem("set group=light:FILTER=a:nightlight=yes off");; my $date = FmtDateTime(time());; fhem("set Telegram message nightlight off. $date");; : Unknown command fhem("set, try help.
2019-03-26 06:28:33
Also anscheind wird dem DOELSEIF ausgewertet, aber wieso stirbt es bei dem fhem funktion?! Ich bin leider immer noch nicht Klüger geworden :(
Moin,
eventuell reicht schon ein Leerzeichen zwischen den Klammern und den Anführungsstrichen.
LG
Andreas
Ich bin der Meinung Du bist bzgl. FHEM/perl Ebene etwas durcheinander. Und somit passen {} und;; nicht so ganz. Ich denke es müsste ungefähr so lauten
([{sunset("REAL", 0, "16:30", "21:00")}]) (
{fhem("set group=light:FILTER=a:nightlight=yes on");
my $date = FmtDateTime(time());
fhem("set Telegram message nightlight on. $date");}
) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) (
{fhem("set group=light:FILTER=a:nightlight=yes off");
my $date = FmtDateTime(time());
fhem("set Telegram message nightlight off. $date");}
)
Grüße Fritz
Vielen lieben Dank! Das kann gut sein, dass ich mit dem Fhem/Perl ebene durcheinander bin :) Ich werde es heute (bei Sonnenuntergang) testen!
Du hast behauptet der Ausführungsteil für cmd1 hat funktioniert!? Ich fand den Code dort höchst merkwürdig, aber bei DOIF würde es mich nicht wundern wenn es funktioniert. Deswegen sage ich zu dem Teil nichts, ich würde es völlig anders machen - aber Du hast behauptet der Teil funktioniert.
Zu meinem Vorschlag stehe ich nach wie vor, ist für mich die logischere Vorgehensweise und eigentlich sowas wie die grundlegenden Funktion von DOIF.
Wobei ich dort gern mit _abs arbeite, weil ich nicht sicher bin ob DOIF die Angabe so versteht wie ein at.
([{sunset_abs("REAL", 0, "16:30", "21:00")} - {sunrise_abs("REAL", 0, "5:30", "8:00")}]) (mach an) DOELSE (mach aus)
Gruß Otto
Zitat von: Otto123 am 26 März 2019, 16:14:57
Du hast behauptet der Ausführungsteil für cmd1 hat funktioniert!? Ich fand den Code dort höchst merkwürdig, aber bei DOIF würde es mich nicht wundern wenn es funktioniert. Deswegen sage ich zu dem Teil nichts, ich würde es völlig anders machen - aber Du hast behauptet der Teil funktioniert.
Zu meinem Vorschlag stehe ich nach wie vor, ist für mich die logischere Vorgehensweise und eigentlich sowas wie die grundlegenden Funktion von DOIF.
Wobei ich dort gern mit _abs arbeite, weil ich nicht sicher bin ob DOIF die Angabe so versteht wie ein at.
([{sunset_abs("REAL", 0, "16:30", "21:00")} - {sunrise_abs("REAL", 0, "5:30", "8:00")}]) (mach an) DOELSE (mach aus)
Gruß Otto
Ich habe inzwischen noch mehr "Intelligenz" ins DOIF eingebaut, selbst Zeitfunktionen, die täglich um paar Minuten zunehmen, wie jetzt z. B. sunrise, weil die Tage länger werden, bringen das Modul nicht aus dem Rhythmus - das Modul triggert dennoch erst am nächsten Tag und nicht paar Minuten später. Das gilt im DOIF auch für selbstgeschriebene Zeitfunktionen und nicht nur für sunset oder sunrise.
Nach @Fritz Muster mich auf die Klammer hingewiesen hat, habe ich die korrigiert, und wurden beide Befehle ausgeführt. (Damit nehme ich die Telegram Nachricht auch heraus :))
@Otto123 weil ich die Klammern durcheinandergebracht haben, hat wahrscheinlich die erste Teil funktioniert bevor ich es gepostet habe ... :/ (ich fing an ohne DOELSEIF...)
Ich bedanke mich für den Alternativen Darstellung der Funktionalität.
Ich kenne noch nicht alle Möglichkeiten bei FHEM und orientiere mich an Beispielen (wenn ich eine finde).
([{sunset("REAL", 0, "16:30", "21:00")}]) ({
fhem("set group=light:FILTER=a:nightlight=yes on");;
fhem("set Telegram message nightlight on.");;
}) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) ({
fhem("set group=light:FILTER=a:nightlight=yes off");;
fhem("set Telegram message nightlight off. ");;
})
Moin,
wobei der ganze Kram mit Perl, fhem() und ;; immer noch genauso nützlich ist wie ... :-[
Es sollte - mit nur FHEM Befehlen - genauso gehen. ;D
(set group=light:FILTER=a:nightlight=yes off , set Telegram message nightlight off.)
Auch mit Zeitangabe wäre es ohne den ganzen Wirr Warr gegangen :D, kannst Du gern einfach in der FHEM Kommandozeile probieren:set Telegram message nightlight off.{(FmtDateTime(time()))}
Gruß Otto