Hallo, ich habe noch mal eine Frage zu Variablen in DOIF's.
{my $Info=ReadingsVal("Geburtstagsbenachrichtigung","next_text","Ersatzwert");fhem("set Wohnzimmerlautsprecher speak \"Tagen ist der $Info\"");}
Liefert mir ja eine verbale Ausgabe auf einem Lautsprecher, dabei steht die Ansage selbst ja in Anführungszeichen.
Wenn ich aber einfach nur ein "set sz_rolladen_Schlafzimmerfenster off" (wobei off ein Reading darstellt) erreichen will funktioniert diese Methode nicht.
{my $stateold=ReadingsVal("sz_rolladen_Schlafzimmerfenster","state_old","Ersatzwert");fhem("set sz_rolladen_Schlafzimmerfenster \"$stateold"")}
bringt jedenfalls keine Reaktion. Das DOIF wird zwar getriggert, aber der Command wird nicht ausgeführt.
Hier das List des DOIF's:
Internals:
CFGFN
DEF (([sz_structure_schlafzimmerfenster] eq "open") and ([Anwesenheitsstatus] eq "1") and (([sz_rolladen_Schlafzimmerfenster] eq "off") or ([sz_rolladen_Schlafzimmerfenster] < 20)))
(set sz_rolladen_Schlafzimmerfenster 20)
DOELSEIF (([sz_structure_schlafzimmerfenster] eq "closed") and ([Anwesenheitsstatus] eq "1"))
(set sz_rolladen_Schlafzimmerfenster [sz_rolladen_Schlafzimmerfenster:stateold])
DOELSEIF (([sz_structure_schlafzimmerfenster] eq "closed") and ([Anwesenheitsstatus] eq "1"))
{my $stateold=ReadingsVal("sz_rolladen_Schlafzimmerfenster","state_old","Ersatzwert");fhem("set sz_rolladen_Schlafzimmerfenster \"$stateold"")}
FUUID 5ffad587-f33f-793a-ffc3-8bd3a7f17206bcfd
MODEL FHEM
NAME schlafzimmerrolle_lueften
NOTIFYDEV Anwesenheitsstatus,global,sz_rolladen_Schlafzimmerfenster,sz_structure_schlafzimmerfenster
NR 29276
NTFY_ORDER 50-schlafzimmerrolle_lueften
STATE cmd_2
TYPE DOIF
VERSION 23466 2021-01-03 17:14:46
.attraggr:
.attrminint:
READINGS:
2021-01-10 11:55:06 Device sz_structure_schlafzimmerfenster
2021-01-10 11:55:06 cmd 2
2021-01-10 11:55:06 cmd_event sz_structure_schlafzimmerfenster
2021-01-10 11:55:06 cmd_nr 2
2021-01-10 11:55:06 e_sz_structure_schlafzimmerfenster_STATE closed
2021-01-10 11:55:06 error set sz_rolladen_Schlafzimmerfenster : no value specified
2021-01-10 11:43:54 mode enabled
2021-01-10 11:55:06 state cmd_2
Regex:
accu:
cond:
Anwesenheitsstatus:
0:
&STATE ^Anwesenheitsstatus$
1:
&STATE ^Anwesenheitsstatus$
2:
&STATE ^Anwesenheitsstatus$
sz_rolladen_Schlafzimmerfenster:
0:
&STATE ^sz_rolladen_Schlafzimmerfenster$
sz_structure_schlafzimmerfenster:
0:
&STATE ^sz_structure_schlafzimmerfenster$
1:
&STATE ^sz_structure_schlafzimmerfenster$
2:
&STATE ^sz_structure_schlafzimmerfenster$
attr:
cmdState:
wait:
waitdel:
condition:
0 (::InternalDoIf($hash,'sz_structure_schlafzimmerfenster','STATE') eq "open") and (::InternalDoIf($hash,'Anwesenheitsstatus','STATE') eq "1") and ((::InternalDoIf($hash,'sz_rolladen_Schlafzimmerfenster','STATE') eq "off") or (::InternalDoIf($hash,'sz_rolladen_Schlafzimmerfenster','STATE') < 20))
1 (::InternalDoIf($hash,'sz_structure_schlafzimmerfenster','STATE') eq "closed") and (::InternalDoIf($hash,'Anwesenheitsstatus','STATE') eq "1")
2 (::InternalDoIf($hash,'sz_structure_schlafzimmerfenster','STATE') eq "closed") and (::InternalDoIf($hash,'Anwesenheitsstatus','STATE') eq "1")
do:
0:
0 set sz_rolladen_Schlafzimmerfenster 20
1:
0 set sz_rolladen_Schlafzimmerfenster [sz_rolladen_Schlafzimmerfenster:stateold]
2:
0 {my $stateold=ReadingsVal("sz_rolladen_Schlafzimmerfenster","state_old","Ersatzwert");fhem("set sz_rolladen_Schlafzimmerfenster \"$stateold"")}
3:
helper:
DEVFILTER ^global$|^sz_structure_schlafzimmerfenster$|^sz_rolladen_Schlafzimmerfenster$|^Anwesenheitsstatus$
NOTIFYDEV global|sz_structure_schlafzimmerfenster|sz_rolladen_Schlafzimmerfenster|Anwesenheitsstatus
event closed
globalinit 1
last_timer 0
sleeptimer -1
timerdev sz_structure_schlafzimmerfenster
timerevent closed
triggerDev sz_structure_schlafzimmerfenster
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: sz_structure_schlafzimmerfenster
error: set sz_rolladen_Schlafzimmerfenster : no value specified
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: sz_structure_schlafzimmerfenster
error: set sz_rolladen_Schlafzimmerfenster : no value specified
state: cmd_2
timerevents:
closed
timereventsState:
state: closed
triggerEvents:
closed
triggerEventsState:
state: closed
internals:
all sz_structure_schlafzimmerfenster:STATE Anwesenheitsstatus:STATE sz_rolladen_Schlafzimmerfenster:STATE
readings:
trigger:
uiState:
uiTable:
Attributes:
alias Lüften
do always
room Steuerung->Rolladen
Dann lass doch einfach die \" weg.
EDIT: und zwar "alle"! Und nicht nur eins davon. Und dann zähle mal die Anführungszeichen usw. Der fhem-Befehl.lautet fhem("hier den eigentl. fhem-Aufruf") den brauchst du, um "aus Perl heraus" eben fhem-Kommandos aufzurufen. Wenn du "innerhalb" des fhem-Kommanos "Zeichenketten" brauchst, dann eben: fhem("fhem-Aufruf mit \"Zeichenkette und $Variable in Zeichenkette\"") da müssen die zusätzlichen Anführungszeichen für "Zeichenkette" eben "escaped" werden...
Die sind doch "escapte" Anführungszeichen die nur für den gesprochenen Text sind...
Also einfach: fhem("set Blabla $Variable")
Wobei es doch in DOIF (und auch sonst) setMagic gibt...
(nutze ich persönlich nicht, wollte es nur anmerken)
Gruß, Joachim
Zitatfhem("set Blabla $Variable")
Hatte ich probiert, allerdings ohne Effekt.
HAb aber inzwischen festgestellt, dass in der Variable nicht der erwartete Wert steht, sondern komischerweise der Aufruf mit dem aktuellen Wert, in dem Fall "set 20"
Zu der Frage habe ich den anderen Thread https://forum.fhem.de/index.php/topic,117629.msg1120180.html#new (https://forum.fhem.de/index.php/topic,117629.msg1120180.html#new) erstellt.