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.