Philips Fernseher in IPS einbinden?

Cool… da bin ich ja mal gespannt!!

…SSH-Anbindung wie hier beschrieben…

Der Rest ist dann insbesondere „Fleißaufgabe“…:smiley:

…aber für heute ist Schluß - gibt sonst Ärger!:wink:

Joachim

Nachtrag: Die ssh-Verbindung funktioniert mit der im Thread beschriebenen Technik, meldet sich aber bei jedem Skriptdurchlauf an und am Ende wieder ab. Wenn jemand eine Möglichkeit sieht - ähnlich wie bei anderen im IPS angebundenen Geräten - den „Kanal“ dauerhaft „offen“ zu halten wäre ich für einen Hinweis dankbar! Ich erwarte, dass dabei noch ein Performance-Gewinn zu erzielen ist…

Hallo Peter,

hast Du schon neue Erkenntnise?

Joachim

…bei mir funktioniert ein- und ausschalten sehr verlässlich und gut. Was mich derzeit in den Wahnsinn treibt ist die Umschaltung zwischen den HDMI-Eingängen…
Sende ich " echo „tx 4F 82 10 00“ | cec-client -s -d 1" wird dieses zwar manchmal ausgeführt, der Raspi bleibt aber „hängen“. Der Raspi stürzt dabei nicht richtig ab, ich kann zwar über die Tastatur weiter Schreiben, jeoch habe ich kein Eingabeprompt…

Wie weit bist Du?

Joachim

Hallo Leute,

hier mal meine Funktionssammlung:

<?
include "Konstanten.ips.php";
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
//Philips_Send_RSA($k_RPiTV['IP'], "cd ..");
//Philips_JSTx_Textfile($k_RPiTV['IP'], $k_TV['IP'], "test.txt", 700, 250, 50, 50);
//Echo Philips_JSTx_VolDown($k_RPiTV['IP'], $k_TV['IP']);
//Echo Philips_JSTx_VolDown($k_RPiTV['IP'], $k_TV['IP']);
//Philips_JSTx_VolUp($k_RPiTV['IP'], $k_TV['IP']);
//JPG2PNG(IPS_GetKernelDir()."\	ransfer\Restmuell.jpg");
//Philips_On($k_RPiTV['IP']);
//FTP_Filetransfer($k_RPiTV['IP'], IPS_GetKernelDir()."\	ransfer\Sperrmuell.png","Sperrmuell.png", $k_RPiTV['FTP_User'], $k_RPiTV['FTP_Password']);
//Echo Philips_JSTx_Image($k_RPiTV['IP'], $k_TV['IP'], "Sperrmuell.png", 50, 50);
//Philips_JSTx_Text($k_RPiTV['IP'], $k_TV['IP'], "Dieses ist ein Test", 250, 50, 50, 50);
//SetValueBoolean(37224  /*[Philips TV\Status]*/, Philips_PowerstateStatus($k_RPiTV['IP']));
//Philips_PowerstateStatus($k_RPiTV['IP']);
//Philips_SwitchHDMI($k_RPiTV['IP'], 1);
return;
//*************************************************************************************************************
// Prüft über Ping ob Gerät erreichbar
function Philips_GetAvailable($ipTV)
{
   $result = false;
      // Sys-Ping funktioniert nur ohne Port-Angabe, daher muss sie falls vorhanden herausgetrennt werden
		$ippart = explode(":", $ipTV);
		$tmpipTV = $ippart[0];

	if ($tmpipTV > "" )
    	{
      $result = (Boolean) Sys_Ping($tmpipTV, 1000);   // Ping max. 1 Sek. warten

		If ($result == true)
		   {
		   $result = Philips_PowerstateStatus($ipRPi);
		   }
		}
return $result;
}

//*************************************************************************************************************
// Prüft ob der TV eingeschaltet ist
function Philips_PowerstateStatus($ipRPi)
{
   $result = false;

	$result = Philips_Send_RSA($ipRPi, "echo 'pow 0' | sudo cec-client -s -d 1");
	
	if(substr($result, strlen($result) - 3, 2) == "on")
		{
		$result = true;
		}
	else
		{
		$result = false;
		}

return $result;
}

//*************************************************************************************************************
// Schaltet den TV auf Standby
function Philips_Standby($ipRPi)
{
	Philips_Send_RSA($ipRPi, 'echo "standby 0" | sudo cec-client -s -d 1');

return;
}

//*************************************************************************************************************
// Schaltet den TV Ein
function Philips_On($ipRPi)
{
	Philips_Send_RSA($ipRPi, 'echo "on 0" | sudo cec-client -s -d 1');

return;
}

//*************************************************************************************************************
// Schaltet den HDMI-Kanal um
function Philips_SwitchHDMI($ipRPi, $hdmi_input)
{
   $result = Philips_Send_RSA($ipRPi, 'echo "txn 1F 82 '.$hdmi_input.'0 00" | cec-client -s -d 1');
	// Die erste Stelle (hier die "1" muss der "Sender" sein, da muss man machmal etwas experimentieren
	// 1 = Recorder 1 (raspi)
	// F = Broadcast
	// 82 = Active Source
	// 00 00 = ID (hängt auch von der Struktur der HDMI-Geräte ab!
return $result;
}

//*************************************************************************************************************
// Sendet einen Text an den TV
function Philips_JSTx_Text($ipRPi, $ipTV, $text, $width = 200, $height = 200, $posX = 0, $posY = 0)
{
   $text=str_replace(" ",chr(160),$text);
   
	Philips_Send_RSA($ipRPi, "JSTx -W 1280 -H 720 -w ".$width." -h ".$height." -x ".$posX." -y ".$posY." -t ".$text." -F /home/pi/JSTx-0.23/font/decker.ttf --dfb:quiet --remote=".$ipTV);

return;
}

//*************************************************************************************************************
// Zeigt den Inhalt einer Textdatei auf dem TV an
function Philips_JSTx_Textfile($ipRPi, $ipTV, $file, $width = 200, $height = 200, $posX = 0, $posY = 0)
{
	Philips_Send_RSA($ipRPi, "JSTx -W 1280 -H 720 -w ".$width." -h ".$height." -x ".$posX." -y ".$posY." -t file:/home/pi/Media/".$file." -F /home/pi/JSTx-0.23/font/decker.ttf --dfb:quiet --remote=".$ipTV);

return;
}

//*************************************************************************************************************
// Sendet ein Bild an den TV
function Philips_JSTx_Image($ipRPi, $ipTV, $image, $posX = 0, $posY = 0, $Feedback = 0)
{
	Philips_Send_RSA($ipRPi, "JSTx -x ".$posX." -y ".$posY." -i image:/home/pi/Media/".$image." -p ".$Feedback."  -F /home/pi/JSTx-0.23/font/decker.ttf --dfb:quiet --remote=".$ipTV);

return;
}

//*************************************************************************************************************
// Erhöht die Lautstärke
function Philips_JSTx_VolUp($ipRPi, $ipTV)
{
	Philips_Send_RSA($ipRPi, "JSTx -k 16 --dfb:quiet --remote=".$ipTV);
	// Infos zu den FB-Befehlen: wikipedia http://en.wikipedia.org/wiki/RC-5
return;
}

//*************************************************************************************************************
// Senkt die Lautstärke
function Philips_JSTx_VolDown($ipRPi, $ipTV)
{
	Philips_Send_RSA($ipRPi, "JSTx -k 17 --dfb:quiet --remote=".$ipTV);

return;
}

//*************************************************************************************************************
// Mute
function Philips_JSTx_Mute($ipRPi, $ipTV)
{
	Philips_Send_RSA($ipRPi, "JSTx -k 13 --dfb:quiet --remote=".$ipTV);

return;
}

//*************************************************************************************************************
// Senden den Befehl an den Raspberry Pi
function Philips_Send($ipRPi, $command)
{
	include('Net/SFTP.php');
	include "Konstanten.ips.php";
	// IP vom Raspberry
	$ssh = new Net_SSH2($ipRPi);

	//Anmeldeuser und Passwort für Raspberry nach UFT8 konvertieren
	//nur mit UTF8 Einstellung klappt auch ein putty login
	//ohne diese Konvertierung erscheint immer "Login Failed" auch hier per ssh->login
	$username = utf8_encode( $k_RPiTV['User'] );
	$password = utf8_encode( $k_RPiTV['Password'] );

	    if (!$ssh->login($username, $password)) // Hier der echte Login
	    {
	        exit('Login Failed');
	    }
	//SSH Login: Ende

	$result = $ssh->exec($command);

return $result;
}

//*************************************************************************************************************
// Senden den Befehl an den Raspberry Pi
function Philips_Send_RSA($ipRPi, $command)
{
	IPS_RunScriptWaitEx(27236 , Array("ipRPi" => $ipRPi, "command" => $command));
	$result = GetValueString(42978  /*[Funktionen\f_Philips\Philips_Send\result]*/);
	return $result;
}

//*************************************************************************************************************
// Filetransfer zum Raspberry Pi
function FTP_Filetransfer($ipRPi, $source, $dest, $ftp_User, $ftp_Password)
{
    If (!$conn_id=ftp_connect($ipRPi))
       return(false);
    $login_result = ftp_login($conn_id, $ftp_User, $ftp_Password);   // Username und Passwort anpassen !!!!
    ftp_pasv($conn_id, true);
    IF ($login_result)
    {
        if (!@ftp_put($conn_id, $dest, $source, FTP_BINARY))
         {
            echo "$ziel konnte nicht hochgeladen werden
";
             $result=false;
         }
         else
         {
              $result=true;
         }
        ftp_close($conn_id);
        return($result);
    }
    return(false);
}

//*************************************************************************************************************
// Wandelt ein jpg in ein png um
function JPG2PNG($SourcePath)
{
	$image = imagecreatefromjpeg($SourcePath);
   $DestPath = str_replace("jpg", "png", $SourcePath);
	header('Content-Type: image/png');
	imagepng($image, $DestPath);

return;
}

?>

Damit der Versand über RSA zum Putty auch funktioniert, benötigt man auch dieses in einem extra Skript:

<?

   set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

	include "Crypt/RSA.php";
	include "Net/SFTP.php";
	include "Konstanten.ips.php";

	$ssh = new Net_SSH2($_IPS['ipRPi']);
	$key = new Crypt_RSA();
	$key->loadKey(file_get_contents(IPS_GetKernelDir()."\\scripts\phpseclib\RPiTV.ppk"));

     if (!$ssh->login('root', $key)) {
		  exit('Login Failed');
    }

	SetValueString(42978 /*[Funktionen\f_Philips\Philips_Send\result]*/ , $ssh->exec($_IPS['command']));
	$ssh->disconnect();

?>

Hinweise:

  • Ich arbeite mit der Version 0.23 von JSTx (für Philips Modelle aus 2009 - 2010)
  • Installiert ist auch die libcec auf dem Raspberry Pi
  • Sowohl bei dem Senden von Texten als auch bei dem Aufruf einer Textdatei werden sehr viel Sonderzeichen nicht korrekt angezeigt bzw. der Text bricht danach ab - hier ist noch „Feinarbeit“ erforderlich

Mal sehen ob Peter und Bernd noch dabei sind! :smiley:

Joachim

Hi Joachim,

jo, schon.

Mittlerweile ist dieser Thread unübersichtlich geworden weil unterschiedliche Wege begangen werden.

Als erstes: schönen Dank für das Image von Dir.

Dank Deiner Hilfe läuft jetzt auf einem RasPi-B Version JSTx0.23, 0.24 und ein von mir angepasstes Script für den RasPi von Walter (sys_ping mag der RasPi nicht), ich habe es intern tituliert als WalterV1.4.
Walters Script ist nur lauffähig auf den Philips Kisten ab 2K11, sprich xx06.

Mein 46PFL9715 ist zwar laut Philips Page ein 2K11 Modell, aber sehr stiefmütterlich behandelt worden auf der softwareseite.

Vermutlich läuft deshalb auch nicht die HID-CEC Geschichte, aber da bin ich mir noch nicht sicher.

Du sprichst den RasPi immer noch von einem zentralen IPS aus an.

Mein Weg ist ein anderer:
es läuft auf dem RasPi ein eigenes IPS und die Kommunikation erfolgt über die JSON Schnittstelle.
Gut, IPS und RasPi sind momentan noch am wachsen (26.2.2015), aber die Funktionen BEIDER JSTx Versionen kann ich per JSON ansprechen, zur Not bei weit verteilten System auch über eine VPN Verbindung (sollte ich mal testen und bei meiner Mutter ein LAN Kabel ziehen und in den xx04er stöpseln :), … mal sehen ob Sie dann anruft wenn plötzlich Kobolbe im Bild erscheinen).

Bei Bedarf könnte ich, Dein Einverständnis vorausgesetzt, die Imagedatei irgendwo zum download stellen, bzw. als beschriebene SD mit 16GB in meinen Shop mit aufnehmen. IPS wäre auch mit drauf, natürlich ohne die Lizenzdatei.

Mit dem RasPi2 kämpfe ich noch, da gibt es massive Probleme, obwohl der Weg derselbe war wie auf dem B Modell. BTW: Noobs 1.4. läuft.

Für die Übersichtlichkeit sollten wir neue Threads erstellen, bzw. dort dann…, am besten einfach die entsprechenden Beiträge zum Start rein kopieren:

Philips Fernseher ab 2K11 per JSTx-0.24 Texte&PNGs einblenden, fernsteuern
Philips Fernseher 2K09 und 10 per JSTx-0.23 Texte&PNGs einblenden, fernsteuern
HDMI Geräte per CEC steuern

So weit zum jetzigen Stand bei mir.

mfg

BerndJ

Hallo Bernd,

ja, ein neuer Thread wäre sinnvoll, die Übersichtlichkeit ist schon etwas länger „dahin“. Gerne darfst Du das SD-Card-Image irgendwo online stellen, die Arbeit von Stunden soll ja auch den anderen hier im Forum zugute kommen.

Eigentlich läuft jetzt alles rund, an zwei Dingen muss bzw. könnte m.E. noch gearbeitet werden:

  1. Bei den Texten führen jegliche Steuerzeichen zu Quadraten in der Anzeige oder der Text wird nur unvollständig angezeigt. Ist ggf. mit dem richtigem „encode“ oder „decode“-Befehle ganz schnell aus der Welt…
  2. Die Zugriffszeit ist m.E. immer noch verbesserungsfähig. Der SSH Zugang selbst mit User/Passwort ist so lala, mit SSH RSA-Zugang ist es schon etwas zügiger, hat aber auch so seine Laufzeiten. Schade das es im IPS nicht den Variablen typ „Objekt“ gibt, das könnte hier möglicherweise einen echten Vorteile bringen (Spekulation!).

Ich werde mal Deine Variante hinsichtlich der Zeit untersuchen…

Die Libary zur HDMI-Steuerung via CEC ist auf der Karte drauf, nach anfänglichen Herausforderungen läuft es aber jetzt sehr zuverlässig…

Joachim

Hi Joachim,

auf Deiner SD ja, aber da bekomm ich IPS nicht belebt.

Auf meinem Image läuft halt der Rest, aber nicht dieses CEC.

Wie sahen denn die zu meisternden Herausforderungen aus??, bisher konnte ich sie nicht besiegen.

mfg

BerndJ

PS: ich sollte mal mit Deinem image diesbezüglich noch mal spielen per Konsolenbefehle zwecks Fehlereingrenzung.

Hat jemand noch JSTx am laufen? Hatte es „früher“ als ich Symcon noch auf einem Windows laufen hatte! Das lief JStx separat auf einem Pi

Jetzt würde ich JSTx gerne auf dem Selben PI laufen lassen wie Symcon. Aber irgendiwie bekomme ich es nicht mehr hin.

Gibt es hier jemanden mit dem ich mich austauschen könnte?

Hallo Mastershort,

das war so ein „gefummel“ das zum Laufen zu bekommen und dann noch mit sehr eingeschränkter Funktionalität (je nach Firmware-Stand des TV), dass das Thema offensichtlich nicht mehr weiter verfolgt wird…

Joachim

Ich möchte das JSTx eigentlich nur dafür da haben um Infos Bilder etc auf den Fernseher zu bringen.

Ich Steuer den Fernseher über die API. Das klappt eigentlich ganz gut.

Hi,

ich könnte Dir als Basis ein Image für einen RasPi1B zusenden
(schönen Dank an Chris auf dessen Server es noch lag).

Bei mir läuft das aktuell noch auf einem 2B und unterstützt sowohl JStx 0.23 als auch 0.24.

Wär schön wenn man das auf einem aktuellen RasPi 3 zum Laufen kriegen könnte.

mfg

BerndJ

https://homec4u.wordpress.com/2015/03/15/philips-tvs-infos-einblenden-via-raspberry-und-jstx/

Ja gerne!
Ich hätte es auch lieber auf meinem PI 2 ins laufen bekommen aber irgendwie hat das mit dem Complieren nicht hin.
Aber da ich noch ein alten Pi rumliegen habe wäre das schon mal eine gute Lösung.

Hallo Mastershort und Bernd,

die im JSTx-Verzeichnis zu findende Raspberry Pi-Version ist für den damaligen ARM-Prozessor kompiliert. Wenn man das auf den aktuellen Pi 3 umsetzen möchte - woran ich auch nicht ganz uninteressiert bin - so müsste man wohl die unkompilierte Version selbst kompilieren. Dazu fehlt mir aber das Wissen.
Vielleicht kann uns ja einer der Cracks auf den korrekten Weg bringen?

Joachim

…Walter hat mir mal die Kontaktdaten des Entwicklers (der übrigens in diesem Thread auch schon selbst zu Wortgekommen ist) zukommen lassen. Ich habe ihn mal angeschrieben, mal schauen ob sich daraus ein neuer Ansatz ergibt…

Joachim

…Sander war sehr schnell!:slight_smile:

Hier der Link für die neue RPI3-Version, aber leider nur in der 0.24 Version - ich brauche leider die 0.23. Deswegen habe ich ihn noch mal angetriggert…:smiley:

Joachim

Nachtrag: Bitte dann hier eine detaillierte Installationsanleitung posten!
Nachtrag 2: Auch die 0.23 ist jetzt für den RPi 3 vorhanden!

Das ist ja cool! Ging ja echt schnell! funktioniert die dann auch auf dem Pi 2 ? Bin gerade nicht zuhause, somit kann ich es gerade nicht testen!

…sollte so sein, probieren geht da aber über studieren![emoji6]

Da hast du recht :slight_smile:

Muss ich das dann nur noch auf den Pi bringen und entpacken? Und die in dem Entpackten Ordner die JSTx ansprechen?

…irgendwo hier im Thread steht es, habe es auf die Schnelle aber nicht gefunden…
Aus der Erinnerung: da es ja bereits compiliert ist, muss es irgendwie mit untar entpackt werden und ist dann damit „gebrauchsfertig“.
Bitte mal posten wenn Du es gefunden/probiert hast…

Joachim