Autor Thema: Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)  (Gelesen 2151 mal)

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14975
Antw:Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)
« Antwort #15 am: 12 November 2017, 10:32:47 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3693
  • Wer anderen eine Bratwurst brät...
Antw:Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)
« Antwort #16 am: 12 November 2017, 13:53:59 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2649
Antw:Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)
« Antwort #17 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




ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3693
  • Wer anderen eine Bratwurst brät...
Antw:Hilfe bei Shellaufruf in einem Modul (umstellen auf Non Blocking)
« Antwort #18 am: 25 November 2017, 20:11:46 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert