Hi Rudolf,
danke für dein Feedback... ich versteh pack und unpack immernoch nicht...
ob ich
$request = pack("UUUU", 0x01, 0x04, 0x14, 0x70);
oder
$request = pack("UUUU", 1, 4, 20, 112);
Das Ziel ist das gleiche.... ich dachte pack erzeugt einen String und in der ersten Option sage ich was ich für Daten danach habe... aber ob HEX oder Dezimal... bei U klappt der rest des Codes...

Ich dachte beim ersten sag ich. zb "HHHH" und beim zweiten "BBBB"... keine Ahnung...
Und das Unpack... da habe ich auch mit U aus dem Z eine 90 gemacht...

Warum?
Da ich mit dem PC Tool schauen kann, seh ich das meine Rechnung richtig ist...
package main;
use strict;
use warnings;
use IO::Socket;
my $remote_host = "192.168.178.9";
my $remote_port = 30046;
my $request;
my $response;
my $humidity;
# creating object interface of IO::Socket::INET modules which internally creates
# socket, binds and connects to the TCP server running on the specific port.
my $socket = IO::Socket::INET ->new(
PeerAddr => $remote_host ,
PeerPort => $remote_port ,
Proto => "tcp",
Type => SOCK_STREAM)
or die "Couldn ’t connect to $remote_host:$remote_port : $@\n";
# flush after every write
if (!$socket) {
# fhem AirUnit_Log $name, 1, "Could not open connection to host $host:$port";
return (0, "Can't connect to $remote_host:$remote_port");
}
$socket->autoflush(1);
print "TCP Connection Success.\n";
$request = pack("UUUU", 0x01, 0x04, 0x14, 0x70);
print "packed Data to Server : $request\n";
# send the data through IO::Socket::INET module
$socket->send($request);
# read from socket through recv() in IO::Socket::INET
$socket->recv($response,63);
print "Received from Server: , $response\n";
print "Received Substringlength from Server: ", length($response)."\n";
print "Received Substring from Server: ", substr($response,0,2)."\n";
print "Received from Server unpacked: ", unpack("U", substr($response,0,2))."\n";
$humidity = unpack("U", substr($response,0,2)) * 100 / 255;
print "Received from Server: $humidity\n";
sleep (1);
$socket->close();
### Temperatur private static final byte[] REGISTER_1_READ = { 0x01, 0x04 }; private static final byte[] HUMIDITY = { 0x14, 0x70 };
ABER ICH HABE ES HINBEKOMMEN!!!!c:\Program Files\Perl64\bin>perl.exe D:\Downloads\socket.pl
TCP Connection Success.
packed Data to Server : ☺♦¶p
Received from Server: , Z
Received Substringlength from Server: 63
Received Substring from Server: Z
Received from Server unpacked: 90
Received from Server: 35.2941176470588
Was meinst du mit HttpUtils_NonblockingGet? Ich bin noch nicht in FHEM, ich bin noch im Perlscript und versuche jetzt erstmal allen JAVA-Code in Perl zu bekommen und alles Werte zu lesen... danach bekomme ich das hoffentlich an die richtigen Stellen in einem FHEM Modul.
Puhhh es verschlingt Zeit, es macht Spass, aber für PERL sind nicht grad viele Tutorial da...
PS: Sehe grad $request = pack("U*", 0x01, 0x04, 0x14, 0x70); geht auch...