Im DOIF von Perl auf FHEM mit IF, ich brauche Eure Hilfe

Begonnen von Dirk070, 24 August 2019, 21:27:31

Vorheriges Thema - Nächstes Thema

Dirk070

Hallo zusammen,

ich stehe auf dem Schlauch....

Folgendes DOIF:
([TestDummy] eq "on" or [TestDummy] eq "off" )
( {
Log 1, "--> Test-Start <--";;

fhem ("sleep 1,
##IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off,set CCU_OG_BD_BSL_FLUR datapoint 8.COLOR 6 8.LEVEL 0,set CCU_OG_BD_BSL_FLUR datapoint 12.COLOR 6 12.LEVEL 0)
IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off)
"
);;

Log 1, "--> Test-Ende <--";;
} )


Fehler:
2019.08.24 21:21:03 1: PERL WARNING: Bareword found where operator expected at (eval 599980) line 1, near ""sleep 1,   IF (Off eq "Off"
2019.08.24 21:21:03 3: eval: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1,   IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }
2019.08.24 21:21:03 1: PERL WARNING: String found where operator expected at (eval 599980) line 1, near "Off") (set Bad_LED_Mode Off) ""
2019.08.24 21:21:03 3: eval: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1,   IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }
2019.08.24 21:21:03 1: ERROR evaluating { Log 1, "--> Test-Start <--";;  fhem ("sleep 1,   IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }: syntax error at (eval 599980) line 1, near ""sleep 1,   IF (Off eq "Off"

2019.08.24 21:21:03 2: di_test: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1,   IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }: syntax error at (eval 599980) line 1, near ""sleep 1,   IF (Off eq "Off"


Ich stehe auf dem Schlauch, Off eq "Off", muss ich einen Part escapen?
PS: Dieser Test-DOIF ist natürlich Teil einer größeren Logik, hier zum Testen nur reduziert.

Danke Euch vorab und schöne Grüße
Dirk

Ma_Bo

Warum so kompliziert, versuch doch mal im DOIF

define Test_DOIF DOIF ([TestDummy] eq "on" or [TestDummy] eq "off") (IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off))

attr Test_DOIF wait 1


Damit wird bei on oder off getriggert und 1 sekunde gewartet und dann die IF Abfrage gemacht.

Falls du perl dringend brauchst, ich könnt mir vorstellen dass das Komma falsch ist, das dort ein ; erwartet wird...

Zitat([TestDummy] eq "on" or [TestDummy] eq "off" )
( {
Log 1, "--> Test-Start <--";;

fhem ("sleep 1, <------------
##IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off,set CCU_OG_BD_BSL_FLUR datapoint 8.COLOR 6 8.LEVEL 0,set CCU_OG_BD_BSL_FLUR datapoint 12.COLOR 6 12.LEVEL 0)
IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off)
"
);;

Log 1, "--> Test-Ende <--";;
} )
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Dirk070

Danke Dir erstmal!!!

Der eher komplizierte Aufbau ist leider an der Stelle (im produktiven System) notwendig.
Hier ist das nur zu Testzwecken minimiert.

Der Hinweis aufs Semikolon statt Komma war leider nicht die Lösung.

Fehlermeldung:
2019.08.25 16:32:28 1: PERL WARNING: Bareword found where operator expected at (eval 624630) line 1, near ""sleep 1;  IF (Off eq "Off"
2019.08.25 16:32:28 3: eval: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1;  IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }
2019.08.25 16:32:28 1: PERL WARNING: String found where operator expected at (eval 624630) line 1, near "Off") (set Bad_LED_Mode Off) ""
2019.08.25 16:32:28 3: eval: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1;  IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }
2019.08.25 16:32:28 1: ERROR evaluating { Log 1, "--> Test-Start <--";;  fhem ("sleep 1;  IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }: syntax error at (eval 624630) line 1, near ""sleep 1;  IF (Off eq "Off"

2019.08.25 16:32:28 2: di_test: { Log 1, "--> Test-Start <--";;  fhem ("sleep 1;  IF (Off eq "Off") (set Bad_LED_Mode Off) " );;  Log 1, "--> Test-Ende <--";; }: syntax error at (eval 624630) line 1, near ""sleep 1;  IF (Off eq "Off"

Damian

versuch mal:

([TestDummy] eq "on" or [TestDummy] eq "off" )
({Log 1, "--> Test-Start <--"})
(IF ([Bad_LED_Status:state] eq "Off") (set Bad_LED_Mode Off,set CCU_OG_BD_BSL_FLUR datapoint 8.COLOR 6 8.LEVEL 0,set CCU_OG_BD_BSL_FLUR datapoint 12.COLOR 6 12.LEVEL 0),{Log 1, "--> Test-Ende <--"})

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