Hallo,
ich verzweifle gerade daran, Daten von einem USB-Adapter in ein Plugin zu bekommen.
Habe schon so viel probiert und zusammenkopiert, vielleicht kann jemand schnell drüberschauen, komme einfach nicht weiter.
Ich bekomme von meinem Stromzähler 316 Bytes an Daten (INFO) (unter Windows / hterm geht das ganz gut).
Mit cat /dev/ttyUSB0 | od -x sehe ich die gleichen Daten, aber mit
socat - /dev/ttyUSB0,echo=0,crnl,b9600 | od -x sind schon weniger als die 316 Bytes und vorallem unregelmäßig viele. Hier verstehe ich schon nicht wieso.
Im Plugin sieht das so aus:
Ist alles aus verschiedenen Plugins zusammenkopiert.
Mal kommen hier nur 21 Bytes an, mal 1137, mal 1863 - völlig zufällig.
Es gibt ja schon ein Plugin für den Stromzähler, aber wie ich gesehen habe, keines mit Sockets.
ich verzweifle gerade daran, Daten von einem USB-Adapter in ein Plugin zu bekommen.
Habe schon so viel probiert und zusammenkopiert, vielleicht kann jemand schnell drüberschauen, komme einfach nicht weiter.
Ich bekomme von meinem Stromzähler 316 Bytes an Daten (INFO) (unter Windows / hterm geht das ganz gut).
Mit cat /dev/ttyUSB0 | od -x sehe ich die gleichen Daten, aber mit
socat - /dev/ttyUSB0,echo=0,crnl,b9600 | od -x sind schon weniger als die 316 Bytes und vorallem unregelmäßig viele. Hier verstehe ich schon nicht wieso.
Im Plugin sieht das so aus:
Code:
my $socknum = 20; # Eindeutige Nummer des Sockets +1 my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen) my $send_port = "50011"; # Sendeport (UDP, siehe in Socket-Einstellungen) my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen) my $recv_port = "50010"; # Empfangsport (UDP, siehe in Socket-Einstellungen) if (!$socket[$socknum]) { # socket erstellen $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port, Proto => "udp", LocalAddr => $recv_ip, PeerPort => $send_port, PeerAddr => $send_ip, ReuseAddr => 1 ) or return ("open of $recv_ip : $recv_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin return "opened Socket $socknum"; plugin_log($plugname,'Soket verbunden. Soketnummer: ' . $socknum); } elsif ($fh) { # Readline from USBSERIAL my $line; $line = <$fh>; #chomp($line); #if (!$line) { # catch empty line # return; #} #plugin_log($plugname,"line: $line"); my $len = length($line); plugin_log($plugname,"len: $len"); my $bufhex = $line; $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg; plugin_log($plugname,"hex: $bufhex"); return; }
Mal kommen hier nur 21 Bytes an, mal 1137, mal 1863 - völlig zufällig.
Es gibt ja schon ein Plugin für den Stromzähler, aber wie ich gesehen habe, keines mit Sockets.
Kommentar