Plex Home Theater Modul

Also Luca,
ich habe mich deinem Problem angenommen und habe versucht es nach zu vollziehen.

Bei mir wird in folgenden Variablen das Cover korrekt angezeigt:

  • Cover HTML
  • Cover

Die Variable HTML bleibt leer -> ist auch erst mal so korrekt.

Ich kann dein Problem mit dem Cover leider nicht nachstellen.

Das Modul ist die aktuellste Version ?

Hi,
ich habe gerade nochmal reingeschaut und nun wird mir nichtmal der Titel angezeigt, das ging vorher! Modul ist aktuell, habe es auch komplett gelöscht, neu installiert und die Instanz neu hinzugefügt - gleiches Problem! Steuerelemente und Status funktionieren problemlos!

Ich nutze allerdings nich das Plex Home Theater sondern die neue Plex Version, hat das evtl. Auswirkungen?

Gruß

EDIT:
Nach Client Neustart klappt das wieder, however…

Beim Spielen eines Filmes bekommt die Variable Cover HTML folgenden Wert (Token durch x ersetzt):

<img style=‚height:100%; width:100%‘ src=’/library/metadata/266/thumb/1498169985&width=720/?X-Plex-Token=xxx’>

Im Webfront wird das Bild nun nicht angezeigt, wenn ich auf das Bild rechten Mausklick, Grafik anzeigen klicke wird mir oben ja der Link angezeigt der versucht wird zu öffnen. Lautet wie folgt:

http://192.168.1.111:82/library/metadata/366/thumb/1498169985&width=720/?X-Plex-Token=e5WYtQ44aJ3N8Tqau2W5

Das Problem ist also, dass er mit dem Port des Webfronts nach dem dem Bild sucht, wo er das natürlich nicht findet. Wenn ich die 82 inter der IP (IPS Server ist der gleiche PC wie der Plex Server, also gleiche IP), also den Port des IPS Servers gegen 32400, also den Plex Port, tausche, wird das Bild dargestellt, irgenwo läuft also denke ich beim Zusammensetzen der URL falsch, weil der falsche Port gesetzt wird (in der Instanz ist 32400 eingetragen).

Gruß

Nein, du nutzt nicht die unterstützte Version.

Du brauchst Plex Home Theater, nicht den Plex Media Player oder wie das neue Ding heißt.

Hi,
oh alles klar, das hatte ich nicht auf dem Schirm, hatte auch erst vor kurzem rausgefunden, dass da ein Unterschied ist, sorry für die Aufregung!

Gruß

Hallo zusammen,

bin neu hier und habe eine Frage zu dem Plex Modul.
Bin gerade noch in der Findungsphase und habe noch die Demo.
Will erst mal schauen, wie ich mich hier zurecht finde.

Ist es richtig das, dass Modul nicht kompatibel zu dem Plex Media Player ist?
Oder liegt es am Amazon Fire TV?
Welche Möglichkeiten hätte man noch um die Steuerung und die Anzeige darzustellen?

Vielen Dank

Hallo und viel Spass beim Ausprobieren, das Modul arbeitet nur mit Plex Home Theater, da dazu die API genutzt wird. Funktioniert also wohl nicht zur Steuerung von Plex auf einem Fire TV. Man könnte aber sicher auf einem Fire TV das auf andere Art aus IP-Symcon ansteuern. Ob die Cover Anzeige aber irgendwie doch mit einem FireTV geht weis ich selber nicht.

Hundertprozent funktioniert das mit Plex Home Theater, also z.B. einem Raspberry und Rasplex. Wenn es Dir primär um so was wie Steuerung wie Play, Stop usw. geht sollte das auf einem FireTV mit FireTV Modul funktionieren.
Alternativ, wenn es um die Darstellung in einer Visualisierung geht, könnte man auch Alternativ Plex.TV in einer HTMLBox einbinden und bekommt das also dann im Webfront angezeigt und das Steuern das FireTV erfolgt, wie oben beschrieben, über das FireTV Modul .

Alternative ist es noch auf dem Plex Server DLNA einzuschalten, dann sollte eine Steuerung und Auswahl und Cover Anzeige auch über UPNP funktionieren und UPNP DLNA for IPS-new-version

So wie Fonzo sagt. Ich habe demnächst vor zu prüfen ob mir der „Umweg“ über den Plex Media Server hilft. Anscheinend meldet der Plex Client den Status an den Media Server. So wie ich gesehen habe kann man das nutzen.

Hallo dansch,

daran hätte ich auch Interesse, ich habe mir das ganze auch ein wenig angeschaut.
Man müsste über den Plex Media Server die Clients komplett steuern können. Ich war auch schon am überlegen ein Modul dafür zu schreiben, aber anzufangen, wenn du eh danach schaust, macht ja erstmal keinen Sinn. Was genau möchtest du denn machen?

Grüße,
Kai

Der Anspruch ist die gleiche Funktionalität wieder herzustellen.
Aktuell fehlt mir allerdings der Drive mich da tief einzuarbeiten. Vielleicht mal etwas für den Herbst.

Hallo,

ich konnte es nicht lassen. :smiley:
Also schwer ist es nicht.

Man muss IP-Symcon als Gerät bei dem Plex Media Server registrieren.
Danach kann man mit der HTTP API jedes Gerät steuern, welches mit dem Plex Media Server verbunden ist.

Um anzuzeigen, welcher Titel zum Beispiel gerade läuft muss nicht gepollt werden, man kann bei dem Plex Media Server Webhooks hinterlegen, diese werden aufgerufen, wenn sich ein Player verändert, so zumindest habe ich es beim kurzen überfliegen verstanden. Dann könnte man in IP-Symcon einfach einen Webhook anlegen und diesen bei dem Plex Media Server hinterlegen.

Grüße,
Kai

Hört sich gut an, willst Du das ergänzen und dann einen Pull Request machen? Ich muss mal schauen, ich glaube ich hatte bei mir selber auch schon einen Webhook ergänzt, weil ich mir so die ganzen Schauspieler liefern lasse.
Hast Du da einen Link zur Doku, wie man IPS als Gerät registriert?

Hallo Fonzo,

es gibt keine offizielle API, bzw. ich habe sie zumindest nicht gefunden.
Ich habe die Informationen allerdings hier gefunden: Home · Arcanemagus/plex-api Wiki · GitHub

Ich denke man sollte das Modul ganz neu angehen. Eine Instanz für Server, eine Instanz für Clients. Ich wollte mir das mal anschauen, ob ich zumindest erstmal die Client Instanz fertig bekommen, sodass man auch den neuen Client (Plexamp) steuern kann.

Grüße,
Kai

Das kommt drauf an, wenn man pro Client so oder so einen Webhook anlegen muss reicht es ja aus eine Client Instanz zu behalten auf die dann der Webhook geht. Wenn es nur einen Webhook für alle Geräte gibt sollte man einen IO ergänzen. Auf alle Fälle sollte man das Modul dann ergänzen, damit die GUIDs erhalten bleiben. Ich muss mir das mal später anschauen, wie das mit dem Webhook geht, ich habe bei mir ja einen im Plex Server hinterlegt, ob diese zentral oder pro Client ist.

Es wird ein Webhook benötigt, dort wird anscheinend alles übergeben für alle Clients, dieser Webhook wird nur dafür benötigt um Daten abzugreifen, nicht um irgendwas zu steuern.
Ich bleibe bei der Meinung, dass man von Grund auf neu anfangen sollte! Es ist einfach eine ganz andere Art der Kommunikation.

Naja, ich werde es zumindest für mich tun.

Grüße,
Kai

Danke dir, auch für die PN, ich antworte dir auf dem Wege.

Wir haben mal geschaut das sollte sich schnell ergänzen lassen. Ich nutze zur Zeit ein Webhook mit einem Skript. KaiS bastelt eine Klasse zur generellen Steuerung für alle Clients. Das einzige was Du mal schauen müsstest ist ob in Plex unter Account Zugriff auf einen Webhook hast. Ich glaube das ist ein Plex Pass Feature, dann kannst Du aber von allen Clients auch die Filminfos wie Cover oder Schauspieler darstellen.

Hallo,

richtig, Webhooks sollen nur mit dem Plex Pass funktionieren.

Grüße,
Kai

Webhooks habe ich im Plex Pass.
Was genau muss da als URL rein?

Um die Sessions auszulesen habe ich das hier gefunden.
das klappt auch schon mal.

http://<CLIENT IP>:<CLIENT PORT>/status/sessions

Wie muss der Webhook aussehen, damit die Werte oder das XML nach IPS kommen, bzw. was muss in IPS gemacht werden?

Grüße

Das ist davon abhängig wie das funktionieren soll. Wenn es nur lokal funktionieren soll, kannst Du da eine lokale IP des IP-Symcon Servers mit Webhook eintragen. Wenn es global funktionieren soll brauchst Du z.B. eine Subskription, dann kannst Du dort die IP-Smycon Connect Adresse eintragen, dann ist es egal wo der Plex Server steht bzw. wo der IP-Symcon Server lokalisiert ist. Bei mir ist dort die IP-Symcon Connect Adresse hinterlegt.

Sieht dann z.B. so aus


https://webhookplexuser:webhookplexpassword@123456789.ipmagic.de/hook/plex

die URL setzt sich zusammen aus dem Webhook Usernamen, dem Webhook Passwort und der IP-Symcon Connect Adresse sowie dem Webhook.

Wenn das ganze lokal wäre würde das so aussehen:


https://webhookplexuser:webhookplexpassword@192.168.1.1:3777/hook/plex

Das werden wir wohl im Modul ergänzen, auf die Schnelle kannst Du das aber selber einrichten.

Im Objektbaum an einer Stelle eine Kategorie (CTRL+0) anlegen z.B. Plex nennen. Darunter ein Skript (CTRL+3) anlegen und z.B. Plex Webhook Interface nennen.

in das Skript kopierst Du folgenden Inhalt


<?
$username = "plex";
		$password = "ips4";
		if(!isset($_SERVER['PHP_AUTH_USER']))
			$_SERVER['PHP_AUTH_USER'] = "";
		if(!isset($_SERVER['PHP_AUTH_PW']))
			$_SERVER['PHP_AUTH_PW'] = "";
			 
		if(($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password))
			{
			header('WWW-Authenticate: Basic Realm="Plex WebHook"');
			header('HTTP/1.0 401 Unauthorized');
			echo "Authorization required";
			return;
			}
		echo "Webhook Plex IP-Symcon";
			
		//workaround for bug
		if(!isset($_IPS))
			global $_IPS;
		if($_IPS['SENDER'] == "Execute")
			{
			echo "This script cannot be used this way.";
			return;
			} 
		
		 	 		 
		 # Capture JSON content
		$plexjson = $_POST["payload"];

		$data = json_decode($plexjson);
		
		$event = $data->event;
		var_dump($event);
		$user = $data->user;
		var_dump($user);
		$owner = $data->owner;
		var_dump($owner);
		$account = $data->Account;
		$accountname = $account->title;
		$accountpic = $account->thumb;
		var_dump($accountname);
		var_dump($accountpic);
		$server = $data->Server;
		$servername = $server->title;
		$serveruuid = $server->uuid;
		var_dump($servername);
		var_dump($serveruuid);
		$player = $data->Player;
		$playerlocal = $player->local;
		var_dump($playerlocal);
		$playerpublicip = $player->publicAddress;
		var_dump($playerpublicip);
		$plexclientname = $player->title;
		var_dump($plexclientname);
		$plexclientuuid = $player->uuid;
		var_dump($plexclientuuid);
		$metadata = $data->Metadata;
		$librarysectiontype = $metadata->librarySectionType;
		var_dump($librarysectiontype);
		$ratingkey = $metadata->ratingKey;
		var_dump($ratingkey);
		$ratingkeydata = $metadata->key;
		var_dump($ratingkeydata);
		$guid = $metadata->guid;
		var_dump($guid);
		$sectionid = $metadata->librarySectionID;
		var_dump($sectionid);
		$studio = $metadata->studio;
		var_dump($studio);
		$plextype = $metadata->type;
		var_dump($plextype);
		$plextitle = $metadata->title;
		var_dump($plextitle);
		$plexoriginaltitle = $metadata->originalTitle;
		var_dump($plexoriginaltitle);
		$contentrating = $metadata->contentRating;
		var_dump($contentrating);
		$summary = $metadata->summary;
		var_dump($summary);
		$rating = $metadata->rating;
		var_dump($rating);
		$viewoffset = $metadata->viewOffset;
		$viewcount = $metadata->viewCount;
		$lastviewedat = $metadata->lastViewedAt;
		$year = $metadata->year;
		var_dump($year);
		$tagline = $metadata->tagline;
		var_dump($tagline);
		$thumb = $metadata->thumb;
		var_dump($thumb);
		$art = $metadata->art;
		var_dump($art);
		$duration = $metadata->duration;
		$originallyavailableat = $metadata->originallyAvailableAt;
		$addedat = $metadata->addedAt;
		$updatedat = $metadata->updatedAt;
		$chaptersource = $metadata->chapterSource;
		$primaryextrakey = $metadata->primaryExtraKey;
		$genreinfo = $metadata->Genre;  // Array
		foreach($genreinfo as $key => $genre)
		{
			$genre = $genre->tag;
			var_dump($genre);
		}
		$directorinfo = $metadata->Director;
		foreach($directorinfo as $key => $director)
		{
			$director = $director->tag;
			var_dump($director);
		}
		$writerinfo = $metadata->Writer;
		foreach($writerinfo as $key => $writer)
		{
			$writer = $writer->tag;
			var_dump($writer);
		}
		$producerinfo = $metadata->Producer;
		foreach($producerinfo as $key => $producer)
		{
			$producer = $producer->tag;
			var_dump($producer);
		}
		$countryinfo = $metadata->Country;
		foreach($countryinfo as $key => $country)
		{
			$country = $country->tag;
			var_dump($country);
		}
		$roleinfo = $metadata->Role;
		foreach($roleinfo as $key => $cast)
		{
			$actor = $cast->tag;
			var_dump($actor);
			$role = $cast->role;
			var_dump($role);
			$actorpic = $cast->thumb;
			var_dump($actorpic);
			
		} 
?>

Du müstest dann an allen Stellen im Skript an dem zur Zeit ein var_dump steht den Wert dann abspeichern. Entweder in eine einzelne Variable (CTRL+2) mit


SetValue(12345, $value); //12345 ist die Objekt ID der Varibale und $value der Wert den Du abspeichern willst.

oder aber auch mehrer Variablen als Webseite gesetzt in einer String Variable mit dem Variablenprofil ~HTMLBox. So könntest Du Dir dann Deine eigene Ansicht zusammen bauen mit den übergebenen Werten.

Im Objektbaum unter Kern Instanzen -> Webhook nun einen neuen Webhook anlegen /hook/plex und mit dem Skript Plex Webhook Interface, das vorher erstellt wurde, verlinken.

Jetzt kommen dann jedes mal, wenn Plex etwas macht, Daten in IP-Symcon auf dem Skript an und werden ausgewertet.

Das ist fürs Grobe, sobald das im Modul drinnen ist muss dann der Webhook wieder gelöscht werden, dann ist das Modul selber der Endpunkt für den Webhook und nicht mehr ein Skript.

Das Modul selber wertet dann zunächst noch den Client aus und schreibt nur dann Werte wenn es auch zu dem passenden Client gehört. Zur Zeit würdest Du bei dem Ansatz oben einfach nicht selektioniert Daten in IP-Symcon bekommen mit allen Clients. Falls die Zeit es zulässt kann ich das mal mal Wochenende ergänzen, dann kann man das auch im Modul ausprobieren.

Ich habe das Original Modul mal erweitert um Datenemepfang für den Webhook für jeden Client.


https://github.com/Wolbolar/SymconPlex

Zur Zeit ist eine Steuerung noch nicht eingebaut. Die Metadaten sind sehr viele, ich denke das macht nicht Sinn, die in einzelne Variablen abzulegen, da sollte man sich eher eine individuelle Webseite bauen, mit den Daten die man braucht. Die Metadaten sind im Debug Fenster der Client Instanz einsehbar und werden in der Variable Client Info abgelegt. Dort können diese bei Bedarf ausgelesen und weiter verarbeitet werden.

Wenn das so weit funktionieren sollte und noch die Steuerungsbefehle ergänzt worden sind, kann man das dann mit dem Original Modul zusammenfügen.