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.
Das wäre dann wohl Andre sein Part :D