Json-Rpc

  • Ich habe ein paar Befehle im Netzwerk aktiv die noch alle auf der alten Engine beruhen.
    Diverse Pause/Skip/Play-Befehle, die zB. von fritzbox ausgelöst werden.

    Da das Protokoll nun bald ausstirbt, suche ich eine alternavite (und kenne mich aktuell noch gar nicht mit dem Thema JSON aus).
    Kann man denn einen JSON Befehl auch per Webinterface abgeben?
    Wie würde ein simples Beispiel aussehen für "XBMC an 192.168.1.22 PAUSE".

  • Ja, du kannst das JSON-RPC dafür verwenden - allerdings muss es eingeschaltet sein! Eventuell funktioniert das ganze auch erst mit Frodo.

    Es müsste folgendermaßen funktionieren:

    Code
    http://<jsonrpc-user>:<jsonrpc-password>@<xbmc-ip>:<jsonrpc-port>/jsonrpc?request={"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}

    Allerdings musst du die Paramter URL-encoden wenn du GET benutzt, also:

    Code
    http://<jsonrpc-user>:<jsonrpc-password>@<xbmc-ip>:<jsonrpc-port>/jsonrpc?request=%7B%22jsonrpc%22%3A%222.0%22%2C%22method%22%3A%22Player.PlayPause%22%2C%22params%22%3A%7B%22playerid%22%3A1%7D%2C%22id%22%3A1%7D

    Wenn du POST benutzt muss es nicht encodet werden, hier ein CURL beispiel dafür:

    Code
    curl -s -u <jsonrpc-user>:<jsonrpc-password> -X POST -d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' http://<xbmc-ip>:<jsonrpc-port>/jsonrpc
  • Ich test da gerade mit der akteullen Alpha rum.
    Es passiert einfach nix.

    Muss ich den User und Passwort und Port noch vorher irgendwo festlegen?

    Über den Browser:

    Code
    http://xbmc:xbmc@192.168.1.15:9090/jsonrpc?request={"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}


    ... bewirkt am XBMC auf dem selben Rechner nichts.

  • Außerdem ist 9090 der JSON-RPC-über-TCP Port. Du schickst aber HTTP - also muss es auch ans HTTP-Port. Außerdem wie `Black schon gesagt hat, prüfe ob der Zugriff erlaubt ist - wenn du den Befehl von nicht lokal schickt muss der Zugriff für Remote Maschinen separat eingeschaltet werden.

  • Das Anfordern der Pause über Firefox funktioniert tadellos.
    Angefordert habe ich dieses Kommando:

    Code
    http://123:456@192.168.1.20:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}


    Pause wird bedient, und [definition='1','3']Debug[/definition] liefert folgendes:

    Code
    00:50:23 T:140325960013568   DEBUG: webserver: request received for /jsonrpc?request={"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}
    00:50:23 T:140325960013568   DEBUG: JSONRPC: Incoming request: {"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}
    00:50:23 T:140325960013568   DEBUG: JSONRPC: Calling player.playpause

    Versuche ich aber über curl eine Pause zu aktivieren passiert nichts. Übergeben habe ich in einem Terminal, daß über SSH mit dem XBMC-User verbunden ist folgendes:

    Code
    curl -s -u 123:456 -X POST -d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' http://192.168.1.20:8080/jsonrpc


    Die Debuginformationen liefern nur folgendes:

    Code
    00:58:33 T:140326460512000   DEBUG: webserver: request received for /jsonrpc


    Kann mir jemand sagen was ich falsch mache?

  • Und hier die Antwort damit curl funktioniert. Das bezieht sich auf XBMC (Frodo) und ohne aktiviertes Passwort:

    Code
    curl -s -H "Content-type: application/json" -X POST -d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' http://localhost:8080/jsonrpc


    mit aktiviertem Passwort sieht es so aus:

    Code
    curl -su xbmc:xbmc -H "Content-type: application/json" -X POST -d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' http://localhost:8080/jsonrpc
  • Ich probier gerade den Aufruf von der Fritzbox aus anzupassen.
    Im Webinterface funktioniert es, im freetz leider nicht.

    Code
    wget "xbmc:xbmc@http://192.168.1.32:8080/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.PlayPause%22,%22params%22:{%22playerid%22:1},%22id%22:1}"


    Wenn ich den Befehl ohne Passwort abschicke, kommt aber ein Feedback "unauthorized request".
    Noch jemand ne Idee?

  • Hallo


    ich würde gerne ein Addon mit json rpg starten per curl leider habe ich da ein Syntax Problem.
    Irgendwas stimmt hier nicht


    Code
    curl -s -u xbmc:xbmc -X POST -d '{"jsonrpc":"2.0","method":"Addons.ExecuteAddon","params":{"addonid":"script.doorbell"},"id":1}' http://localhost:8080/jsonrpc

    mit dem Aufruf per Browser

    Code
    http://xbmc:xbmc@localhost:8080/jsonrpc?request={"jsonrpc":"2.0","id":1,"method":"Addons.ExecuteAddon","params":{"addonid":"script.doorbell"}}


    funktioniert es einwandfrei.
    Kann mir wer sagen wo mein Fehler liegt?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!