Plex per FHEM und Loxone ins Smart Home integrieren

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Wie man an den Blogposts der letzten Jahre¬†unschwer erkennen kann, besch√§ftige ich mich neben klassischen Smart-Home-Themen auch mit Multimedia-Anwendungen. Bis vor Kurzem¬†war die¬†Verzahnung dieser Bereiche jedoch – zumindest bei mir – noch nicht vollst√§ndig. Das hat sich durch das neue¬†FHEM-Modul namens „plex“ in der Zwischenzeit zum Gl√ľck ge√§ndert.

Jetzt¬†lassen sich nicht nur einzelne Plex Clients per FHEM und Loxone fernsteuern oder¬†der Plex Media Server zu einem manuellen Update der Bibliothek bewegen, sondern endlich auch¬†Statusinformationen der Plex-Clients in Echtzeit mitlesen. Beim Filmstart l√§sst sich damit die¬†Beleuchtung automatisch herunterdimmen und beim Filmende¬†wieder zur√ľcksetzen. Was ich¬†bisher in Kombination mit FHEM und Loxone umgesetzt habe, ist Inhalt des nachfolgenden Blogpost.

Plex Clients – Statusinformationen auslesen

Am FHEM-Modul von justme1968 wird aktuell noch kräftig geschraubt, die relevanten Grundfunktionen sind aber bereits jetzt vorhanden. An dieser Stelle vielen lieben Dank an Andre, den netten Entwickler des Moduls, mit dem ich mittlerweile auch direkt in Kontakt bin.

Damit das FHEM-Modul funktioniert, muss erst einmal auf dem System (hier ein RPI 3 (Affiliate-Link) mit Jessie, wie hier beschrieben) die Erweiterung „Multicast“ per Konsole nachinstalliert werden.

sudo apt-get install libio-socket-multicast-perl

Danach die FHEM-Kommandozeile im Webinterface folgenden Befehl einf√ľgen

define Plex plex

und mit Enter best√§tigen, um das globale „Plex“-Device in FHEM zu definieren.

Kurze Zeit sp√§ter sollten die¬†Clients auch schon per Autodiscovery hinzugef√ľgt und im Raum „plex“ zu finden sein.

Die Clients bekommen als Bezeichnung dabei ihre eindeutige Plex-ID (machineIdentifier) Рhier z.B. 46h4yvj1s0k7lul6z8v9009 Рverpasst, was etwas unschön ist. Deshalb am besten direkt per FHEM-Konsolenbefehl umbenennen.

rename 46h4yvj1s0k7lul6z8v9009 SZ.PMP

In der Device-Detailansicht l√§sst sich dann auch das¬†vorher¬†automatisch vergebene „alias“ l√∂schen, das jetzt durch die Anpassung des Device-Namens nicht mehr ben√∂tigt wird.

fhem-modul-plex-geraeteuebersicht

Um alle erkannten Clients anzuzeigen, kann auch der Befehl

get Plex clients

genutzt werden.

fhem-get-plex-clients

Manchmal kann es dabei dauern, bis alle Clients gefunden werden. Spätestens nach einer aktiven Wiedergabe sollte der Client aber auftauchen.

Dabei kann es auch vorkommen, dass auch Clients auftauchen und als Devices angelegt werden, die man gar nicht m√∂chte. In diesem Fall kann das nicht gew√ľnschte Device-Namen der Clients – hier „jays6“ und „f66dwo6amd“¬†– mit nachfolgendem Befehl dauerhaft ignoriert werden:

attr Plex ignoredClients jays6s,f66dwo6amd

Wer das zentrale FHEM-Plex-Device bei¬†myPlex registrieren m√∂chte – sp√§ter wichtig zur Einbindung von¬† Plex Servern, die bei myPlex angemeldet¬†sind – f√ľgt diesen FHEM-Konsolenbefehl aus:

get Plex pin

Der im Pop-Up angezeigte Pin wird dann unter https://www.plex.tv/pin eingetragen. Ab sofort kann das FHEM-Plex-Device auf alle myPlex-Geräte zugreifen.

Das l√§sst sich mit nachfolgendem¬†FHEM-Konsolenbefehl √ľberpr√ľfen:

get Plex servers

Jetzt sollten alle verf√ľgbaren Server, sowohl lokal als auch √ľber myPlex erreichbar – aufgelistet werden.

fhem-get-plex-servers

Auch sollte neben dem vergebenen Servernamen dessen „machineIdentifier“ angezeigt werden. Dieser kann genutzt werden, um den jeweiligen Server in FHEM als eigenes Device anzulegen. Hierbei ist es n√§mlich so, dass ausschlie√ülich Clients automatisch in FHEM angelegt werden.

Server m√ľssen hingegen manuell hinzugef√ľgt werden. Das funktioniert dann mit dem FHEM-Konsolenbefehl

set Plex autocreate 46h4yvj1s0k7lul6z8v9009

Der klobige Servername kann jetzt – wie oben beim Client auch – per rename-Befehl umbenannt werden:

rename 46h4yvj1s0k7lul6z8v9009 PMSEN

Alternativ k√∂nnen lokale Server aber auch direkt √ľber Ihre IP-Adresse mit dem Befehl

define PMSEN plex 192.168.3.58

hinzugef√ľgt werden.

Um alle √Ąnderungen dauerhaft zu speichern, jetzt noch im FHEM-Interface direkt auf „Save config“ (links oben) klicken.

Aber zur√ľck zum Client, in diesem Fall ein PMP auf Intel NUC-Basis, wie er im Artikel Intel NUC Skylake: HowTo zum perfekten PLEX-Client f√ľrs Heimkino vorgestellt wurde.

FHEM hat jetzt mehrere interessante Readings, die sp√§ter f√ľr Automatisierungszwecke genutzt werden k√∂nnen. Dazu z√§hlt bspw. „presence“, um zu visualisieren, ob der Client verf√ľgbar ist. Im Reading „currentTitle“ wird der aktuelle Titel angezeigt und im Reading „cover“ sogar die URL, unter der das entsprechende Coverbild zwecks Visualisierung aufgerufen werden kann.

F√ľr das nachfolgende Beispiel wird der Status („state“) genutzt, welcher den aktuellen Wiedergabestatus¬†abbildet.

Folgende Werte können dabei genutzt werden:

  • disappeared
  • stopped
  • video:paused
  • video:buffering
  • video:playing

Damit kann man direkt in FHEM Schaltbefehle auslösen, um bspw. die eingebundene Deckenlampe beim Wiedergabestart eines Videos auf 20% zu dimmen:

define SZMoviePlaying notify SZ.PMP.video.playing set SZ.Deckenlampe 20

Beim Stoppen eines Videos kann die Deckenlampe dann wieder auf 50% gedimmt werden:

define SZMovieStopped notify SZ.PMP.stopped set SZ.Deckenlampe 50

An dieser Stelle macht es nat√ľrlich Sinn je nach Anwendungsfall¬†die Befehle mit weiteren Bedingungen aufzur√ľsten, damit die Beleuchtung nur in ganz bestimmten F√§llen (z.B. bei Dunkelheit etc.) geschaltet wird. Hier kann sich jeder selbst austoben und seine L√∂sung gerne per Kommentar mitteilen.

Alle relevanten get-, set- und sonstigen Befehle befinden sich in der¬†FHEM-Commandref f√ľr Plex.

Ich selbst verzichte an dieser Stelle auf jegliche Notify-Anweisungen, da ich die Client-Infos per UDP/HTTP an Loxone weitergebe und von dort aus die weiteren Regeln definiere. Wie ich hier vorgehe, ist nachfolgend beschrieben.

Client-Daten an Loxone weitergeben

Alle Grundlagen dazu sind im Artikel¬†Integration: Daten zwischen Loxone und FHEM austauschen¬†und dessen Nachfolgeposts ausf√ľhrlich beschrieben.

Hier deshalb nur der genutzte Code aus der 99myUtils.pm:

#PMPToLoxone
#device:
#1 presence (present, absent)
#2 state (disappeared, stopped, video:paused, video:buffering, video:playing)
sub PMPToLoxone($)
{
 my ($device) = @_;
 my $presence = ReadingsVal("$device","presence","-1");
 if ($presence eq "absent") {
  $presence = "0";
 }
 if ($presence eq "present") {
  $presence = "1";
 }
 my $state = ReadingsVal("$device","state","-1");
 if ($state eq "disappeared") {
  $state = "0";
 }
 if ($state eq "stopped") {
  $state = "1";
 }
 if ($state eq "video:paused") {
  $state = "2";
 }
 if ($state eq "video:buffering") {
  $state = "3";
 }
 if ($state eq "video:playing") {
  $state = "4";
 }
 UDP_Msg("192.168.3.11" , "7000" , "$device:plex $presence $state");
}

Der passende Trigger in der fhem.cfg sieht so aus:

define PMPToLoxone notify .*PMP.* {PMPToLoxone("$NAME")}

Client-Daten in Loxone nutzen

In Loxone werden die √ľbermittelten Informationen per virtuellem UDP-Eingang umgesetzt. F√ľr SZ.PMP.1.present lautet die Befehlskennung

SZ.PMP:plex \v

F√ľr SZ.PMP.2.state dann entsprechend

SZ.PMP:plex \# \v

Denn hier¬†ist da der zweit √ľbergebene Wert relevant.

fhem-modul-plex-geraeteuebersicht

Den derzeitig abgespielten Titel habe ich zus√§tzlich noch versucht per virtuellem HTTP-Eingang von FHEM¬†an SZ.PMP.Title (in Loxone unter Anschluss VTI1 gef√ľhrt)¬†zu √ľbertragen. Dabei bin ich aber kl√§glich gescheitert, da ich in FHEM den Wert als Variable einfach nicht per wget oder curl in einem notify √ľbertragen konnte…¬†Wer das schon geschafft hat, bitte einen Beispielcode per Kommentar mitteilen.

Hier der entsprechende Ansatz in der 99_myUtils.pm, der noch nicht passt:

#PMPTitleToLoxone
sub PMPTitleToLoxone($)
{
my ($device) = @_;
system("curl -s 'http://admin:password@192.168.3.11/dev/sps/io/VTI1/TITLE'");
}

Statt TITLE¬†muss eben das Reading currentTitle verwendet¬†werden…

my $TITLE = ReadingsVal("$device","currentTitle","-1");

Aber zur√ľck zu Loxone…

Durch ein Status-Element werden die √ľbertragenen UDP-Elemente aufbereitet.

loxone-status-pmp-schlafzimmer

Wenn der PMP nicht offline ist und eine Wiedergabe läuft (Play (Video)) oder gerade noch gestartet wird (Buffering (Video)), wird der Statuswert des Ausgangs auf 1 geschaltet.

Dieser Wert wird dann per Merker weitergereicht an eine doch etwas komplexere Steuerung.

loxone-lichtsteuerung-schlafzimmer-inkl-pmp-autolicht

Hier noch der Status PMP Autolicht im Detail:

loxone-lichtsteuerung-schlafzimmer-status-autolicht

In diesem Konstrukt geht es im Grund „nur“ darum, dem Lichtsteuerungmodul einen Impuls bei Filmstart (Lichtszene 2 – Movie) bzw. bei Filmstop (Lichtszene 1 – Chill) zu verpassen, um bspw. die angeschlossenen Philips hue-Lampen (Affiliate-Link)¬†anzusteuern. Mehr Infos dazu im Blogpost Philips hue – So klappt die Integration in Loxone.

Dabei sollen jedoch einige Regeln beachtet werden.¬†So soll beim Filmstart nur auf Lichtszene 2 geswitcht werden, wenn die aktuelle Lichtszene 1 ist. Beim Filmstop dann entsprechend wieder zur√ľck auf Lichtszene 1, wenn die aktuelle Lichtszene 2 ist. Das soll verhindern, dass bei einem zwischenzeitlichen manuellen √Ąndern der Lichtszene diese nicht auomatisch ge√§ndert wird. Insgesamt gibt es hier sicherlich noch Nachbesserungsbedarf. Das obige Beispiel soll deshalb eher als¬†Ideengeber angesehen werden und nicht als fertige L√∂sung, die man 1:1 √ľbernehmen kann.

Aus meinem täglichen Leben

Wirklich spannend wird das vernetzte Smart Home erst¬†durch solche Zusatzfeatures (man k√∂nnte es auch Spielereien nennen), die bspw. auch die Multimediasteuerung in das Gesamtkonzept einbeziehen. Plex bietet in diesem Kontext¬†auf Schnittstellenebene die besten Voraussetzungen, die gl√ľcklicherweise auch in¬†FHEM mittlerweile genutzt werden k√∂nnen. So lassen ich neben dem aktuellen Play-Status mit dem plex-Modul f√ľr FHEM noch zig andere¬†interessante Dinge anstellen, wie bspw. mit FHEM die Library-Elemente des Plex Servers browsen und Watchlists erzeugen.

Neben der reinen Anbindung muss man sich dann¬†noch darum k√ľmmern, passende Szenarien umzusetzen. Was soll bspw. wann passieren, wann macht es Sinn die Beleuchtung in welchen Modus zu versetzen. Vielleicht macht es ja auch Sinn die Jalousien per HomeMatic Rolladenaktor (Affiliate-Link) runterzufahren, um f√ľr eine passende Beschattung zu sorgen – mehr Infos im Blogpost Smart-Home-Rolladensteuerung mit FHEM und Loxone: Howto und Praxistipps f√ľr Nachr√ľster. Hier muss man wohl schon ein wenig herumprobieren, um das passende Setting zu finden. Aber ich denke es lohnt sich allemal…

Noch auf der Suche nach dem passenden Plex-Client? Dann hier weiterlesen:¬†Intel NUC Skylake: HowTo zum perfekten PLEX-Client f√ľrs Heimkino

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Verpasse keine Inhalte mehr! Trage dich in den Newsletter ein und folge uns auf Facebook.

Was ist ein Affiliate-Link? Wenn du auf einen Affiliate-Link klickst und √ľber diesen Link einkaufst, bekomme ich vom betreffenden Online-Shop oder Anbieter eine Provision, was mich u.A. bei den laufenden Kosten den Blogs unterst√ľtzt. F√ľr dich ver√§ndert sich der Preis nicht.

Jörg

hat meintechblog.de ins Leben gerufen, um seine Technikbegeisterung und Erkenntnisse zu teilen. Er veröffentlicht regelmäßig Howtos in den Bereichen Smart Home und Home Entertainment. Mehr Infos

11 Gedanken zu „Plex per FHEM und Loxone ins Smart Home integrieren“

    1. Na wenn ich mir die aktuelle Strategie von Loxone im Forum dort anschaue, dann w√ľrde ich es bevorzugen, wenn hier auch mal wieder weniger Loxone-lastig berichtet w√ľrde. Ansonsten wie immer sehr interessant!
      Gruß
      Harald

    2. Hi Harald,
      danke f√ľr deinen Input!
      Loxone ist durch seinen Schritt die Modbus-Schnittstelle k√ľnstlich zu beschneiden meiner Meinung nach zurecht in die Kritik geraten. Auch wenn das aus meiner Sicht ein Nogo ist und die Kommunikationskultur von Loxone in dieser Hinsicht auch echt mies war, sollte man das ganze Thema auch nicht unbedingt √ľberbewerten.
      Es ist und bleibt f√ľr mich eine offene L√∂sung mit jeder Menge Schnittstellen und eben einiger (k√ľnstlicher) Einschr√§nkungen. Christoph und ich werden Loxone definitiv weiterverwenden und auch weiter dar√ľber berichten, da der Funktionsumfang f√ľr uns unverzichtbar geworden ist. Zu FHEM wird es aber nat√ľrlich auch neue Inhalte geben, da wir das Sytem ebenso wenig missen m√∂chten.

      Gr√ľ√üe
      Jörg

  1. define SZMoviePlaying notify SZ.PMP.video.playing set SZ.Deckenlampe 20

    Gilt das Anwendungsbeispiel auch f√ľr HUE ohne Loxone Anbindung?

    Danke und LG

  2. Hallo,
    danke erst mal so was habe ich immer gesucht.
    Das Problem ist das die Clients nicht bei mir im Fhem ‚Äěangelegt‚Äú werden.
    Den Plex-Server konnte ich √ľber myPlex anlegen.
    Beim Aufrufen von get Plex clients werden mir auch meine Clients angezeigt. Nur tauchen diese nicht in der Plex Umgebung auf, dort steht nur mein Server und Plex for Android ‚Äď stopped, Plex for IOS ‚Äď disappeared.

    Danke f√ľr die Hilfe.

  3. Hallo
    Ich habe ein Problem den Server einzubinden.

    Input: get Plex servers
    Output: Servers from discovery:
    ip updatedAt onl. name machineIdentifier
    192.168.1.145 2017-03-29 21:54:12 yes Qnap1282 066669ca805094f2eafc68065fedb91f36b05ec8

    Input: Set Plex Autocreate 066669ca805094f2eafc68065fedb91f36b05ec8
    Output: unknown server: 066669ca805094f2eafc68065fedb91f36b05ec8

    Was könnte das Problem sein? Danke!

  4. Hi Jörg!

    Nach viel Herumprobieren habe ich die √úbertragung der dynamischen Textdaten an Loxone nun hinbekommen.

    Diese Zeile aus dem Beitrag habe ich angepasst: system(„curl -s ‚http://admin:password@192.168.3.11/dev/sps/io/VTI1/TITLE'“);

    -> system(„curl -s ‚http://admin:password@192.168.3.11/dev/sps/io/VTI1/’$title““);

    Das funktioniert so auf jeden Fall schon mal, wenn im String keinerlei Leerzeichen oder Sonderzeichen wie z.B. &|“|/|(|)|‘ enthalten sind.
    Diese Zeichen m√ľssen vorher noch in Hex codiert werden, also f√ľr das Leerzeichen z.B. %20. Der fertige Aufruf sieht dann am Ende z.B. folgenderma√üen aus:
    -> system(„curl -s ‚http://admin:password@192.168.3.11/dev/sps/io/VTI1/’Bang%20my%20Head%20%28feat%2e%20Sia%29““);
    f√ľr den Titel „Bang my Head (feat. Sia)“

    Viele Gr√ľ√üe
    Thorsten

  5. Hallo,
    ist es auch m√∂glich, „nur“ eine UDP √ľbertragung von Plex Server zu Loxone zu realisieren, welche eine Aktivit√§t √ľbergibt? W√§re cool, dass bei Aktivit√§t Loxone den Server am laufen h√§lt… bevor diese im Energiesparmodus einschl√§ft.
    Danke

  6. Hallo Jörg
    habe das gleiche Problem wie Steffi. Plex Server konnte manuel in FHEM eingebunden werden. clients dagegen werden keine automatisch angelegt. K√∂nnen die Clients auch manuel hinzugef√ľgt werden?
    mit get PlexServer clients werden alle im myPlex registrierten Clients angezeigt.
    Auch wird der aktive/abspielende Plexclient auf dem Fire-TV als solcher erkannt (mit get Server clients…) aber es wird kein FHEM-Device erstellt.
    Manuelle Hinzuf√ľgeversuche mit MaschineID oder IP (vom FireTV) ergibt unbekannter Server…
    Gibts da noch einen Trick den ich √ľbersehen habe?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert