Hallo zusammen um nicht 8 DOIF anlegen zu müssen Versuche ich eines mit Templates an zu legen.
Allerdings habe ich da irgendwo einen Fehler drin. In der Hilfe finde ich immer nur versiedene IF Bedingungen aber immer nur eine DO Bedingung.
Bei mir soll ein IF mehrere Befehle ausführen.
Hier Mal meine Definition
DEF TPL_SPL ({ if ([$1] eq "on"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif ([$1] eq "off"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif ([$1] eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}})
TPL_SPL
(Garten_Diamant1,1,Garten1)
TPL_SPL
(Garten_Diamant2,2,Garten2)
TPL_SPL
(Garten_Diamant3,,Garten3)
TPL_SPL
(Garten_Diamant4,4,Garten4)
TPL_SPL
(Garten_Diamant5,5,Garten5)
TPL_SPL
(Garten_Steckdose1,6,Garten6)
TPL_SPL
(Garten_Steckdose2,7,Garten7)
TPL_SPL
(Garten_Steckdose3,8,Garten8)
Und ein List vom DOIF
Internals:
CFGFN
DEF DEF TPL_SPL ({ if ([$1] eq "on"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif ([$1] eq "off"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif ([$1] eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}})
TPL_SPL
(Garten_Diamant1,1,Garten1)
TPL_SPL
(Garten_Diamant2,2,Garten2)
TPL_SPL
(Garten_Diamant3,,Garten3)
TPL_SPL
(Garten_Diamant4,4,Garten4)
TPL_SPL
(Garten_Diamant5,5,Garten5)
TPL_SPL
(Garten_Steckdose1,6,Garten6)
TPL_SPL
(Garten_Steckdose2,7,Garten7)
TPL_SPL
(Garten_Steckdose3,8,Garten8)
FUUID 6381edc1-f33f-b458-3ef6-81fbb590b855a869
MODEL Perl
NAME di_SmartPusher_LED
NOTIFYDEV Garten_Diamant4,Garten_Diamant2,Garten_Diamant3,Garten_Steckdose1,Garten_Steckdose2,global,Garten_Steckdose3,Garten_Diamant1,Garten_Diamant5
NR 51421
NTFY_ORDER 50-di_SPL_1
STATE initialized
TYPE DOIF
VERSION 26020 2022-05-03 16:28:02
eventCount 22
READINGS:
2022-11-26 12:34:27 mode enabled
2022-11-26 12:34:27 state initialized
Regex:
accu:
collect:
cond:
Garten_Diamant1:
0:
&STATE ^Garten_Diamant1$
Garten_Diamant2:
1:
&STATE ^Garten_Diamant2$
Garten_Diamant3:
2:
&STATE ^Garten_Diamant3$
Garten_Diamant4:
3:
&STATE ^Garten_Diamant4$
Garten_Diamant5:
4:
&STATE ^Garten_Diamant5$
Garten_Steckdose1:
5:
&STATE ^Garten_Steckdose1$
Garten_Steckdose2:
6:
&STATE ^Garten_Steckdose2$
Garten_Steckdose3:
7:
&STATE ^Garten_Steckdose3$
condition:
0 if (::InternalDoIf($hash,'Garten_Diamant1','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"1"}{fhem_set MQTT2_smartpusher:sendText"Garten1 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Diamant1','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"1"}{fhem_set MQTT2_smartpusher:sendText"Garten1 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Diamant1','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"1"}{fhem_set MQTT2_smartpusher:sendText"Garten1 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
1 if (::InternalDoIf($hash,'Garten_Diamant2','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"2"}{fhem_set MQTT2_smartpusher:sendText"Garten2 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Diamant2','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"2"}{fhem_set MQTT2_smartpusher:sendText"Garten2 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Diamant2','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"2"}{fhem_set MQTT2_smartpusher:sendText"Garten2 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
2 if (::InternalDoIf($hash,'Garten_Diamant3','STATE') eq "on"){fhem_set MQTT2_smartpusher:on""}{fhem_set MQTT2_smartpusher:sendText"Garten3 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Diamant3','STATE') eq "off"){fhem_set MQTT2_smartpusher:on""}{fhem_set MQTT2_smartpusher:sendText"Garten3 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Diamant3','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade""}{fhem_set MQTT2_smartpusher:sendText"Garten3 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
3 if (::InternalDoIf($hash,'Garten_Diamant4','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"4"}{fhem_set MQTT2_smartpusher:sendText"Garten4 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Diamant4','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"4"}{fhem_set MQTT2_smartpusher:sendText"Garten4 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Diamant4','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"4"}{fhem_set MQTT2_smartpusher:sendText"Garten4 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
4 if (::InternalDoIf($hash,'Garten_Diamant5','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"5"}{fhem_set MQTT2_smartpusher:sendText"Garten5 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Diamant5','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"5"}{fhem_set MQTT2_smartpusher:sendText"Garten5 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Diamant5','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"5"}{fhem_set MQTT2_smartpusher:sendText"Garten5 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
5 if (::InternalDoIf($hash,'Garten_Steckdose1','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"6"}{fhem_set MQTT2_smartpusher:sendText"Garten6 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose1','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"6"}{fhem_set MQTT2_smartpusher:sendText"Garten6 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose1','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"6"}{fhem_set MQTT2_smartpusher:sendText"Garten6 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
6 if (::InternalDoIf($hash,'Garten_Steckdose2','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"7"}{fhem_set MQTT2_smartpusher:sendText"Garten7 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose2','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"7"}{fhem_set MQTT2_smartpusher:sendText"Garten7 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose2','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"7"}{fhem_set MQTT2_smartpusher:sendText"Garten7 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
7 if (::InternalDoIf($hash,'Garten_Steckdose3','STATE') eq "on"){fhem_set MQTT2_smartpusher:on"8"}{fhem_set MQTT2_smartpusher:sendText"Garten8 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose3','STATE') eq "off"){fhem_set MQTT2_smartpusher:on"8"}{fhem_set MQTT2_smartpusher:sendText"Garten8 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif (::InternalDoIf($hash,'Garten_Steckdose3','STATE') eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"8"}{fhem_set MQTT2_smartpusher:sendText"Garten8 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}
defs:
tpl:
TPL_SPL { if ([$1] eq "on"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Ein"}{fhem_set MQTT2_smartpusher sendImage lighton.bin} elseif ([$1] eq "off"){fhem_set MQTT2_smartpusher:on"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Aus"}{fhem_set MQTT2_smartpusher sendImage lightoff.bin} elseif ([$1] eq "on-for-timer"){ fhem_set MQTT2_smartpusher:fade"$2"}{fhem_set MQTT2_smartpusher:sendText"$3 Timer"}{fhem_set MQTT2_smartpusher sendImage timer.bin"}}
helper:
NOTIFYDEV Garten_Diamant4,Garten_Diamant2,Garten_Diamant3,Garten_Steckdose1,Garten_Steckdose2,global,Garten_Steckdose3,Garten_Diamant1,Garten_Diamant5
globalinit 1
last_timer 0
sleeptimer -1
internals:
all Garten_Diamant1:STATE Garten_Diamant2:STATE Garten_Diamant3:STATE Garten_Diamant4:STATE Garten_Diamant5:STATE Garten_Steckdose1:STATE Garten_Steckdose2:STATE Garten_Steckdose3:STATE
perlblock:
0 block_01
1 block_02
2 block_03
3 block_04
4 block_05
5 block_06
6 block_07
7 block_08
uiState:
uiTable:
Attributes:
Hoffe ihr könnt mir helfen da ich, wenn ich zum Testen block_01 setzen möchte folgenden Fehler angezeigt bekomme,
block_01
condition c01: Can't find string terminator '"' anywhere before EOF, line 1.
2022-11-26 12:43:59
mode
enabled
2022-11-26 12:43:51
state
initialized
2022-11-26 12:43:51
warning
condition c01: (Missing semicolon on previous line?)
Ich hoffe ihr könnt mir helfen habe mittlerweile soviele Varianten und Schreibweisen probiert
Warum ist die zwei hier in Anführungszeichen?
fhem_set MQTT2_smartpusher:on"$2"
Du übergibst an der Stelle eine Zahl, dann sieht dann Befehl so aus:
fhem_set MQTT2_smartpusher:on"1"
Ich glaube nicht, dass du das willst.
Habe jetzt erstmal die "leichte" seite soweit hin bekommen.
wenn button_1 gedrückt wird, schalte Steckdose_1 ein
wenn button_1 doppelt gedrückt wird, schalte Steckdose_1 aus
Da seitere ich jetzt daran bei einem langen klick die Steckdose_1 für 60 sek ein zu schalten.
Da die steckdosen kein on-for-timer können.
DEF TPL_SP
({if
([$1] eq "click off") {fhem ("set $2 on")}
elsif ([$1] eq "double_click off") {fhem ("set $2 off")}
elsif ([$1] eq "long_click off") {fhem ("set $2 on")} {fhem ("at +00:00:05 set $2 off")}})
TPL_SP (MQTT2_smartpusher:button_1,Garten_Diamant1)
TPL_SP (MQTT2_smartpusher:button_2,Garten_Diamant2)
TPL_SP (MQTT2_smartpusher:button_3,Garten_Diamant3)
TPL_SP (MQTT2_smartpusher:button_4,Garten_Diamant4)
TPL_SP (MQTT2_smartpusher:button_5,Garten_Diamant5)
TPL_SP (MQTT2_smartpusher:button_6,Garten_Steckdose1)
TPL_SP (MQTT2_smartpusher:button_7,Garten_Steckdose2)
TPL_SP (MQTT2_smartpusher:button_8,Garten_Steckdose3)
Wenn das läuft kann ich sie Syntax ja problemlos übertragen.... hoffe ich
Aber danke schonmal
Zitat von: Damian am 29 November 2022, 22:17:06
Warum ist die zwei hier in Anführungszeichen?
fhem_set MQTT2_smartpusher:on"$2"
Du übergibst an der Stelle eine Zahl, dann sieht dann Befehl so aus:
fhem_set MQTT2_smartpusher:on"1"
Ich glaube nicht, dass du das willst.
das ich da die jeweilige Zahl übergebe ist richtig,
der Fhem befehl um die LED´s 1-8 zu schalten lautet
set MQTT2_smartpusher on 1
bis
set MQTT2_smartpusher on 8
oder off
set MQTT2_smartpusher off 1
bis
set MQTT2_smartpusher off 8
oder fade
set MQTT2_smartpusher fade 1
bis
set MQTT2_smartpusher fade 8
Zitat von: Tueftler1983 am 30 November 2022, 00:34:06
das ich da die jeweilige Zahl übergebe ist richtig,
der Fhem befehl um die LED´s 1-8 zu schalten lautet
set MQTT2_smartpusher on 1
bis set MQTT2_smartpusher on 8
oder off
set MQTT2_smartpusher off 1
bis set MQTT2_smartpusher off 8
oder fade
set MQTT2_smartpusher fade 1
bis set MQTT2_smartpusher fade 8
dann ist aber:
fhem_set MQTT2_smartpusher:on"1"
ganz was anderes als das, was du willst:
set MQTT2_smartpusher on 1
das entspricht vielmehr:
fhem_set("MQTT2_smartpusher on 1")
Ich denke, du sieht, was du an deinem Template ändern musst.
hey
Zitat von: Damian am 30 November 2022, 09:35:01
dann ist aber:
fhem_set MQTT2_smartpusher:on"1"
ganz was anderes als das, was du willst:
set MQTT2_smartpusher on 1
das entspricht vielmehr:
fhem_set("MQTT2_smartpusher on 1")
Ich denke, du sieht, was du an deinem Template ändern musst.
So funktioniert dieser Abschnitt
{fhem ("set MQTT2_smartpusher on $2")}
Zitat von: Tueftler1983 am 30 November 2022, 13:58:47
hey
So funktioniert dieser Abschnitt
{fhem ("set MQTT2_smartpusher on $2")}
oder eben
{fhem_set ("MQTT2_smartpusher on $2")}
Hast du ne Ahnung wie ich ne Verzögerung in den Ausführungsteil bekomme wenn mehrere Befehle ausgeführt werden sollen?
In einem normalen DOIF mache ich das mit dem attr wait das gibt es in dieser Art DOIF nicht.
elsif ([$1] eq "off") {fhem ("set MQTT2_smartpusher off $2 ; set MQTT2_smartpusher sendText $3 ; sleep 2 ; set MQTT2_smartpusher sendImage lightoff.bin")}
Zwischen dem SmartPusher sendText und dem SmartPusher sendImage soll 1 bis 2 sek pause sein
Mein Versuch mit sleep 2 oder at +00:00:02 geht leider nicht
Zitat von: Tueftler1983 am 30 November 2022, 15:21:18
Hast du ne Ahnung wie ich ne Verzögerung in den Ausführungsteil bekomme wenn mehrere Befehle ausgeführt werden sollen?
In einem normalen DOIF mache ich das mit dem attr wait das gibt es in dieser Art DOIF nicht.
elsif ([$1] eq "off") {fhem ("set MQTT2_smartpusher off $2 ; set MQTT2_smartpusher sendText $3 ; sleep 2 ; set MQTT2_smartpusher sendImage lightoff.bin")}
Zwischen dem SmartPusher sendText und dem SmartPusher sendImage soll 1 bis 2 sek pause sein
Mein Versuch mit sleep 2 oder at +00:00:02 geht leider nicht
Dafür gibt es set_Exec: https://wiki.fhem.de/wiki/DOIF/Perl-Modus#Timer_setzen:_set_Exec.28.29
Hey
also habe es mal versucht, ich möchte in diesem Beispiel erst den Text an ein OLED senden und 3 sek danach ein Bild, leider bekomme ich die Fehlermeldung missing Strink Terminator
([$1] eq "on") {fhem ("set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3 ; set_Exec("off_timer",3,'fhem_set("MQTT2_smartpusher sendImage lightoff.bin")'))}
die Fehlermeldung
Device
Garten_Diamant1
2022-12-01 09:58:30
block_01
condition c01: Can't find string terminator '"' anywhere before EOF, line 2.
2022-12-01 10:00:44
e_Garten_Diamant1_STATE
off
2022-12-01 09:58:30
mode
enabled
2022-12-01 10:00:39
state
initialized
2022-12-01 09:58:24
warning
condition c01: (Missing semicolon on previous line?)
2022-12-01 10:00:44
Zitat von: Tueftler1983 am 01 Dezember 2022, 10:01:18
Hey
also habe es mal versucht, ich möchte in diesem Beispiel erst den Text an ein OLED senden und 3 sek danach ein Bild, leider bekomme ich die Fehlermeldung missing Strink Terminator
([$1] eq "on") {fhem ("set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3 ; set_Exec("off_timer",3,'fhem_set("MQTT2_smartpusher sendImage lightoff.bin")'))}
die Fehlermeldung
Device
Garten_Diamant1
2022-12-01 09:58:30
block_01
condition c01: Can't find string terminator '"' anywhere before EOF, line 2.
2022-12-01 10:00:44
e_Garten_Diamant1_STATE
off
2022-12-01 09:58:30
mode
enabled
2022-12-01 10:00:39
state
initialized
2022-12-01 09:58:24
warning
condition c01: (Missing semicolon on previous line?)
2022-12-01 10:00:44
set_Exec ist eine Perlfunktion und kein FHEM-Befehl. Du hast sie in die fhem-funktion gesteckt.
Hmm okay, wie muss ich das dann aufbauen??
So bekomme ich beim Ausführen einen Syntax Error
DEF TPL_SPL
({if
([$1] eq "on") {fhem ("set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3")} ; set_Exec("off_timer",3,'fhem_set("MQTT2_smartpusher sendImage lightoff.bin")')
elsif ([$1] eq "off") {fhem ("set MQTT2_smartpusher off $2 ; set MQTT2_smartpusher sendText $3 ; set MQTT2_smartpusher sendImage lightoff.bin")}
elsif ([$1] eq "on-for-timer") {fhem ("set MQTT2_smartpusher fade $2 ; set MQTT2_smartpusher sendText $3 ; set MQTT2_smartpusher sendImage lighttimer.bin")}})
TPL_SPL (Garten_Diamant1,1,Garten1)
TPL_SPL (Garten_Diamant2,2,Garten2)
TPL_SPL (Garten_Diamant3,3,Garten3)
TPL_SPL (Garten_Diamant4,4,Garten4)
TPL_SPL (Garten_Diamant5,5,Garten5)
TPL_SPL (Garten_Steckdose1,6,Garten6)
TPL_SPL (Garten_Steckdose2,7,Garten7)
TPL_SPL (Garten_Steckdose3,8,Garten8)
Und die Readings mit dem Fehler
Readings
Device
Garten_Diamant1
2022-12-01 13:26:29
block_01
condition c01: syntax error, elsif"
2022-12-01 13:26:29
e_Garten_Diamant1_STATE
off
2022-12-01 13:26:29
mode
enabled
2022-12-01 13:28:00
state
initialized
Kannst du mir helfen
In der ersten Ausführung hast du die geschweifte Klammer von if zu früh zugemacht.
Zitat([$1] eq "on") {fhem ("set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3")} ; set_Exec("off_timer",3,'fhem_set("MQTT2_smartpusher sendImage lightoff.bin")')
Jo jetzt wo du es sagst, ein Krampf mit den ganzen Klammern.
Ich teste es gleich wenn ich Zuhause bin, bin noch unterwegs.
Danke dir schonmal
Zitat von: Tueftler1983 am 01 Dezember 2022, 13:48:23
Jo jetzt wo du es sagst, ein Krampf mit den ganzen Klammern.
Tja, das ist Perl, aber die meisten Programmiersprachen arbeiten mit Klammern.
Bei Perl kannst du auch welche weglassen, z. B. bei Funktonsaufrufen:
fhem "set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3"
ZitatJo jetzt wo du es sagst, ein Krampf mit den ganzen Klammern.
spart zwar nicht den Krampf, aber Du kannst leserlicher schreiben.....
([$1] eq "on") {
fhem ("set MQTT2_smartpusher on $2 ; set MQTT2_smartpusher sendText $3")};
set_Exec("off_timer",3,'fhem_set("MQTT2_smartpusher sendImage lightoff.bin")');
}
wenn Du dann noch codemirror eingebaut hast bekommst Du eine "bunte" Darstellung und wenn Du mit der Maus an eine Klammer klickst siehst Du gleich, welche dazu gehört, oder wenn eine fehlt wird die markierte rot.
Viel Erfolg!
Sany