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

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12625
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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3586
  • 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: 2059
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 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3586
  • 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