HowTo - Yamaha Verstärker per LAN/Netzwerk steuern

Wieso, du brauchst doch nicht navigieren?? Du kannst doch direkt auswählen … ich habe bisher leider noch kein Script fertig, aber generell geht das! Damit kann man sicher schicke Sachen basteln.

Das hier z.B. schaltet bei mir auf Position 6 der Liste um:

@NETRADIO:LISTSEL=Line_6

Die Theorie sieht so aus, das die Sender erst eingelesen werden, dann evtl. Senderlogos dazu (ausm Inet oder lokal aufm Rechner) und schon gibts ne schöne Liste, die dann per Webfront benutzt werden kann.

Gruß
Jens

Hmm, ich weiß jetzt auch nicht mehr genau. Kann mich nur erinnern das ich da recht lange rumgemurkst habe bis es endlich lief.
Ich ruf sie bei mir aber über die Bookmarks ab, vieleicht war das der Grund ?
Wie gesagt, alles einlesen und dann Senderlogos und so downloaden war mir zu aufwändig. Eigentlich war eh die ganze Arbeit umsonst, denn die Netradiofunktion wird eh nicht genützt. Qualität der Sender ist mir zu schlecht.

gruß
bb

Moin Jungs,

Das muss ich testen :slight_smile: Wäre ja Genial … denn so viele Sender braucht man ja nicht , nur die Favoriten reichen ja , das wäre mit Handarbeit drin.

Im Prinzip läuft das so ab:

  1. Netradio aktivieren
  2. Senderliste auswählen
  3. Unterliste auswählen
  4. Sender auswählen

// Netradio einschalten
RegVar_SendText(27009 /*[Client Socket RX-A820\Register Variable]*/,"@MAIN:INP=NET RADIO".chr(13).chr(10));

//Ordner Lesezeichen auswählen
RegVar_SendText(27009 /*[Client Socket RX-A820\Register Variable]*/,"@NETRADIO:LISTSEL=Line_1".chr(13).chr(10));  

//Ordner My_Favorites auswählen
RegVar_SendText(27009 /*[Client Socket RX-A820\Register Variable]*/,"@NETRADIO:LISTSEL=Line_1".chr(13).chr(10));  

//Sender an Pos 6 auswählen
RegVar_SendText(27009 /*[Client Socket RX-A820\Register Variable]*/,"@NETRADIO:LISTSEL=Line_6".chr(13).chr(10));

//Zurück zum TV
RegVar_SendText(27009 /*[Client Socket RX-A820\Register Variable]*/,"@MAIN:INP=HDMI2".chr(13).chr(10));

Generell werden auch die einzelnen Sender mit ausgegeben wenn man in die Liste schaltet und theoretisch kann man daraus dann doch eine Liste fürs Webfront basteln, die sich je nach gewählter Liste selbst aktualisiert, oder?
Da müssten sich die Profis mal zu äußern …

Gruß
jens

Hallo Jens ,

Das teste ich gleich mal

Gesendet von meinem iPhone mit Tapatalk

Hallo liebe Spezialisten.

Frage: Möchte mit meiner Loxone Hausautomatisation (http/DLNA/UPnP) Befehle an den Yamaha RX-V500D „Server“ senden, damit dieser sich eine mp3 Musikdatei von meiner Serverfestplatte abholt und auch abspielt. Wie kann ich die entsprechenden Befehl einbetten, bzw. Stufenweise senden, damit ich den Song.mp3 abspielen kann?
Datei liegt auf: \ServerLeo\Musik\Loxone\Song.mp3

Das händische Abholen von der Festplatte per IR Fernbedienung funktioniert ja normal.
Das Ein/Aus/Volumen/Auf/Ab/Radio des RX-V500D über die Loxone funktionieren bereits wunderbar,

<YAMAHA_AV cmd=„PUT“><Main_Zone><Input><Input_Sel>SERVER</Input_Sel></Input></Main_Zone></YAMAHA_AV>

Wäre spitze wenn mich da von Euch jemand unterstützen könnte.

Bitte
LGR

Moin LGR!

Willkommen im IPS Forum :slight_smile:

Aber du scheinst hier irgendwie falsch zu sein (außer ich habe da etwas falsch verstanden)?! :smiley:
Wenn du Loxone einsetzt, dann solltest du dort im Forum nachfragen und nicht bei IP-SYMCON :wink:

Grüße,
Chris

Hallo Chris.

Es hat nur nebenbei mit Loxone zu tun,
sondern speziell mit dem oben erwähnten Titel bzw. Parameter für Yamaha RX-V500D.

Ich habe mich deshalb dort eingeklinkt, da es dort bereits intensive und am nächsten kommende Sache betrifft.

LG
LGR

„Wie kann ich die entsprechenden Befehle einbetten…“ klang/klingt für mich nach einem inhaltlichen „Loxone Problem“ und nicht nach der Frage, welche Befehle du an deinen Yamaha senden musst, damit die Datei abgespielt wird :slight_smile:

Aber gut, jetzt wissen die Leute was du meinst :wink:

-Chris-

Servus LGR

Ich glaube nicht das jemand den direkten MP3 Titelzugriff von einem Netzwerkshare hier realisiert hat.
Bin mir jetzt auch nicht sicher ob das überhaupt geht ?

Ich verlinke dir aber mal unsere Sammlung von Datenblättern bzw. Protokollen zu aktuellen Receivern.Die Yamaha sidnd a auch drin. Mußt halt auf Protokollebene schauen was du ihm senden mußt.
Datenblätter Ethernet Protokoll AV-Receiver

viel Erfolg
bb

Hallo Bernhard.

Danke für die vorab Infos.
Bin leider kein Programmierer und werde aus den diversen Listen nicht wirklich schlau.

Ich kann mir schon vorstellen das das nicht ganz so einfach ist wie es klingt.

Aber es wäre eine Super feine Sache wenn bei den verschiedensten Aktionen bestimmte Musiktiteln abgeholt u. abgespielt werden könnten. (1000ente Fälle wie Alarmanlage usw. usw., Haustür, Garage offen oder nicht versperrt)
Egal um welche Hausautomatisation es da geht, wird sicherlich bei jeder Möglichkeiten geben, solche Befehle in Kaskadenform (der Reihe nach) zu senden.

Mit einer großen Bitte darf ich dich und auch andere Profis um Unterstützung für mein Wunschkonzert ersuchen.

LG
LGR

Hallo Zusammen,

ich bin seit heute auch mit der Integration von meinem RX-S600D beschäftigt.

Ich hab einen ClientSocket und eine RegisterVariable angelegt. Zu der Registervariable hab ich ich noch ein Script gepackt das ich hier gefunden habe.

Das sieht bei mir wie folgt aus:

Das Script sieht wie folgt aus:

<?
// Yamaha Verstärker Auswertscript V 1.2                              19.11.2013

// Referenz: Yamaha RX-V773

// Konfigbereich

// Input Namenszuweisung frei zuweisbar (bitte anpassen)

    $HDMI1 = 'HDMI1 - Topfield'; // Freier Name für  jeden INPUT
    $HDMI2 = 'HDMI2 - Playstation';
    $HDMI3 = 'HDMI3 - HTPC';
    $HDMI4 = 'HDMI4 - Dune';
    $HDMI5 = 'HDMI5 - Frei';

    $av1   = 'AV-1';
    $av2   = 'AV-2';
    $av3   = 'AV-3';
    $av4   = 'AV-4';
    $av5   = 'AV-5';
    $av6   = 'AV-6';

 $netradio = 'Net Radio';
 $frontaux = 'Front AUX';

  $audio1  = 'Audio 1';
  $audio2  = 'Audio 2';
  $phono   = 'Phono';
  $tuner   = 'Tuner';
  $napster = 'Napster';
  $airplay = 'AirPlay';
  $server  = 'Server';
  $usb     = 'Front USB';


// Variablenzuweisung (bitte anpassen)

    $vol   = 41370 /*[Räume\Wohnzimmer\RX-S600D\Volume]*/;  // Floatvariable für Volumeanzeige
    $pwr   = 31422 /*[Räume\Wohnzimmer\RX-S600D\Power]*/;  // Stringvariable für Poweranzeige
    $input = 47768 /*[Räume\Wohnzimmer\RX-S600D\ Input]*/;  // Stringvariable für Inputanzeige
   $treble = 30494 /*[Räume\Wohnzimmer\RX-S600D\Treble]*/;  // Floatvariable für Klangregelungsanzeige Höhen
     $bass = 32525 /*[Räume\Wohnzimmer\RX-S600D\Bass]*/;  // Floatvariable für Klangregelungsanzeige Bässe
  $station = 57166 /*[Räume\Wohnzimmer\RX-S600D\Station]*/;  // Stringvariable für Radiosender/Station
     $song = 16042 /*[Räume\Wohnzimmer\RX-S600D\Song]*/;  // Stringvariable für Song Titel
 $soundprg = 58108 /*[Räume\Wohnzimmer\RX-S600D\Soundprg]*/;  // Stringvariable für Soundprogrammanzeige



//################################################################################//
// Ab Hier nichts mehr ändern                                                     //
//################################################################################//


$antwort = $_IPS['VALUE'];
$array = explode ( ':', $antwort ); // Antwortstring in Array umwandeln


$array2 = explode ( '=', $array[1] ); // Antwortstring in Array umwandeln
$funktion = $array2[0];

If($array[0] == "@MAIN")
{
    switch($funktion)
           {
              case "VOL":
                       SetValue($vol, $array2[1]." dB");
               break;

              case "PWR":
                 SetValue($pwr, $array2[1]);
               break;

              case "INP":
                     If ($array2[1] == "HDMI1".chr(13).chr(10))
                          {
                     SetValue($input, $HDMI1);
                    SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "HDMI2".chr(13).chr(10))
                          {
                     SetValue($input, $HDMI2);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "HDMI3".chr(13).chr(10))
                          {
                     SetValue($input, $HDMI3);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "HDMI4".chr(13).chr(10))
                          {
                     SetValue($input, $HDMI4);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "HDMI5".chr(13).chr(10))
                          {
                     SetValue($input, $HDMI5);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV1".chr(13).chr(10))
                          {
                     SetValue($input, $av1);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV2".chr(13).chr(10))
                          {
                     SetValue($input, $av2);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV3".chr(13).chr(10))
                          {
                     SetValue($input, $av3);
                     SetValue($song, "");
                          SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV4".chr(13).chr(10))
                          {
                     SetValue($input, $av4);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV5".chr(13).chr(10))
                          {
                     SetValue($input, $av5);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AV6".chr(13).chr(10))
                          {
                     SetValue($input, $av6);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "NET RADIO".chr(13).chr(10))
                          {
                     SetValue($input, $netradio);
                     }

                     elseif ($array2[1] == "V-AUX".chr(13).chr(10))
                          {
                     SetValue($input, $frontaux);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AUDIO1".chr(13).chr(10))
                          {
                     SetValue($input, $audio1);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AUDIO2".chr(13).chr(10))
                          {
                     SetValue($input, $audio2);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "PHONO".chr(13).chr(10))
                          {
                     SetValue($input, $phono);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "TUNER".chr(13).chr(10))
                          {
                     SetValue($input, $tuner);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "Napster".chr(13).chr(10))
                          {
                     SetValue($input, $napster);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "AirPlay".chr(13).chr(10))
                          {
                     SetValue($input, $airplay);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "SERVER".chr(13).chr(10))
                          {
                     SetValue($input, $server);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                     elseif ($array2[1] == "USB".chr(13).chr(10))
                          {
                     SetValue($input, $usb);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
                  else
                     {
                     SetValue($input, $array2[1]);
                     SetValue($song, "");
                    SetValue($station, "");
                     }
              break;

              case "TONETREBLE":
                 SetValue($treble, (float)$array2[1]);
              break;

              case "TONEBASS":
                 SetValue($bass, (float)$array2[1]);
              break;

              case "SOUNDPRG":
                      SetValue($soundprg, $array2[1]);
                  break;



           }
}

If($array[0] == "@NETRADIO")
{
switch($funktion)
           {
              case "SONG":
                 SetValue($song, $array2[1]);
              break;

              case "STATION":
                 SetValue($station, $array2[1]);
              break;


              }
        }



?>

So weit so gut… in der Registervariable kommen auch daten vom dem AVR an das hab ich über den Debug kontrolliert.

Was mir noch nicht klar ist… wie wird das Auswertescript getriggert?? Geht das automatisch weil ich es in der Registervariable hinterlegt hab oder muss ich einen Timer hinzufügen?

Wenn ich das Script manuell ausführe bekomme ich folgenden fehler ausgegeben:

Notice: Undefined index: VALUE in C:\IP-Symcon\scripts\12595.ips.php on line 54

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\12595.ips.php on line 58

Bin etwas ratlos was ich weiter tun kann :(:confused:

Vielen Dank schon mal für eure Hilfe!

Moin!

Das ist an sich kein Fehler :slight_smile:

Denn $_IPS[‚VALUE‘] wird einfach nicht gefüllt, wenn du das Skript manuell ausführst. Erst wenn das Skript per RegisterVariable, WebFront, … ausgeführt wird, dann steht in $_IPS[‚VALUE‘] etwas :wink:

Siehe auch hier:
Systemvariablen — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris

Vielen Dank für deine Hilfe!

Manchmal sind die Lösungen einfacher als man denk!

Inzwischen funktioniert auch schon einiges.

Nochmals Danke!!

Hallo zusammen,

ich habe eine Yamaha Verstärker und möchte mit IPSymcon verschiedene Veränderungen am Verstärker auswerten.

Ich habe einen Client-Socket angelegt und im Debug-Fenster werden mir die Veränderungen auch angezeigt.

z.B: @MAIN:INP=AV1

Diese Information möchte ich jetzt dazu nutzen um ein vorhandenes Script auszulösen z.B: ModBus_WriteCoil(56104 /[Coil 0-9\mb_Output_Coils[2]]/,true);

Ich denke ich muss dazu die RegisterVariablen nutzen, aber genau diese verstehe ich leider nicht.

Was ich leider auch nicht verstehe ist das KeepAlive um die Unterbrechungen am Client-Socket zu unterbinden, dass keine Informationen der Veränderungen am Verstärker verpasst werden.

Hoffe Ihr könnt mir helfen,
schönen Gruß

Du musst dem Yamaha etwa alle 30 bis 45 Sekunden einen Befehl senden (egal welchen, Hauptsache er kennt ihn),
damit die Socketverbindung aufrecht erhalten bleibt.

z.B. die Powerstatusabfrage:

CSCK_SendText(12345/[Client Socket - Yamaha]/,"@MAIN:PWR=?".chr(13).chr(10));

Das Thema Registervariable würde diesen Rahmen sprengen - da gab es kürzlich erst ein paar Linkhinweise

LG Tom

Danke Tom,

der Socket-Client „lauscht“ jetzt durchgehend. :slight_smile:

Muss ich für mein Vorhaben überhaupt diese RegisterVariablen haben?
Ich möchte die Veränderungen nicht im Webfront oder in der App anzeigen lassen.

Kann ich nicht bei meiner zu schalteten Variable einfach ein „Neues ausgelöstes Ereignis“ hinzufügen in dem dann das gewünschte Kommando z.B @MAIN:INP=AV1 der Auslöser ist?

oder so etwas wie

IF
@MAIN:INP=AV1
then
ModBus_WriteCoil(56104 /[Coil 0-9\mb_Output_Coils[2]]/,true);
end_IF

Hmmm, solange du nix auswerten möchtest, solltest Du ohne Registervariable auskommen.

Schicke einfach das jeweilige Kommando - irgendwie mit deinen Auslösern verscriptet - direkt an den Clientsocket (wie in dem Beispiel von eben).

LG Tom

Dann komme ich wohl an den Register Variablen leider nicht vorbei,
denn je nach gewählten Eingang am Verstärker sollen verschiedene Relais geschaltet werden.
Mache also eine Auswertung der Verstärkereingänge. Das ist zwar auch über die 12V Triggerausgänge direkt am Verstärker möglich, ich brauche aber mehr als die 2 vorhandenen.

Die Anleitung in Deiner Verlinkung ist scheinbar nicht mehr vorhanden…

Ich habe es zwar nur grob überflogen, aber bei mir ist der genannte Link OK.

PS: vielleicht solltest / könntest Du mal etwas genauer schildern, was du da vor hast …

LG Tom