Plugin:
Edit: Achtung: Aktualisiert 2011-05-28 mit der (IMHO absolut sinnigen!) "DALI-Dimmwertkurve" von JNK (0.2->0.3)
Dazu gehört
- ein DMX4ALL - NanoDMX USB Interface
- und ein socat-Eintrag (siehe Anhang, End-of-line zum paketweisen Versand hier 71 dezimal="G")
Makki
Edit: Achtung: Aktualisiert 2011-05-28 mit der (IMHO absolut sinnigen!) "DALI-Dimmwertkurve" von JNK (0.2->0.3)
Code:
# Plugin DMX-Gateway # Version: 0.3 2011-05-28 # Benötigt DMX USB-Interface ################## ### DEFINITION ### ################## my $socknum = 6; # Eindeutige Nummer des Sockets +1 # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen) $plugin_info{$plugname.'_cycle'} = 300; # Gruppenadressen DMX - leer um Versand zu unterbinden # 8Bit/1Byte Dimmwerte werden 1:1 auf DMX-Adressen übersetzt my $knx_startGA = "11/1/0"; #DMX-Kanal 1, DMX-Kanal 256=1/1/255, DMX-Kanal 257..512=1/2/0..255 my $dmx_channels = 512; # Anzahl der DMX-Kanäle # oder for XXX in array my $dmx_send_ip = "localhost"; # Sendeport (UDP, sie in Socket-Einstellungen) my $dmx_send_port = "50012"; # Sendeport (UDP, sie in Socket-Einstellungen) my $dmx_recv_ip = "localhost"; # Empfangsport (UDP, sie in Socket-Einstellungen) my $dmx_recv_port = "50011"; # Empfangsport (UDP, sie in Socket-Einstellungen) ####################### ### ENDE DEFINITION ### ####################### my @dimcurve = ( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 50, 51, 52, 54, 55, 57, 58, 60, 62, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 86, 88, 90, 93, 95, 98, 101, 104, 106, 109, 112, 115, 119, 122, 125, 129, 132, 136, 140, 144, 148, 152, 156, 160, 165, 169, 174, 179, 184, 189, 194, 199, 205, 211, 216, 222, 228, 235, 241, 248, 255); # Hauptverarbeitung if (!$socket[$socknum]) { # socket erstellen if (defined $socket[$socknum]) { #debug if ($socket[$socknum]->opened) { $socket[$socknum]->close(); } undef $socket[$socknum]; } #debug my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,hex($msg{'data'})); $socksel->remove($socket[$socknum]); $socket[$socknum] = IO::Socket::INET->new(LocalPort => $dmx_recv_port, Proto => "udp", LocalAddr => $dmx_recv_ip, PeerPort => $dmx_send_port, PeerAddr => $dmx_send_ip, ReuseAddr => 1 ) or return ("open of $dmx_recv_ip : $dmx_recv_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin for (my $i=0; $i<$dmx_channels;$i++) { $plugin_subscribe{$knx_startGA}{$plugname} = 1; $knx_startGA = addr2str(str2addr($knx_startGA)+1,1); } return "opened UDP-Socket $socknum"; } if (%msg) { # telegramm vom KNX my $destN = str2addr($msg{'dst'}); my $startN = str2addr($knx_startGA); my $dmxchan = $destN - $startN; if ($msg{'apci'} eq "A_GroupValue_Write" and $destN >= $startN and $destN <= $startN+$dmx_channels) { # send $dmxchan -> UDP as CaaaLvvv my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,$dimcurve[hex($msg{'data'})]); $socket[$socknum]->send($dgram) or return "send failed: $!"; # debug chop($dgram);chop($dgram); # debug # debug return "sent $msg{'dst'} $msg{'value'} $dgram to DMX $dmxchan"; # debug return; } } elsif ($fh) { my $buf; recv($fh,$buf,255,0); my $bufhex = $buf; $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg; #debug return "recv $buf $bufhex"; return; } return;
- ein DMX4ALL - NanoDMX USB Interface
- und ein socat-Eintrag (siehe Anhang, End-of-line zum paketweisen Versand hier 71 dezimal="G")
Makki
Kommentar