Also ich mag den socat ja wirklich - als Helfer in der Not - aber wenn ich das richtig lese, gehts direkt per UDP, oder?
Dann ist das eher der richtige Weg..
Makki
Dann ist das eher der richtige Weg..
Makki
# Steuern der Squeezeboxen # V0.4 2013-02-03 use IO::Socket; ### Definitionen # 00%3A04%3A20%3A1f%3A92%3Ac4 # 00:04:20:1f:92:c4 my $player_id = "00%3A04%3A20%3A1f%3A92%3Ac4"; # Player ID = Mac Adresse Trennzeichen "%3A" my $squeezeserver = '192.168.2.221'; my $squeezeport = '9090'; ### Ende Definitionen # Eigenen Aufruf-Zyklus setzen $plugin_info{$plugname.'_cycle'} = 0; # Beispiel für Hash-Zuordnung # $key = power # {$function{power} = "8/1/0" my %function = ("power"=>"8/1/0", "play"=>"8/1/1", "mute"=>"8/1/2", "vol_trigger"=>"8/1/3", "volume"=>"8/1/5", "pause"=>"8/1/4", "stop"=>"8/1/6", "favorites"=>"8/1/7", "show"=>"1/2/35"); # Plugin an Gruppenadresse "anmelden" while (my($key,$ga) = each %function) { $plugin_subscribe{$function{$key}}{$plugname} = 1; } # Nur bei einem Wert auf GA reagieren # Power Befehl / 0=off 1=on if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{power} && defined $msg{'value'}) { my $command = $player_id . " power " . $msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Play (last) = Power on / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{play} && defined $msg{'value'}) { my $command = $player_id . " play"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Mute Befehl / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{mute} && defined $msg{'value'}) { my $command = $player_id . " mixer muting " . $msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Volume Down Befehl -10 Prozent / DPT 1 Trigger auf 0 if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==0) { my $command = $player_id . " mixer volume -10"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Volume Down Befehl +10 Prozent / DPT 1 Trigger auf 1 if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==1) { my $command = $player_id . " mixer volume +10"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Lautstärke setzen / DPT 5 in % if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{volume} && defined $msg{'value'}) { my $command = $player_id ." mixer volume " .$msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Pause Befehl / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{pause} && defined $msg{'value'}) { my $command = $player_id . " button pause"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Stop Befehl über Button / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{stop} && defined $msg{'value'}) { my $command = $player_id . " button stop"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Favoriten wählen / DPT 6.020 als integer der Favoritennummer if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{favorites} && defined $msg{'value'}) { my $command = $player_id ." favorites playlist play item_id:" .$msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Display / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{show} && defined $msg{'value'}) { my $command = $player_id . " show line1:Mirko%20liebt%20nur line2:Juliane duration:10 centered:1"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } #Special Notifications #Aussentemperatur anzeigen my $temp_aussen = knx_read("7/0/0",0); my $temp_speicher = knx_read("7/0/20",0); my $temp_trigger = "1/2/100"; $plugin_subscribe{$temp_trigger}{$plugname} = 1; if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) { my $command = $player_id . " show line1:Aussentemperatur%20" . $temp_aussen . "%20°C line2:Speicher%20" . $temp_speicher . "%20°C duration:30 centered:1"; my $return_val = sendCommand($command); } sub sendCommand { my $cmd = $_[0]; my $sock = new IO::Socket::INET ( PeerAddr => $squeezeserver, PeerPort => $squeezeport, Proto => 'tcp', ); die "Error: $!\n" unless $sock; print $sock ($cmd."\n") ; my $answer=<$sock>; plugin_log($plugname, $answer); close($sock); } #<playerid> button <buttoncode> # #The "button" command simulates a button press. Valid button codes correspond to the functions defined in the Default.map file. # #Example: # #Request: "04:20:00:12:23:45 button stop<LF>" #Response: "04:20:00:12:23:45 button stop<LF>"
print $sock ($cmd."\n") ; -- my $answer=<$sock>; -- plugin_log($plugname, $answer); ++ plugin_log($plugname, $cmd); close($sock); }
# Steuern der Squeezeboxen # V0.5 2013-02-08 use IO::Socket; ### Definitionen # 00%3A04%3A20%3A1f%3A92%3Ac4 # 00:04:20:1f:92:c4 my $player_id = "00%3A04%3A20%3A1f%3A92%3Ac4"; # Player ID = Mac Adresse Trennzeichen "%3A" my $squeezeserver = '192.168.2.221'; my $squeezeport = '9090'; ### Ende Definitionen # Eigenen Aufruf-Zyklus setzen $plugin_info{$plugname.'_cycle'} = 0; # Beispiel für Hash-Zuordnung # $key = power # {$function{power} = "8/1/0" my %function = ("power"=>"8/1/0", "play"=>"8/1/1", "mute"=>"8/1/2", "vol_trigger"=>"8/1/3", "volume"=>"8/1/5", "pause"=>"8/1/4", "stop"=>"8/1/6", "favorites"=>"8/1/7", "show"=>"1/2/35"); # Plugin an Gruppenadresse "anmelden" while (my($key,$ga) = each %function) { $plugin_subscribe{$function{$key}}{$plugname} = 1; } # Nur bei einem Wert auf GA reagieren # Power Befehl / 0=off 1=on if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{power} && defined $msg{'value'}) { my $command = $player_id . " power " . $msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Play (last) = Power on / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{play} && defined $msg{'value'}) { my $command = $player_id . " play"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Mute Befehl / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{mute} && defined $msg{'value'}) { my $command = $player_id . " mixer muting " . $msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Volume Down Befehl -10 Prozent / DPT 1 Trigger auf 0 if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==0) { my $command = $player_id . " mixer volume -10"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Volume Down Befehl +10 Prozent / DPT 1 Trigger auf 1 if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==1) { my $command = $player_id . " mixer volume +10"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Lautstärke setzen / DPT 5 in % if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{volume} && defined $msg{'value'}) { my $command = $player_id ." mixer volume " .$msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Pause Befehl / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{pause} && defined $msg{'value'}) { my $command = $player_id . " button pause"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Stop Befehl über Button / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{stop} && defined $msg{'value'}) { my $command = $player_id . " button stop"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Favoriten wählen / DPT 6.020 als integer der Favoritennummer if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{favorites} && defined $msg{'value'}) { my $command = $player_id ." favorites playlist play item_id:" .$msg{'value'}; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } # Display / Trigger mit beliebigem Wert if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{show} && defined $msg{'value'}) { my $command = $player_id . " show line1:Mirko%20liebt%20nur line2:Juliane duration:10 centered:1"; my $return_val = sendCommand($command); # plugin_log($plugname, $return_val); } #Special Notifications #Aussentemperatur anzeigen my $temp_aussen = knx_read("7/0/0",0); my $temp_speicher = knx_read("7/0/20",0); my $temp_trigger = "1/2/100"; $plugin_subscribe{$temp_trigger}{$plugname} = 1; if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) { my $command = $player_id . " show line1:Aussentemperatur%20" . $temp_aussen . "%20°C line2:Speicher%20" . $temp_speicher . "%20°C duration:30 centered:1"; my $return_val = sendCommand($command); } sub sendCommand { my $cmd = $_[0]; my $sock = new IO::Socket::INET ( PeerAddr => $squeezeserver, PeerPort => $squeezeport, Proto => 'tcp', ); die "Error: $!\n" unless $sock; print $sock ($cmd."\n") ; plugin_log($plugname, $cmd); close($sock); } #<playerid> button <buttoncode> # #The "button" command simulates a button press. Valid button codes correspond to the functions defined in the Default.map file. # #Example: # #Request: "04:20:00:12:23:45 button stop<LF>" #Response: "04:20:00:12:23:45 button stop<LF>"
sub sendCommand { my $cmd = $_[0]; my $sock = new IO::Socket::INET ( PeerAddr => $squeezeserver, PeerPort => $squeezeport, Proto => 'tcp', ); die "Error: $!\n" unless $sock; print $sock ($cmd."\n") ; #my $answer=<$sock>; #plugin_log($plugname, $answer); plugin_log($plugname, $cmd); close($sock); }
# Socket erstellen if (!$socket[$socknum]) { # socket erstellen $socket[$socknum] = IO::Socket::INET->new(#LocalPort => $send_port, Proto => "tcp", PeerPort => $send_port, PeerAddr => $send_ip, ReuseAddr => 1 ) or return ("open of $send_ip : $send_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin return "opened Socket $socknum"; } . . . . . sub sendCommand { my $cmd = $_[0]."\n"; syswrite($socket[$socknum],$cmd); }
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar