Maskieren von Zeichen in DOIF-Definition (Sonderzeichen)

Begonnen von h002, 05 Juni 2021, 22:48:22

Vorheriges Thema - Nächstes Thema

h002

Hallo,

beim Ausführen eines DOIF-Kommandos kommt es zu einer unspezifizierten Fehlermeldung durch Erzeugung des Readings "error". Dort steht nur das Kommando drinne ohne weiteren Fehlertext. Auch im Event oder FHEM-Log steht nichts weiter.

Hier die Definition des DOIF


Internals:
   DEF        ([mt:state] eq "WLANOff"){
(qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man manager set enabled=no];:beep frequency=900 length=1s'")
}DOELSEIF ([mt:state] eq "WLANOn"){
(qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man manager set enabled=yes];:beep frequency=900 length=1s'")
}DOELSEIF ([mt:state] eq "VPNOn"){
(qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/ip firewall filter enable [find dst-port=\"443\" and protocol=\"tcp\" and in-interface=\"bridge\" and action=\"accept\"]]'")
}DOELSEIF ([mt:state] eq "VPNOff"){
(qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/ip firewall filter disable [find dst-port=\"443\" and protocol=\"tcp\" and in-interface=\"bridge\" and action=\"accept\"]]'")
}DOELSEIF ([mt:state] eq "WLANClients"){
my $clientCount = qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man registration-table print count-only]'";
fhem("setreading mt ConnectedWLANDevices $clientCount");
}

   FUUID      60bb9ba6-f33f-8b20-46c5-38279c9f44185852
   MODEL      FHEM
   NAME       mtDOIF
   NOTIFYDEV  mt,global
   NR         337
   NTFY_ORDER 50-mtDOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    24195 2021-04-08 21:50:20
   READINGS:
     2021-06-05 22:38:53   cmd             0
     2021-06-05 22:38:53   mode            enabled
     2021-06-05 22:38:53   state           initialized
   Regex:
     accu:
     collect:
     cond:
       mt:
         0:
           state      ^mt$:^state:
         1:
           state      ^mt$:^state:
         2:
           state      ^mt$:^state:
         3:
           state      ^mt$:^state:
         4:
           state      ^mt$:^state:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'mt','state') eq "WLANOff"
     1          ::ReadingValDoIf($hash,'mt','state') eq "WLANOn"
     2          ::ReadingValDoIf($hash,'mt','state') eq "VPNOn"
     3          ::ReadingValDoIf($hash,'mt','state') eq "VPNOff"
     4          ::ReadingValDoIf($hash,'mt','state') eq "WLANClients"
   do:
     0:
       0          { (qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man manager set enabled=no];:beep frequency=900 length=1s'") }
     1:
       0          { (qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man manager set enabled=yes];:beep frequency=900 length=1s'") }
     2:
       0          { (qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/ip firewall filter enable [find dst-port=\"443\" and protocol=\"tcp\" and in-interface=\"bridge\" and action=\"accept\"]]'") }
     3:
       0          { (qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/ip firewall filter disable [find dst-port=\"443\" and protocol=\"tcp\" and in-interface=\"bridge\" and action=\"accept\"]]'") }
     4:
       0          { my $clientCount = qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man registration-table print count-only]'"; fhem("setreading mt ConnectedWLANDevices $clientCount"); }
     5:
   helper:
     DEVFILTER  ^global$|^mt$
     NOTIFYDEV  global|mt
     globalinit 1
     last_timer 0
     sleeptimer -1
   readings:
     all         mt:state
   uiState:
   uiTable:
Attributes:
   do         always


Die Kommandos werden zwar durch das DOIF korrekt ausgeführt, aber der Fehlermeldung würde ich gerne auf den Grund gehen. Diese taucht erst auf, als ich den Teil
;:beep frequency=900 length=1s
bei den ersten beiden Befehlen ergänzt habe.

Kann mir einer einen Tipp geben, wie ich die Fehlermeldung weg bekommen (siehe Bild im Anhang)? Vielen Dank!


Damian

Es wird offenbar vom Systembefehl ein String zurückgeliefert, der nicht leer ist, das wird als Fehler interpretiert. Du kannst return("") am Ende dranhängen, wenn dich die Information stört.

{ qx"sudo ssh fhem\@192.168.1.1 -i /home/pi/.ssh/id_rsa '[/caps-man manager set enabled=no];:beep frequency=900 length=1s'";return("");}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

h002

Danke für den Hinweis. Das "beep"
;:beep frequency=900 length=1s
scheint einen Zeilenumbruch zurückzuliefern.