Telnet Script für die Steuerung eines A/V Receivers

J

jurikay

Neues Mitglied
Thread Starter
Dabei seit
11.08.2011
Beiträge
12
Reaktionspunkte
0
Hallo Community! :)

Ich habe mir vor kurzem einen AV Receiver von Pioneer zugelegt. (VSX-921)
Dieser ist per Ethernetkabel mit meinem Router verbunden.

Mein Ziel ist es, die rudimentären Funktionen des Receivers von meinem Mac aus zu steuern. Am liebsten über eine GUI (Ist mir im Moment aber zu kompliziert) Daher am besten über selbsterstellte Hotkeys.


Nun ist es möglich, dem Receiver Telnet Befehle zu senden, um so zum Beispiel die Lautstärke zu regulieren oder Mute zu aktivieren etc.

Das ganze sieht dann so aus:

Ich öffne das Terminal und gebe "telnet 192.168.XX.XX" ein <---- (IP des Receivers)

Der Receiver antwortet mit:
Trying 192.168.XX.XX
Connected to 00e036ee1df6
Escape character is '^]'.
BridgeCo AG Telnet server


Nun kann ich Befehle wie MO (Mute ON) oder MF (Mute OFF) eingeben.

Bis hierhin bin ich auch zufrieden und alles funktioniert wunderbar.

Ich bin nun dabei zu versuchen, ein paar Applescripts zu schreiben, die ich später auf die Tasten F13-F19 meiner Numpad Tastatur legen kann.

Am wichtigsten wären mir 2 Buttons um die Lautstärke zu erhöhen/ zu senken und ein Mute Button, der beim ersten drücken den Mute Zustand aktiviert und beim zweiten mal wieder deaktiviert.

Aber hier beginnen meine Probleme.

Da ich erst seit einem knappen Jahr Mac User bin halten sich meine Applescript- und Terminalkenntnisse leider echt in Grenzen.

Ich habe ein wenig im Applescript Editor rumgespielt, bin aber leider zu keiner auch nur im Ansatz brauchbaren Lösung gekommen.

Nicht mal dies hier scheint zu funktionieren: :(

tell application "Terminal"
do script "telnet 192.168.178.29"
delay 3
do script "MO"
end tell

(Es wird beim 2. do script auch ein 2. Terminal Fenster geöffnet.)

Außerdem würde ich sehr gerne am Anfang des Scripts abfragen, ob nicht schon eine Telnet Verbindung besteht, sodass nicht jeder Hotkey jedes mal wieder eine neue Verbindung aufbauen muss.


Ich hoffe die Problematik lässt sich halbwegs elegant lösen.


Ich bedanke mich schon jetzt für jede/n Hilfe/Tipp :)

Mit freundlichen Grüßen, Juri
 
Um ein Problem nach dem anderen zu lösen: versuche mal,
do script "MO"
mit
do script "MO" in currentTab
zu ersetzen :)
 
Nice! Danke das bringt mich immerhin schon mal etwas weiter :)

edit: Leider bekomme ich dieses Ergebnis:
error "Die Variable „currentTab“ ist nicht definiert."
 
"Die Variable „currentTab“ ist nicht definiert."

Whoops - falsche Zeile kopiert! Richtig wäre der Anhang von
do script "MO" in window 1

Aber falls Du eine WIRKLICH gute Nachricht hören willst:
HIER gibts die grafische Benutzeroberfläche mit ALLEM drum und dran!


Als Ergänzung: Ich hatte vergessen, die Definition von "currentTab" anzugeben.
Hier der komplette Code für den Aufbau mit "in currentTab":

tell application "Terminal"
set currentTab to do script "whatever"
do script "whereever" in currentTab
do script "whenever" in currentTab
end tell

Gruss Stefan
 
Danke - Ja das ist ganz nett fürs iPhone... Aber ich möchte den Receiver echt gerne von meinem Mac aus steuern. ;)

Gruß, Juri
 
Das müsste – gemäss Hersteller – problemlos über AirPlay (also auch über das iTunes Interface) gehen.
Dafür gäbe es dann unzählige PlugIns, womit man die Steuerung z.B. ins Dashboard oder in die Menüzeile
verlegen könnte (oder einfach mit den default iTunes Tasten steuern...).
 
...
do script "echo MO|nc -i1 192.168.178.29 23"
...
 
Hi Leute

Ich habe es jetzt so versucht:

tell application "Terminal"
do script "echo MO|nc -i1 192.168.178.29 23"
end tell

Leider passiert einfach gar nichts :(

---

Die Sache ist, wenn ich das ganze über die Airplay Funktion realisieren würde, müsste iTunes auf jeden Fall immer geöffnet sein und ich muss den Receiver als Airplay Lautsprecher ausgewählt haben.. Somit müsste ich wieder am Receiver selbst umschalten, wenn ich zum Beispiel den VLC Player benutzen möchte, da der Receiver automatisch die Quelle von iMac (Adapter optisch auf Klinke) auf den Airplay Empfang umschaltet..
(Hoffe es ist zu verstehen was ich meine habe noch keinen Kaffee getrunken) ;)


Danke für die Hilfe und viele Grüße, Juri
 
Probier

echo MO|nc -i1 192.168.178.29 23

mal direkt im Terminal.
Es müsste ja evtl. eine Fehlerausgabe kommen.
Teste auch mit VU und VD.
 
Hi,

Ich habe folgende Eingaben im Terminal ausprobiert:
echo MO|nc -i1 192.168.178.29 23
echo VU|nc -i1 192.168.178.29 23
echo VD|nc -i1 192.168.178.29 23
echo MO|nc -i3 192.168.178.29 23

Es passiert immer das gleiche: Es gibt ein kurzes delay, danach erscheint eine neue Zeile im Terminal.
Leider gibt es keinerlei Fehlermeldung o.Ä.

Ich habe aber eine Theorie woran das liegen könnte.

Wenn ich mich über "telnet 192.168.178.29" verbinde und dann den ersten Befehl eingebe, antwortet der Receiver mit E04. (Das ist immer und mit allen Commands so)
Danach funktionieren sämtliche Befehle problemlos.

Es scheint so, als würde der erste gesendete Befehl den Receiver für telnet "aufwecken" und erst danach wie erwartet auf die Eingaben reagieren.


Hier ein Auszug aus einer PDF Datei von Pioneer, in der unter anderem die telnet Commands aufgelistet sind:

Notice1
This equipment save the power consumption (less than 1W) during the standby mode.
To achieve this, main CPU doesn't operate during standby mode.
For this reason, this equipment can not receive the 1st command from rs-232c port.
But main CPU will be waked up by this 1st command.
This equipment is using 1st command "<CR>" as only a trigger to wake up the main CPU
and can not decode 1st command.
Please send command as bellow.
Please make sure to have at least 100msec. Interval between the 1st command and the second command.
Grafik
(Mich wundert, dass hier nur vom Standby Mode die Rede ist)

Das Bedeutet, man müsste nach dem ersten Befehl (MO oder whatever) ein >100 msek. delay und dann einen 2. Befehl einbauen.

Ich könnte mir vorstellen, dass das ganze so dann auch funktioniert.

Ich habe mich zwar etwas in netcat unter mac os eingelesen, habe aber leider keine Ahnung wie der Befehl dann auszusehen hätte.

Gruß, Juri
 
Zuletzt bearbeitet:
Ein delay kannst du im Terminal mit sleep erreichen, z.B.

echo 0; sleep 0.1; echo MO|nc -i1 192.168.178.29 23

Die Zahl hinter sleep ist der delay in Sekunden. Kommazahlen werden akzeptiert.
 
Okay Danke

Das Problem ist noch, dass der nc Befehl das erste echo nicht beachtet..Es wird zuerst 0 "geechoed" dann ist 0.1 sek Pause und danach wird der Befehl "echo MO|nc -i1 192.168.178.29 23" wie gehabt abschickt. (Glaube ich jedenfalls)
 
echo -n "\r\nMO\r\n"|nc -i1 192.168.178.29 23

(wird zu schnell sein)
oder

(echo; sleep 0.1; echo MO)|nc -i1 192.168.178.29 23

oder

(echo; sleep 0.1; echo; echo MO)|nc -i1 192.168.178.29 23

evtl. ... sleep 0.2 ...
 
Zuletzt bearbeitet:
müsste iTunes auf jeden Fall immer geöffnet sein und ich muss den Receiver als Airplay Lautsprecher ausgewählt haben

Neenee, dafür gibts das nette Tool AirFoil, welches jedes Audiosignal abgreift und an AirPlay-fähige Geräte schickt.

Folglich braucht es nur ein kleines Skript:
–*AirFoil starten
– Receiver wecken
–*delay 100ms
– Port wählen

Warum einfach wenn's auch kompliziert geht :p
 
@ olivetti

Habe alles probiert auch mit längeren Pausen... Leider immer das selber Ergebnis: Es gibt ein kurzes delay im Terminal dann erscheint eine neue leere Zeile.
Ich hätte mich echt nicht gewundert, wenn es mit (echo MO; sleep 0.2; echo MO)|nc -i1 192.168.178.29 23 einfach funktionieren würde. :/
Hat noch jemand eine Idee was ich probieren/ändern könnte?



@ freeday

Ich habe AirFoil ausprobiert.
Das Tool ist tatsächlich an sich praktisch. Besonders gefällt mir die Funktion "Link Volume to System"
Wenn ich das und den Mute Hotkey auch verwenden könnte, wenn der Receiver nicht als Airplay Lautsprecher ausgewählt ist, wäre ich schon ziemlich zufrieden.

Wenn der Receiver in einem anderen Raum stände und ausschließlich für Musik vorgesehen wäre oder wenn ich vorhätte, Airplay Lautsprecher im Badezimmer o.Ä. anzusteuern, dann hätte ich mit dieser Lösung keine Probleme.

Wenn ich aber fortan das Audio Signal von meinem Mac über die Airplay-Funktion, anstelle des opt. Kabels an den Receiver schicke, kommt es zu einer ~2 Sekunden langen Verzögerung. Dadurch ist jedes Video asynchron und iTunes reagiert um einiges langsamer.

(Außerdem komme ich mir ein wenig blöd vor, wenn ich das Audio Signal, das für die Boxen, die direkt neben meinem Mac stehen, gedacht ist, erstmal quer durch das Wlan Netzwerk und somit durch das ganze Haus schicke ^^)

tl;dr : Die Lösung ist zwar einfach, bringt leider aber auch ihre eindeutigen Nachteile mit sich.



Danke für die Vorschläge und viele Grüße, Juri
 
Ich weiss nicht, ob es noch interessant ist!

Ich möchte genau das gleiche realisieren (auch VSX-921) und habe mich daher damit auseinandergesetzt. Problem ist, dass der Receiver nach dem Befehl ein CR benötigt! In Terminal erhält man das durch CTRL-V und Eingabe, es erscheint dann ^M, danach sollte es klappen!

Ach ja, für das Apple Script \r als CR nehmen! Das sieht dann z.B. so aus:

do shell script "echo MF
|nc 192.168.1.20 23

Viele Grüsse!
 
Zuletzt bearbeitet:
Zurück
Oben Unten