FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: Reinerlein am 26 Februar 2018, 10:16:00

Titel: MEDIAPORTAL: Neue Version vom 26.2.2018
Beitrag von: Reinerlein am 26 Februar 2018, 10:16:00
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:

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