Statusmeldung von LG TV

Hallo,
meinen LG LCD kann ich problemlos über IPS steuern.
Jetzt möchte ich Statusmeldung im Dashboard einfügen komme aber nicht weiter.
Bis jetzt habe ich folgendes gemacht:
RegVariable mit Script zum Empfangen verbunden:
Script:

<?
    $data = $IPS_VALUE; 
    if ($data == "a 0 OK/NG 01x")
     {
     $value = true;
     }
     if ($data == "a 0 OK/NG 00x")
     {
     $value = false;
     }
   SetValue(38547 /*[42LG6000\PowerLG]*/, $value);
}
?>

Die Variable 38547 ist Boolean mit „true ist an“ und false ist aus";
Die Befehle für den LG sind: siehe Bilder

Könnt Ihr mir weiterhelfen?

Jörg

01.JPG

Kann mir jemand sagen wie ich überprüfen kann ob der TV überhaupt eine Meldung zurückschickt?
Damit wäre ich dann ein Stück weiter.

Jörg

Du kannst das Debug-Fenster der Registervariablen öffnen. Da siehst du ob irgendwas ankommt.
Die Scripte von Philipp zum Steuern und empfangen des Denon 3808 können dir evtl. eine gute Hilfe sein.
Was ist das für ein Modell das du hast?
Gruß
papaschlumpf

Hallo,

ich habe einen LG Modell 42LG6000;
Im Debug Fenster sehe ich gar nicht; egal welchen Befehl ich sende, ich sehe auch den gesendeten Befehl nicht;

Hallo,
im Cutter sehe ich einen Datenstrom;
in der RegVariablen nicht;
das Senden der Befehle klappt mit dem Empfangen der Bestätigung hapert es.

hast du schon nen fertiges script? hab auch nen lg hängen und nach deinem post gedacht, mensch einbinden wäre nicht schlecht.
allerdings komme ich nur mit lan zum fernseher, also lan->rs232 kostet nen paar Euro, so dass ich mir auch gleich nen irlink holen. bin daher noch im findungsprozess.

ein Script habe ich, das mit dem EMpfangen macht aber Probleme

so jetzt hab ichs fast geschafft;
leider kommen die Daten zeitweise noch zerhackt an,
soll Länge 10, teilweise 2 Datensätze einer mit Länge 8 einer mit Länge 2
oder so ähnlich;
Kann mir hier einer helfen?

Du musst die Datensätze zusammenhängen, auf Vollständigkeit prüfen und eventuell verarbeiten, dann die Restdaten puffern. Beispiele dazu gibt es in der Doku (siehe RegisterVariable: IP-Symcon :: Automatisierungssoftware).

Hilf Dir selbst dann hilft Dir Gott,
oder so;
mit etwas herumprobieren gehts auch;
hab einfach durch den Cutter den Datensatz vorne und hinten beschnitten und jetzt kommt er konstant mit Länge 8;
die Werte ich aus und übergebe true oder false an eine boolsche Variable

Vielleicht hilfts ja jemanden anderen auch weiter

würd dich ja unterstützen, da ich meinen verstärker schon an ips hab.
aber erstmal ist die heizung dran.

da ich die heizung nicht richtig angezapft bekomme. werd ich mir wohl mal nen rs232-lan adapter kaufen.

hatte mich heute mal direkt an den fernseher angeschlossen. entgegen der gefundenen internet anleitung muss ich mich mit 115200 baud verbinden.

ich hab nen lg 50PG7000 und hab ein paar befehle probiert. aber ein einschalten mit KA 01 01 geht nicht. Aus funktioniert.

In der Doku die ich hab, habe ich keine direkte anwahl des senders gesehen. hast du das was?

ich hab ja schon nen wenig script erfahrung mit meinem pioneer verstärker. denke da kann ich einiges übernehmen. vielleicht können wir das dann austauschen. noch viel erfolg

Hallo,

mein TV läuft, leider gibt es nur einige Befehle die über RS232 gesendet werden können.
PowerOn:

<?
if($IPS_SENDER == "Designer")
{
    COMPort_SendText(46402 /*[Serial Port_LG]*/, "ka 0 01".chr(13));
}
?>

PowerOff:

<?
if($IPS_SENDER == "Designer")
{
    COMPort_SendText(46402 /*[Serial Port_LG]*/, "ka 0 00".chr(13));
}
?>

SerialPort:
9600/8/1/None

Ich hab einen 42LG6000;

Viel Spaß beim Testen

Jörg

so nun konnte ich nicht die finger davon lassen. wo ich die heizung nicht in den griff bekommen habe.

ich hab auf basis meines verstärker scriptes dieses abgewandelt

<?
// statusvariablen des fernsehers
define ("ID_POWER", 52313);
define ("ID_MUTE", 52860);
define ("ID_VOL", 43704);
define ("ID_RATIO", 55557);
define ("ID_LOCK", 11814);
define ("ID_INPUT", 41675);

// hilfsvariable
define ("TIMERCHECK", 18515 );
// statusvariablen webfront und serial port
define ("ID_SOCKET", 29144);
define ("ID_WEBFRONT", 21641);


// ab hier braucht nichts geändert zu werden

// aufruf per register variable, script oder webfront?
if($IPS_SENDER == "RegisterVariable") {
	// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  	$data  = RegVar_GetBuffer($IPS_INSTANCE);
	// neu empfangene Daten an $data anhängen
	$data .= $IPS_VALUE;

 	// wenn das Trennzeichen x in $data gefunden worden ist
	if (strpos($data, 'x'))
	{
		// $data in durch ; separierte Datensätze zerlegen
		$datasets = explode('x', $data);

		// alle nicht durch ; terminierten Datensätze ausgeben
		for ($i = 0; $i < count($datasets) - 1; $i++)
		{
			// prüfen ob ein einschalten "ACEZ" vorhanden ist. dann wären dies die ersten zeichen
			// manchmal kommt zuvor noch ein sonderzeichen daher zwei abfragen
			if (substr($datasets[$i],0,4) == "ACEZ" )
			{
			   // power on
			   checkACK("ACEZ");
			   $datasets[$i] = substr($datasets[$i],4);
			}
			else if (substr($datasets[$i],1,4) == "ACEZ" )
			{
			   // power on
			   checkACK("ACEZ");
			   $datasets[$i] = substr($datasets[$i],5);
			}
			
			//echo "empfangener Datensatz: ".$datasets[$i]."
";
			checkACK($datasets[$i]);
		}

		// $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
		$data = $datasets[count($datasets) - 1];
	}

	// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  	RegVar_SetBuffer($IPS_INSTANCE, $data);
}
if($IPS_SENDER == "WebFront") {

	// power schalter
	if ($IPS_VARIABLE==ID_POWER)
	{
	   // je nach zustand ausschalten. einschalten geht nicht über lan!
	   if ($IPS_VALUE == true)
	   {
	      // wenn der pioneer eingeschaltet ist und dann vom netz getrennt wird und danach wieder strom bekommt
	      // behält er den letzten zustand. fazit: schaltbare steckdose
	      // nachteil: dann ggf. einschalten über die fernbedienung nicht mehr möglich
	      //
	      // wenn auf true gewechelt, dann kein wechsel vornehmen da einschalten nicht möglich
	   	//SetValue($ID_POWER, false);

	   	//socket aktualisieren da unter umständen keine verbinung zustande kommt
	   	IPS_ApplyChanges(ID_SOCKET);
	   	$ret = sendCommand("KA 00 01");    	// einschaltbefehl
	   	SetValue(ID_POWER, $IPS_VALUE);     // varaible für power on setzen
	   	tvOn();										// variablen + schalter ausblenden
	   }
	   else
		{
			$ret = sendCommand("KA 00 00");    	/// ausschaltbefehl
	   	SetValue(ID_POWER, $IPS_VALUE);     // varaible für power off setzen
	   	tvOff();										// variablen + schalter ausblenden
	   }
	}

	// mute schalter
	if ($IPS_VARIABLE==ID_MUTE)
	{
	   // je nach zustand ausschalten. einschalten geht nicht über lan!
	   if ($IPS_VALUE == true)
	   {
			$ret = sendCommand("KE 00 00");     // mute on
	   	SetValue(ID_MUTE, $IPS_VALUE);
	   }
	   else
		{
			$ret = sendCommand("KE 00 01");     // mute off
	   	SetValue(ID_MUTE, $IPS_VALUE);
	   }
	}

	// lautstärke schalter
	if ($IPS_VARIABLE==ID_VOL)
	{
	   //echo $IPS_VALUE."VL";
	   if (GetValue(ID_VOL) != $IPS_VALUE )
	   {
	      // Werte von 0 bis 64(voll aufgedreht)
	      // so muss auch das profil der volumen variablen angelegt sein.
			$ret = sendCommand("KF 00 ".$IPS_VALUE);     // vol direkt setzen
	   	SetValue(ID_VOL, $IPS_VALUE);
	   }
	}

	// bildverhältnis schalter
	if ($IPS_VARIABLE==ID_RATIO)
	{
	   if (GetValue(ID_RATIO) != $IPS_VALUE )
	   {
	      // einstelige zahlen mit 0 voranstellen
	      $tmp_val = substr("0".$IPS_VALUE,-2);
			$ret = sendCommand("KC 00 ".$tmp_val);     // Funktion direkt setzen
			
         SetValue(ID_RATIO, $tmp_val);
	   }
	}

	// key lock schalter
	if ($IPS_VARIABLE==ID_LOCK)
	{
	   // je nach zustand ausschalten. einschalten geht nicht über lan!
	   if ($IPS_VALUE == true)
	   {
			$ret = sendCommand("KM 00 01");     // lock
	   	SetValue(ID_LOCK, $IPS_VALUE);
	   }
	   else
		{
			$ret = sendCommand("KM 00 00");     // unlock
	   	SetValue(ID_LOCK, $IPS_VALUE);
	   }
	}

	// eingangswahl schalter
	if ($IPS_VARIABLE==ID_INPUT)
	{
	   if (GetValue(ID_INPUT) != $IPS_VALUE )
	   {
	      // einstelige zahlen mit 0 voranstellen
	      $tmp_val = substr("0".$IPS_VALUE,-2);
			$ret = sendCommand("XB 00 ".$tmp_val);     // Eingangswahl direkt setzen
         SetValue(ID_INPUT, $tmp_val);
	   }
	}
}


// zeitliche events abfragen
if($IPS_SENDER == "TimerEvent") {

		// aktion per webfront
	   if (GetValue(TIMERCHECK)==true)
	   {
	     // gibt zyklische rückmeldung, dann ist der fernseher an
	     // Status für erneute prüfung zurücksetzen
	     SetValue(TIMERCHECK,false);

	   }
	   else
	   {
			if (GetValue(ID_POWER)==true)
		   {
				SetValue(ID_POWER,false);
				tvOff();		// variablen, schalter einblenden
	      }

	   }

		// regelmäßige prüfkommandos blenden leider das onscreen display ein
		//
		
		// OSD vorher aus - ist aber zu langsam so dass ein zucken entsteht
	   //$ret = sendCommand("KL 00 00");
		   
		// prüfkommando nur beim einschalten absenden
		// regelmäßige prüfung nicht notwendig da bei fernbedienungsaktionen die anworten empfangen werden
      $ret = sendCommand("KA 00 FF");     	// power on
		//$ret = sendCommand("KC 00 FF");     // welche lautstärke
		//$ret = sendCommand("KE 00 FF");     // mute
		
		// OSD wieder an
		//$ret = sendCommand("KL 00 01");
}


// funktion um die antwort zu prüfen
function checkACK($data)
{

   // power aus
	if ($data=="ACEZ" || $data=="a 01 OK01")
	{
		SetValue(TIMERCHECK,true);    //hilfsvariable setzen um zu erkennen das nach einem timer zyklus keine antwort mehr kommt
	   if (GetValue(ID_POWER)==false)
	   {
			SetValue(ID_POWER,true);
			tvON();		// variablen, schalter einblenden
      }
	}
	// mute aus
	else if ($data=="e 01 OK01")
	{
		SetValue(ID_MUTE,false);
	}
	// mute aus
	else if ($data=="e 01 OK00")
	{
		SetValue(ID_MUTE,true);
	}
	
	
}

function sendCommand($com)
{
	$feedback= ComPort_SendText(ID_SOCKET, $com.chr(13));

	return $feedback;
}

// tv on - also bedienelemente sichtbar machen
function tvOn()
{
	// power wurde nicht ausgeblendet
	IPS_SetHidden(ID_MUTE, false);
	IPS_SetHidden(ID_VOL, false);
	IPS_SetHidden(ID_RATIO, false);
	IPS_SetHidden(ID_LOCK, false);
	IPS_SetHidden(ID_INPUT, false);

	// webfront aktualisieren
	WFC_Reload(ID_WEBFRONT);
	//echo "refresh on";
}

// tv off - also bedienelemente ausblenden, dadurch kein exception handling im script
function tvOff()
{
	// power bleibt immer sichtbar damit bleibt es beim zusammenklappen im webfront (oder falls mal einschalten geht)

	// andere elemente ausblenden
	IPS_SetHidden(ID_MUTE, true);
	IPS_SetHidden(ID_VOL, true);
	IPS_SetHidden(ID_RATIO, true);
	IPS_SetHidden(ID_LOCK, true);
	IPS_SetHidden(ID_INPUT, true);

	// webfront aktualisieren
	WFC_Reload(ID_WEBFRONT);
	//echo "refresh off";
}



?>

die anlage in ips ist im screenshot. dazu muss noch nen serial port angelegt werden. bei dir sind es 9600 baud. bei mir sind es 115200 oder so. dieses ist aber über das service menü bei mir einstellbar.

die profileinstellungen sind im screenshot

leider hatte ich nicht so viel lust, nein zeit so ein installationsscript zu basteln.

Bildschirmfoto 2010-10-21 um 20.42.00.png

Bildschirmfoto 2010-10-21 um 20.41.35.png

Noch ein Nachtrag. Das hab ich bei LG gefunden. Ich komme z.b. nur an den HDMI 2 über „XB 00 ##“

In einem anderem Forum hab ich bei einem LG Gerät gelesen, das man über das Service Menü erst aktivieren muss, dass die RS232 im ausgeschalteten Zustand reagiert. Das hab ich aber noch nicht gefunden. Ich sehe nur die Baud Rate.

Achso vergessen: Ich hab nen 50PG7000

LG RS232c TVLINK-TUNE Command Set 04-23-2008.xls (90 KB)

@josp666: Kannst du mal die Quelle posten für die komplette Befehlsreferenzenliste?

Danke schon mal

Lg

Hallo,

kein Problem hier die Datei.

JörgGeneric RS232c Commands_11-18-2005.xls (46.5 KB)

Moin ,

Hast du mal versucht eine Steuerung mit LAN/WLAN zu bauen ?
Wenn ja wäre ich für jeden Tip dankbar.