XBMC – KODI mit FHEM verbinden

Durch den sehr geringen Preis und die immer leistungsfähigeren Raspberry Pis steigt auch die Verbreitung des eigenes Mediacenters. Weit verbreitet ist da der Einsatz von KODI auf einem Raspberry mit dem Betriebssystem OpenELEC. Die Installation und Einrichtung ist bereits kinderleicht und innerhalb einer Stunde vollzogen.

Sehr interessant wird es jedoch auch, wenn FHEM mit zum Einsatz kommt. FHEM stellt mit dem Modul XBMC (FHEM-Wiki, FHEM CommandRef) bereits ein Tool zur Verfügung. In diesem Beitrag erkläre ich euch, wie ihr euer KODI-Mediacenter mit FHEM verbindet und es so möglich macht, dass ihr KODI über FHEM steuern könnt.

Vorbereitung

Damit auf dem Raspberry mit der FHEM-Installation eine Verbindung zu KODI hergestellt werden kann, ist die Installation vom Perl JSON Modul notwendig.

Bevor dann mit der Einrichtung innerhalb von FHEM begonnen werden kann, ist es notwendig unter KODI eingehende Verbindungen und das Steuern über System Dritte zu erlauben.

Damit die Einstellungen sichtbar sind, ist es notwendig die Einstellungsebene mindestens auf Standard setzen.

Die Einstellungen lassen sich dann unter „Optionen / Einstellungen / Fernbedienung“ aktivieren.

KODI Settings Fernbedienung

Dies erlaubt nun eine Verbindung zu KODI über das tcp-Protokoll. Ich persönlich empfehle diese Protokoll auch zu verwenden, da es das Empfangen von Events erlaubt (Musik läuft, Video ist pausiert etc.). Natürlich ist auch eine Verbindung über http möglich. Hier ist dann jedoch noch eine weitere Einstellung nötigt.

Unter „Optionen / Einstellungen / Dienste / Webserver“ muss das Steuern über http erlaubt werden und ein Benutzer und Passwort eingerichtet werden.

KODI settings Webserver

In meinem Fall ist es der Benutzer „kodi“ mit dem Passwort „kodi“.

Einrichtung unter FHEM

Die Verbindung zwischen FHEM und KODI wird mit Hilfe des Moduls XBMC hergestellt. Das dazu gehörige Device wird abhängig vom gewünschtem Protokoll wie folgt definiert:

Die IP-Adresse ist dabei die IP-Adresse vom OpenELEC-System auf dem das Mediacenter KODI läuft.

Wie oben bereits erwähnt, empfehle ich das tcp-Protokoll, welches ich auch für die folgenden Schritte verwendet habe.

KODI Device

Ereignisabhängiges Auslösen von Aktionen

Nachdem KODI alle wichtigen Ereignisse an FHEM sendet, lassen sich damit natürlich einige tolle Sachen mit anstellen. Im folgenden möchte ich euch gerne ein paar Ideen näher bringen.

Licht beim Filme gucken ausschalten

Eine Idee ist zum Beispiel, dass das Licht ausgeschaltet wird sobald man einen Film beginnt zu schauen. Pausiert man nun den Film oder der Film ist beendet, dann soll das Licht wieder angehen.

Die Umsetzung klappt am besten über ein Notify, welches auf das Reading „playStatus“ vom KODI-Device reagiert.

KODI Notify Licht

Wird nun ein Medium vom Type „movie“ abgespielt, dann wird die Papierlampe (PCA301-Steckdose – WZ_Papierlampe) ausgeschaltet. Pausiert man nun den Film, dann ändert sich das Reading „playStatus“ zu „paused“ und das Licht wird wieder angeschaltet. Das gleiche geschieht, wenn der Film beendet ist – Reading ändert sich zu „stopped“.

Ist die Lampe dimmbar, dann kann man diese natürlich auch nur dimmen, statt diese auszuschalten. Bei einer MiLight-Lampe würde das Notify so aussehen:

Der Typ des Medium kann natürlich auch angepasst werden, bzw. mit „||“ um weitere Typen erweitert werden. Möglich sind dabei folgende Typen: episode, movie, song, musicvideo, picture, unknown.

Ruhemodus beim Filme gucken aktivieren

Eine weitere Idee ist das Aktivieren eines Ruhemodus während man den neusten Blockbuster genießt. Mit Ruhemodus meine ich das Unterbinden von eingehenden Anrufen.

Voraussetzung ist natürlich das Einrichten der Fritzbox unter FHEM. Folgende Befehle gehen davon aus, dass die FritzBox als ein FHEM-Device mit dem Namen „FritzBox“ eingerichtet wurde. Wer dies noch nicht gemacht kann, kann gerne auf meinem Blog-Beitrag dazu vorbeischauen.

Eine weitere Voraussetzung ist das Einrichten eines Anrufbeantworters auf der FritzBox, welcher die Anrufe sofort annimmt. FritzOS erlaubt übrigens das Einrichten mehrerer Anrufbeantworter. Ich habe zum Beispiel meinen Haupt-Anrufbeantworter (Name: Anrufbeantworter), welcher nach 60 Sekunden den Anruf annimmt und nun einen zweiten Anrufbeantworter (Name: Ruhemodus), welcher die Anrufe sofort annimmt.

Eingerichtet können die Anrufbeantworter auf der Weboberfläche der Fritzbox unter „Telefonie / Anrufbeantworter“. Dort befindet sich in der oberen rechten Ecke ein Link mit dem Bezeichnung „Weiterer Anrufbeantworter“. Hier ist dann wichtig, die Ansageverzögerung auf „sofort annehmen“ zu setzen, damit das Telefon später nicht anfängt zu klingeln.

anrufbeantworter fritzbox

Der Haupt-Anrufbeantworter hat nun die ID 1 und der neu eingerichtet die ID 2. Diese IDs sind später wichtig für die Aktivierung des Anrufbeantworters über FHEM.

Nachdem auf der FritzBox alles eingerichtet ist, kann mit der Einrichtung innerhalb von FHEM begonnen werden. Genau wie beim obigen Beispiel wird wieder ein Notify erstellt.

KODI Ruhemodus

Wie beim obigen Beispiel wird auf das Reading „playStatus“ von KODI reagiert. Wird ein Medium vom Typ „movie“ abgespielt („playing“), dann wird der Anrufbeantworter mit der ID 2 eingeschaltet („set FritzBox tam 2 on“). Wird der Film pausiert oder ist beendet, dann wird der Anrufbeantworter wieder ausgeschaltet und nur noch der Haupt-Anrufbeantworter ist aktiv.

Die Lichtschaltung und der Ruhemodus können natürlich auch in ein Notify gepackt werden:

Kodi notify

KODI abhängig von FHEM-Ereignissen steuern

Neben dem Auslösen von Aktionen abhängig von KODI, lässt sich natürlich auch KODI abhängig von FHEM-Ereignissen steuern.

KODI pausieren bei eingehendem Anruf

Was mir da sofort einfällt, ist zum Beispiel das Abspielen von Medien bei KODI zu pausieren, sobald ein Anruf eingeht. Dies ist sozusagen das Gegenstück zum Ruhemodus. Anstatt eingehende Anrufe zu unterdrücken, wird das Abspielen bei eingehendem Anruf einfach pausiert.

Dies wird ebenfalls am besten über ein Notify realisiert. Neben der FritzBox muss hier noch zusätzlich der CallMonitor eingerichtet sein.

FHEM Anruf Pause

Sobald das Telefon klingelt, springt das Reading „event“ vom CallMonitor auf „ring“ und das Notify reagiert. Zuerst wird überprüft, ob überhaupt momentan etwas abgespielt wird – „playStatus“. Ist dies der Fall, wird die aktuelle Wiedergabe pausiert.

Wer nach dem Anruf die Widergabe gerne automatisch wieder starten möchte, kann natürlich auch das Gegenstück zum „ring“ definieren:

Meldungen bei eingehendem Anruf

Sollte man sich jedoch für den Ruhemodus entschieden haben, kann es sinnvoll sein, sich den eingehenden Anruf anzeigen zu lassen. Vielleicht war bzw. ist es ja ein wichtiger Anruf.

Das FHEM-Modul für KODI stellt dafür bereits die benötigte Funktion zur Verfügung.

Ein Beispiel Befehl ist dann zum Beispiel:

KODI FHEM Nachrichten

Duration (5000 Sekunden) gibt dabei die Dauer an, wie lange die Nachricht eingeblendet werden soll. Der letzte Parameter „icon“ bestimmt das Icon, welches neben der Nachricht angezeigt werden soll. Es stehen drei Icons zur Verfügung: info, error und warning.

KODI msg Icons

Durch die Angabe einer URL lassen sich auch beliebige andere Icons verwenden. Zum Beispiel das Logo meines Blogs:

KODI eigenes ICON

Damit diese Nachrichten auch etwas sinnvolles anzeigen, wird wieder ein Notify erstellt.

Geht nun ein Anruf ein, dann wird auf dem TV unten rechts die Informationen zu diesem Anruf angezeigt.

Ich hoffe ich konnte euch mit den obigen Beispielen ein paar Anregungen geben, was alles mit dem KODI-Modul für FHEM möglich ist.

 

11 Kommentare zu “XBMC – KODI mit FHEM verbinden

    • Hallo,
      so auf Anhieb kenne ich da keine Möglichkeit. Klingt aber interessant. Werde mich mal bisschen mit dem Thema beschäftigen. Sollte ich was gefunden haben, werde ich natürlich einen Beitrag dazu verfassen.

      Gruß Daniel

  1. Hallo ich habe dein Script in meine Fhem umgebung eingebaut und funktionierte auf anhieb auch einwandfrei.
    Gerne würde ich das Licht nun aber nur ein und ausschalten wenn zusätzlich noch eine Leinwand ausgefahren ist.

    Ich habe bereits Versucht die erste Zeile folgendermaßen auszuführen:
    define notify_KODI_Ruhemodus notify KODI:playStatus.* { if (ReadingsVal("KODI", "type", "") eq "movie") && (Value("Leinwand")eq "Runter") {...
    was aber leider nicht funktioniert.
    Hast du evtl. einen Tip für mich ?

    Grüße und Vielen Dank
    Richard

    • Hallo Richard,

      ich kenne jetzt zwar nicht dein Leinwand-Device genau, aber ich gehe mal davon aus, dass die aktuelle Position der Leinwand in einem Reading abgespeichert ist. Ich gehe nun mal davon aus, dass dies im Reading „status“ ist. Wenn die Leinwand herunterfahren ist, dann steht in diesem Reading „Runter“. Sollte es anders sein, dann entsprechend anpassen.

      Denke dann sollte das so funktionieren:

      define notify_KODI_Ruhemodus notify KODI:playStatus.* {my $Film = ReadingsVal("KODI", "type", "");; my $Leinwand = ReadingsVal("Leinwand", "status", "");; if(($Film eq "movie") && ($Leinwand eq "Runter")) {fhem("set WZ_Papierlampe off")}}

      Es wird eine Variable erstellt mit dem Typ des Filmes –> my $Film und eine Variable mit dem Status der Leinwand –> my $Leinwand. Dann die if-Abfrage ob der Typ „movie“ ist und die Leinwand heruntergefahren („Runter“) ist.

      Gruß Daniel

    • Hallo Daniel

      Danke für die schnelle Rückmeldung. Ich werde das ganze am Wochenende mal testen und Rückmeldung geben.

    • Hallo Daniel,

      ich hatte heute Abend etwas Zeit zum probieren und habe es mit folgenden Code  zum laufen gebracht:

      KODI:playStatus.* {
      my $isPlaying = ReadingsVal("KODI", "playStatus", "");
      my $type = ReadingsVal("KODI", "type", "");
      my $leinwand = ReadingsVal("Leinwand", "state", "");

      if ($type eq "movie" && $leinwand eq "on") {
      if ($isPlaying eq "playing") {
      fhem "set HUEGroup1 off"}
      }
      if($isPlaying eq ("paused" || "stopped")) {
      fhem "set HUEGroup1 on"}
      }

  2. Hallo Daniel,

    leider habe ich das ganze nicht zum laufen gebracht. Noch kurz zur Erläuterung: Die Leinwand wird über einen Intertechno Schalter mit 433Mhz ein und ausgefahren. Als Status habe ich „Runter“ und „Rauf“ gesetzt.

    Ich will nun erreichen das die Lampen über Kodi nur angesteuert werden wenn die Leinwand ausgefahren ist. Wenn ich Filme auf dem Fernseher schaue sollen die Lampen nicht schalten.

    Ich befürchte meine Fhem/Perl Kenntnisse sind aktuell einfach nicht ausreichend um das ganze umzusetzen. Ich werde wohl erstmal mit einfacheren dingen weitermachen um in das Thema einzusteigen.

    Danke und Gruß

     

     

  3. Hallo Daniel,

    bei mir funktioniert das mit der Pause beim Anruf irgendwie nicht. Mein Fritz.Box Device heißt Anrufliste. Im Log sehe ich folgendes:

    2016-11-30 17:32:53 dummy AnruflisteStatus ring
    2016-11-30 17:32:53 FB_CALLMONITOR Anrufliste event: ring
    2016-11-30 17:33:09 dummy AnruflisteStatus disconnect

     

    Mit folgendem Befehl hab ich den Notify angelegt:

    define notify_KODI_Anrufe notify Anrufliste:event:.* {
    if (ReadingsVal("KODI", "playStatus", "") eq "playing"){
    if (ReadingsVal("Anrufliste", "event", "") eq "ring"){
    fhem("set KODI pause");}
    if (ReadingsVal("Anrufliste", "event", "") eq "disconnect"{
    fhem("set KODI play");}
    }
    }

    Sorry bin noch blutiger Anfänger, aber was könnte Falsch sein?

    Viele Grüße

    • Hallo Carsten,

      habe es bei mir auch nochmal getestet. Klappte auch irgendwie nicht. Keine Ahnung warum. Habe es dann angepasst und in zwei notifys aufgeteilt. Nun klappt es. Habe den Beitrag entsprechend angepasst.

      Gruß Daniel

Schreibe einen Kommentar

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

*