HowTo - Yamaha Verstärker per LAN/Netzwerk steuern

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

Guten Morgen,

der Link ist In Ordnung, im ersten post war wohl mal eine Anleitung verlinkt. Dieser ist aber nicht mehr da; gibt jetzt wohl noch ein pdf auf anfrage. - Anfrage habe ich gestellt.

Was ich erreichen möchte:

Meinen Verstärker bediene ich fast nur über die Fernbedienung. Wenn ich zum Beispiel auf den DVD Eingang gehe, geht ja auch diese Info an den Client-Soket. Ips soll am client-socket lauschen ob DVD gewählt ist und mir dann ein Script ausführen mit dem ich dann die Steckdose für den DVD Player einschalte.

Gruß

Ah ja - alles klar :slight_smile:

Mit nachfolgendem Script kannst Du - wenn die Registervariable dieses Script aufruft - sehen,
was Dein Yamaha so alles liefert. Aus diesem Gerüst kannst Du dann bestimmt deinen - für dich - relevanten Part herausextrahieren … Probiere es einfach mal aus.

LG Tom

$Path = IPS_GetKernelDir();
$LogFile = $Path."logs\YAMAHA CMD LOG.txt";


$SOURCE  = $_IPS['SENDER'];


if($SOURCE=="RegisterVariable")
{
	$BUFFER=$_IPS['VALUE'];
	$DATA=trim($BUFFER);

	$Pos1=stripos($DATA,'@');
	$Pos2=stripos($DATA,':');
	$Pos3=stripos($DATA,'=');

	$SRC=substr($DATA,$Pos1+1,$Pos2-$Pos1-1);
	$CMD=substr($DATA,$Pos2+1,$Pos3-$Pos2-1);
	$DAT=substr($DATA,$Pos3+1);


	$handle  = fopen($LogFile,"a");
	fwrite($handle,"-----------------------------
");
	fwrite($handle,$Pos1.",".$Pos2.",".$Pos3."
");
	fwrite($handle,"DATA    [".$DATA."]

");
	
	fwrite($handle,"SRC >".$SRC."<
");
	fwrite($handle,"CMD >".$CMD."<
");
	fwrite($handle,"DAT >".$DAT."<
");

	fclose($handle);
}

Hallo Tom,

habe jetzt die Register Variable erstellt, ein Skript mit deinem Inhalt erstellt und dieses Skript als Ziel mit der Register Variable verbunden. Im Debug-Fenster der Register Variable kommen jetzt alle Daten vom Verstärker an. Hierfür schonmal ein GROSSES „Dankeschön“

Wie kann ich denn jetzt einen bestimmten Befehl den ich empfange auswerten?

LG

Mal ganz grob zum Ausschlachten (und weiterkommen):

<?

$Path    = IPS_GetKernelDir();
$LogFile = $Path."logs\YAMAHA CMD LOG.txt";


$SOURCE  = $_IPS['SENDER'];


if($SOURCE=="RegisterVariable")
{
	$BUFFER=$_IPS['VALUE'];
	$DATA=trim($BUFFER);

	$Pos1=stripos($DATA,'@');
	$Pos2=stripos($DATA,':');
	$Pos3=stripos($DATA,'=');

	$SRC=substr($DATA,$Pos1+1,$Pos2-$Pos1-1);
	$CMD=substr($DATA,$Pos2+1,$Pos3-$Pos2-1);
	$DAT=substr($DATA,$Pos3+1);

	# .............................................
	
	if($CMD == "INP")
	{
	# ---------------------------------------------------------------------------
		switch($DAT)
		{
		   case "HDMI1"    : echo "HDMI1"; break;
		   case "HDMI2"    : echo "HDMI2"; break;
			# ... usw.
			# ---------------------------------------------------------------------------
			# HDMI1, HDMI2, HDMI3, HDMI4, HDMI5, V-AUX
			# AV1, AV2, AV3, AV4, AV5, AV6
			# AUDIO1, AUDIO2
			# TUNER
			# USB
			# NET RADIO, Napster, Spotify, AirPlay, SERVER
			# ...
  		   case "PHONO"    : echo " PHONO"; break;
		   default         : echo "???"; break;
		}

	}

}

?>

Wertet die (Aus)Wahl des Eingangs aus - den Rest muss deine Phantasie befüllen :slight_smile:

Gilt zumindest für meinen RX-V775

LG Tom

Hallo Tom!

Habe das Skript angepasst, aber leider Schaltet es bei allen gewählten Eingängen egal ob CD der AV2…
Hast Du noch eine Idee?

<?
$Path    = IPS_GetKernelDir();
$LogFile = $Path."logs\YAMAHA CMD LOG.txt";


$SOURCE  = $_IPS['SENDER'];


if($SOURCE=="RegisterVariable")
{
    $BUFFER=$_IPS['VALUE'];
    $DATA=trim($BUFFER);

    $Pos1=stripos($DATA,'@');
    $Pos2=stripos($DATA,':');
    $Pos3=stripos($DATA,'=');

    $SRC=substr($DATA,$Pos1+1,$Pos2-$Pos1-1);
    $CMD=substr($DATA,$Pos2+1,$Pos3-$Pos2-1);
    $DAT=substr($DATA,$Pos3+1);

    # .............................................

    if($CMD == "INP")
    {
    # ---------------------------------------------------------------------------
       IF($DAT == "AV1") ;ModBus_WriteCoil(44376 /*[Coil 10-19\mb_Output_Coils[14]]*/,true);
        }

    }

Danke, LG

Jaaaaa, entferne mal das Semikolon hinter der IF-Abfrage - das ist sowas von tödlich :smiley:

LG Tom

TOM!!

Was soll ich sagen?

Endlich funktioniert es wie gewollt!

Danke, Danke!

LG

Hallo Gemeinde,

habe bei der I/O Instanz einen Client Socket erstellt.
Und wie bekomme ich die Register Variable unter meinen Socket?

Konnte nichts im Forum und Doku finden.:o

Hi Willi,

das ist eine gute frage. Ich weis auch nicht ob es richtig ist. Aber ich Helfe mir immer mit einem kleinen
Script wo ich einfach nur den Befehl „IPS_SetParent“ ausführe.

IPS_SetParent — IP-Symcon :: Automatisierungssoftware

Vielleicht ein wenig umständlich aber es Funktioniert

LG
Stephan

Es geht nur mit „IPS_SetParent“. Oder vlt. auch mit STRG + X und STRG + V ?!

Ein einfaches verschieben in der IPS-Console ist nicht vorgesehen/möglich.

Grüße,
Chris

Ich habe es geschafft.:eek:
Wie kompliziert ist denn das???:mad:
Mir kommt es so vor, als muss mit der rechten Hand am linken Ohr gekratzt werden?:confused:
Hatte schon eine weile lang nicht mit Symcon neues erstellt.

So und wie funktioniert es nun:

Nicht in I/O Instanzen, sondern man geht irgend wo auf den Hauptbaum oberhalb von
I/O Instanzen.
Mit der rechten Maustaste → Objekt hinzufügen → Instanz hinzufügen.
Bei Alle Hersteller auf (Sonstige) → Register Variable → WEITER.
Beim Ort auf Auswählen und den richtigen Ort bei der I/O Instanz aussuchen.

Das was’s.

Hallo zusammen,

ich habe einen „RX-AV 880“ und die Funktionen sind alle gegeben. Ich bekomme aber bei jeder Abfrage diese Fehlermeldung und mir ist nicht bewusst, wie ich diese abstellen kann:

15.04.2019 08:33:47 | TimerPool | Yamaha AVR Wohnzimmer (Update): <br />
<b>Notice</b>:  Undefined variable: key in <b>/var/lib/symcon/modules/SymconYAVR/YAVR/module.php</b> on line <b>49</b><br />
<br />
<b>Fatal error</b>:  Uncaught Exception: Invalid input  in /var/lib/symcon/modules/SymconYAVR/YAVR/module.php:49
Stack trace:
#0 /var/lib/symcon/modules/SymconYAVR/YAVR/module.php(158): YAVR->GetInputId('HDMI5')
#1 /var/lib/symcon/scripts/__generated.inc.php(1223): YAVR->RequestData()
#2 /-(1): YAVR_RequestData(59231, 0)
#3 {main}
  thrown in <b>/var/lib/symcon/modules/SymconYAVR/YAVR/module.php</b> on line <b>49</b><br />
Abort Processing during Fatal-Error: Uncaught Exception: Invalid input  in /var/lib/symcon/modules/SymconYAVR/YAVR/module.php:49
Stack trace:
#0 /var/lib/symcon/modules/SymconYAVR/YAVR/module.php(158): YAVR->GetInputId('HDMI5')
#1 /var/lib/symcon/scripts/__generated.inc.php(1223): YAVR->RequestData()
#2 /-(1): YAVR_RequestData(59231, 0)
#3 {main}
  thrown
   Error in Script /var/lib/symcon/modules/SymconYAVR/YAVR/module.php on Line 49

Die Konfig sieht wie folgt aus:

yamaha.PNG

Hat jemand eine Idee?

wird das thema noch beobachtet bzw. kann man hier noch fragen oder inputs schreiben?

Kannst du… Aber ob noch jemand das Script nutzt, wo es doch hier ein Modul gibt (gab?)

Michael

wauw! tolle arbeit
Leider nutzte ich smycon nicht direkt. Was mich interessieren würde ist, wie du die USB-Funktion nutzen kannst?

ich kann zwar problemlos den Input auf USB wechseln, aber dannach komme ich nicht weiter. Die Lieder werden leider nicht abgespielt. Der Grund dafür ist, dass ich am Bildschirm(Fernseher) zwar den USB-Input Bildschirm gezeigt bekomme inkl. der mp3 files, aber ich muss noch auf der Fernbedienung auf „enter“ klicken, um eines der Lieder auch zu starten. Dannach läuft es problemlos…
wie kann man diesen „enter“-Button auf der Fernbedienung automatisieren, sodass automatisch nach wechsel auf USB input die lieder gespielt werden?

danke

gefunden, hier der xml verweis: