Hallo zusammen,
ich versuche nun, die wesentlichen Funktionen aus dem Python-Programm in Perl zu übernehmen.
Die Verbindung zum E3DC wird mit dem Senden eines Frames begonnen. Dieser besteht aus 2 Teilen.
Der 1. Teil ist so in Pthon programmiert:
def rscpFrame(data):
"""Generates RSCP frame."""
magic = endianSwapUint16(0xE3DC)
ctrl = endianSwapUint16(0x11)
t = time.time()
sec1 = math.ceil(t)
sec2 = 0
ns = round((t - int(t)) * 1000)
length = len(data)
packFmt = "<HHIIIH" + str(length) + "s"
frame = struct.pack(packFmt, magic, ctrl, sec1, sec2, ns, length, data)
crc = zlib.crc32(frame) % (1 << 32) # unsigned crc32
frame += struct.pack("<I", crc)
return frame
In Perl habe ich in der 99_myUtils eine Test-Routine definiert, die aber noch nicht komplett ist.
sub StartFrame($) {
my ($Input) = @_;
my $Status = 0;
my $be = pack('n', 0xE3DC);
my $le = pack ('v', $be);
my $magic = $le;
$be = pack('n', 0x11);
$le = pack ('v', $be);
my $ctrl = $le;
Log 1,"Test aus 99_myUtils, Magic: $magic";
Log 1,"Test aus 99_myUtils, CTRL: $ctrl";
##print $magic . "\n";
##print $ctrl. "\n";
use Time::HiRes qw(time);
use POSIX;
my $epoc = time();
Log 1,"Test aus 99_myUtils, EPOC: $epoc";
##print $epoc. "\n";
my $sec1 = ceil($epoc);
my $sec2 = 0;
my $zwns = (($epoc - int($epoc)) * 1000);
my $ns = sprintf ("%.0f", $zwns);
Log 1,"Test aus 99_myUtils, Nanosek: $ns";
##print $ns. "\n";
return $Status
};
Im Web-Perl-Editor gibt es keine Fehlermeldungen, in FHEM aber diese hier:
2022.09.23 17:01:06 1: --> Test-Start <--
2022.09.23 17:01:06 1: PERL WARNING: Argument "��" isn't numeric in pack at ./FHEM/99_myUtils.pm line 586.
2022.09.23 17:01:06 3: eval: { Log 1, "--> Test-Start <--"; StartFrame("Test"); Log 1, "--> Test-Ende <--"; }
2022.09.23 17:01:06 1: PERL WARNING: Argument "\0^Q" isn't numeric in pack at ./FHEM/99_myUtils.pm line 590.
2022.09.23 17:01:06 3: eval: { Log 1, "--> Test-Start <--"; StartFrame("Test"); Log 1, "--> Test-Ende <--"; }
2022.09.23 17:01:06 1: Test aus 99_myUtils, Magic:
2022.09.23 17:01:06 1: Test aus 99_myUtils, CTRL:
2022.09.23 17:01:06 1: Test aus 99_myUtils, EPOC: 1663945266.92828
2022.09.23 17:01:06 1: Test aus 99_myUtils, Nanosek: 928
2022.09.23 17:01:06 1: --> Test-Ende <--
Dadurch sind die Variablen Magic und CTRL leer.
Kann mir jemand bei der Portierung an diesen Stellen helfen?
Danke Euch und schöne Grüße
Dirk