FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: h002 am 05 Juni 2021, 22:48:22

Titel: Maskieren von Zeichen in DOIF-Definition (Sonderzeichen)
Beitrag von: h002 am 05 Juni 2021, 22:48:22
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!

Titel: Antw:Maskieren von Zeichen in DOIF-Definition (Sonderzeichen)
Beitrag von: Damian am 05 Juni 2021, 23:01:16
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("");}
Titel: Antw:Maskieren von Zeichen in DOIF-Definition (Sonderzeichen)
Beitrag von: h002 am 06 Juni 2021, 11:24:30
Danke für den Hinweis. Das "beep"
;:beep frequency=900 length=1s
scheint einen Zeilenumbruch zurückzuliefern.