Geschachteltes IF

Begonnen von RoBra81, 12 August 2014, 14:14:19

Vorheriges Thema - Nächstes Thema

RoBra81

Hallo,

ich habe folgendes Problem: Ich möchte innerhalb eines IF ein at definieren, welches wiederum eine IF-Auswertung beinhaltet:

define OG.ez.WS.Durchgang_1.not.long notify OG.ez.WS.Durchgang_1.*press_long.* IF ([OG.fk.AL.Kinder] eq 'deaktiviert') (...) ELSE (..., define OG.fk.AL.Kinder.at.Aktivieren at +00:10:00 IF ([OG.fk.AL.Kinder] eq 'traege') (set OG.fk.AL.Kinder aktiviert))

(stark gekürzt)

Das Problem ist nun, dass das at statt so

+00:10:00 IF ([OG.fk.AL.Kinder] eq 'traege') (set OG.fk.AL.Kinder aktiviert)

so

+00:10:00 IF (aktiviert eq 'traege') (set OG.fk.AL.Kinder aktiviert)

aussieht. Das heißt, zur Ausführung des notify werden alle Vorkommen von [OG.fk.AL.Kinder] durch den aktuellen Status des Dummies ersetzt - so auch das im definierten at.

Wie kann ich das verhindern und dafür sorgen, dass das at korrekt erzeugt wird?

Vielen Dank
Ronny

Damian

Zitat von: RoBra81 am 12 August 2014, 14:14:19
Hallo,

ich habe folgendes Problem: Ich möchte innerhalb eines IF ein at definieren, welches wiederum eine IF-Auswertung beinhaltet:

define OG.ez.WS.Durchgang_1.not.long notify OG.ez.WS.Durchgang_1.*press_long.* IF ([OG.fk.AL.Kinder] eq 'deaktiviert') (...) ELSE (..., define OG.fk.AL.Kinder.at.Aktivieren at +00:10:00 IF ([OG.fk.AL.Kinder] eq 'traege') (set OG.fk.AL.Kinder aktiviert))

(stark gekürzt)

Das Problem ist nun, dass das at statt so

+00:10:00 IF ([OG.fk.AL.Kinder] eq 'traege') (set OG.fk.AL.Kinder aktiviert)

so

+00:10:00 IF (aktiviert eq 'traege') (set OG.fk.AL.Kinder aktiviert)

aussieht. Das heißt, zur Ausführung des notify werden alle Vorkommen von [OG.fk.AL.Kinder] durch den aktuellen Status des Dummies ersetzt - so auch das im definierten at.

Wie kann ich das verhindern und dafür sorgen, dass das at korrekt erzeugt wird?

Vielen Dank
Ronny

Das ist ein Problem des IF-Befehls, wurde heute hier: http://forum.fhem.de/index.php/topic,23833.msg191049.html#msg191049 diskutiert.
Du musst beim zweiten IF mit ReadingsVal(OG.fk.AL.Kinder,"state","") statt [OG.fk.AL.Kinder] arbeiten.

Ansonsten, schau dir mal DOIF an, dann wirst du wohl für deinen Zweck ohne notify, at und IF auskommen.

Gruß

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

RoBra81

Wie muss ich das dann schreiben? Wenn ich das [OG.fk.AL.Kinder] einfach durch ReadingsVal(OG.fk.AL.Kinder,"state","") ersetze endet der Befehl vom at beim ersten Komma von ReadingsVal(OG.fk.AL.Kinder,"state",""):

+00:10:00 IF (ReadingsVal(OG.fk.AL.Kinder

Damian

Zitat von: RoBra81 am 12 August 2014, 15:10:45
Wie muss ich das dann schreiben? Wenn ich das [OG.fk.AL.Kinder] einfach durch ReadingsVal(OG.fk.AL.Kinder,"state","") ersetze endet der Befehl vom at beim ersten Komma von ReadingsVal(OG.fk.AL.Kinder,"state",""):

+00:10:00 IF (ReadingsVal(OG.fk.AL.Kinder

Den at-Define musst du zusätzlich wegen der Kommas in Klammern setzen

define OG.ez.WS.Durchgang_1.not.long notify OG.ez.WS.Durchgang_1.*press_long.* IF ([OG.fk.AL.Kinder] eq 'deaktiviert') (...) ELSE (...,(define OG.fk.AL.Kinder.at.Aktivieren at +00:10:00 IF (ReadingsVal("OG.fk.AL.Kinder","state","") eq 'traege') (set OG.fk.AL.Kinder aktiviert)))


Gruß

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

Yil

@Damian:

kann das sein, dass mein aktuelles Problem die gleiche Ursache hat, also fehlende Klammern um das geschachtelte IF nach anderen Befehlen?

https://forum.fhem.de/index.php/topic,62367.msg537680.html#msg537680

VG Yil
HM CCU3 und HCU mit ca. 50 HM-Komponenten inkl. Bausätzen
fhem auf RPi mit Sonos, EnOcean-CUL, ZWAVE-CUL und Bluetooth,
HUE, UniFi