Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Danke für die Info bzgl. "defined" jetzt ist es mir klar wieso.
Mit dem socat hatte ich es auch schon versucht. Hatte aber noch weniger geklappt Ich werde es mir nochmals ansehen.
Mich wundert es, das es mit der Sub nicht geht, da dies bis auf die Befehle identisch mit dem Squeezplugin ist. Vielleicht baue ich mir diesen mal ein und schaue was am Wireshark zu sehen ist.
ich würde von Sockets Abstand halten: Memleaks!
So sehr ich den socat auch mag.
Beobachte das mal in der Plugin-Übersicht. Die einfache Sub ist doch genauso easy ... eigentlich noch viel einfacher. Alles was bei Plugins mit Sockets zu tun hat treibt den Speicherverbrauch in die Höhe.
Das mit dem Array klingt logisch. Wie muss das geschreiben werden das es als reiner Text angesehen wird? Leider benötigt das der Receiver genau in diesem Format.
=> Habe nun das ganze so geschreiben: "@"."MAIN:PWR=On"
Mittlerweile geht er auch in die Sub Routine und ich sehe bereits TCP Pakete. Nur sind in den Paketen keine Nutzdaten. Was mache ich hier falsch?
=> Zu sicherheit nun nochmal anderst: "%40MAIN%3APWR%3DStandby"
Mir ist aufgefallen das ich selbst bei print $sock ("HELLOWORLD \n") ; keine Lesbaren Infos in dem TCP paket habe.
nach vielen erfolglosen Versuchen wende ich mich nun hilfesuchend an Euch.
Das Plugin soll meinen Yamaha RX-V773 via TCP ansteuern. Ich habe mich am Sqeezebox Plugin orientiert, nur leider klappt es nicht.
Derzeit scheitere ich schon bei der GA Anmeldung. Solange "defined $msg{'value'}" mit dabei steht kommt das Script an dieser Stelle nicht weiter.
Nehme ich den "defined" raus, komme ich weiter und über die erste IF Abfrage. Allerdings bekomme ich dann keinen Wert mehr aus der $msg{'value'} für die weitere Verarbeitung. Außerdem reagiert das Plugin z.B. auch auf 1/1/9, obwohl diese nicht angemeldet wird.
Vielleicht sieht hier jemand den Fehler oder hat den entscheidenden Tipp für mich.
Besten dank und allen ein schönes Wochenende!
Basti
Code:
# YAMAHA RX-V773 Steuerung über Wiregate
use IO::Socket;
### Definitionen
################################################################################################################################
my %function=(
## YAMAHA Receiver
# MAIN ZONE
# GA Command 0 Command 1 Description
#-------------------------------------------------------------------------------------------------------------------------------
"MAINPWR"=> "1/1/1", #@MAIN:PWR=Standby @MAIN:PWR=On Main Power On/Off
"MAINVOL"=> "1/1/2", #@MAIN:VOL=DOWN 2dB @MAIN:VOL=UP 2 dB Main Volume UP/DOWN
"MAINMUTE"=> "1/1/3", #@MAIN:MUTE=Off @MAIN:MUTE=On Main Volume MUTE
"MAINSRC"=> "1/1/4", #@MAIN:SRC=xxx @MAIN:SRC=xxx Main Source
"MAINSLEEP"=> "1/1/5", #@MAIN:SLEEP=Off @MAIN:SLEEP=30 Main Power Sleep 30 Min
# ZONE 2
# GA Command 0 Command 1 Description
#-------------------------------------------------------------------------------------------------------------------------------
"ZONE2PWR"=> "1/1/20", #@ZONE2:PWR=Standby @ZONE2:PWR=On ZONE2 Power On/Off
"ZONE2VOL"=> "1/1/21", #@ZONE2:VOL=DOWN 2dB @ZONE2:VOL=UP 2 dB ZONE2 Volume UP/DOWN
"ZONE2MUTE"=> "1/1/22", #@ZONE2:MUTE=Off @ZONE2:MUTE=On ZONE2 Volume MUTE
"ZONE2SRC"=> "1/1/23", #@ZONE2:SRC=xxx @ZONE2:SRC=xxx ZONE2 Source
"ZONE2SLEEP"=> "1/1/24" #@ZONE2:SLEEP=Off @ZONE2:SLEEP=30 ZONE2 Power Sleep 30 Min
);
#################################################################################################################################
# Verbindungseinstellungen
my $send_ip = '192.168.0.50'; # SendeIP
my $send_port = '50000'; # Sendeport
### Ende Definitionen
# Eigenen Aufruf-Zyklus setzen
$plugin_info{$plugname.'_cycle'} = 0;
# Anmeldung an den Gruppenadressen
while (my($key,$ga) = each %function)
{
$plugin_subscribe{$function{$key}}{$plugname} = 1;
}
#################################################################################################################################
### Verarbeitung
# Main Power ON/OFF
if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{MAINPWR} && defined $msg{'value'}) {
if ($msg{'value'} eq "0") {
my $command="@MAIN:PWR=Standby";
my $return_val = sendCommand($command);
}
if ($msg{'value'} eq "1") {
my $command="@MAIN:PWR=On";
my $return_val = sendCommand($command);
}
}
#################################################################################################################################
# Log
return 0;
sub sendCommand {
my $cmd = $_[0];
my $sock = new IO::Socket::INET (
PeerAddr => $send_ip,
PeerPort => $send_port,
Proto => 'tcp',
);
die "Error: $!\n" unless $sock;
print $sock ($cmd."\n\r") ;
plugin_log($plugname, $cmd);
close($sock);
}
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.
Einen Kommentar schreiben: