Interpretation der FHEM Kommandozeile mit/ohne parseParams

Begonnen von zap, 19 Januar 2022, 11:58:56

Vorheriges Thema - Nächstes Thema

zap

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.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net