Hi Patrik
Das funktioniert wunderbar, ohne Einschränkungen
Das funktioniert wunderbar, ohne Einschränkungen

# Plugin Denon-AVR # Kommunikation via UDP - socat separat einzurichten # Version: 0.1 2011-01-31 ################## ### DEFINITION ### ################## my $socknum = 118; # Eindeutige Nummer des Sockets +1 # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen) $plugin_info{$plugname.'_cycle'} = 600; my $send_ip = "localhost"; # Sendeport (UDP, sie in Socket-Einstellungen) my $send_port = "50106"; # Sendeport (UDP, sie in Socket-Einstellungen) my $recv_ip = "localhost"; # Empfangsport (UDP, sie in Socket-Einstellungen) my $recv_port = "50105"; # Empfangsport (UDP, sie in Socket-Einstellungen) my $denon_ip; #$denon_ip = "172.17.2.89:23"; # uncomment to use direct telnet without socat my $basega = "10/0/0"; my $numgas = 20; # Startadresse # 0=PW 1=PWStatus ####################### ### ENDE DEFINITION ### ####################### # Hauptverarbeitung if (!$socket[$socknum]) { # socket erstellen if ($denon_ip) { $socket[$socknum] = IO::Socket::INET->new(PeerAddr => $denon_ip, Timeout => 120, Blocking => 0) or return ("open of $denon_ip failed: $!"); } else { $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"; } if (%msg) { # telegramm vom KNX if ($msg{'apci'} eq "A_GroupValue_Write") { my $idx = str2addr($msg{'dst'}) - str2addr($basega); if ($idx==0) { my @vals = qw/PWSTANDBY PWON/; #1bit on/off syswrite($socket[$socknum], $vals[$msg{'data'}]."\r"); #1=PW? } elsif ($idx==2) { my @vals = qw /MVDOWN MVUP/; #1bit master-vol syswrite($socket[$socknum], $vals[$msg{'data'}]."\r"); } elsif ($idx==3) { # 1byte 0-99 syswrite($socket[$socknum], sprintf("MV%02d\r",$msg{'data'})); #4=MV? } elsif ($idx==5) { my @vals = qw /MUOFF MUON/; #1bit mute syswrite($socket[$socknum], $vals[$msg{'data'}]."\r"); #6=MU? } elsif ($idx==7) { #1byte source 5=TV 11=ipod 19=usb my @vals = qw /PHONO CD TUNER DVD BD TV SAT\/CBL DVR GAME V.AUX DOCK IPOD NET\/USB NAPSTER LASTFM FLICKR FAVORITES IRADIO SERVER USB\/IPOD/; syswrite($socket[$socknum], "SI".$vals[$msg{'data'}]."\r"); #8=SI? } elsif ($idx==9) { #1byte sourround mode 2=ST 6=MCHST 10=Matrix my @vals = ("DIRECT","PURE DIRECT","STEREO","STANDARD","DOLBY DIGITAL","DTS SUROUND","MCH STEREO","ROCK ARENA","JAZZ CLUB","MONO MOVIE","MATRIX","VIDEO GAME","VIRTUAL"); syswrite($socket[$socknum], "MS".$vals[$msg{'data'}]."\r"); #10=MS? } else { return "dunno? recv KNX $msg{'dst'} $msg{'data'}"; } } return; } elsif ($fh) { # incoming dgram my $buf = <$fh>; my $bufhex = unpack("H*",$buf); chomp $buf; my $fn = substr($buf,0,2); # this is still very dumb if ($fn eq "PW") { my @vals = qw/PWSTANDBY PWON/; #1bit on/off my( $val )= grep { $vals[$_] eq $buf } 0..$#vals; knx_write(addr2str(str2addr($basega)+1) ,$val,1); return "$val - @vals - $buf"; } elsif ($fn eq "MV" and $buf !~ /^MVMAX/) { # MVMAX is undocumented? # broken, just sends every 2, .5 isn't considered knx_write(addr2str(str2addr($basega)+4),substr($buf,2,2),5.010); return "recv $buf ($bufhex)"; } else { return "dunno recv $buf ($bufhex)"; } return; } for (my $i=0; $i<$numgas;$i++) { $plugin_subscribe{$basega}{$plugname} = 1; $basega = addr2str(str2addr($basega)+1,1); } # insert all commands to be sent cyclic syswrite($socket[$socknum],"PW?\r"); return;
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