Hallo,
nach langem rumprobieren wende ich mich nun doch frustriert ans Forum. Das Ziel ist, dass die Lampe 5x blinken soll, wenn der Bewegungssensor meldet oder das Licht manuell angemacht wird, aber nur wenn die Rolladen zu sind. Das setreading soll unabhängig von den Rolladen immer funktionieren. Die nachfolgende Variante funktioniert zwar wie gewünscht, aber im Logfile steht die Meldung "IF: no left bracket".
([3K_Sensor_Aussen_Sw_01] eq "closed" or [IT_Licht_Terasse:state] eq "on") (setreading IT_Licht_Terasse eventState on, IF [Alle_Rolladen:state] eq "down") (set Lava_Lampe alert lselect, sleep 5; set Lava_Lampe alert none) DOELSEIF ([3K_Sensor_Aussen_Sw_01] eq "open" or [IT_Licht_Terasse:state] eq "off") (setreading IT_Licht_Terasse eventState off) DOELSE
Dieser Versuch (mit linker Klammer) bringt die Meldung "invalid value, none), for parameter, alert". Funktion: keine.
([3K_Sensor_Aussen_Sw_01] eq "closed" or [IT_Licht_Terasse:state] eq "on") (setreading IT_Licht_Terasse eventState on, IF ([Alle_Rolladen:state] eq "down") (set Lava_Lampe alert lselect, sleep 5; set Lava_Lampe alert none)) DOELSEIF ([3K_Sensor_Aussen_Sw_01] eq "open" or [IT_Licht_Terasse:state] eq "off") (setreading IT_Licht_Terasse eventState off) DOELSE
An Attributen ist nur do always gesetzt. Kann mir bitte jemand auf die Sprünge helfen, wie die richtige Syntax / Klammersetzung sein muss?
Die Fehlermeldung kommt offenbar von:
set Lava_Lampe alert none
funktioniert das denn aufgerufen in der Kommandozeile?
Also ohne die IF-Bedingung mit dem Alle_Rolladen: down funktioniert die Blinkerei. Ohne Fehlermeldung.
Set Lava_Lampe alert none schaltet das Blinken nach dem sleep 5 wieder aus.
Der Aufruf in der Kommandozeile wird ohne Fehlermeldung ausgeführt.
Zitat von: rih am 05 Januar 2018, 22:34:08
Also ohne die IF-Bedingung mit dem Alle_Rolladen: down funktioniert die Blinkerei. Ohne Fehlermeldung.
Set Lava_Lampe alert none schaltet das Blinken nach dem sleep 5 wieder aus.
Der Aufruf in der Kommandozeile wird ohne Fehlermeldung ausgeführt.
Dann musst du dich an die Fehlerquelle herantasten:
z. B. ohne sleep testen
oder statt
set Lava_Lampe alert none
einfach einen Dummy setzen z. B.
set mydummy on
Hm, die Perl-Variante funktioniert ohne Fehlermeldung:
([3K_Sensor_Aussen_Sw_01] eq "closed" or [IT_Licht_Terasse:state] eq "on") (setreading IT_Licht_Terasse eventState on) ({if (ReadingsVal("Alle_Rolladen","state",0) eq "down") {fhem("set Lava_Lampe alert lselect;; sleep 5;; set Lava_Lampe alert none");;}}) DOELSEIF ([3K_Sensor_Aussen_Sw_01] eq "open" or [IT_Licht_Terasse:state] eq "off") (setreading IT_Licht_Terasse eventState off) DOELSE
Leuchtet mir nicht ein, warum es mit IF nicht gehen soll. Ist das eventuell ein Bug im DOIF?
Hi,
IF hat doch den Syntax IF () () -> https://fhem.de/commandref_DE.html#IF
Den vermisse ich hier IF [Alle_Rolladen:state] eq "down") - > es fehlt die linke Klammer ::)
Gruß Otto
Zitat von: rih am 06 Januar 2018, 00:03:26
Hm, die Perl-Variante funktioniert ohne Fehlermeldung:
([3K_Sensor_Aussen_Sw_01] eq "closed" or [IT_Licht_Terasse:state] eq "on") (setreading IT_Licht_Terasse eventState on) ({if (ReadingsVal("Alle_Rolladen","state",0) eq "down") {fhem("set Lava_Lampe alert lselect;; sleep 5;; set Lava_Lampe alert none");;}}) DOELSEIF ([3K_Sensor_Aussen_Sw_01] eq "open" or [IT_Licht_Terasse:state] eq "off") (setreading IT_Licht_Terasse eventState off) DOELSE
Leuchtet mir nicht ein, warum es mit IF nicht gehen soll. Ist das eventuell ein Bug im DOIF?
Es liegt am Semikolon, das habe ich wieder verdrängt, daher habe ich beim IF eingebaut (aber nur dort), dass man hinter Sleep ein Komma angeben kann. Daher:
([3K_Sensor_Aussen_Sw_01] eq "closed" or [IT_Licht_Terasse:state] eq "on") (setreading IT_Licht_Terasse eventState on, IF ([Alle_Rolladen:state] eq "down") (set Lava_Lampe alert lselect, sleep 5, set Lava_Lampe alert none)) DOELSEIF ([3K_Sensor_Aussen_Sw_01] eq "open" or [IT_Licht_Terasse:state] eq "off") (setreading IT_Licht_Terasse eventState off) DOELSE
Vielen Dank für die Erklärung und Hilfe, Damian. Nun funktioniert's mit dem IF wie gewünscht, keine Fehlermeldung mehr. :D