[gelöst] IF und no left bracket oder no right bracket

Begonnen von hmcontrol, 22 August 2016, 17:27:02

Vorheriges Thema - Nächstes Thema

hmcontrol

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

riker1

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


FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

KernSani


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>)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

riker1

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....

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Wernieman

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 ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

riker1

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?
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Damian

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...)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

riker1

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





FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

#8
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

riker1

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    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

FHEM IF Perl if

Woraus schließt Du das es geht? Aus deinen Fehlermeldungen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

riker1

#11
Zitat von: Otto123 am 08 März 2018, 12:01:34
FHEM 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?
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz