Frage zu Leerzeichen in Parametern von Befehlen

Begonnen von chris1284, 26 Februar 2014, 22:03:28

Vorheriges Thema - Nächstes Thema

chris1284

Hallo,

Ich habe mir ein Modul gebaut mit dem ich Befehle direkt an meinen 2 FHEM-Server senden kann, sowas wie "set Lampe on".
(Hintergrund: PI hat COC zum IT steuern, mit IT kann FHEM2FHEM nicht umgehen und ich kann somit alle befehle an den PI senden die im FHEMWEB so gehen wie at, notify usw alles vom Hauptfhem).
Im Webinterface gebe ich die befehle noch so an :

SET RemotePI CMD set_Lampe_on , ersetzte dann im Modul die "_" durch Leerzeichen so das intern quasi
SET RemotePI CMD "set Lampe on" bei raus kommt und "set Lampe on" an den PI gesendet wird.

Jetzt meine Frage: kann ich den Parameter auch mit Leerzeichen im Textfeld des Webinterface schreiben OHNE das er immer bei Leerzeichen geteilt wirde?
So wie im Screenshot z.B. So könnnte ich mir intern das ersetzten der "_" sparen. Und ich könnte Geräte mit "_" im Namen ansteuern.


Danke schonmal!

betateilchen

Es liegt doch eigentlich nur an Dir, wie Du in Deinem Modul das Splitten durchführst.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

warum musst du überhaupt splitten und ersetzen?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

chris1284

Ich splitte nicht, muss aber ersetzen weil irgendwas splittet bei Leerzeichen. Meiner Meinung nach ist das nicht mein Script  :o
Ich habe es nun über my $command = join(" ",@a);, nach eurer Erfahrung denke ich aber auch nicht nötig. HIer die Sub für das Set, ich weiss nicht wo ich da splitten sollte


sub RFHEM_Set($@)
{
my ( $hash, @a ) = @_;
return "\"set RFHEM\" needs at least an argument" if ( @a < 2 );
return "Unknown argument $a[1], choose one of ".join(" ", sort keys %sets) if(!defined($sets{$a[1]}));
my $name = shift @a;
shift @a;
my $command = join(" ",@a);
my $HOSTNAME = $hash->{HOSTNAME};
my $HOSTPORT = $hash->{PORT};
my $socket = IO::Socket::INET->new('PeerAddr' => $HOSTNAME,'PeerPort' => $HOSTPORT,'Proto' => 'tcp') or die Log3 $name, 3, "Can't create socket ($!)\n";
        my $msg = $command."\n" ;
        #Log3 $name, 3, "$msg";
print $socket $msg;
Log3 $name, 3, "Command executed";
#$socket->close();
#Log3 $name, 3, "Connection closed";
}


justme1968

ich verstehe das problem immer noch nicht ganz.

das mit dem join sollte genau so richtig sein.

wer empfängt denn auf der anderen seite? das normale fhem telnet modul?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

chris1284

hi,

es geht nicht um die gegenseite (welche normal über telnet empfängt). es geht allgemeint um die eingabe von text mit leerzeichen in dem oben im screenshot rot markierten feld. dieser text wird scheinbar vor übergabe an das modul bei jedem leerzeichen zerhackt (macht ja auch im normlafall sinn wenn es wie das normale befehlstextfeld von fhem funktioniert) und ich muss es im modul wieder zusammenfügen.

wäre halt toll wenn fhem erkennen würde das der text wenn er zb in " gepackt ist ein string zusehen ist und nicht gesplittet werden darf. aber ich denke ich werds einfach so nutzen wie ich es heute morgen schreibe, das funktioniert. ich steuer so mein 2.tes fhem komplett über das erste mit dummys und notifys

bergadler

Hallo,

ich hatte auch mal z.B. beim AIVC Probleme mit Leerzeichen in Befehlsdefinitionen.
An Stelle der Leerzeichen jeweils ein "%20" in den Textstring eingefügt und schon hat es funktioniert.

Vielleicht hilft's ja.

Gruß
aktuelles FHEM auf Raspberry B+, FHEM von fhem.de V.5.7, CUL868 V1.57, (6x FHT80B+ FHTTK, div. IT,div. FS20,Harmony Hub)