Hallo Zusammen,
da ich nichts gefunden habe, habe ich mal angefangen mir ein Plugin für die Steuerung meiner Squeezeboxen zu schreiben.
Nur habe ich leider keine Idee wie ich den Socat debuggen kann. Bisher funktioniert es leider noch nicht...
Ich versuch mal den Stand zu beschreiben:
1. Ich kann vom Wiregate mit socat auf den squeeze-server zugreifen mit:
2. meine Socat Konfiguration als screenshot ist angehängt
3. Mein Plugin:
4. Wenn ich jetzt auf die GA eine 1 schicke, bekomme ich im Log:
Die erste Zeile ist der Befehl, der an den Squeezeserver geschickt werden soll und passt soweit auch. Nur passiert nichts weiter. Mit dem Return-Value '35' kann ich leider nichts anfangen.
Möglicherweise liegt es am CRLF im Socat. Laut Squeeze-CLI brauche ich nur ein LF. Aber das habe ich im socat nicht gefunden.
Kann mir jemand helfen, wie ich das weiter debugge? Vielleicht übersehe ich ja auch irgendwas.
Danke und Gruß,
Moritz
da ich nichts gefunden habe, habe ich mal angefangen mir ein Plugin für die Steuerung meiner Squeezeboxen zu schreiben.
Nur habe ich leider keine Idee wie ich den Socat debuggen kann. Bisher funktioniert es leider noch nicht...
Ich versuch mal den Stand zu beschreiben:
1. Ich kann vom Wiregate mit socat auf den squeeze-server zugreifen mit:
Code:
socat READLINE,history=$HOME/.squeeze_history TCP4:192.168.1.4:9090
3. Mein Plugin:
Code:
# Steuern der Squeezeboxen # socat notwendig # V0.1 2011-12-17 ### Im WG muss eine Socketverbindung mit folgenden Parametern erstellt werden # Socket1: tcp-connect, Socket: IP_OF_SqueezeServer:9090 # Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr ### Definitionen my $power_ga = "5/1/5"; # Gruppenadresse my $player_id = "00%3A04%3A20%3A18%3A26%3A8c"; # Player ID my $cmd = "power"; # Kommando, dass an die Box gesendet werden soll my $socknum = 121; # Eindeutige Nummer des Sockets +1 my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen) my $send_port = "50106"; # Sendeport (UDP, siehe in Socket-Einstellungen) my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen) my $recv_port = "50105"; # Empfangsport (UDP, siehe in Socket-Einstellungen) ### Ende Definitionen # Eigenen Aufruf-Zyklus setzen $plugin_info{$plugname.'_cycle'} = 0; # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$power_ga}{$plugname} = 1; # Socket erstellen if (!$socket[$socknum]) { $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port, Proto => "udp", LocalAddr => $recv_ip, PeerPort => $send_port, PeerAddr => $send_ip, ReuseAddr => 1 ) or plugin_log($plugname, "open of $recv_ip : $recv_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin plugin_log($plugname, "opened Socket $socknum"); } # Nur bei einem Wert auf GA reagieren if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $power_ga && defined $msg{'value'}) { my $command = $player_id . " " . $cmd . " " . $msg{'value'}; my $return_val = sendCommand($command); plugin_log($plugname, $return_val); } # Log return 0; sub sendCommand { my $command = $_[0]; plugin_log($plugname, $command); syswrite($socket[$socknum], $command); }
Code:
2011-12-18 12:32:45.544,SqueezeSteuerung,00%3A04%3A20%3A18%3A26%3A8c power 1 2011-12-18 12:32:45.545,SqueezeSteuerung,35
Möglicherweise liegt es am CRLF im Socat. Laut Squeeze-CLI brauche ich nur ein LF. Aber das habe ich im socat nicht gefunden.
Kann mir jemand helfen, wie ich das weiter debugge? Vielleicht übersehe ich ja auch irgendwas.
Danke und Gruß,
Moritz
Kommentar