FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: zap am 19 Januar 2022, 11:58:56

Titel: Interpretation der FHEM Kommandozeile mit/ohne parseParams
Beitrag von: zap am 19 Januar 2022, 11:58:56
Irgendwie verstehe ich das Verhalten von FHEM beim Parsen der Kommandozeile bzw. die Logik dahinter nicht.
Mein Verständnis bzw. meine Erfahrung:

1) Wenn man in X_Initialize parseParams NICHT setzt, dann

- Werden Parameter per Whitespace getrennt
- Anführungszeichen werden ignoriert

Beispiel:

set xy Command "ABC DEF" => 2 Argumente: ( "ABC,  DEF" )

2) Wenn man in X_Initialize parseParams setzt, dann

- Werden Parameter per Whitespace getrennt, normale Parameter landen in einem Array
- Parameter der Form Key=Value werden separat betrachtet und landen in einem Hash
- Anführungszeichen werden (teilweise) berücksichtig => Problem

Beispiele:

set xy Command "ABC DEF" => 1 Argument: "ABC DEF"
set xy Command ABC=DEF => 1 Argument als Key-Value Pair: ABC => DEF

Problem: set xy Command "ABC=DEF" => 1 Argument als Key-Value Pair, erwarten würde man "ABC=DEF"

=> ParseParam scheint die Prio immer auf die Erkennung von Key-Value-Pairs zu legen.

M.E. würde folgende Änderung in parseParams in der fhem.pl das Problem lösen:


while (@params) {
   my $param = shift(@params);
   next if($param eq "");

   # BEGIN NEW code to consider arguments enclosed in single/double quotes
   my ($key, $value);
   if( $param =~ /^'(.+)'$/ || $param =~ /^"(.+)"$/) {
     $value = $1;
   }
   else {
   # my ($key, $value) = split( $keyvalueseparator, $param, 2 );
      ($key, $value) = split( $keyvalueseparator, $param, 2 );
   }
   # END NEW

   if( !defined( $value ) ) {
     $value = $key;
     $key = undef;

   # the key can not start with a { -> it must be a perl expression # vim:}
   } elsif( $key =~ m/^\s*{/ ) { # for vim: }
     $value = $param;
     $key = undef;
}


Vielleicht kann sich der Autor von parseParams das mal anschauen. Da es eine sehr zentrale Funktion ist und ich sicher nicht alle Use Cases berücksichtigt habe, wäre ich für eine Meinung von Fachseite dankbar.
Titel: Antw:Interpretation der FHEM Kommandozeile mit/ohne parseParams
Beitrag von: CoolTux am 19 Januar 2022, 12:14:32
Das wäre dann wohl Andre sein Part  :D