OSMC/Kodi steuern per JSON und curl

Jede Kodi/OSMC-Installation stellt nach außen eine JSON (JavaScript Object Notification)-Schnittstelle zur Verfügung, über welche die Anwendung gesteuert werden kann oder auch die im OSMC-System enthaltenen Daten abgefragt werden können. Zum Aufbau der JSON-Anfragen verwende ich das Linux-Programm cURL (command line tool for URLs). Jedem curl-Befehl werden jeweils mit den Parametern -H ein passender JSON-Header und mit Parameter -d das jeweilige Datenpaket mit dem gewünschten Befehl übergeben. Der Parameter -g erlaubt dabei die Verwendung eckiger Klammern in der URL.

Die JSON-Schnittstelle eures Kodi-Systems ist über dessen IP und den korrekten Port (beispielsweise http://192.168.deine.IP:Port/jsonrpc) erreichbar. Unter dieser URL findet ihr auch eine vollständige Übersicht aller Kommandos. Alle verfügbaren JSON-Befehle werden ebenfalls in der Web-Oberfläche Chorus bei Klick auf das Menü unten rechts angezeigt, dann Klick auf “the Lab” und dann auf “API Browser”.

Steuerung der Anwendung

Mit den folgenden drei curl-Kommandos lässt sich beispielsweise die Lautstärke des Systems auf 0, 60 oder 100% einstellen:

curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Application.SetVolume", "id": 1, "params": { "volume": 0} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc
curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Application.SetVolume", "id": 1, "params": { "volume": 60} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc
curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Application.SetVolume", "id": 1, "params": { "volume": 100} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Mit dem folgenden Befehl kann während des Abspielens von Musik oder einem Film zwischen “Play” und “Pause” umgeschaltet werden. Der Parameter playerid muss dabei “0” für den Audio-Player und “1” für den Video-Player lauten. Aus der Rückmeldung auf den curl-JSON-Befehl lässt sich schließen, ob die Wiedergabe pausiert oder wiederaufgenommen wurde

curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Player.PlayPause", "id": 1, "params": { "playerid": 0} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc
... "result":{"speed":0/1}

Ob und welcher Player gerade in OSMC aktiv ist, kann vorab auch über folgenden Befehl abgefragt werden, die Rückmeldung lautet dann beispielsweise

"result":[{"playerid":1,"type":"video"}
curl -g --data-binary '{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": "1"}' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Die Wiedergabe, hier des Audio-Players, kann auch ganz gestoppt statt nur pausiert werden:

curl -g --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Stop", "params": { "playerid": 0 } }' --header 'Content-Type: application/json' http://192.168.deine.IP:Port/jsonrpc

… oder es kann mit diesem Befehl zum nächsten Musiktitel gesprungen werden:

curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Player.GoTo", "id": 1, "params": { "playerid": 0, "to":"next"} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Wiedergabe von Medien

Einen einzelnen Film aus dem Dateisystem kann man mit folgenden Befehl öffnen und direkt abspielen:

curl -g --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Open", "params": {"item": { "file": "/your/path/to/movie/file.mp4" } } }'  --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Ähnlich auch die Wiedergabe eines Musikalbums aus dem Dateisystem, hier nun mit dem Parameter directory statt file:

curl -g --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Open", "params": {"item": { "directory": "/your/path/to/music/artist/album" } } }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Alle Medien können aber auch über ihre internen IDs in der Mediendatenbank wiedergegeben werden, dann lautet der Aufruf für ein Musikalbum so:

curl -g --data-binary '{"jsonrpc": "2.0", "method": "Player.Open", "params": {"item": {"albumid":20}  }, "id": "1"}' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Während die Methode Player.Open die vorgegebenen Dateien sofort abspielt, fügt Playlist.Add sie nur zur aktuellen Playlist hinzu. Um die Playlist beispielsweise zunächst zu löschen und dann ein neues Album hinzuzufügen, verwendet man die folgenden Aufrufe:

curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Playlist.Clear", "id": 1, "params": { "playlistid": 0} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc
curl -g --data-binary '{ "jsonrpc": "2.0", "method": "Player.Open", "id": 1, "params": { "item": {"directory": "/media/BACKUPX/xbmc/MusicUsedAM/Adele/21/"}, "playlistid": 0} }' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Abfrage der Datenbanken

Wie oben bereits angedeutet können über JSON auch die Inhalte der OSMC-Mediendatenbank abgefragt werden. Dieser Aufruf gibt beispielsweise eine Liste aller in deinem OSMC verfügbaren Musikalben zurück:

curl -g --data-binary '{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "id": "1"}' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Die Ausgabe kann über weitere Parameter verfeinert werden. Hier die gleiche Abfrage, aber limitiert auf maximal 100 Ergebnisse, sortiert nach Interpret, und mit Ausgabe von Interpret, Künstler, Jahr, Genre jedes Albums:

curl -g --data-binary '{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": { "limits": { "start" : 0, "end": 100 }, "properties": ["artist", "genre", "year"], "sort": { "order": "ascending", "method": "artist", "ignorearticle": true } }, "id": "1"}' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

In gleicher Weise lässt sich auch die Liste aller verfügbaren Filme abfragen:

curl -g --data-binary '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "id": "1"}' --header 'content-type: application/json;' http://192.168.deine.IP:Port/jsonrpc

Und das wars?

Nein noch lange nicht, die Liste der aktuell verfügbaren JSON-Befehle ist lang, schau sie dir einmal durch, welche davon für deine Zwecke nützlich sein könnten. Vielleicht willst du dir ja selbst einmal einen lieben Gruß in der Video-Ausgabe anzeigen, oder eine Dia-Slideshow starten?

curl -g --data-binary '{"jsonrpc": "2.0", "method": "GUI.ShowNotification", "params": {"title": "Hallo!", "message": "Viele Grüße von OSMC"}, "id": 1}' --header "Content-Type: application/json" http://192.168.deine.IP:Port/jsonrpc

Mein Kommentar...