Hauptmenü

Variable in DOIF

Begonnen von Superposchi, 10 Januar 2021, 11:57:01

Vorheriges Thema - Nächstes Thema

Superposchi

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


MadMax-FHEM

#1
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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 erstellt.