Hauptmenü

[Gelöst] DOIF mit IF

Begonnen von rih, 05 Januar 2018, 18:52:47

Vorheriges Thema - Nächstes Thema

rih

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?

Damian

Die Fehlermeldung kommt offenbar von:

set Lava_Lampe alert none

funktioniert das denn aufgerufen in der Kommandozeile?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rih

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

Damian

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

rih

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?

Otto123

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

Damian

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



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

rih

Vielen Dank für die Erklärung und Hilfe, Damian. Nun funktioniert's mit dem IF wie gewünscht, keine Fehlermeldung mehr.  :D