plex und fhem

Begonnen von justme1968, 27 Oktober 2015, 01:11:32

Vorheriges Thema - Nächstes Thema

justme1968

da das xbmc modul nicht mehr besonders gut mit plex home theater zusammenarbeitet und alle anderen plex clients inklusive android und dem neuen plex media player gar nicht mehr damit arbeiten habe ich angefangen ein plex spezifisches modul zu entwickeln.

ich kann damit inzwischen alle plex server und clients im netz automatisch finden ohne irgend etwas pollen zu müssen. wenn ein player ausgeschaltet wird geht er in modul auf offline. wenn er eingeschaltet wird erscheint er wieder.

player die ich bis jetzt getestet habe sind plex home theater, plex media player, iOS, android (fire tv und tablet).

es ist möglich das abspielen zu starten, zu stoppen, lautstärke zu ändern, ...

was noch nicht geht ist automatisch bestimmte medien oder playlists zu suchen, zu listen und zu starten und ich habe noch keine meta information über das was gerade abgespielt wird. das soll aber alles noch kommen.

jetzt die eigentliche frage :) : gibt es noch andere plex anwender? wer hat interesse an so einem modul und was soll es können?

gruss
  andre

edit: die erste version ist hier zu finden: http://forum.fhem.de/index.php/topic,43052.msg353477.html#msg353477
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FlorianZ

Hallo Andre

Ich habe Plex mit verschiedenen Clients laufen. Derzeit ohne Fhem Anbindung.

- Plex Server auf Windows 8.1
- 1 Client Windows Phone 8.1
- 2 Client Windows 10
- 2 Client Android 4.4
- 1 Client Fire Tv Stick
- 1 Client Samsung UE48H6270

Könnte also plattformübergreifend testen wenn du möchtest.
Was genau möchtest du mit einen Fhem Modul für Plex automatisieren?
Ein Anwendungsfall für mich wäre zb. morgens eine Musik-Playlist im Badezimmer zu starten.

vg
Florian

no_Legend

Es gibt noch plex als distribution für raspberry pi.
Heißt glaub ich rasplex.

Plex auf meinen Samsung (65HU7590) habe ich auch.

Es gibt auch die Möglichkeit ein Apple TV per Proxy über die Trailerapp mit Plex zu verbinden.
Habe ich aber schon länger nicht mehr im Betrieb.

Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Risiko

Hallo Andre,

ich habe auch Interesse an solch einem Modul.
Habe Rasplex und PlexApp auf nem Samsung TV und Android. PlexServer auf Ubuntu 14.04.
Könnte die ein oder andere Sache testen.

Aktuell binde ich zur Visualisierung und Steuerung der Clients die Plex-Web per Iframe ein. Das hat aber auch Nachteile.
Wenn das Modul steht, könnte man dann an eine GUI denken.

Bin auf jeden Fall gespannt, wie es hier weiter geht.

Risiko.

justme1968

was ich eigentlich 'nur' wollte war play/pause events zu bekommen um das licht ein und aus zu schalten bzw. umgekehrt den film anzuhalten wenn jemand das licht an macht.

inzwischen geht: automatisches finden aller clients und server im netz, login zu myplex wenn plex home verwendet wird, blättern in der mediathek (sections,onDeck,nach jahr, nach interpret, album,...), starten eines beliebigen titels von einem beliebigen server auf einem beliebigen client (pht, pmp, iOS und android), abspielen starten, stoppen, pausieren, ...

es sollte mit jedem 'offiziellen' client funktionieren der sich auch über die aktuellen plex handy apps fernsteuern lässt.

was noch nich geht: selber playlisten erstellen/verwalten, ...

was noch kommen soll: erzeugen von fhem devices für die einzelnen clients und server (dann muss man nicht immer überall ip adressen angeben) auswerten der timeline (aktueller abspielstatus) und anzeigen in readings, cover, poster, ...

mal sehen was sich noch automatisieren lässt.

was leider (erst mal) garnicht geht ist eine nachricht von fhem als popup auf dem client anzeigen. das gibt das neue api (noch) nicht her.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maddhin

Helfe auch gerne, da ich Plex praktisch in täglichen Einsatz habe (2 x PMS auf 2x QNAP NAS lokal und remote, iPhone, Desktop PHS, Mac, iPad, Rasplex). Damit sollte man testen können.
Bin allerdings FHEM Anfänger und erst kürzlich stolzer Besitzer eines RPI mit FHEM als Basis für das hoffentlich bald hochfunkionale Smart Home :)

maddhin

Hier mal ne blöde Anfängerfrage: wie kann ich das neue Modul installieren?  :'(

justme1968

nachdem ich es hier gepostet habe kannst du es ins FHEM verzeichnis kopieren.

aber erst dann :)

nächste woche denke ich.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maddhin

super, freue mich darauf!

justme1968

#9
so... anbei eine aller erste test version.

bitte zuerst das perl mode IO::Socket::Multicast installieren. z.b. mit cpan install IO::Socket::Multicast.

ohne das multicast modul werden weder server noch clients automatisch erkannt. das ist aber wichtig das das modul nicht blockierend arbeitet und komplett ohne polling auskommt. das funktioniert nur wenn sich clients und server automatisch melden. es ist zwar zum teil schon funktionalität eingebaut um server und client ip adressen in den defines anzugeben, das ist aber zumindest vorerst noch nicht gut benutzbar. eventuell kommt hier später noch mal etwas.

wie wird das ganze genutzt:

  • anlegen des master devices in fhem: define <plex> plex

  • ungetestet: falls plex home verwendet wird: user und password des myPlex accounts in den beiden entsprechenden attributen setzen. die werte werden intern verschleiert gespeichert und dargestellt. die klartext version bekommt man mit set <plex> showAccount zu sehen.

  • das neu angelegte plex device sollte automatisch alle im netz vorhanden server und clients finden. es sollten entsprechende meldungen im log auftauchen. get <plex> servers und get <plex> clients zeigt was gefunden wurde.

  • durchsuchen der media library: get <plex> ls [<server>] [<key>]
    mit diesem kommando kann man sich durch alle medien hangeln. wenn mehr als ein server vorhanden ist muss dieser mit angegeben werden. ls ohne key listet die Bibliotheken auf oberster ebene. den in der linken spalte angezeigten key kann man verwenden um sich jeweils eine ebene tiefer zu gelangen.

    beispiel: get <plex> ls
      Plex Library
      key                                 type       title
      1                                   artist       Musik
      2                      ...

    wenn der angezeigte key nicht mit einem / anfängt sind wie in einem filesystem jeweils die bisherigen keys und der neue key mit / getrennt aneinander zu hängen.

    get plex ls /1
      Musik
      key                                 type       title
      all                                                All Artists
      albums                                         By Album
      collection                                      By Collection
      decade                                         By Decade
      folder                                           By Folder
      genre                                           By Genre
      year                                             By Year
      recentlyAdded                               Recently Added
      search?type=9                              Search Albums...
      search?type=8                              Search Artists...
      search?type=10                            Search Tracks...

    je nach library stehen auf dieser ebene die unterschiedlichsten filter zur verfügung.

    get plex ls /1/albums
      Musik ; By Album
      key                                                  type       title
      /library/metadata/133999/children   album       ...
      /library/metadata/134207/children   album       ...
      /library/metadata/168437/children   album       ...
      /library/metadata/82906/children     album       ...
      ...

    sobald ein key in der ersten spalte mit einem / anfängt kann er beim ls direkt angegeben werden: get <plex> ls  /library/metadata/133999/children.

  • zu bestimmten medien typen lässt sich mit get <plex> detail [<server>]<key> zusätzliche information anzeigen

  • für die gefunden player wird automatisch ein fhem device angelegt. diese devices enthalten in den internals und readings informationen über den player und den aktuellen abspielt zustand. die fhem devices werden nur angelegt wenn der player aktivität meldet.

  • mit set <player> mirror [<server>] <key> kann der preplay screen zu einem eintrag aufgerufen werden.

  • mit set <player> play [<server>] <key> kommando können einzelne titel abgespielt werden.
    es gibt eine variante des kommandos das über das master device arbeitet: set <plex> <client> play [<server>] <key>

  • pause, play, stop, volume, seekTo <ms> sollten klar sein

  • das ganze ist getestet mit relativ aktuellen version von plex media server, plex home theater und den iOS und android apps. der neue plex media player funktioniert im prinzip auch, hat aber selber noch ein paar probleme und verhaspelt sich manchmal.

  • <server> und <client> können in allen kommandos jeweils als ip adresse, fhem device oder plex machineIdentifier angegeben werden


was noch nicht geht:

  • abspielen von alben oder serien. zur zeit gehen nur die medien auf unterster ebene. ich habe noch nicht verstanden wie play queues funktionieren.
  • play listen
  • das modul sollte nicht auf dem gleichen rechner laufen wie einer der plex clients. sonst gibt es konflikte bei der automatischen erkennung. beim server bin ich mir hier noch nicht sicher.

was noch kommt:

  • eigene filter
  • suchen
  • mehr und bessere readings im player device
  • mehr und besser formatierte ausgaben zu einzelnen medien
  • ...

gruss
  andre

ps: vielleicht mag ja schon mal jemand eine wiki seite anfangen und das hier dorthin übernehmen :)

edit 02.11.2015: aufbereitete ausgabe von get servers und get clients, ausgabe von daten aus myPlex. WICHTIG: diese version geht erst mit einem HttpUtils update vom 03.11.2015

edit 05.11.2015: ein paar kleinere fehler behoben. autodetect ReusePort, multicast bug fix, broadcast eingebaut. WICHTIG: diese version geht erst mit einem HttpUtils update vom 05.11.2015

edit 06.11.2015: neues kommando get <plex> [<server>] search <keywords> um die mediathek nach Schlüsselworten zu durchsuchen

edit 08.11.2015: neues kommando set <player> playAlbum [<server>] <key> spielt ein komplettes album ab. neues kommando get <plex> [<server>] playlists listet die auf dem server vorhanden playlisten auf.mehr geht mit den playlisten noch nicht. ich denke ich habe aber jetzt das prinzip verstanden. erstellen/verändern/abspielen von playlisten kommt bald.

edit 21.11.2015:
- in verbindung mit einem aktuellen fhem werden ls, search und detail kommandos asynchron im hintergrund ausgeführt und das ergebniss erst angezeigt sobald es da ist.

- in verbindung mit einer aktuellen fhemweb version werden die ergebnisse von ls, search und detail provisorisch als html aufbereitet. d.h. wenn man die kommandos aus fhemweb verwendet sind poster zu sehen. keys, alben und künstler sind links über die man sich durch die mediathek klicken kann. in der detail ansicht zu einem titel gibt es links um die Wiedergabe auf allen playern zu starten die gerade online sind.

- neue attribute ignoredClients und ignoredServers

- neues attribut responder: da mit gibt sich fhem als plex player aus und kann mit der plex remote app (zur zeit nur iOS) gesteuert werden. zur zeit werden die kommandos der remote hartcodiert auf einem device mit namen sonos_Esszimmer ausgeführt. d.h. fhem spielt proxy zwischen plex und sonos. in dieser version muss der sonos device name angepasst werden um es zu testen. in der nächsten version wird plex automatisch ein proxy device pro sonos player angeboten.

mit etwas handarbeit kann man die aufrufe an das sonos device auch durch beliebige andere geräte die sich extern steuern lassen und die ein per url gestreiftes mp3 file wiedergeben können ersetzen. vermutlich gibt es noch die ein oder andere stelle die probleme macht, aber prinzipiell kann man damit jedes beliebige gerät an eine plex mediathek hängen.

diese proxy devices erscheinen im netz als mehr oder weniger 'normale' plex player und werden auch vom fhem modul als solche erkannt. d.h. es wird per autocrate ein fhem device dafür angelegt.

es wären also auch solche dinge möglich:
fhem device mit play/pause/... kommandos -> fhem plex proxy -> headless kommandozeilen player auf einem rasberry pi im netz.

das einzige das sich nicht über fhem zaubern lässt wenn das eigentliche device das nicht unterstütz ist die synchrone multiroom wiedergebe. die einzelnen 'fake' plex player sind alle unabhängig voneinander.

- get <plex> [<server>] m3u [album] und get <plex> [<server>] pls [album] liefert für ein album eine playlist im m3u bzw. pls format die mit anderen playern (z.b. sonos) verwendet werden kann.

- diverse weitere neue set und get kommandos

edit 28.11.2015: cover bilder repariert.

edit 31.03.2016: http handling repariert

edit: 08.05.2015: das modul ist inzwischen eingecheckt und wird per update verteilt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maddhin

Super!

War problemlos zu installieren -> DANKE!

"Werde da gleich noch etwas rumspielen", aber zunächst: bei "GET ls" kommt bei mir: "unknown media type".

Als FHEM noob habe weder viel Erfahrung mit FHEM noch kenne ich das XBMC modul... Was mache ich falsch?  :-[

justme1968

was hast du genau eingegeben?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maddhin

eigentlich nichts sondern auf GET <plex> ls geklickt...

habe es auch mit der IP des Servers probiert, aber die gleiche Meldung

maddhin

so doof! -> nach dem Neustart funktioniert es! MEA CULPA!!!

maddhin

Hallo,

ein kleines Feedback:

1. Ein Roku Streaming Stick wird wohl als Client erkannt, ist dann später aber nicht als device/player im plex Raum.

2. Fehlermeldungen im Log:
2015.11.02 23:39:08 2: PMS: http request (http://192.168.2.54:8324/player/timeline/subscribe?protocol=http&port=34269&commandID=95) failed: connect to to http://192.168.2.54:8324 timed out
2015.11.02 23:46:08 2: PMS: http request (http://192.168.2.43:32500/player/timeline/subscribe?protocol=http&port=34269&commandID=4) failed: read from to http://192.168.2.43:32500 timed out
2015.11.02 23:49:58 2: PMS: http request (http://192.168.2.43:32500/player/timeline/subscribe?protocol=http&port=34269&commandID=13) failed: 192.168.2.43: Connection refused
2015.11.03 00:28:17 2: PMS: http request (http://192.168.2.20:32400/resources) failed: read from to http://192.168.2.20:32400 timed out
2015.11.03 00:28:18 2: PMS: http request (http://192.168.2.20:32400/clients) failed: read from to http://192.168.2.20:32400 timed out
2015.11.03 00:34:11 2: PMS: http request (http://192.168.2.43:32500/player/timeline/subscribe?protocol=http&port=34269&commandID=11) failed: 192.168.2.43: Connection refused

Diese Fehlermeldungen erscheinen recht häufig. Weiß nicht, ob diese Bedeutung haben. Scheint sich mit sich selbst zu verbinden zu versuchen <-> ggf. weil Server & Client die selbe IP haben. 192.168.2.20 ist beispeilsweise ein Win 10 mit PMS + PHT, 192.168.2.43 das iPhone. Nur 192.168.2.54 sollte der Roku HDMI-Stick sein = eigentlich kein Server.