HowTo - Yamaha Verstärker per LAN/Netzwerk steuern

Hi Sunni2002

funktioniert auch leider nicht

Gruß
Stephan

Welchen Yamaha hast du ?

Gesendet von meinem iPhone mit Tapatalk

RX-V675

Die Befehle an sich funktionieren einwandfrei. Ein / Ausschalten, Umschalten usw. alle Perfekt.

Probier mal so


         $Zustand = GetValueString(41823 /*[Yamaha\Register Variable\Ein / Aus]*/);

                 IF($Zustand  == "On".chr(13).chr(10)){
                 {
	         CSCK_SendText(10920 /*[Yamaha]*/, "@MAIN:PWR=Standby".chr(13).chr(10));
	         } else {
	         CSCK_SendText(10920 /*[Yamaha]*/, "@MAIN:PWR=On".chr(13).chr(10));
	         }

Hi Micha,

super, das war es. Es funktiuniert.
Vielen Dank. Nur zum Verständniss.
Kannst du kurz erklären was es mit dem .chr(13).chr(10) aufsich hat?

Gruß
Stephan

Hi Stephan,

Geh mal auf deine Registervariable und dann auf den Reiter Debug. Wenn du das Häckchen für HEX anwählst siehst du den Grund.

TRANSMITTED: 40 53 59 53 3A 4D 4F 44 45 4C 4E 41 4D 45 3D 3F [b][u]0D 0A[/u][/b]
RECEIVED: 40 53 59 53 3A 4D 4F 44 45 4C 4E 41 4D 45 3D 52 58 2D 56 37 37 31 [b][u]0D 0A[/u][/b] 

Es werden immer nach den Daten noch ein „carriage return“ (hex: 0D dez: 13) und ein „line feed“ (hex: 0A dez: 10) mit gesendet. Das ist der Grund :slight_smile:

Hallo Gemeinde,

ich wurde von Tetrapack angeschrieben, ob ich mein Sendescript mal posten kann…

Das mache ich natürlich gerne…nur fällt mir gerade auf, daß das Script ja noch superschlampig ist…

Also verzeiht bitte die Unordnung…

Hier mal ein Beispiel, wie ich meinen Yamaha ein und ausschalte :

<?

$yam_soundprg = 23666 /*[Unsere Wohnung\Multimedia\Geräte\Verstärker\AmpR\Soundprogramme]*/;
$host = '192.168.123.78';      //IP des Verstärkers!
if ($IPS_SENDER == "Execute")
{
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    return;
}
if ($IPS_SENDER == "WebFront")
{
    SetValue(22791 /*[Unsere Wohnung\Multimedia\Geräte\Verstärker\AmpR\Power Verstärker]*/, $IPS_VALUE);
} else {
 echo "Dieses Skript kann nur vom WebFront aus gestartet werden!";
}

if ($IPS_VALUE == FALSE)
{
   send_to_host($host,'<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>Standby</Power></Power_Control></System></YAMAHA_AV>');

}

if ($IPS_VALUE == TRUE)
{
    RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:PWR=On".chr(13).chr(10)); // Verstärker an
    IPS_Sleep(1000);
    RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@ZONE2:PWR=Standby".chr(13).chr(10));
    IPS_Sleep(1000);
    RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Standard".chr(13).chr(10));
    SetValue($yam_soundprg,0);
}
function send_to_host($host, $data){

    //echo $data;  //zum prüfen

    $command_lenght = strlen($data);

    //echo $command_lenght;    //zum prüfen

    $head = "";
    $head .= "POST /YamahaRemoteControl/ctrl HTTP/1.1
";
    $head .= "Host: ".$host."
";
    $head .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
";
    $head .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
";
    $head .= "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
";
    $head .= "Accept-Encoding: gzip, deflate
";
    $head .= "Connection: keep-alive
";
    $head .= "Content-Type: text/xml; charset=UTF-8
";
    $head .= "Referer: http://".$host."/
";
    $head .= "Content-Length: ".$command_lenght."
";
    $head .= "Pragma: no-cache
";
    $head .= "Cache-Control: no-cache

";
    $head .= $data;
    //echo $head; //zum prüfen

    $fp = fsockopen($host, 80) or die("Unable to open socket");
    fputs($fp, $head);

   $buf = fgets($fp,128);
    fclose($fp);
    //echo $buf;   //zum prüfen

    $return = substr($buf,13,2);

    if ($return == "OK") {
        return true;
        //return "OK";
    }
}
?>

hiermit schalte ich die Soundprogramme (kommentare stimmen nicht) :

<?


if ($IPS_SENDER == "Execute")
{
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    return;
}
if ($IPS_SENDER == "WebFront")
{
    SetValue(23666 /*[Unsere Wohnung\Multimedia\Geräte\Verstärker\AmpR\Soundprogramme]*/, $IPS_VALUE);
} else {
 echo "Dieses Skript kann nur vom WebFront aus gestartet werden!";
}

if ($IPS_VALUE == 0) // HTPC
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Standard".chr(13).chr(10));
}

elseif ($IPS_VALUE == 1) // Topfield
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=2ch Stereo".chr(13).chr(10));
}

elseif ($IPS_VALUE == 2) // PS3
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=7ch Stereo".chr(13).chr(10));
}

elseif ($IPS_VALUE == 3) // Net Radio
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Spectacle".chr(13).chr(10));
}

elseif ($IPS_VALUE == 4) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Sci-Fi".chr(13).chr(10));
}

elseif ($IPS_VALUE == 5) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Adventure".chr(13).chr(10));
}

elseif ($IPS_VALUE == 6) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Drama".chr(13).chr(10));
}

elseif ($IPS_VALUE == 7) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Mono Movie".chr(13).chr(10));
}

elseif ($IPS_VALUE == 8) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:SOUNDPRG=Surround Decoder".chr(13).chr(10));
}

elseif ($IPS_VALUE == 9) // Front AUX
{
   RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:STRAIGHT=On".chr(13).chr(10));
   IPS_Sleep(300);
   SetValue(36820 /*[Unsere Wohnung\Multimedia\Geräte\Verstärker\AmpR\Status Sound FX]*/, "Straight");
}



?>

und hiermit zum Beispiel die Eingänge :

<?

$host = '192.168.123.78';      //IP des Verstärkers!

if ($IPS_SENDER == "Execute")
{
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    return;
}
if ($IPS_SENDER == "WebFront")
{
    SetValue(44260 /*[Unsere Wohnung\Multimedia\Geräte\Verstärker\AmpR\Eingänge]*/, $IPS_VALUE);
} else {
 echo "Dieses Skript kann nur vom WebFront aus gestartet werden!";
}

if ($IPS_VALUE == 0) // HTPC
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI3</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 1) // Topfield
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI1</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 2) // PS3
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI2</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 3) // Net Radio
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>NET RADIO</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 4) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>V-AUX</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 5) // Dune
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI4</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 6) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>USB</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 7) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>SERVER</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 8) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>AUDIO1</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 9) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>AirPlay</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 10) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>TUNER</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

elseif ($IPS_VALUE == 11) // Front AUX
{
   $send = send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>AV4</Input_Sel></Input></Main_Zone></YAMAHA_AV>');
}

function send_to_host($host, $data){

    //echo $data;  //zum prüfen

    $command_lenght = strlen($data);

    //echo $command_lenght;    //zum prüfen

    $head = "";
    $head .= "POST /YamahaRemoteControl/ctrl HTTP/1.1
";
    $head .= "Host: ".$host."
";
    $head .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
";
    $head .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
";
    $head .= "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
";
    $head .= "Accept-Encoding: gzip, deflate
";
    $head .= "Connection: keep-alive
";
    $head .= "Content-Type: text/xml; charset=UTF-8
";
    $head .= "Referer: http://".$host."/
";
    $head .= "Content-Length: ".$command_lenght."
";
    $head .= "Pragma: no-cache
";
    $head .= "Cache-Control: no-cache

";
    $head .= $data;
    //echo $head; //zum prüfen

    $fp = fsockopen($host, 80) or die("Unable to open socket");
    fputs($fp, $head);

   $buf = fgets($fp,128);
    fclose($fp);
    //echo $buf;   //zum prüfen

    $return = substr($buf,13,2);

    if ($return == "OK") {
        return true;
        //return "OK";
    }
}
?>

LG
Sascha

Danke fürs posten … warum mischt du die Kommunikation zum AVR ?

Du nutzt einmal:

send_to_host($host,'<YAMAHA_AV cmd="PUT"><System><Power_Control><Power>Standby</Power></Power_Control></System></YAMAHA_AV>'); 

und dann wieder:

RegVar_SendText(19433 /*[Yamaha Socket\Register Variable]*/, "@MAIN:PWR=On".chr(13).chr(10)); // Verstärker an 

hast du da Unterschiede festgestellt oder hat sich das einfach nur so ergeben?

Gruß
Jens

Hallo an alle Yamaha,-Besitzer,

ich würde gerne den HDMI-Outputs umschalten (Beamer, Fernseher) und bekomme das einfach nicht hin.
Ich habe es sowohl direkt über die Sockets probiert:

CSCK_SendText(11609, "@MAIN:HDMIOUT=OUT1
");

oder

CSCK_SendText(11609, "@SYS:HDMIOUT1=On
");

als auch per XML:

send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Sound_Video><HDMI><Control>OUT2</Control><HDMI></Sound_Video></Main_Zone></YAMAHA_AV>');

oder

send_to_host($host,'<YAMAHA_AV cmd="PUT"><Main_Zone><Sound_Video><HDMI><Output>OUT2</Ouput><HDMI></Sound_Video></Main_Zone></YAMAHA_AV>');

Leider funktioniert keine der Varianten - alle anderen Kommandos (Power on/off; Mute, …) funktionieren in beiden Varianten - hat das irgendwer von euch schon implementiert?

Ich besitze einen RX-V775.
Danke,
Philipp

Schau dir die Debug Ausgabe an, wenn du an der Fernbedienung umschaltest … dann weißt du es genau. Ansonsten versuchs einfach mit dem, was im Protokoll vorgegeben ist und nicht einfach wild drauf los.

HDMIOUT
[PUT Command]
@MAIN:HDMIOUT=Parameter

[GET Command]
@MAIN:HDMIOUT=?

Operating & retrieving HDMI Output setting state
Initial Auto Feedback is Available

[Parameters]
Off
PUT: turining its setting state to Off (output is disabled)/ GET: indicating Off setting status.
OUT1
PUT: turining its setting state to OUT1 (HDMI OUT2 is disabled) / GET: indicating OUT1 setting status.
OUT2
PUT: turining its setting state to OUT2 (HDMI OUT1 is disabled) / GET: indicating OUT2 setting status.
OUT1 + 2
PUT: turining its setting state to OUT1 + 2 (Both HDMI OUT1 & 2 are enabled) / GET: indicating OUT1 + 2 setting status.

HDMIAUDOUT2
[PUT Command]
@MAIN:HDMIAUDOUT2=Parameter

[GET Command]
@MAIN:HDMIAUDOUT2=?

Operating & retrieving HDMI Audio Output to HDMI OUT2 setting state

[Parameters]
Off
PUT: turining its setting state to Off / GET: indicating Off setting status.
On
PUT: turining its setting state to On / GET: indicating On setting status.

usw.

Gruß
Jens

Hallo,

also das hab ich ja gemacht - alle 4 Versuche sind dokumentiert (von den ersten 2 hast ja du die Doku geschickt, die beiden anderen Versuche kommen aus neueren Dokus) - im Debug kommt übrigens:
@MAIN:HDMIAUDOUT2=On

wenn ich das selbe schicke, kommt „undefined“ zurück.

Danke,
Philipp

Also … dein 1. versuch, da willst du den Parameter „OUT“ setzen … den gibt es schon mal nicht … müsste dann wohl „OFF“ heißen … und 2. solltest du wie auf der letzten Seite beschrieben folgendes versuchen:

 RegVar_SendText(11609, "@MAIN:HDMIOUT1=On".chr(13).chr(10)); 

denn HDMIOUT gibt es unter @SYS nicht !!
Daher schrieb ich das du dich an die Doku halten sollst :wink:
Dokumentieren ist ja schön, hilft aber nix wenn du die falschen Dinge einträgst …

also ersten steht bei meinem 1. Versuch „OUT1“ drinnen.

und zum 2. Versuch: Wie erklärst du dir dann diese Debug-Einträge nach dem Einschalten des Receivers? - da kommt auch SYS:HDMIOUT1 bei mir an - das habe ich übrigens auch aus einer Doku raus.


(Log von der Instanz selbst)

der Cutter splittet das auch brav auf:

dann habe ich es mit dem vorgeschlagenen MAIN:HDMIOUT1 probiert - ebenfalls ohne Erfolg:
Yamaha-hdmiout.PNG

btw: ich habe diesbezüglich schon unzählige Dokus durchgewälzt, aber 1. hab ich noch keine gefunden, wo der RX-V775 explizit erwähnt wird, 2. stehen teils unterschiedliche Dinge in unterschiedlichen Dokus, 3. hab ich alle möglichen Befehle aus allen Dokus durchprobiert - ohne Erfolg. Erst danach hab ich mich hier ans Forum gewendet.

Hast du das schon erfolgreich bei dir in Verwendung? Wenn ja, welchen Receiver hast du?

Danke,
Philipp

Hi,

bei meinem V775 schaltet ich mit:

CSCK_SendText($ID/[Client Socket - YAMAHA]/,"@MAIN:INP=HDMI1".chr(13).chr(10));

auf den gewünschten HDMI-Input um.

LG Tom

Hallo Phillip,

ich habe das so nicht in Verwendung, da ich das nicht benötige. Auch habe ich keinen 775, sondern einen A820.
In der Doku stand nur der 771, daher bin ich davon ausgegangen das es wohl passt, was aber scheinbar nicht der Fall ist. evtl. anderer Firmwarestand ?

Als Idee dazu hätte ich nur noch das du ein /r/n mit sendest … versuchs einfach noch mal mit deinen Codeschnipseln und nimm stattdessen:

.chr(13).chr(10)

Hast du auch die richtige VariablenID vom Socket genommen ?

… da hatten wir wohl ziemlich gleichzeitig den selben Gedanken :wink: - hab vorhin noch ein Firmware-Update probiert und siehe da, es funktioniert. - komischerweise hat es dann auch erst nach ein paar mal „booten“ funktioniert.

jetzt funkts. mit SYS:HDMIOUT1 bzw. SYS:HDMIOUT2

Danke,
Philipp

Moin Jungs ,

aktuell habe ich noch das Problem das ich die Internet Radio Sender nicht einstellen kann , hat das jemand umgesetzt ?

Servus Philip

Ja, ich hab mir das gebaut.
Es ist aber etwas aufwändig, da man sich mit Up/Down/Enter Kommandos durchs Menü hangeln muß.

Einfach so für „spiele Sender xyz“ gibts keinen Befehl.

gruß
bb

Moin Jungs,

dabei kommen so schöne Befehle am Register Port an :

@NETRADIO:LISTLAYERNAME=Trance
@NETRADIO:LINE1TXT=1 Mix Radio Trance
@NETRADIO:LINE1ATRIB=Item
@NETRADIO:LINE2TXT=1.fm Absolute Trance (Euro)
@NETRADIO:LINE2ATRIB=Item
@NETRADIO:LINE3TXT=1.fm Amsterdam Trance Radio
@NETRADIO:LINE3ATRIB=Item
@NETRADIO:LINE4TXT=BigTunesRadio - Trance
@NETRADIO:LINE4ATRIB=Item
@NETRADIO:LINE5TXT=Dark Psychedelic Trance flux
@NETRADIO:LINE5ATRIB=Item
@NETRADIO:LINE6TXT=MusicBase FM Trance
@NETRADIO:LINE6ATRIB=Item
@NETRADIO:LINE7TXT=ETN.FM 1 - Trance Channel
@NETRADIO:LINE7ATRIB=Item
@NETRADIO:LINE8TXT=Party Vibe Radio - House Techno Trance
@NETRADIO:LINE8ATRIB=Item

Das sind keine Befehle, sondern eine Tabelle der gespeicherten Netradiosender.
Wenn du eine Station auswählen möchtest mußt du erst zur Tabelle navigieren, und dann mit UP/Down den gewünschten Sender auswählen.
Quasi gleich wie mit der Fernbedienung.

Kann dir gerne meinen Code als schicken. Es ist aber vieles hardgecodet und nicht allgemein verwendbar, drum hab ich ihn nicht veröffentlicht. Viel kannst damit nicht anfangen.
So sind zb. auch die Senderplätze bzw. Namen Fix vergeben.
Es war mir zu mühsam erst die ganze Liste einzulesen, dann anzuzeigen und dann auch noch wieder dorthin zu navigieren.

gruß
bb