XBMC: Unterschied zwischen den Versionen

Aus FHEMWiki
(xbmc.org durch kodi.tv ersetzt)
K (Webadresse zum Kodi-Wiki korrigiert)
 
(23 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
|ModPurpose=Abspielen von Medien (Musik, Video, Bilder)
|ModPurpose=Abspielen von Medien (Musik, Video, Bilder)
|ModType=d
|ModType=d
<!-- |ModCategory= (noch?) nicht verwendet -->
|ModForumArea=Multimedia
<!-- |ModCmdRef=  wird automatisch generiert -->
|ModTechName=70_XBMC.pm
|ModTechName=70_XBMC.pm
|ModOwner=Dennis Bokermann
|ModOwner={{Link2FU|6776|vbs}}
}}
}}


'''KODI''' (früher XBox Media Center (XBMC) genannt) ist eine unter den Bestimmungen der GPL erhältliche freie Media-Center Software. Sie dient dem Abspielen von Videos, Bildern und Musik von DVD, Festplatte und Server sowie der Wiedergabe von Audio- und Video-Datenströmen aus dem Internet. (Quelle: [http://kodi.tv/ kodi.tv])
'''KODI''' (früher XBox Media Center (XBMC) genannt) ist eine unter den Bestimmungen der GPL erhältliche freie Media-Center Software. Sie dient dem Abspielen von Videos, Bildern und Musik von DVD, Festplatte und Server sowie der Wiedergabe von Audio- und Video-Datenströmen aus dem Internet. (Quelle: [http://kodi.tv/ kodi.tv])


Ein weiteres Media-Center System, das mit diesem Modul zusammenarbeitet, ist das aus einem KODI Fork entstandene [https://plex.tv PLEX Media-Server] System.
Ein weiteres Media-Center System, das mit diesem Modul zusammenarbeitet, ist das aus einem XBMC Fork entstandene [https://plex.tv PLEX Media-Server] System.
 
Aktuelle Versionen von Plex Home Theater haben nur noch eine sehr eingeschränkte Kompatibilität zum XBMC/KODI API und zeigen z.B. keine Informationen mehr über die aktuell gespielten Medien an. Die Beta-Version eines plex-spezifischen Moduls wird in diesem {{Link2Forum|Topic=43052|Message=353477|LinkText=Post im Forum}} vorgestellt.  


== Zielsetzung ==
== Zielsetzung ==
Dieses Modul ermöglicht das Steuern und Empfangen von Events von XBMC und PLEX. Unter anderen sind damit vielfältige Verknüpfungen von Aktoren und  
Dieses Modul ermöglicht das Steuern und Empfangen von Events von KODI und PLEX. Unter anderen sind damit vielfältige Verknüpfungen von Aktoren und  
XBMC/Plex möglich.
XBMC/Plex möglich.


== Einbindung in Fhem ==
Aktuelle Plex Home Theater (PHT) Versionen (ab etwa mitte November)  liefern keine Informationen mehr zum abgespielten Titel (currentTitle,currentAlbum,...) sondern nur noch zum TransportState. Der Grund dafür ist noch nicht klar.
 
== Einbindung in FHEM ==
 
Für diese Modul wird das Perl JSON Modul benötigt. Auf einem Debian-basierten System (z.B RaspberryPI o.ä.) kann man das mit
dem folgenden Befehl installieren:
:<code>sudo apt-get install libjson-perl</code>
 
'''Beispieldefinition'''
'''Beispieldefinition'''
:<code>define wz_XBMC XBMC <IP-Adresse> tcp <USERNAME> <PASSWORT></code>
:<code>define wz_XBMC XBMC <IP-Adresse> tcp <USERNAME> <PASSWORT></code>
:<code>attr wz_XBMC devStateIcon opened:rc_GREEN:on disconnected:rc_RED:off Initialized:message_socket_disabled</code>
:<code>attr wz_XBMC devStateIcon opened:rc_GREEN:on disconnected:rc_RED:off Initialized:message_socket_disabled</code>
'''Hinweis'''<br>
JSON RPC muss aktiviert sein. Näheres siehe hier: http://kodi.wiki/view/JSON_RPC#Enabling_JSON-RPC
Danach sollte ein Neustart von Kodi durchgeführt werden.


Erfolgreich getestet unter den Versionen
Erfolgreich getestet unter den Versionen
Zeile 28: Zeile 40:


<pre>
<pre>
define notify_XBMC_status notify wz_KODI:playStatus.* { if (ReadingsVal("wz_XBMC", "type", "") eq "movie"){
define notify_KODI_status notify wz_KODI:playStatus.* { if (ReadingsVal("wz_KODI", "type", "") eq "movie"){
   if (ReadingsVal("wz_KODI", "playStatus", "") eq "playing"){
   if (ReadingsVal("wz_KODI", "playStatus", "") eq "playing"){
       fhem("set FS20_Licht off");
       fhem("set FS20_Licht off");
Zeile 39: Zeile 51:
</pre>
</pre>


=== Nachrichten von Fhem an KODI und PLEX schicken ===
Mit Hilfe des Moduls [[LightScene]] kann man den voherigen Status der einzelnen Lampen auch speichern und nach dem Filmende wiederherstellen.
Anbei ein Code Beispiel:
 
<pre>
wz_KODI:playStatus.* {
  my $media = ReadingsVal("wz_KODI","currentMedia","none");
  my $isPlaying = ReadingsVal("wz_KODI","playStatus","n/a") eq "playing";
  my $is3d = ReadingsVal("wz_KODI","3dfile","n/a") eq "on";
  my $currentLightScene = Value("kino_licht");
  Log 3, "Wiedergegebene Datei: " . $media . " isPlaying: " . $isPlaying. " is3d: " . $is3d . " currentLightScene: " . $currentLightScene;
  if ($is3d && $isPlaying) {
    if ($currentLightScene ne "3d_movie") {       
        Log 3, "Speichere aktuellen Zustand als temporäre Szene und ändere kino_licht scene auf 3d_movie...";
        fhem("set kino_licht save tmp_pre_movie_state;");
        fhem("set kino_licht scene 3d_movie;");       
    }
  } elsif ($is3d && $currentLightScene eq "3d_movie") {
    Log 3, "Der Film ist pausiert oder zu Ende, ändere LightScene zurück auf tmp_pre_movie_state...";
    fhem("set kino_licht scene tmp_pre_movie_state;");
    fhem("set kino_licht remove tmp_pre_movie_state;");
  }
}
</pre>
 
Ein weiteres Beispiel mit dem Modul DOIF:
<pre>
#########################################################################
# Kodi: Lichtsteuerung
#########################################################################
define di_kodi_lichtsteuerung DOIF
(
[wz_KODI:playStatus] eq "playing" and [wz_KODI:currentMedia] ne "" and
(
  [wz_KODI:type] eq "episode" or
  [wz_KODI:type] eq "movie"
)
(set ls_Erdgeschoss scene Filmstart)
DOELSEIF (
[wz_KODI:playStatus] eq "paused" and [wz_KODI:currentMedia] ne "" and
(
  [wz_KODI:type] eq "episode" or
  [wz_KODI:type] eq "movie"
)
)
(set ls_Erdgeschoss scene Filmpause)
DOELSEIF (
[wz_KODI:playStatus] eq "stopped" and [wz_KODI:currentMedia] ne "" and
(
  [wz_KODI:type] eq "episode" or
  [wz_KODI:type] eq "movie"
)
)
(set ls_Erdgeschoss scene indirekt)
</pre>
 
Weitere Informationen dazu unter im Forenthread {{Link2Forum|Topic=32775|LinkText=Fragen zu LightScene}}
 
Alternative Lichtsteuerung in Abhängigkeit der Helligkeit {{Link2Forum|Topic=58381|LinkText=Lichtsteuerung in Abhängigkeit von Dämmerung und Fernseher / Mediaplayer}}
 
=== Nachrichten von FHEM an KODI und PLEX schicken ===
Der folgende Befehl schickt eine 5 Sekunden lange Info Nachricht an KODI.
Der folgende Befehl schickt eine 5 Sekunden lange Info Nachricht an KODI.


:<code>fhem("set wz_KODI msg 'fhem' 'Licht wurde ausgeschaltet!' 5000 info");</code>
:<code>fhem("set wz_KODI msg 'fhem' 'Licht wurde ausgeschaltet!' 5000 info");</code>


== Anzeigen von Fhem Daten im KODI ==
=== Thumbnail im Frontend anzeigen ===
[[Datei:Xbmc.png|mini|right|400px|Fhem-Daten in KODI anzeigen]]
In den readings von KODI gibt es einen thumbnail Wert. Um diesen als http link in einem http basierten Frontend darstellen zu können muss allerdings ein Userreading erstellt werden, denn der Pfad für http muss doppelt encoded werden. D.h. aus dem %2f muss ein %252f gemacht. Zusätzlich muss dem Wert noch ein http://IP_KODI:PORT_WEBSERVICE/image/ vorangestellt werden. Das funktioniert aber nur wenn die Bilder lokal abgelegt sind, nicht wenn die Bilder von z.b. thetvdb.com kommen.
 
:<code>http_thumbnail { my $val = (ReadingsVal("$name", "thumbnail", 0)); $val =~ s/\%2f/\%252f/g;; return "http://192.168.0.5:8080/image/".$val;; }</code>
 
Anschliessend kann http_thumbnail abgefragt werden und enthaelt den Link zum Bild
 
== Anzeigen von FHEM Daten im KODI ==
[[Datei:Xbmc.png|mini|right|300px|FHEM-Daten in KODI anzeigen]]


=== Vorbereitungen in KODI ===
=== Vorbereitungen in KODI ===
Zuerst muss das Phyton Skript heruntergeladen werden ([http://forum.fhem.de/index.php?topic=14419.0 Thread im Fhem-Forum]) und mit dem XBMC Addon Manager installiert werden.  
Zuerst muss das Phyton Skript heruntergeladen werden ([http://forum.fhem.de/index.php?topic=14419.0 Thread im FHEM-Forum]) und mit dem XBMC Addon Manager installiert werden.  


=== Vorbereitungen in Fhem ===
=== Vorbereitungen in FHEM ===
Anschließend muss das globale Attribut userattr mit "xbmcInfo" erweitert werden, und zwar entweder durch Bearbeitung der [[Konfiguration|Fhem Konfiguration]] oder durch Eingabe des Befehls
Anschließend muss das globale Attribut userattr mit "xbmcInfo" erweitert werden, und zwar entweder durch Bearbeitung der [[Konfiguration|FHEM Konfiguration]] oder durch Eingabe des Befehls
:<code>{fhem ("attr global userattr $attr{global}{userattr}"." xbmcInfo")}</code>
:<code>{fhem ("attr global userattr $attr{global}{userattr}"." xbmcInfo")}</code>
in das Fhem Befehlsfenster.
in das FHEM Befehlsfenster.


Danach muss ein Dummy mit den anzuzeigenden Daten erstellt werden:
Danach muss ein Dummy mit den anzuzeigenden Daten erstellt werden:
:<code>attr <dummy-name> xbmcInfo <TYPE> <Reading[|Alias]> <[Reading[|Alias]]>...</code>
:<code>attr <dummy-name> xbmcInfo <TYPE> <Reading[|Alias]> <[Reading[|Alias]]>...</code>


=== Konfiguration in KODI ===
[[Datei:FHEM-Info3.png|mini|right|200px|Konfigurationsschritt in KODI]]
Im KODI danach noch das ''Addon'' konfiguren (IP+Passwort).
[[Datei:FHEM-Info1.png|mini|right|200px|Beispielausgabe]]
[[Datei:FHEM-Info2.png|mini|right|200px|Beispielausgabe]]
'''Beispiele'''
'''Beispiele'''
<pre>
<pre>
Zeile 67: Zeile 153:


define KODI_dummy3 dummy
define KODI_dummy3 dummy
attr KODI_dummy3 xbmcInfo FS20 state| Status name|Name
attr KODI_dummy3 xbmcInfo FS20 state|Status name|Name
 
 
 
 
 
 
 
 
</pre>
</pre>


=== Konfiguration in KODI ===
[[Datei:FHEM-Info3.png|mini|right|400px|Konfigurationsschritt in KODI]]
Im KODI danach noch das ''Addon'' konfiguren (IP+Passwort).


[[Datei:FHEM-Info1.png|mini|right|600px|Beispielausgabe]]
[[Datei:FHEM-Info2.png|mini|right|600px|Beispielausgabe]]


----


=== HTPC via WakeOnLan (WOL) Funktion wecken ===
=== HTPC via WakeOnLan (WOL) Funktion wecken ===
Einige HTPCs haben nicht die Möglichkeit diese via eines IR Kommandos zu starten. Alternativ kann hier die  
Einige HTPCs haben nicht die Möglichkeit diese via eines IR Kommandos zu starten. Alternativ kann hier die  
sog. "WakeOnLan" Funktion genutzt werden. Diese bietes mittels eines speziellen TCP/UDP Paketes den Rechner zu starten.
sog. "WakeOnLan" Funktion genutzt werden. Diese bietes mittels eines speziellen TCP/UDP Paketes den Rechner zu starten. In FHEM gibt es dafür das Modul [[WOL]].
In fhem gibt's dafür das WOL Modul.
<pre>
<pre>
define <NAME des PCs> WOL <MAC-Adresse> <IP> [<mode> [<repeat>]]  
define <NAME des PCs> WOL <MAC-Adresse> <IP> [<mode> [<repeat>]]  
Zeile 111: Zeile 202:
set wz_KODI shutdown
set wz_KODI shutdown
</pre>
</pre>
== Links ==
== Links ==
* Thread über das Modul im [http://forum.fhem.de/index.php/topic,10075.0.html Fhem Forum]
* Thread über das Modul im {{Link2Forum|Topic=10075|LinkText=FHEM Forum}}
* Thread mit [http://forum.fhem.de/index.php?topic=14419.0 weiteren Informationen]
* Thread mit [http://forum.fhem.de/index.php?topic=14419.0 weiteren Informationen]


[[Kategorie:Unterhaltungselektronik]]
[[Kategorie:Unterhaltungselektronik]]
[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 13. August 2017, 22:53 Uhr

XBMC
Zweck / Funktion
Abspielen von Medien (Musik, Video, Bilder)
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) Multimedia
Modulname 70_XBMC.pm
Ersteller vbs
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


KODI (früher XBox Media Center (XBMC) genannt) ist eine unter den Bestimmungen der GPL erhältliche freie Media-Center Software. Sie dient dem Abspielen von Videos, Bildern und Musik von DVD, Festplatte und Server sowie der Wiedergabe von Audio- und Video-Datenströmen aus dem Internet. (Quelle: kodi.tv)

Ein weiteres Media-Center System, das mit diesem Modul zusammenarbeitet, ist das aus einem XBMC Fork entstandene PLEX Media-Server System.

Aktuelle Versionen von Plex Home Theater haben nur noch eine sehr eingeschränkte Kompatibilität zum XBMC/KODI API und zeigen z.B. keine Informationen mehr über die aktuell gespielten Medien an. Die Beta-Version eines plex-spezifischen Moduls wird in diesem Post im Forum vorgestellt.

Zielsetzung

Dieses Modul ermöglicht das Steuern und Empfangen von Events von KODI und PLEX. Unter anderen sind damit vielfältige Verknüpfungen von Aktoren und XBMC/Plex möglich.

Aktuelle Plex Home Theater (PHT) Versionen (ab etwa mitte November) liefern keine Informationen mehr zum abgespielten Titel (currentTitle,currentAlbum,...) sondern nur noch zum TransportState. Der Grund dafür ist noch nicht klar.

Einbindung in FHEM

Für diese Modul wird das Perl JSON Modul benötigt. Auf einem Debian-basierten System (z.B RaspberryPI o.ä.) kann man das mit dem folgenden Befehl installieren:

sudo apt-get install libjson-perl

Beispieldefinition

define wz_XBMC XBMC <IP-Adresse> tcp <USERNAME> <PASSWORT>
attr wz_XBMC devStateIcon opened:rc_GREEN:on disconnected:rc_RED:off Initialized:message_socket_disabled

Hinweis
JSON RPC muss aktiviert sein. Näheres siehe hier: http://kodi.wiki/view/JSON_RPC#Enabling_JSON-RPC Danach sollte ein Neustart von Kodi durchgeführt werden.

Erfolgreich getestet unter den Versionen KODI 14 und fhem 5.6.

Lichtsteuerung durch KODI oder PLEX

Im folgenden Beispiel werden beim Starten eines Films die Lichter ausgeschaltet. Sobald die Pause-Taste gedrückt wird, wird das Licht wieder eingeschaltet.

define notify_KODI_status notify wz_KODI:playStatus.* { if (ReadingsVal("wz_KODI", "type", "") eq "movie"){
   if (ReadingsVal("wz_KODI", "playStatus", "") eq "playing"){
       fhem("set FS20_Licht off");
    }
    if (ReadingsVal("wz_KODI", "playStatus", "") eq "paused"){
       fhem("set FS20_Licht on");
    }
   }
}

Mit Hilfe des Moduls LightScene kann man den voherigen Status der einzelnen Lampen auch speichern und nach dem Filmende wiederherstellen. Anbei ein Code Beispiel:

wz_KODI:playStatus.* {
  my $media = ReadingsVal("wz_KODI","currentMedia","none");
  my $isPlaying = ReadingsVal("wz_KODI","playStatus","n/a") eq "playing";
  my $is3d = ReadingsVal("wz_KODI","3dfile","n/a") eq "on";
  my $currentLightScene = Value("kino_licht");
  Log 3, "Wiedergegebene Datei: " . $media . " isPlaying: " . $isPlaying. " is3d: " . $is3d . " currentLightScene: " . $currentLightScene;
  if ($is3d && $isPlaying) {
     if ($currentLightScene ne "3d_movie") {        
        Log 3, "Speichere aktuellen Zustand als temporäre Szene und ändere kino_licht scene auf 3d_movie...";
        fhem("set kino_licht save tmp_pre_movie_state;");
        fhem("set kino_licht scene 3d_movie;");        
     }
  } elsif ($is3d && $currentLightScene eq "3d_movie") {
     Log 3, "Der Film ist pausiert oder zu Ende, ändere LightScene zurück auf tmp_pre_movie_state...";
     fhem("set kino_licht scene tmp_pre_movie_state;");
     fhem("set kino_licht remove tmp_pre_movie_state;");
  }
}

Ein weiteres Beispiel mit dem Modul DOIF:

#########################################################################
# Kodi: Lichtsteuerung
#########################################################################
define di_kodi_lichtsteuerung DOIF 
(
 [wz_KODI:playStatus] eq "playing" and [wz_KODI:currentMedia] ne "" and
 (
  [wz_KODI:type] eq "episode" or 
  [wz_KODI:type] eq "movie"
 )
)  
 (set ls_Erdgeschoss scene Filmstart)
DOELSEIF (
 [wz_KODI:playStatus] eq "paused" and [wz_KODI:currentMedia] ne "" and 
 (
  [wz_KODI:type] eq "episode" or 
  [wz_KODI:type] eq "movie"
 )
)
 (set ls_Erdgeschoss scene Filmpause) 
DOELSEIF (
 [wz_KODI:playStatus] eq "stopped" and [wz_KODI:currentMedia] ne "" and
 (
  [wz_KODI:type] eq "episode" or 
  [wz_KODI:type] eq "movie"
 )
) 
 (set ls_Erdgeschoss scene indirekt)

Weitere Informationen dazu unter im Forenthread Fragen zu LightScene

Alternative Lichtsteuerung in Abhängigkeit der Helligkeit Lichtsteuerung in Abhängigkeit von Dämmerung und Fernseher / Mediaplayer

Nachrichten von FHEM an KODI und PLEX schicken

Der folgende Befehl schickt eine 5 Sekunden lange Info Nachricht an KODI.

fhem("set wz_KODI msg 'fhem' 'Licht wurde ausgeschaltet!' 5000 info");

Thumbnail im Frontend anzeigen

In den readings von KODI gibt es einen thumbnail Wert. Um diesen als http link in einem http basierten Frontend darstellen zu können muss allerdings ein Userreading erstellt werden, denn der Pfad für http muss doppelt encoded werden. D.h. aus dem %2f muss ein %252f gemacht. Zusätzlich muss dem Wert noch ein http://IP_KODI:PORT_WEBSERVICE/image/ vorangestellt werden. Das funktioniert aber nur wenn die Bilder lokal abgelegt sind, nicht wenn die Bilder von z.b. thetvdb.com kommen.

http_thumbnail { my $val = (ReadingsVal("$name", "thumbnail", 0)); $val =~ s/\%2f/\%252f/g;; return "http://192.168.0.5:8080/image/".$val;; }

Anschliessend kann http_thumbnail abgefragt werden und enthaelt den Link zum Bild

Anzeigen von FHEM Daten im KODI

FHEM-Daten in KODI anzeigen

Vorbereitungen in KODI

Zuerst muss das Phyton Skript heruntergeladen werden (Thread im FHEM-Forum) und mit dem XBMC Addon Manager installiert werden.

Vorbereitungen in FHEM

Anschließend muss das globale Attribut userattr mit "xbmcInfo" erweitert werden, und zwar entweder durch Bearbeitung der FHEM Konfiguration oder durch Eingabe des Befehls

{fhem ("attr global userattr $attr{global}{userattr}"." xbmcInfo")}

in das FHEM Befehlsfenster.

Danach muss ein Dummy mit den anzuzeigenden Daten erstellt werden:

attr <dummy-name> xbmcInfo <TYPE> <Reading[|Alias]> <[Reading[|Alias]]>...

Konfiguration in KODI

Konfigurationsschritt in KODI

Im KODI danach noch das Addon konfiguren (IP+Passwort).

Beispielausgabe
Beispielausgabe

Beispiele

define KODI_dummy dummy
attr KODI_dummy xbmcInfo CUL_WS temperature|Temperatur humidity|Luftfeuchte

define KODI_dummy2 dummy
attr KODI_dummy2 xbmcInfo PID20 actuation|Ventil desired|Soll measured|Ist delta p_p|P-Anteil p_i|I-Anteil

define KODI_dummy3 dummy
attr KODI_dummy3 xbmcInfo FS20 state|Status name|Name











HTPC via WakeOnLan (WOL) Funktion wecken

Einige HTPCs haben nicht die Möglichkeit diese via eines IR Kommandos zu starten. Alternativ kann hier die sog. "WakeOnLan" Funktion genutzt werden. Diese bietes mittels eines speziellen TCP/UDP Paketes den Rechner zu starten. In FHEM gibt es dafür das Modul WOL.

define <NAME des PCs> WOL <MAC-Adresse>	<IP> [<mode> [<repeat>]] 

Beispiel

#########################################################################
# KODI - WakeOnLan Funktion
#########################################################################
define wol_zion WOL BC:AE:C5:B3:E1:3A	 192.168.1.13 EW
attr wol_zion room _System
attr wol_zion sysCmd ./ether-wake

Wichtiger Hinweis bei Betrieb auf einer Fritzbox

Sofern fhem nicht unter dem User root wird das ether-wake Kommando nicht funktionieren. Quick&Dirty Workaround: Mit Telnet auf der FritzBox einloggen und dann das Programm /usr/bin/ether-wake in das fhem-Hauptverzeichnis kopieren. Zusätzlich muss das sog. "Sticky-Bit" mit dem Befehl 'chmod og+s ether-wake' gesetzt werden.

Einschalten des HTPCs

set wol_zion on

Ausschalten des HTPCs mittels KODI

set wz_KODI shutdown

Links