Fehlermeldung eines IF im DOIF - Bareword "on" not allowed ...

Begonnen von Pfriemler, 22 September 2017, 13:24:36

Vorheriges Thema - Nächstes Thema

Pfriemler

Jetzt bin ich nach vielen Minuten mal wieder ratlos, weil ich mit der Fehlermeldung nichts anfangen kann. Was das DOIF im einzelnen machen soll, ist erst mal unwichtig.
Mit dieser DEF des DOIF

   DEF        ([FB12_Btn_07:"Long.5"] or [DispFB_Btn_09:"Long.5"])
    (set PWRSW_HIFI off,
     (IF ([DB500HD:state] eq "absent") (set PWRSW_TV off)
      ELSE (IF ([DB500HD:recordings] == 0 and ([DB500HD:recordings_next_counter] == 0 or [DB500HD:recordings_next_counter] > 3600)) ## wenn nicht aus, keine Aufnahmen laufen und in der nächsten Stunde keine startet
        (set DB500HD shutdown, define tmpDB500off at +00:03:00 set PWRSW_TV off))
      )
     )
DOELSEIF ...


erscheint im FHEM-Log diese Fehlermeldung:

[2017.09.22 12:56:13 1: ERROR evaluating {if(on eq "absent"){fhem('set PWRSW_TV off')}else{fhem('IF (0 == 0 and (0 == 0 or 0 > 3600))          (set DB500HD shutdown, define tmpDB500off at +00:03:00 set PWRSW_TV off)')}}:Bareword "on" not allowed while "strict subs" in use at(eval 1765782) line 1.
[/b]


Die Meldung Bareword "on" bezieht sich offenbar auf das bereits ins perl übersetze IF inkl. aller abgefragten Werte. Das bemeckerte "on" stammt aus dem [DB500HD:state] - eigentlich genau die übliche Abfrage, oder habe ich was falsch gemacht?
Und jetzt kommt's: Setze ich in der Statusabfrage das fragliche Reading zusätzlich in Quotes:
     (IF ("[DB500HD:state]" eq "absent") (set PWRSW_TV off)
dann funktioniert es.

Wie lautet die Erklärung? Ich habe bisher noch nie in irgendeinem IF diese "" um das abgefragte Gerät verwendet. Auch die Tutorials zum IF setzen das nicht voraus
IF ([lamp] eq "on") (
usw. Ist das eine Spezialität eines IF im DOIF?

Ratlos ...

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Damian

#1
Das Problem ist, dass DOIF bereits eckige Klammern ersetzt, somit bekommt IF bereits nur noch die Ersetzung durch DOIF mit, daher sind hier die Anführungszeichen richtig.


Edit: DOIF erkennt normalerweise einen IF-Befehl und ersetzt dann die eckigen Klammern nicht. Diesen Mechanismus hast du offenbar durch die zusätzliche Klammerung von IF außer Kraft gesetzt.

das sollte funktionieren ( keine Klammer von dem IF)

(set PWRSW_HIFI off,  IF ([DB500HD:state] eq "absent") (set PWRSW_TV off) ...

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

Pfriemler

#2
Merci, ja, das klingt nach Sinn. Check ich morgen, jetzt werde ich den Fernsehabend nicht sabotieren.
Yep. Es funktioniert bestens. Vielen Dank!
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."