|
From: <sw...@us...> - 2011-06-21 19:57:17
|
Revision: 368
http://openautomation.svn.sourceforge.net/openautomation/?rev=368&view=rev
Author: swiss1
Date: 2011-06-21 19:57:10 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
Denon => KNX Plugin Version 0.1 BETA
Added Paths:
-----------
wiregate/plugin/generic/denon_steuerung_knx.pl
Added: wiregate/plugin/generic/denon_steuerung_knx.pl
===================================================================
--- wiregate/plugin/generic/denon_steuerung_knx.pl (rev 0)
+++ wiregate/plugin/generic/denon_steuerung_knx.pl 2011-06-21 19:57:10 UTC (rev 368)
@@ -0,0 +1,301 @@
+# Plugin zur Multimediasteuerung \xFCber einen 8fach Tastsensor
+# Version 0.1 20.06.2011 BETA
+# Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
+# Die Vorlage f\xFCr die Daten\xFCbertragung via socat stammt von makki (http://knx-user-forum.de/members/makki.html)
+# Aufbau m\xF6glichst so, dass man unterhalb der Einstellungen nichts ver\xE4ndern muss!
+#
+#
+#######################
+### Wichtige Infos: ###
+#######################
+#
+# Im WG ist eine Socketverbindung mit folgenden Parametern zu erstellen:
+# Name: z.B. Denon
+# Socket1: tcp-connect, Socket: IP_DES_DENON:23, Optionen: cr
+# Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr
+#
+#
+# Damit die Steuerung des ON/OFF Tasters korrekt funktioniert, muss die GA die unter $ga_status_einaus angegeben wird auch als h\xF6hrende Adresse beim EIN/AUS Taster angegeben werden!
+#
+#
+
+####################
+###Einstellungen:###
+####################
+
+
+my $ga_einaus = '9/5/0'; #Hier die GA f\xFCr EIN/AUS eintragen (0=AUS, 1=EIN)
+my $ga_status_einaus = '9/5/30'; #Hier die R\xFCckmelde-GA f\xFCr die Statusled EIN/AUS eintragen (0=AUS, 1=EIN)
+
+my $ga_lautstaerke = '9/5/4'; #Hier die GA f\xFCr MAINZONE leiser/lauter eintragen (0=leiser, 1=lauter)
+my $ga_main_lauter = '9/5/5';
+my $ga_main_leiser = '9/5/6';
+
+my $ga_status_mute = '9/5/8'; #Hier die R\xFCckmelde-GA f\xFCr die Statusled Stummschaltung eintragen (0=AUS, 1=EIN)
+
+my $ga_umschalttaste = '9/1/5';
+my $ga_status_umschalttaste = '9/1/14';
+
+my $ga_kurzwahltaste1 = '9/1/6'; #Hier die GA f\xFCr die MEMORY-Taste 1 eintragen (1=abrufen)
+my $ga_kurzwahltaste2 = '9/1/7'; #Hier die GA f\xFCr die MEMORY-Taste 2 eintragen (1=abrufen)
+my $ga_kurzwahltaste3 = '9/1/8'; #Hier die GA f\xFCr die MEMORY-Taste 3 eintragen (1=abrufen)
+my $ga_kurzwahltaste4 = '9/1/9'; #Hier die GA f\xFCr die MEMORY-Taste 4 eintragen (1=abrufen)
+
+my $ga_status_kurzwahltaste1 = '9/1/10';
+my $ga_status_kurzwahltaste2 = '9/1/11';
+my $ga_status_kurzwahltaste3 = '9/1/12';
+my $ga_status_kurzwahltaste4 = '9/1/13';
+
+my $socknum = 118; # Eindeutige Nummer des Sockets +1
+
+
+#Diese Einstellungen k\xF6nnen normalerweise so belassen werden!
+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 Einstellungen##
+######################
+
+use Time::HiRes qw(usleep nanosleep);
+
+my %denon_befehle = ("PWOFF" => "PWSTANDBY\r",
+ "PWON" => "PWON\r",
+ "MVDOWN" => "MVDOWN\r",
+ "MVUP" => "MVUP\r",
+ "SAT" => "SISAT/CBL\r",
+ "DVD" => "SIDVD\r",
+ "TV" => "SITV\r",
+ "NET" => "SINET/USB\r",
+ "CD" => "SICD\r",
+ "TUNER" => "SITUNER\r",
+ "IRADIO" => "SIIRADIO\r",
+ "DVR" => "SIDVR\r");
+
+# Eigenen Aufruf-Zyklus auf 1T setzen
+$plugin_info{$plugname.'_cycle'} = 600;
+# Zyklischer Aufruf nach restart und alle 600 sek., dient dem anmelden an die Gruppenadresse, einmalig (0) w\xFCrde in diesem Fall auch gen\xFCgen
+
+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";
+}
+
+if ($msg{'apci'} eq "A_GroupValue_Write"){
+ if ($msg{'dst'} eq $ga_einaus) {
+ if (knx_read($msg{'dst'},0,1) == 1){
+ my $return_value2 = command_senden('PWON');
+ }elsif (knx_read($msg{'dst'},0,1) == 0){
+ knx_write($ga_status_einaus,0,1);
+ $plugin_info{$plugname.'_status_quelle'} = 0;
+ my $return_value = rueckmeldung_led();
+ my $return_value2 = command_senden('PWOFF');
+ }
+ return;
+ } elsif ($msg{'dst'} eq $ga_main_lauter) {
+ if (knx_read($msg{'dst'},0,1) == 1){
+ do
+ {
+ my $return_value2 = command_senden('MVUP');
+ usleep(150000);
+ } until (knx_read($msg{'dst'},0,1) == 0);
+ return;
+ }
+ } elsif ($msg{'dst'} eq $ga_main_leiser) {
+ if (knx_read($msg{'dst'},0,1) == 1){
+ do
+ {
+ my $return_value2 = command_senden('MVDOWN');
+ usleep(150000);
+ } until (knx_read($msg{'dst'},0,1) == 0);
+ return;
+ }
+ } elsif ($msg{'dst'} eq $ga_lautstaerke) {
+ if (knx_read($msg{'dst'},0,1) == 1){
+ my $return_value2 = command_senden('MVUP');
+ }elsif (knx_read($msg{'dst'},0,1) == 0){
+ my $return_value2 = command_senden('MVDOWN');
+ }
+ return;
+ } elsif ($msg{'dst'} eq $ga_umschalttaste) {
+ if (knx_read($ga_status_einaus,0,1) == 1){ #Wenn der Verst\xE4rker eingeschaltet ist, dann reagiere auf Quellenwahl
+ if (knx_read($msg{'dst'},0,1) == 1){
+ knx_write($ga_status_umschalttaste,1,1);
+ $plugin_info{$plugname.'_status_umschaltung'} = 1;
+ }elsif (knx_read($msg{'dst'},0,1) == 0){
+ knx_write($ga_status_umschalttaste,0,1);
+ $plugin_info{$plugname.'_status_umschaltung'} = 0;
+ }
+ return;
+ }
+ } elsif ($msg{'dst'} eq $ga_kurzwahltaste1) {
+ if (knx_read($ga_status_einaus,0,1) == 1){ #Wenn der Verst\xE4rker eingeschaltet ist, dann reagiere auf Quellenwahl
+ if (knx_read($msg{'dst'},0,1) == 1){
+ if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
+ $plugin_info{$plugname.'_status_quelle'} = 1;
+ my $return_value2 = command_senden('SAT');
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
+ $plugin_info{$plugname.'_status_quelle'} = 5;
+ my $return_value2 = command_senden('NET');
+ my $return_value = rueckmeldung_led();
+ return;
+ }
+ }
+ }
+ } elsif ($msg{'dst'} eq $ga_kurzwahltaste2) {
+ if (knx_read($ga_status_einaus,0,1) == 1){ #Wenn der Verst\xE4rker eingeschaltet ist, dann reagiere auf Quellenwahl
+ if (knx_read($msg{'dst'},0,1) == 1){
+ if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
+ $plugin_info{$plugname.'_status_quelle'} = 2;
+ my $return_value2 = command_senden('TV');
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
+ $plugin_info{$plugname.'_status_quelle'} = 6;
+ my $return_value2 = command_senden('IRADIO');
+ my $return_value = rueckmeldung_led();
+ return;
+ }
+ }
+ }
+ } elsif ($msg{'dst'} eq $ga_kurzwahltaste3) {
+ if (knx_read($ga_status_einaus,0,1) == 1){ #Wenn der Verst\xE4rker eingeschaltet ist, dann reagiere auf Quellenwahl
+ if (knx_read($msg{'dst'},0,1) == 1){
+ if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
+ $plugin_info{$plugname.'_status_quelle'} = 3;
+ my $return_value2 = command_senden('DVD');
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
+ $plugin_info{$plugname.'_status_quelle'} = 7;
+ my $return_value2 = command_senden('DVR');
+ my $return_value = rueckmeldung_led();
+ return;
+ }
+ }
+ }
+ } elsif ($msg{'dst'} eq $ga_kurzwahltaste4) {
+ if (knx_read($ga_status_einaus,0,1) == 1){ #Wenn der Verst\xE4rker eingeschaltet ist, dann reagiere auf Quellenwahl
+ if (knx_read($msg{'dst'},0,1) == 1){
+ if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
+ $plugin_info{$plugname.'_status_quelle'} = 4;
+ my $return_value2 = command_senden('CD');
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
+ $plugin_info{$plugname.'_status_quelle'} = 8;
+ my $return_value2 = command_senden('TUNER');
+ my $return_value = rueckmeldung_led();
+ return;
+ }
+ }
+ }
+ }
+} elsif ($fh) { # incoming datagram
+ my $buf = <$fh>;
+ my $bufhex = unpack("H*",$buf);
+ chomp $buf;
+ my $fn = substr($buf,0,2);
+ my $fp = substr($buf,0,4);
+
+ if ($fp eq "PWON") {
+ knx_write($ga_status_einaus,1,1);
+ syswrite($socket[$socknum],"SI?\r");
+ return;
+ } elsif ($fp eq "PWST") {
+ knx_write($ga_status_einaus,0,1);
+ $plugin_info{$plugname.'_status_quelle'} = 0;
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($fp eq "MUON") {
+ knx_write($ga_status_mute,1,1);
+ return;
+ } elsif ($fp eq "MUOF") {
+ knx_write($ga_status_mute,0,1);
+ return;
+ } elsif ($fn eq "SI") {
+ if (knx_read($ga_status_einaus,0,1) == 0){
+ $plugin_info{$plugname.'_status_quelle'} = 0;
+
+ } else {
+ if ($buf eq "SISAT/CBL"){
+ $plugin_info{$plugname.'_status_quelle'} = 1;
+ } elsif ($buf eq "SITV") {
+ $plugin_info{$plugname.'_status_quelle'} = 2;
+ } elsif ($buf eq "SIDVD") {
+ $plugin_info{$plugname.'_status_quelle'} = 3;
+ } elsif ($buf eq "SICD") {
+ $plugin_info{$plugname.'_status_quelle'} = 4;
+ } elsif ($buf eq "SINET/USB") {
+ $plugin_info{$plugname.'_status_quelle'} = 5;
+ } elsif ($buf eq "SIIRADIO") {
+ $plugin_info{$plugname.'_status_quelle'} = 6;
+ } elsif ($buf eq "SIDVR") {
+ $plugin_info{$plugname.'_status_quelle'} = 7;
+ } elsif ($buf eq "SITUNER") {
+ $plugin_info{$plugname.'_status_quelle'} = 8;
+ } else {
+ $plugin_info{$plugname.'_status_quelle'} = 0;
+ }
+ }
+ my $return_value = rueckmeldung_led();
+ return;
+ } elsif ($fn eq "MV" and $buf !~ /^MVMAX/) { # MVMAX is undocumented?
+ # broken, just sends every 2, .5 isn't considered
+ return;
+ } else {
+ return;
+ }
+} else { # zyklischer Aufruf
+ # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
+ $plugin_subscribe{$ga_einaus}{$plugname} = 1;
+ $plugin_subscribe{$ga_lautstaerke}{$plugname} = 1;
+ $plugin_subscribe{$ga_main_lauter}{$plugname} = 1;
+ $plugin_subscribe{$ga_main_leiser}{$plugname} = 1;
+ $plugin_subscribe{$ga_umschalttaste}{$plugname} = 1;
+ $plugin_subscribe{$ga_kurzwahltaste1}{$plugname} = 1;
+ $plugin_subscribe{$ga_kurzwahltaste2}{$plugname} = 1;
+ $plugin_subscribe{$ga_kurzwahltaste3}{$plugname} = 1;
+ $plugin_subscribe{$ga_kurzwahltaste4}{$plugname} = 1;
+}
+
+# Hier werden diverse Zust\xE4nde des Denon zyklisch abgefragt um den aktuellen Status auch anzeigen zu k\xF6nnen, wenn etwas \xFCber z.B. die FB ver\xE4ndert wird:
+syswrite($socket[$socknum],"PW?\r");
+syswrite($socket[$socknum],"MU?\r");
+syswrite($socket[$socknum],"SI?\r");
+return;
+
+#Hier werden die Status LED der Quellenwahltasten angesteuert
+sub rueckmeldung_led{
+ SELECT:{
+ if ($plugin_info{$plugname.'_status_quelle'} == 0){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 1){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,1,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 2){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,1,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 3){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,1,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 4){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,1,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 5){ knx_write($ga_status_umschalttaste,1,1); knx_write($ga_status_kurzwahltaste1,1,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 6){ knx_write($ga_status_umschalttaste,1,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,1,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 7){ knx_write($ga_status_umschalttaste,1,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,1,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
+ if ($plugin_info{$plugname.'_status_quelle'} == 8){ knx_write($ga_status_umschalttaste,1,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,1,1); last SELECT; }
+ }
+}
+
+sub command_senden{
+ my $befehl = $_[0];
+ syswrite($socket[$socknum], $denon_befehle{$befehl});
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sw...@us...> - 2011-06-21 20:50:36
|
Revision: 370
http://openautomation.svn.sourceforge.net/openautomation/?rev=370&view=rev
Author: swiss1
Date: 2011-06-21 20:50:30 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
Diverse Kommentare hinzugef?\195?\188gt. Version 0.1 BETA
Modified Paths:
--------------
wiregate/plugin/generic/denon_steuerung_knx.pl
Modified: wiregate/plugin/generic/denon_steuerung_knx.pl
===================================================================
--- wiregate/plugin/generic/denon_steuerung_knx.pl 2011-06-21 20:05:06 UTC (rev 369)
+++ wiregate/plugin/generic/denon_steuerung_knx.pl 2011-06-21 20:50:30 UTC (rev 370)
@@ -28,8 +28,8 @@
my $ga_status_einaus = '9/5/30'; #Hier die R\xFCckmelde-GA f\xFCr die Statusled EIN/AUS eintragen (0=AUS, 1=EIN)
my $ga_lautstaerke = '9/5/4'; #Hier die GA f\xFCr MAINZONE leiser/lauter eintragen (0=leiser, 1=lauter)
-my $ga_main_lauter = '9/5/5';
-my $ga_main_leiser = '9/5/6';
+my $ga_main_lauter = '9/5/5'; #Hier die GA f\xFCr MAINZONE lauter eintragen (0=NICHTS, 1=lauter)
+my $ga_main_leiser = '9/5/6'; #Hier die GA f\xFCr MAINZONE leiser eintragen (0=NICHTS, 1=leiser)
my $ga_status_mute = '9/5/8'; #Hier die R\xFCckmelde-GA f\xFCr die Statusled Stummschaltung eintragen (0=AUS, 1=EIN)
@@ -41,12 +41,12 @@
my $ga_kurzwahltaste3 = '9/1/8'; #Hier die GA f\xFCr die MEMORY-Taste 3 eintragen (1=abrufen)
my $ga_kurzwahltaste4 = '9/1/9'; #Hier die GA f\xFCr die MEMORY-Taste 4 eintragen (1=abrufen)
-my $ga_status_kurzwahltaste1 = '9/1/10';
-my $ga_status_kurzwahltaste2 = '9/1/11';
-my $ga_status_kurzwahltaste3 = '9/1/12';
-my $ga_status_kurzwahltaste4 = '9/1/13';
+my $ga_status_kurzwahltaste1 = '9/1/10'; #Hier die GA f\xFCr die Status LED der Taste 1 eintragen (1=EIN, 0=Aus)
+my $ga_status_kurzwahltaste2 = '9/1/11'; #Hier die GA f\xFCr die Status LED der Taste 2 eintragen (1=EIN, 0=Aus)
+my $ga_status_kurzwahltaste3 = '9/1/12'; #Hier die GA f\xFCr die Status LED der Taste 3 eintragen (1=EIN, 0=Aus)
+my $ga_status_kurzwahltaste4 = '9/1/13'; #Hier die GA f\xFCr die Status LED der Taste 4 eintragen (1=EIN, 0=Aus)
-my $socknum = 118; # Eindeutige Nummer des Sockets +1
+my $socknum = 118; # Eindeutige Nummer des Sockets +1
#Diese Einstellungen k\xF6nnen normalerweise so belassen werden!
@@ -61,6 +61,8 @@
use Time::HiRes qw(usleep nanosleep);
+
+#Hier werden den Denon-befehle interne Namen zugewiesen
my %denon_befehle = ("PWOFF" => "PWSTANDBY\r",
"PWON" => "PWON\r",
"MVDOWN" => "MVDOWN\r",
@@ -74,9 +76,9 @@
"IRADIO" => "SIIRADIO\r",
"DVR" => "SIDVR\r");
-# Eigenen Aufruf-Zyklus auf 1T setzen
+
$plugin_info{$plugname.'_cycle'} = 600;
-# Zyklischer Aufruf nach restart und alle 600 sek., dient dem anmelden an die Gruppenadresse, einmalig (0) w\xFCrde in diesem Fall auch gen\xFCgen
+# Zyklischer Aufruf nach restart und alle 600 sek.
if (!$socket[$socknum]) { # socket erstellen
$socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
@@ -206,7 +208,7 @@
}
}
}
-} elsif ($fh) { # incoming datagram
+} elsif ($fh) { # Wenn der Denon ein Antworttelegramm sendet, wird ab hier der entsprechende Status ausgelesen.
my $buf = <$fh>;
my $bufhex = unpack("H*",$buf);
chomp $buf;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sw...@us...> - 2011-06-25 08:23:09
|
Revision: 372
http://openautomation.svn.sourceforge.net/openautomation/?rev=372&view=rev
Author: swiss1
Date: 2011-06-25 08:23:03 +0000 (Sat, 25 Jun 2011)
Log Message:
-----------
Die Auswertung der aktuellen Lautst?\195?\164rke wurde erg?\195?\164nzt und kann nun als 14byte Text auf den BUS gesendet werden. Version 0.2 BETA
Modified Paths:
--------------
wiregate/plugin/generic/denon_steuerung_knx.pl
Modified: wiregate/plugin/generic/denon_steuerung_knx.pl
===================================================================
--- wiregate/plugin/generic/denon_steuerung_knx.pl 2011-06-24 21:26:40 UTC (rev 371)
+++ wiregate/plugin/generic/denon_steuerung_knx.pl 2011-06-25 08:23:03 UTC (rev 372)
@@ -1,5 +1,5 @@
-# Plugin zur Multimediasteuerung \xFCber einen 8fach Tastsensor
-# Version 0.1 20.06.2011 BETA
+# Plugin zur Multimediasteuerung \xFCber einen 8fach Tastsensor oder eine Visu
+# Version 0.2 23.06.2011 BETA
# Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
# Die Vorlage f\xFCr die Daten\xFCbertragung via socat stammt von makki (http://knx-user-forum.de/members/makki.html)
# Aufbau m\xF6glichst so, dass man unterhalb der Einstellungen nichts ver\xE4ndern muss!
@@ -33,6 +33,8 @@
my $ga_status_mute = '9/5/8'; #Hier die R\xFCckmelde-GA f\xFCr die Statusled Stummschaltung eintragen (0=AUS, 1=EIN)
+my $ga_status_lautstaerke = '9/5/9'; #Hier wird die aktuelle Lautst\xE4rke als 14byte TEXT zur\xFCckgegeben (z.B. -35.5)
+
my $ga_umschalttaste = '9/1/5';
my $ga_status_umschalttaste = '9/1/14';
@@ -258,7 +260,30 @@
my $return_value = rueckmeldung_led();
return;
} elsif ($fn eq "MV" and $buf !~ /^MVMAX/) { # MVMAX is undocumented?
- # broken, just sends every 2, .5 isn't considered
+ # Hier wird die aktuelle Lautst\xE4rke aus der R\xFCckmeldung berechnet
+ $plugin_info{$plugname.'_debug_mv'} = $buf;
+ my $laenge = length($buf);
+ my $wert;
+
+ if ($laenge == 4){
+ $wert = substr($buf,2,2);
+ $wert = $wert."0";
+ }elsif ($laenge == 5){
+ $wert = substr($buf,2,3);
+ }
+
+ if ($wert ne ""){
+ if ($wert <= 800){
+ $wert = 800 - $wert;
+ $wert = "-".substr($wert,0,2).".".substr($wert,2,1);
+ } elsif ($wert == 995){
+ $wert = "-80.5";
+ } else {
+ $wert = "---.-";
+ }
+ knx_write($ga_status_lautstaerke,$wert,16); #Hier funktioniert etwas noch nicht ganz!
+ $plugin_info{$plugname.'_mv_vol'} = $wert;
+ }
return;
} else {
return;
@@ -282,7 +307,7 @@
syswrite($socket[$socknum],"SI?\r");
return;
-#Hier werden die Status LED der Quellenwahltasten angesteuert
+#Hier werden die Status LED's der Quellenwahltasten angesteuert
sub rueckmeldung_led{
SELECT:{
if ($plugin_info{$plugname.'_status_quelle'} == 0){ knx_write($ga_status_umschalttaste,0,1); knx_write($ga_status_kurzwahltaste1,0,1); knx_write($ga_status_kurzwahltaste2,0,1); knx_write($ga_status_kurzwahltaste3,0,1); knx_write($ga_status_kurzwahltaste4,0,1); last SELECT; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sw...@us...> - 2011-07-09 15:42:10
|
Revision: 385
http://openautomation.svn.sourceforge.net/openautomation/?rev=385&view=rev
Author: swiss1
Date: 2011-07-09 15:42:04 +0000 (Sat, 09 Jul 2011)
Log Message:
-----------
Das Plugin wurde so angepasst, dass nun komfortabel unter Einstellungen ausgew?\195?\164hlt werden kann welche MEMORY-Taste welche Quelle aufrufen soll. Version 0.3 BETA
Modified Paths:
--------------
wiregate/plugin/generic/denon_steuerung_knx.pl
Modified: wiregate/plugin/generic/denon_steuerung_knx.pl
===================================================================
--- wiregate/plugin/generic/denon_steuerung_knx.pl 2011-07-09 07:43:17 UTC (rev 384)
+++ wiregate/plugin/generic/denon_steuerung_knx.pl 2011-07-09 15:42:04 UTC (rev 385)
@@ -1,5 +1,5 @@
# Plugin zur Multimediasteuerung \xFCber einen 8fach Tastsensor oder eine Visu
-# Version 0.2 23.06.2011 BETA
+# Version 0.3 09.07.2011 BETA
# Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
# Die Vorlage f\xFCr die Daten\xFCbertragung via socat stammt von makki (http://knx-user-forum.de/members/makki.html)
# Aufbau m\xF6glichst so, dass man unterhalb der Einstellungen nichts ver\xE4ndern muss!
@@ -35,19 +35,34 @@
my $ga_status_lautstaerke = '9/5/9'; #Hier wird die aktuelle Lautst\xE4rke als 14byte TEXT zur\xFCckgegeben (z.B. -35.5)
-my $ga_umschalttaste = '9/1/5';
-my $ga_status_umschalttaste = '9/1/14';
+my $ga_umschalttaste = '9/1/5'; #Hier wird die GA f\xFCr die Umschalttaste eingetragen. Damit lassen sich die MEMORY-Tasten doppelt belegen.
+my $ga_status_umschalttaste = '9/1/14'; #Hier wird die GA f\xFCr die R\xFCckmeldung der Umschalttaste eingetragen.
+
my $ga_kurzwahltaste1 = '9/1/6'; #Hier die GA f\xFCr die MEMORY-Taste 1 eintragen (1=abrufen)
+my $ga_status_kurzwahltaste1 = '9/1/10'; #Hier die GA f\xFCr die Status LED der Taste 1 eintragen (1=EIN, 0=Aus)
+my $quelle_kurzwahltaste1 = 'SAT'; #Hier kann die aufzurufende Quelle f\xFCr die Grundbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+my $quelle_kurzwahltaste1u = 'NET'; #Hier kann die aufzurufende Quelle f\xFCr die Zweitbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+
+
my $ga_kurzwahltaste2 = '9/1/7'; #Hier die GA f\xFCr die MEMORY-Taste 2 eintragen (1=abrufen)
+my $ga_status_kurzwahltaste2 = '9/1/11'; #Hier die GA f\xFCr die Status LED der Taste 2 eintragen (1=EIN, 0=Aus)
+my $quelle_kurzwahltaste2 = 'TV'; #Hier kann die aufzurufende Quelle f\xFCr die Grundbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+my $quelle_kurzwahltaste2u = 'IRADIO'; #Hier kann die aufzurufende Quelle f\xFCr die Zweitbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+
+
my $ga_kurzwahltaste3 = '9/1/8'; #Hier die GA f\xFCr die MEMORY-Taste 3 eintragen (1=abrufen)
+my $ga_status_kurzwahltaste3 = '9/1/12'; #Hier die GA f\xFCr die Status LED der Taste 3 eintragen (1=EIN, 0=Aus)
+my $quelle_kurzwahltaste3 = 'DVD'; #Hier kann die aufzurufende Quelle f\xFCr die Grundbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+my $quelle_kurzwahltaste3u = 'DVR'; #Hier kann die aufzurufende Quelle f\xFCr die Zweitbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+
+
my $ga_kurzwahltaste4 = '9/1/9'; #Hier die GA f\xFCr die MEMORY-Taste 4 eintragen (1=abrufen)
-
-my $ga_status_kurzwahltaste1 = '9/1/10'; #Hier die GA f\xFCr die Status LED der Taste 1 eintragen (1=EIN, 0=Aus)
-my $ga_status_kurzwahltaste2 = '9/1/11'; #Hier die GA f\xFCr die Status LED der Taste 2 eintragen (1=EIN, 0=Aus)
-my $ga_status_kurzwahltaste3 = '9/1/12'; #Hier die GA f\xFCr die Status LED der Taste 3 eintragen (1=EIN, 0=Aus)
my $ga_status_kurzwahltaste4 = '9/1/13'; #Hier die GA f\xFCr die Status LED der Taste 4 eintragen (1=EIN, 0=Aus)
+my $quelle_kurzwahltaste4 = 'CD'; #Hier kann die aufzurufende Quelle f\xFCr die Grundbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+my $quelle_kurzwahltaste4u = 'TUNER'; #Hier kann die aufzurufende Quelle f\xFCr die Zweitbelegung eingetragen. z.B. SAT, DVD, TV, IRADIO (Internet Radio) oder TUNER angegeben werden
+
my $socknum = 118; # Eindeutige Nummer des Sockets +1
@@ -57,26 +72,28 @@
my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
my $recv_port = "50105"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
+
######################
##ENDE Einstellungen##
######################
+
+
use Time::HiRes qw(usleep nanosleep);
-
#Hier werden den Denon-befehle interne Namen zugewiesen
-my %denon_befehle = ("PWOFF" => "PWSTANDBY\r",
- "PWON" => "PWON\r",
- "MVDOWN" => "MVDOWN\r",
- "MVUP" => "MVUP\r",
- "SAT" => "SISAT/CBL\r",
- "DVD" => "SIDVD\r",
- "TV" => "SITV\r",
- "NET" => "SINET/USB\r",
- "CD" => "SICD\r",
- "TUNER" => "SITUNER\r",
- "IRADIO" => "SIIRADIO\r",
- "DVR" => "SIDVR\r");
+my %denon_befehle = ("PWOFF" => "PWSTANDBY",
+ "PWON" => "PWON",
+ "MVDOWN" => "MVDOWN",
+ "MVUP" => "MVUP",
+ "SAT" => "SISAT/CBL",
+ "DVD" => "SIDVD",
+ "TV" => "SITV",
+ "NET" => "SINET/USB",
+ "CD" => "SICD",
+ "TUNER" => "SITUNER",
+ "IRADIO" => "SIIRADIO",
+ "DVR" => "SIDVR");
$plugin_info{$plugname.'_cycle'} = 600;
@@ -122,7 +139,7 @@
if (knx_read($msg{'dst'},0,1) == 1){
do
{
- my $return_value2 = command_senden('MVDOWN');
+ my $return_value2 = command_senden('MVDOWN').'\r';
usleep(150000);
} until (knx_read($msg{'dst'},0,1) == 0);
return;
@@ -150,12 +167,12 @@
if (knx_read($msg{'dst'},0,1) == 1){
if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
$plugin_info{$plugname.'_status_quelle'} = 1;
- my $return_value2 = command_senden('SAT');
+ my $return_value2 = command_senden($quelle_kurzwahltaste1);
my $return_value = rueckmeldung_led();
return;
} elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
$plugin_info{$plugname.'_status_quelle'} = 5;
- my $return_value2 = command_senden('NET');
+ my $return_value2 = command_senden($quelle_kurzwahltaste1u);
my $return_value = rueckmeldung_led();
return;
}
@@ -166,12 +183,12 @@
if (knx_read($msg{'dst'},0,1) == 1){
if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
$plugin_info{$plugname.'_status_quelle'} = 2;
- my $return_value2 = command_senden('TV');
+ my $return_value2 = command_senden($quelle_kurzwahltaste2);
my $return_value = rueckmeldung_led();
return;
} elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
$plugin_info{$plugname.'_status_quelle'} = 6;
- my $return_value2 = command_senden('IRADIO');
+ my $return_value2 = command_senden($quelle_kurzwahltaste2u);
my $return_value = rueckmeldung_led();
return;
}
@@ -182,12 +199,12 @@
if (knx_read($msg{'dst'},0,1) == 1){
if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
$plugin_info{$plugname.'_status_quelle'} = 3;
- my $return_value2 = command_senden('DVD');
+ my $return_value2 = command_senden($quelle_kurzwahltaste3);
my $return_value = rueckmeldung_led();
return;
} elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
$plugin_info{$plugname.'_status_quelle'} = 7;
- my $return_value2 = command_senden('DVR');
+ my $return_value2 = command_senden($quelle_kurzwahltaste3u);
my $return_value = rueckmeldung_led();
return;
}
@@ -198,12 +215,12 @@
if (knx_read($msg{'dst'},0,1) == 1){
if ($plugin_info{$plugname.'_status_umschaltung'} == 0) {
$plugin_info{$plugname.'_status_quelle'} = 4;
- my $return_value2 = command_senden('CD');
+ my $return_value2 = command_senden($quelle_kurzwahltaste4);
my $return_value = rueckmeldung_led();
return;
} elsif ($plugin_info{$plugname.'_status_umschaltung'} == 1){
$plugin_info{$plugname.'_status_quelle'} = 8;
- my $return_value2 = command_senden('TUNER');
+ my $return_value2 = command_senden($quelle_kurzwahltaste4u);
my $return_value = rueckmeldung_led();
return;
}
@@ -237,24 +254,15 @@
$plugin_info{$plugname.'_status_quelle'} = 0;
} else {
- if ($buf eq "SISAT/CBL"){
- $plugin_info{$plugname.'_status_quelle'} = 1;
- } elsif ($buf eq "SITV") {
- $plugin_info{$plugname.'_status_quelle'} = 2;
- } elsif ($buf eq "SIDVD") {
- $plugin_info{$plugname.'_status_quelle'} = 3;
- } elsif ($buf eq "SICD") {
- $plugin_info{$plugname.'_status_quelle'} = 4;
- } elsif ($buf eq "SINET/USB") {
- $plugin_info{$plugname.'_status_quelle'} = 5;
- } elsif ($buf eq "SIIRADIO") {
- $plugin_info{$plugname.'_status_quelle'} = 6;
- } elsif ($buf eq "SIDVR") {
- $plugin_info{$plugname.'_status_quelle'} = 7;
- } elsif ($buf eq "SITUNER") {
- $plugin_info{$plugname.'_status_quelle'} = 8;
- } else {
- $plugin_info{$plugname.'_status_quelle'} = 0;
+ SELECT:{
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste1}){ $plugin_info{$plugname.'_status_quelle'} = 1; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste2}){ $plugin_info{$plugname.'_status_quelle'} = 2; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste3}){ $plugin_info{$plugname.'_status_quelle'} = 3; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste4}){ $plugin_info{$plugname.'_status_quelle'} = 4; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste1u}){ $plugin_info{$plugname.'_status_quelle'} = 5; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste2u}){ $plugin_info{$plugname.'_status_quelle'} = 6; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste3u}){ $plugin_info{$plugname.'_status_quelle'} = 7; last SELECT; }
+ if ($buf eq $denon_befehle{$quelle_kurzwahltaste4u}){ $plugin_info{$plugname.'_status_quelle'} = 8; last SELECT; }
}
}
my $return_value = rueckmeldung_led();
@@ -322,7 +330,10 @@
}
}
+
sub command_senden{
my $befehl = $_[0];
- syswrite($socket[$socknum], $denon_befehle{$befehl});
+ my $command = $denon_befehle{$befehl}."\r";
+ $plugin_info{$plugname.'_debug'} = $command;
+ syswrite($socket[$socknum], $command);
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|