plex und fhem

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

Vorheriges Thema - Nächstes Thema

tenya

Zitat von: justme1968 am 03 November 2015, 09:12:07
@tenya: was ist denn das für eine platform? das geht tief im socket modul schief. bitte ändere mal im modul ReusePort=>1 auf ReusePort=>0. kommt mehrfach vor.
gruss
  andre

danke das hat jetzt erstmal funktioniert. Ich dachte erst es liegt an einem alten Kernel aber das Raspian ist auf 4.1.
Mir kommt es primär auch auf Play/Pause Funktion an das hat jetzt am FireTV funktioniert. Den Rasplex muss ich noch manuell bekannt machen.
Demnächst wird noch ein AppleTV 4 als Player einziehen - die App wurde ja nun veröffentlicht.

justme1968

@maddhin: ich habe vielleicht eine idee woran es liegt wenn die subscription nicht geht. ohne den machineIdentifier im request kann es sein das der client das ganze ignoriert. ich verstehe aber nicht warum der machineIdentifier nicht da ist. er taucht an allen möglichen stellen auf. kannst du bitte mal ein list auf das pms device machen?

den status bekommst du ganz normal wie sonst auch in fhem über ein notify.

@tenya: ich habe inzwischen eingebaut das das vorhanden sein von ReusePort automatisch erkannt wird.

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

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

maddhin

Hallo Andre,

anbei das list. Habe einige Werte, die mir sensibel erschienen (PW, etc) geändert.



Internals:
   HAS_IO::Socket::Multicast 1
   NAME       PMS
   NR         65
   NTFY_ORDER 50-PMS
   STATE      ???
   TYPE       plex
   commandID  25
   token      Zsxxxxxxx7t
   Clients:
     192.168.2.20:
       address    192.168.2.20
       contentType plex/media-server
       host       e3f9a4d771bf4a4daafbxxxxxxxxx.plex.direct
       name       PrecisionM4500
       online     1
       port       32400
       resourceIdentifier 53cdeff0c090xxxxxxxxxxxxxxxx84d4ea9
       updatedAt  1446630703.26401
       version    0.9.12.16.1509-8e31408
     192.168.2.54:
       address    192.168.2.54
       deviceClass stb
       host       192.168.2.54
       machineIdentifier Plex2LA54K072729
       name       Roku Stick - 2LA54K072729
       online     1
       platform   Roku
       platformVersion 6.2 build 6005
       port       8324
       product    Plex for Roku
       protocol   plex
       protocolCapabilities timeline,playback,navigation,playqueues
       protocolVersion 1
       title      Roku Stick - 2LA54K072729
       updatedAt  1446640290.45996
       version    4.0.5
   Helper:
     Discoverclients:
       FD         19
       NAME       PMS:clientDiscovery
       NR         73
       PNAME      PMS
       PORT       32412
       STATE      discovering
       TEMPORARY  1
       TYPE       plex
       broadcast  1
       interval   10
       Phash:
     Discoverclients2:
       FD         20
       NAME       PMS:clientDiscovery2
       NR         74
       PNAME      PMS
       PORT       32413
       STATE      discovering
       TEMPORARY  1
       TYPE       plex
       broadcast  1
       Phash:
     Discoverclients3:
       FD         21
       NAME       PMS:clientDiscovery3
       NR         75
       PNAME      PMS
       PORT       32415
       STATE      discovering
       TEMPORARY  1
       TYPE       plex
       broadcast  1
       Phash:
     Discoverserver:
       FD         18
       NAME       PMS:serverDiscovery
       NR         72
       PNAME      PMS
       PORT       32414
       STATE      discovering
       TEMPORARY  1
       TYPE       plex
       broadcast  1
       interval   10
       Phash:
     Timelinelistener:
       CONNECTS   25
       FD         22
       NAME       PMS:timelineListener
       NR         76
       PNAME      PMS
       PORT       45971
       STATE      accepting
       TEMPORARY  1
       TYPE       plex
       interval   30
       Connections:
       Phash:
       Subscriptions:
         192.168.2.54 192.168.2.54
   Myplex-devices:
     publicAddress xxx.xxx.xxx.155
     Device:
       HASH(0xxxxx8)
       HASH(0x1xxxxxx18)
       HASH(0x1fxxx)
       HASH(0x1exxxx)
       HASH(0x1xxxx8)
       HASH(0x1fxxx40)
       HASH(0x1fxxxx88)
       HASH(0x2xx50)
       HASH(0x1xxxfaf8)
       HASH(0x1f47xxxx)
       HASH(0x1f47dc8)
       [+ weitere HASH Einträge]
   Myplex-servers:
     friendlyName myPlex
     identifier com.plexapp.plugins.myplex
     machineIdentifier 6bcc2dccbxxxxxxxxxxx7ac8546
     size       1
     Server:
       HASH(0x2xxxxx)
   Servers:
     192.168.2.20:
       address    192.168.2.20
       contentType plex/media-server
       host       e3f9a4xxxxxxxxxxxxx.plex.direct
       name       PrecisionM4500
       online     1
       port       32400
       resourceIdentifier 53cdeff0c09xxxxxx511384d4ea9
       updatedAt  1446641008.99098
       version    0.9.12.16.1509-8e31408
     192.168.2.30:
       address    192.168.2.30
       contentType plex/media-server
       host       dc6xxxxxxxxx9ee929e5b.plex.direct
       name       NASMT
       online     1
       port       32400
       resourceIdentifier 75exxxxxxxxxxxxx420421c0a2fb13b
       updatedAt  1446641008.93711
       version    0.9.12.16.1509-8e31408
Attributes:
   password   crypt:xxxxxxxxxxxxxxxxx
   room       plex
   user       crypt:xxxxxxxxxxxxxxxx


Risiko

Zitat von: justme1968 am 03 November 2015, 09:12:07

@Risiko: hast du die myPlex zugangsdaten im master device angegeben? was gibt ein get clients?
gibt es im log eine discovered: meldung wenn der player online kommt?
Nein habe keine myPlex Daten angegeben.
Ja es gibt die Meldung:

Plex: client discovered: 192.168.178.26

Ein get clients liefert:

$VAR1 = {
          'resourceIdentifier' => 'd53f831b-9565-46cf-a4c7-b32bc9035106',
          'platform' => 'Linux',
          'machineIdentifier' => 'd53f831b-9565-46cf-a4c7-b32bc9035106',
          'host' => '192.168.178.26',
          'name' => 'RasPlex',
          'contentType' => 'plex/media-player',
          'address' => '192.168.178.26',
          'version' => '0.7.0',
          'online' => 1,
          'platformVersion' => ' (#1 Wed Jul 8 19:28:36 2015)',
          'product' => 'plexhometheater',
          'protocolCapabilities' => 'navigation,playback,timeline,mirror,playqueues',
          'port' => '3005',
          'deviceClass' => 'HTPC',
          'protocol' => 'plex',
          'title' => 'RasPlex',
          'protocolVersion' => '1'
        };

Das mit dem autocreate ist mir nicht so wichtig, da es mit dem manuellem Anlegen funktioniert.

Zitat von: justme1968 am 03 November 2015, 09:12:07
es muss detail heissen nicht details :(
Ok. In der Dropdown-Box von FHEMWEB und der Fehlermeldung steht details.
Was ist nun mit der Aktualisierung der Readings? Diese werden nicht automatisch aktualisiert. Auf diese Frage bist du leider nicht eingegangen. :-[
Gibt es schon eine Möglichkeit an die Zusatzinformationen wie Coverbild, etc zu kommen. In detail ist das nicht mit dabei?

Vielen Dank und weiter so.

maddhin

Ich habe gestern etwas "rumgespielt" und beispielsweise das Licht auszuschalten wenn ein Player etwas abspielt.

Zumindest in meinem Setup funkioniert das noch nicht richtig. Mal wird e.g. das iPhone & der Status sofort erkannt, mal bleibt das iPhone komplett 'disappeared' selbst nach FHEM Neustart und manuellem 'discover'.

Mit PHT (habe die Userdaten hinterlegt) scheint das besser zu funktioneren, aber auch nicht richtig, so wird beispielsweise der Player erkannt aber der Status bleibt bzw. geht auf 'pause' obwohl ein Video abgespielt wird.

Roku, wie erwähnt.

Das ist jetzt ein eher unspezifischer 'es geht nicht' Thread aber ich wollte es erwähnen. Sobald ich hier ein Muster erkenne, werde ich es melden.

Im Moment habe ich die Vermutung, dass das Modul zwar funktioniert, wenn sich Player 'neu' (beim Module und PMS) anmelden und dann etwas abspielen, aber das Modul ein Problem hat wenn es 'erst später' d.h. wenn z.B. Player schon spielen gestartet wird. In dem 'Player schon gestartet und das Modul kommt hinzu' -Modus scheint irgendetwas zu hängen/blockieren und diese Status halten sich recht hartnäckig. Mein iPhone war 'disappeared' über 3-4 Neustarts bis es dann 'plötzlich' wieder funkioniert hat.

Wenn das nur bei mir so ist, sind das vielleicht nur Erscheinungen, die nur kurz nach dem Starten von FHEM auftauchen und nach einer gewissen Zeit verschwinden. Ggf. liegt dies an einem Abfrageintervall oder an welchem Server sich der device anmeldet (habe im Netzwerk 2 Server, einer permanent/NAS und einer temp via Win10).

justme1968

also: es gibt zwei dinge die auf jeden fall funktionieren müssen dammit das modul wie vorgesehen funktioniert:
- die player müssen automatisch erkannt werden. ich habe einen kleinen fix eingebaut der das für pmp und iOS verbessern sollte. das geschieht durch udp multicast über die gruppe 239.0.0.250. ich habe inzwischen rausgefunden das sie die roku player scheinbar probleme mit multicast haben und statt dessen broadcast auf die ...255 des lokalen netzes verwenden. hier würde wireshark helfen.

- die subscription für die timeline muss funktionieren. darüber kommt der aktuelle status des players. das geht nur wenn ich den machineIdentifier habe. den habe ich normalerweise nur wenn die erkennung geht. wenn die subscription erfolgreich ist gibt es readings zum aktuellen titel inklusive cover, volume und abspielstatus.

bei mir funktioniert beides absolut zuverlässig egal wie oft ich welchen player starte oder stoppe. das einzige problem das ich bei mir sehe ist das ein plex server der nachträglich ins netz komme noch als client erkannt wird. wenn der server läuft bevor das fhem modul gestartet wird passt alles. da bin ich noch dran. pht wird sofort erkannt da es sich selber meldet, die anderen player inklusive iOS und android app werden spätestens nach 10 sekunden erkannt da zur zeit die multicast nachricht zum suchen nur alle 10 sekunden gesendet wird. mit verbose 4 oder 5 sollte man das auch im log sehen.

für das manuelle abfragen von zusatzinformation bin ich noch am überlegen wie das am besten passieren kann. zur zeit ist das die stelle an der noch blockierend gefragt wird um die antwort auch anzuzeigen.

ich habe hier: http://forum.fhem.de/index.php/topic,43052.msg353477.html#msg353477 ein kleines update hoch geladen.

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

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

maddhin

Danke, Andre! Ich muss das nochmal testen aber es kann gut sein, dass das das 2. Server Problem ist.


Gesendet von iPhone mit Tapatalk

justme1968

bitte testet mal die beiden folgenden kleinen perl programme:

jeweils in ein file schreiben und mit perl <filename> starten. es müsste dann von jedem gerade erreichbaren player eine antwort kommen. nach ein paar sekunden kann man das programm dann abbrechen. wenn mit der broadcast version eine antwort kommt bitte auch mal die 255.255.255.255 in die broadcast adresse eures nettes ändern. meist x.y.z.255.

vor allem beim roch stick bin ich gespannt ob und auf welche der beiden varianten eine antwort kommt.

gruss
  andre

broadcast:
#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;

$| = 1;

my $socket = new IO::Socket::INET ( Proto => 'udp', Broadcast => 1, ) or die "ERROR in Socket Creation : $!\n";

my $hispaddr = sockaddr_in(32412, inet_aton('255.255.255.255'));

print "broadcast:\n";
$socket->send("M-SEARCH * HTTP/1.1", 0, $hispaddr) or die "ERROR: send failed : $1\n";

while( 1 ) {
my ($datagram,$flags);
#$flags = MSG_DONTWAIT;
$socket->recv($datagram,1024,$flags);
print "Got message from ", $socket->peerhost, ":", $socket->peerport, ", flags ",$flags || "none",": $datagram\n";
}


multicast:
#!/usr/bin/perl -w

use strict;
use warnings;
use IO::Socket::Multicast;

$|++;

my $message = IO::Socket::Multicast->new(Proto => 'udp', Timeout => 5)
  or die "Can't make UDP socket: $@";
#$message->mcast_add('239.0.0.250') || die "Couldn't set group: $!\n";

print "multicast:\n";
$message->mcast_send("M-SEARCH * HTTP/1.1", '239.0.0.250:32412');

while( 1 ) {
my ($datagram,$flags);
#$flags = MSG_DONTWAIT;
$message->recv($datagram,1024,$flags);
print "Got message from ", $message->peerhost, ":", $message->peerport, ", flags ",$flags || "none",": $datagram\n";
}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

#38
ich habe jetzt ins modul zusätzlich zum multicast auch noch broadcast eingebaut da ich gemerkt habe das die erkennung des iOS players per multicast nur von einem mac aus zuverlässig funktioniert hat. von einem linux rechner aus ging es nur mit broadcast.

vielleicht löst das auch das problem den roku stick (und den rasplex player) zu erkennen.

@Risiko: das autocreate an sich ist zwar nicht wichtig, aber wenn das automatische erkennen eines players (das eben auch indirekt zum autocreate verwendet wird) nicht funktioniert dann funktioniert auch das subscribe für die timeline nicht und die readings werden nicht aktualisiert.

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

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

Risiko

#39
Ok. Danke für die Infos.
Werde morgen die neue Version testen

Bekomme jetzt die Fehlermeldung:

use of uninitialized value in subroutine entry at ./FHEM/37_plex.pm line 100.
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ./FHEM/37_plex.pm line 100

und FHEM stürzt ab.

justme1968

es gibt hier: http://forum.fhem.de/index.php/topic,43052.msg353477.html#msg353477 ein kleines update. neu ist das search kommando für eine freitext suche in der mediathek.

@Risiko: du kannst die zeile erst mal komplett auskommentieren. die wird intern noch nicht weiter benutzt.

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

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

Risiko

Hallo andre,

habe die letzte Version getestet. Leider kein Unterschied betreffs dem Rasplex Client.
Das search funktioniert.
Anbei ein list.
Was könnte ich dir noch liefern\beitragen?

justme1968

bitte nimm mal die beiden kleinen test programme oben und schau ob sie was ausgeben. wenn da nichts kommt würde es helfen wenn du per wireshark mal mitschneiden kannst ob und wie die handy app den player findet.

geht es den player per Hand auf online zu schalten wie oben beschrieben?

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

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

der-Lolo

Hallo Andre,
ich hab zwar jetzt nicht die zeit und die muse mich mit solchen konstrukten auseinander zu setzen, frage mich aber ob du Sonos und Plex verknüpft hast...

Risiko

Zitat von: justme1968 am 07 November 2015, 12:06:07
bitte nimm mal die beiden kleinen test programme oben und schau ob sie was ausgeben. wenn da nichts kommt würde es helfen wenn du per wireshark mal mitschneiden kannst ob und wie die handy app den player findet.
Hallo.
Bekomme bei beiden (multicast und broadcast) jeweils genau eine Antwort.

Got message from 192.168.178.26:32412, flags none: HTTP/1.0 200 OK
Content-Type: plex/media-player
Resource-Identifier: d53f831b-9565-46cf-a4c7-b32bc903xxxxx
Device-Class: HTPC
Name: RasPlex
Port: 3005
Product: plexhometheater
Protocol: plex
Protocol-Capabilities: navigation,playback,timeline,mirror,playqueues
Protocol-Version: 1
Version: 0.7.0

Bei broadcast musste ich allerdings die IP auf mein Netz anpassen. Mit 255.255.255.255 ging es nicht.
Zitat von: justme1968 am 07 November 2015, 12:06:07
geht es den player per Hand auf online zu schalten wie oben beschrieben?
Ja scheint zu gehen.

Clients:
     192.168.178.26:
       address    192.168.178.26
       contentType plex/media-player
       deviceClass HTPC
       host       192.168.178.26
       machineIdentifier d53f831b-9565-46cf-a4c7-b32bc9035xxx
       name       RasPlex
       online     1
       platform   Linux
       platformVersion  (#1 Wed Jul 8 19:28:36 2015)
       port       3005
       product    plexhometheater
       protocol   plex
       protocolCapabilities navigation,playback,timeline,mirror,playqueues
       protocolVersion 1
       resourceIdentifier d53f831b-9565-46cf-a4c7-b32bc90xxxx
       title      RasPlex
       updatedAt  1446915297.61626
       version    0.7.0

Der Client selber (manuell angelegt nicht per autocreate) ist aber disappeared

DEF        d53f831b-9565-46cf-a4c7-b32bc9035106
   NAME       RasPlex
   NR         17
   NTFY_ORDER 50-RasPlex
   STATE      disappeared
   TYPE       plex
   deviceClass HTPC
   hostname   kvmhost
   id         8673fc435843d259eb4d4d88d6exxxx
   machineIdentifier d53f831b-9565-46cf-a4c7-b32bc903xxxx
   platform   Linux
   platformVersion  (#1 Wed Jul 8 19:28:36 2015)
   product    plexhometheater
   protocolCapabilities navigation,playback,timeline,mirror,playqueues
   version    0.7.0
   Readings:
     2015-11-05 18:30:18   presence        present
     2015-11-05 18:30:11   state           disappeared

Erst wenn ich manuell die timeline abfrage, wird auch der state passend geändert.
Werde mir wohl doch mir mal wireshark ansehen müssen, oder hat du noch eine Idee?