Kodi per shell-cmd fernsteuern

Kennt Ihr das: Man schaut einen Film oder irgendwas im TVund auf einmal gehen die Rolläden runter und man kann währenddessen nicht mehr den Dialogen folgen und muss zurückspulen?

Weil uns das häufiger passiert, wollte ich Kodi beim Rolladenschließen automatisch pausieren und anschließend gleich weiter laufen lassen.

Kodi bietet diverse Möglichkeiten von extern Einfluss zu nehmen. Eine recht komfortable Möglichkeit ergibt sich durch das Tool „kodi-send“. Das Tool ist üblicherweise bei der Kodi-Installation dabei. kann aber auch separat auf Rechnern installiert werden, auf denen Kodi selbst nicht laufen soll.

# apt-get install kodi-eventclients-kodi-send

Mit Kodi-send kann man den Kodi auf dem local-host oder mit der angabe einer Hostaddresse:Port auch entfernte Kodis steuern.

# kodi-send
kodi-send [OPTION] --action=ACTION
Example
kodi-send --host=192.168.0.1 --port=9777 --action="Quit"
Options
-?, --help                      Will bring up this message
--host=HOST                     Choose what HOST to connect to (default=localhost)
--port=PORT                     Choose what PORT to connect to (default=9777)
--action=ACTION                 Sends an action to XBMC, this option can be added multiple times to create a macro

Das Tool hängt von dem Paket kodi-eventclients-common ab, welches leider Python 2.7.5 benötigt. Das Debian auf meinem linknx/knxweb2 Homeserver ist leider nicht mehr taufrisch, und dort lässt sich Python nur in einer älteren Version installieren.

Ich weiß, ich muss dringend upgraden! Werde ich aber erst machen können, wenn ich einen Backup-Server am Laufen habe, der alle Dienste im LAN übernehmen kann (eibd, linknx, knxweb, ebusd, dhcpd, smbd, nfsd) Ausserdem brauche ich ein geeignetes Mainenance-Window um den WAF nicht zu gefährden.

Daher musste ich mir erstmal anders helfen. Per remote-shell kann ich auf dem Kodi-Rechner den entsprechenden Befehl ausführen. Vorher noch die hier erzeugte authorized_keys Datei dorthin kopiert und los gehts:

ssh root@kodi-host "kodi-send --action='PlayerControl(Play)'"

Wobei dieser Befehl leider nur zwischen Play und Pause toggelt.

In linknx habe ich nun eine Rule definiert, die triggert, wenn die Rolläden beim Sonnenuntergang fahren und wenn die TV-Steckdose eingeschaltet ist. Diese Rule startet ein Shell-Script, in dem der o.g. Befehl enthalten ist.

<rule id="R_Wohnzimmer_down">
 <condition type="and">
  <condition type="object" id="R_Wohnzimmer_doppel" op="eq" value="on" trigger="true"/>
  <condition type="object" id="S_TVHiFi" op="eq" value="on" />
 </condition>
 <actionlist>
  <action var="" cmd="bash /path-to-script.sh" type="shell-cmd"></action>
 </actionlist>
</rule>

 

Weitere Anwendungsszenarien sind zum Beispiel Pausieren wenn das Telefon klingelt, jemand an der Austür klingelt, oder sonstige Events im und ums Haus, die erfasst werden können.

 

Weitere mögliche Befehle sind:

kodi-send --action="VolumeUp"
Lautstärke erhöhen

kodi-send --action="VolumeDown"
Lautstärke verringern

kodi-send --action="PlayerControl(Forward)"
Vorspulen

kodi-send --action="PlayerControl(Play)"
zwischen Pause und Wiedergabe wechseln

kodi-send --action="PlayerControl(Stop)"
Wiedergabe Stoppen

kodi-send --action="Notification(Ueberschrifft, weiterer Text)"
Hinweistext einblenden. Wichtig ist die Aufteilung mit dem Komma.

kodi-send --action="TakeScreenshot"

Weiter gibt es noch die Möglichkeit über json Befehle z.B. per Curl weit aus definiertere Anweisungen an Kodi zu senden. Im Moment genügt mir jedoch die Möglichkeit die kodi-send bietet.

2 Kommentare

Kommentar hinterlassen

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