Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)

Begonnen von Wuppi68, 28 Oktober 2017, 14:13:26

Vorheriges Thema - Nächstes Thema

CoolTux

Zu meist befindet sich dann ein Zeilenumbruch in der Rückgabe. Da die Rückgabe über telnet geht darf kein Zeilenumbruch drin sein. Entweder base64 codieren oder JSON encodieren und dann in der finishFn decodieren.
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

DeeSPe

Mit ein Wenig RegEx Zauberei konnte ich das Problem nun lösen.
Problematisch waren scheinbar tatsächlich noch enthaltene Tabulatoren.

Merkwürdig ist nur dass die Fehlerrückgabe als base64 nicht funktioniert, das ein Weile gedauert bis das aufgefallen ist.

Das geht:
$err .= join " ",@ret;
return "$name|$err";


Das geht nicht:
$err .= encode_base64(join " ",@ret);
return "$name|$err";

natürlich mit entsprechendem decode in der FinishFn:

my ($string) = @_;
my @a = split /\|/,$string;
my $name = $a[0];
my $error = decode_base64($a[1]);


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DS_Starter

Hi Dan,

ich kodiere in diesem Fall immer mit einem zweiten (leeren) Stringargumnt am Ende:


$err = encode_base64($string,"");


Das zweite Argument verhindert dass der verschlüsselte String in Zeilen umgebrochen wird, was ja in unserem Anwendungsfall nicht sein darf.

Ich hatte das mal gefunden, z.B. hier (beware of the newline at the end of the encode_base64-encoded strings):
http://www.perlmonks.org/?node_id=660474 

oder auch in der CPAN-Doku:

http://search.cpan.org/~gaas/MIME-Base64-Perl-1.00/lib/MIME/Base64/Perl.pm

Seitdem habe ich mit soetwas keinen Stress mehr.

Grüße
Heiko




ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DeeSPe

Zitat von: DS_Starter am 25 November 2017, 20:03:44
Hi Dan,

ich kodiere in diesem Fall immer mit einem zweiten (leeren) Stringargumnt am Ende:


$err = encode_base64($string,"");


Das zweite Argument verhindert dass der verschlüsselte String in Zeilen umgebrochen wird, was ja in unserem Anwendungsfall nicht sein darf.

Ich hatte das mal gefunden, z.B. hier (beware of the newline at the end of the encode_base64-encoded strings):
http://www.perlmonks.org/?node_id=660474 

oder auch in der CPAN-Doku:

http://search.cpan.org/~gaas/MIME-Base64-Perl-1.00/lib/MIME/Base64/Perl.pm

Seitdem habe ich mit soetwas keinen Stress mehr.

Grüße
Heiko

Klasse Hinweis Heiko!
Diese Info hatte mir gefehlt.
Jetzt klappt es auch mit en/decode.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe