MEDIAPORTAL: Neue Version vom 26.2.2018

Begonnen von Reinerlein, 26 Februar 2018, 10:16:00

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

ich habe mal eine neue Version eingecheckt, die noch ein paar Readings mit detaillierten Informationen bzgl. der aktuellen Wiedergabe befüllt (z.B. Staffel-Nr und Folge-Nummer einer Serienfolge).

Damit habe ich mir z.B. eine Übertragung des Watched-Status (wenn es gerade geguckt wird) in Richtung meines Plex-Servers gebaut :)

Detaillierte Liste:

  • Es gab einen Fehler bei der prozentualen Positionsberechnung. Nun wird ein Dezimalbruch zwischen 0.0 und 100.0 ausgegeben, den man mit dem Attribut "PositionPercentFormat" z.B. auch auf mehrere Nachkommastellen formatieren kann.
  • Heartbeat und 3facher Verbindungsversuch wurden wieder abgeschafft, da es keinen Vorteil gebracht hat.
  • Der Verbindungsaufbau über die Fhem-Schnittstelle DevIO wird nun sauber durchgeführt und gehalten, sodass das Wiederverbinden sauber klappt
  • Einige neue Readings, um bei den verschiedenen Quellen auch die echten Quell-Infos zu erhalten (und nicht nur einen zusammengesetzten Titel)

Wie immer ab sofort im SVN, oder ab Morgen per update...

Hier noch kurz für diejenigen, die sich für die Übertragung des Watched-Zustands interessieren:

([wohnzimmer_Mediaportal:PositionPercent] > 85.0 and [wohnzimmer_Mediaportal:IsPlaying] eq "true") {
  if ('[wohnzimmer_Mediaportal:mediaType]' eq 'movie') {
    Log3 "$SELF", 4, "Movie Search for: [wohnzimmer_Mediaportal:movieTitle]";

    my $idQuestion = CommandGet(undef, "plex search [wohnzimmer_Mediaportal:movieTitle]");
    Log3 "$SELF", 4, "Movie-IDQuestion-Answer: ".Dumper($idQuestion);
    my $id = $1 if ($idQuestion =~ m/(\/library\/metadata\/\d+) +?movie/i);

    Log3 "$SELF", 4, "Movie-ID: $id" if (defined($id));
    CommandSet(undef, "plex watched $id") if (defined($id));
  } elsif ('[wohnzimmer_Mediaportal:mediaType]' eq 'series') {
    Log3 "$SELF", 4, "Series Search for: [wohnzimmer_Mediaportal:seriesName] S[wohnzimmer_Mediaportal:seriesSeason]E[wohnzimmer_Mediaportal:seriesEpisode] - [wohnzimmer_Mediaportal:seriesTitle]";
    my $idShow = CommandGet(undef, "plex search [wohnzimmer_Mediaportal:seriesName]");
    Log3 "$SELF", 4, "Series-IDShow-Answer: ".Dumper($idShow);
    $idShow = $1 if ($idShow =~ m/(\/library\/metadata\/\d+\/children) +?show/i);

    my $idSeason = CommandGet(undef, 'plex ls '.$idShow);
    Log3 "$SELF", 4, "Series-IDSeason-Answer: ".Dumper($idSeason);
    my $season = '[wohnzimmer_Mediaportal:seriesSeason]';
    $idSeason = $1 if ($idSeason =~ m/(\/library\/metadata\/\d+\/children) +?season +?Season $season/i);

    my $idEpisode = CommandGet(undef, 'plex ls '.$idSeason);
    Log3 "$SELF", 4, "Series-IDEpisode-Answer: ".Dumper($idEpisode);
    my $episode = '[wohnzimmer_Mediaportal:seriesEpisode]';
    $idEpisode = $1 if ($idEpisode =~ m/(\/library\/metadata\/\d+) +?episode +?$episode/i);

    Log3 "$SELF", 4, "Series-IDEpisode: ".$idEpisode if (defined($idEpisode));
    CommandSet(undef, "plex watched $idEpisode") if (defined($idEpisode));
  }
} DOELSE

"wohnzimmer_Mediaportal" ist mein Mediaportal-Device.
"plex" ist mein Plex-Zentraldevice.
Und ja, hinter dem letzten DOELSE kommt nichts mehr, und es muss trotzdem dort stehen...
Bei mir soll nach 85% gesehen der Zustand im Plex gesetzt werden, und es werden nur Filme oder Serien berücksichtigt...

Für mich war die Umsetzung als DOIF am einfachsten, da es beim durchgehenden schauen nur einmal getriggert wird. Nur zur Info: Wenn man hinter der 85%-Grenze Pausiert, wird beim Wiederanstarten der Watched-Status nochmal gesetzt...

Grüße
Reinerlein