FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hmcontrol am 22 August 2016, 17:27:02

Titel: [gelöst] IF und no left bracket oder no right bracket
Beitrag von: hmcontrol am 22 August 2016, 17:27:02
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
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 06 März 2018, 20:44:51
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


Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag 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:

Zitat
IF (<condition>) (<FHEM commands1>) ELSE (<FHEM commands2>)
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 07 März 2018, 07:50:45
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....

Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag 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 ...
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 07 März 2018, 12:52:13
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?
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: Damian am 07 März 2018, 14:52:56
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...)

Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 08 März 2018, 08:28:51
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





Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: Otto123 am 08 März 2018, 09:59:29
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
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 08 März 2018, 11:44:12
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?
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag 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?
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: riker1 am 08 März 2018, 12:25:41
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?
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: Damian am 08 März 2018, 12:34:45
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.
Titel: Antw:[gelöst] IF und no left bracket oder no right bracket
Beitrag von: Otto123 am 08 März 2018, 12:44:41
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.