Es hat mich heute ne halbe Stunde - ja, hier Witze über IQ usw. - gekostet den Fehler in folgendem Befehl zu finden, den ich über die Weboberfläche absetzen wollte:
define KellerFeuchtCheck at *01:00:00 IF (ReadingsVal('UG_HK_TH','humidity',0) > 80)
{\
DebianMail('a@b.de','FHEM: Keller feucht!','Keller hat mehr als 80% Feuchtigkeit.');;\
}
Es gab die Fehlermeldung: " IF: no left bracket:"
Des Rätselslösung war, dass die runden Klammern noch fehlten. Richtig (zumindest funktioniert es) ist:
define KellerFeuchtCheck at *01:00:00 IF (ReadingsVal('UG_HK_TH','humidity',0) > 80) ({DebianMail('a@b.de','FHEM: Keller feucht!','Keller hat mehr als 80% Feuchtigkeit.')})
Falls noch mal jemand über das Thema stolpert ... dann findet er vielleicht mit google diese Lösung und sie hilft.
Grüße
Hallo
habe das zwar gelesen, aber irgendwie nicht richtig umgesetzt.
1_FTK3_open_on return value: IF: no left bracket: FmtTime(time()) >sunset() {fhem("set room=1_TL2 on-for-timer 5")}
auch mit neuen klammern: Kommt der Fehler:
1_FTK3_open_on return value: IF: no left bracket: FmtTime(time()) >sunset() ({fhem("set room=1_TL2 on-for-timer 5")})
defmod 1_FTK3_open_on notify HM_480AA7.open IF FmtTime(time()) >sunset() ( {fhem("set room=1_TL2 on-for-timer 5")})
was mache ich denn da falsch?
Danke
defmod 1_FTK3_open_on notify HM_480AA7.open IF (FmtTime(time()) >sunset()) ( {fhem("set room=1_TL2 on-for-timer 5")})
siehe Commandref:
Zitat
IF (<condition>) (<FHEM commands1>) ELSE (<FHEM commands2>)
Zitat von: KernSani am 06 März 2018, 22:34:05
defmod 1_FTK3_open_on notify HM_480AA7.open IF (FmtTime(time()) >sunset()) ( {fhem("set room=1_TL2 on-for-timer 5")})
siehe Commandref:
Hi KernSani,
danke,
habe es nun geändert in
defmod 1_FTK3_open_on notify HM_480AA7.open {fhem("set room=1_TL2 on-for-timer 5") if (FmtTime(time()) >sunset()) })
dann geht es .
Dachte ich könnte den if Teil auch vorher abfragen....
jetzt hast Du ein perl-if. Vorher war es ein FHEM IF ....
Wobei .. warum Du so häufig auf die Perl-Ebene springst ist mir ein Rätsel ...
Zitat von: Wernieman am 07 März 2018, 09:11:12
jetzt hast Du ein perl-if. Vorher war es ein FHEM IF ....
Wobei .. warum Du so häufig auf die Perl-Ebene springst ist mir ein Rätsel ...
finde das ist manchmal einfacher beim Auslesen von Variablen.
...liegt aber sicher an meinem mangelnden Verständnis der Ebenen....
Hat es Nachteile?
Zitat von: riker1 am 07 März 2018, 12:52:13
finde das ist manchmal einfacher beim Auslesen von Variablen.
...liegt aber sicher an meinem mangelnden Verständnis der Ebenen....
Hat es Nachteile?
Etwas Performance:
IF (...) (FHEM-Ebene:{Perl-Ebene: fhem" FHEM-Ebene: set ..."
dann doch besser gleich angeben:
IF (...) (FHEM-Ebene: set...)
Zitat von: Damian am 07 März 2018, 14:52:56
...
dann doch besser gleich angeben:
IF (...) (FHEM-Ebene: set...)
super.
damit geht es nun
defmod 11_FTK3_open_on notify HM_480AA7.open if ( FmtTime(time()) lt sunset_abs(+4600) ) ( set room=1_TL2 on-for-timer 5)
hatte vorher die Klammern um die Bedingung vergessen.
Leider bin ich nur Quereinsteiger und hangele mich so durch die Probleme.
Danke für die Hilfen
Zitat von: riker1 am 08 März 2018, 08:28:51
damit geht es nun
Glaub ich irgendwie nicht, Du hast immer noch nicht verstanden, dass es IF und if gibt.
Ein kleines if an der Stelle in deinem Code sollte aus meiner Sicht nicht gehen. Edit: ist an der Stelle egal
Gruß Otto
Zitat von: Otto123 am 08 März 2018, 09:59:29
Glaub ich irgendwie nicht, Du hast immer noch nicht verstanden, dass es IF und if gibt.
Ein kleines if an der Stelle in deinem Code sollte aus meiner Sicht nicht gehen.
Gruß Otto
das hatte mich ja auch verwirrt.Dachte hätte es verstanden...
aber das kleine
if geht: so wie ich es verstanden habe ein FHEM if, oder?
logauszug:
2018.03.08 11:37:52.614 5 : Triggering 11_FTK3_open_on
2018.03.08 11:37:52.614 4 : 11_FTK3_open_on exec if ( FmtTime(time()) lt sunset_abs(+4600) || FmtTime(time()) lt sunsise_abs(-8600) ) ( set room=1_TL2 on-for-timer 5000)
2018-03-08 11:37:52.632 CUL_HM HM_47AC93 set_on-for-timer 5000
2018.03.08 11:37:52.634 3 : 11_FTK3_open_on return value: Unknown argument on-for-timer, choose one of active:noArg addRegexpPart inactive:noArg removeRegexpPart Unknown argument on-for-timer, choose one of active:noArg addRegexpPart inactive:noArg removeRegexpPart Unknown argument on-for-timer, choose one of active:noArg addRegexpPart inactive:noArg removeRegexpPart Unknown argument on-for-timer, choose one of
defmod 14_FTK3_open_on notify HM_480AA7.open if ( FmtTime(time()) lt sunset_abs(+14600) ) ({fhem(" set room=1_TL2 on-for-timer 5")})
geht auch so:
defmod 16_FTK3_open_on notify HM_480AA7.open if ( FmtTime(time()) lt sunset_abs(+14600) ) (set room=1_TL2 on-for-timer 5)
habe ich was übersehen?
FHEM (https://fhem.de/commandref_DE.html#IF) IF Perl if
Woraus schließt Du das es geht? Aus deinen Fehlermeldungen?
Zitat von: Otto123 am 08 März 2018, 12:01:34
FHEM (https://fhem.de/commandref_DE.html#IF) IF Perl if
Woraus schließt Du das es geht? Aus deinen Fehlermeldungen?
naja, das Licht geht an.
und der entsprechende Trigger wird geloggt?
hier die unterschiedlichen Variante.
Die Fehlermeldung ist ja nur eine "Info" mit dem on-for-timer
2018.03.08 12:23:53.483 5 : Triggering 11_FTK3_open_on
2018.03.08 12:23:53.483 4 : 11_FTK3_open_on exec if ( FmtTime(time()) lt sunrise_abs(+4600) || FmtTime(time()) gt sunset_abs(-5600) ) ( set room=1_TL2 on-for-timer 5000)
2018.03.08 12:23:53.484 5 : Triggering 15_FTK3_open_on
2018.03.08 12:23:53.484 4 : 15_FTK3_open_on exec IF (FmtTime(time()) lt sunrise_abs(+5000)) ( {fhem("set room=1_TL2 on-for-timer 5")})
2018.03.08 12:23:53.485 5 : Triggering 16_FTK3_open_on
2018.03.08 12:23:53.485 4 : 16_FTK3_open_on exec if ( FmtTime(time()) lt sunset_abs(+14600) ) (set room=1_TL2 on-for-timer 5)
2018-03-08 12:23:53.497 CUL_HM HM_47AC93 set_on-for-timer 5
2018.03.08 12:23:53.497 3 : 16_FTK3_open_on return value: Unknown argument on-for-timer, choose one of
oder ?
Dachte komme nur mit den { }auf die Perl Ebene?
Es ist ganz einfach.
FHEM arbeitet nicht kontextsensitiv.
Wenn du in der Kommandozeile (auf der FHEM-Ebene) if eingibst, dann bekommst du die Meldung von IF, d.h. if wird als IF von FHEM interpretiert. Es ist für Anfänger etwas unglücklich, weil sie nicht bemerken, dass es zwei verschiedene Befehle sind.
Ja habe ich auch gerade gemerkt :) gebe mich geschlagen - und oute mich als Doku Leser:
ZitatBeim IF-Befehl (IF in Großbuchstaben) handelt es sich um einen FHEM-Befehl. Der Befehl kann überall dort genutzt werden, wo FHEM-Befehle vorkommen dürfen. Im Gegensatz zu Perl-if (if in Kleinbuchstaben) bleibt man auf der FHEM-Ebene und muss nicht auf die Perl-Ebene, um FHEM-Befehle mit Hilfe der fhem-Funktion auszuführen.