Message in Kodi 18 einblenden mit JSON-RPC über CURL ?

  • Hallo, wollte vorhin mal versuchen eine Message auf Kodi auszugeben mit

    http://192.168.10.105:8080/jsonrpc?request={"jsonrpc":"2.0","id":0,"method":"GUI.ShowNotification","params":{"title":"Dein Titel","message":"Deine Meldung","displaytime":5000}}

    Habe dann gelesen, dass diese Methode immer GETs sind und KODI 18 das nicht mehr unterstützt ("Bad client permission."). Muss ein POST dafür sein; und das dies mit CURL geht.

    Habe dann in der Eingabeaufforderung

    curl -s --data-binary '{ "jsonrpc": "2.0", "method": "GUI.ShowNotification","params": {"title":"Dein Titel","message":"Deine Meldung","displaytime":5000}, "id": 1}' -H 'content-type: application/json;' http://192.168.10.105:8080/jsonrpc

    abgesetzt. Kommt so zwar keine Fehlermeldung in der Eingabeaufforderung, aber in KODI erscheint auch keine Meldung...

    Geht sowas überhaupt noch?

  • Klappt bei mir nicht... Habe den Befehl testweise mal auf dem selben PC ausgeführt, wo auch KODI installiert ist.

    C:\WINDOWS\system32>curl -X POST -H 'Content-Type: application/json' -i http://localhost:8080/jsonrpc --data '{"jsonrpc":"2.0","id":0,"method":"GUI.ShowNotification","params":{"title":"Dein Titel","message":"Deine Meldung","displaytime":5000}}'

    curl: (6) Could not resolve host: application
    HTTP/1.1 401 Unauthorized
    Content-Length: 0
    WWW-Authenticate: Basic realm="XBMC"
    Connection: close
    Date: Sun, 29 Mar 2020 16:15:47 GMT

    Wenn ich im KODI Webserver Username/Passwort leer lasse, kommt folgendes:

    C:\WINDOWS\system32>curl -X POST -H 'Content-Type: application/json' -i http://localhost:8080/jsonrpc --data '{"jsonrpc":"2.0","id":0,"method":"GUI.ShowNotification","params":{"title":"Dein Titel","message":"Deine Meldung","displaytime":5000}}'

    curl: (6) Could not resolve host: application
    HTTP/1.1 415 Unsupported Media Type
    Connection: Keep-Alive
    Content-Length: 0
    Cache-Control: private, max-age=0, no-cache
    Accept-Ranges: none
    Date: Sun, 29 Mar 2020 16:32:42 GMT

  • oder in der hosts-datei folgendes machen:

    127.0.0.1 localhost
    ::1 localhost

    Dann klappts auch mit localhost ;) und sogar unabhängig von IPv4 oder IPv6

  • Das natürlich. Ansonsten in der hosts-datei halt eine Hostnamen mit der entsprechenden IP setzen und dann klappt es auch mit der Namensauflösung.

    Ich bin ja ohnehin dafür, dass jeder zu Hause seinen eigenen DNS laufen haben sollte ;)

  • Habe mal wieder Zeit hierfür gefunden (1,5 Jahre später... Mittlerweile KODI v19.3).

    Bin jetzt bei folgendem CURL-Befehl angekommen:

    curl -X POST -H 'Content-Type: application/json' -i http://192.168.10.105:8080/jsonrpc -u kodi:kodi --data '{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"GUI.ShowNotification\",\"params\":{\"title\":\"Dein Titel\",\"message\":\"Deine Meldung\",\"displaytime\":5000}}'

    Aber bekomme statt einer Meldung in Kodi nur folgendes angezeigt:
    [infobox]curl: (6) Could not resolve host: application
    HTTP/1.1 415 Unsupported Media Type
    Connection: Keep-Alive
    Content-Length: 0
    Cache-Control: private, max-age=0, no-cache
    Accept-Ranges: none
    Date: Tue, 26 Oct 2021 09:11:34 GMT
    curl: (3) Port number ended with '"'
    curl: (3) [globbing] unmatched close brace/bracket in column 28[/infobox]
    Evtl. hat ja jemand noch einen Tipp für mich wie ich das zum laufen bringen kann:-).

    Wenn ich testweise http://192.168.10.105:8080/jsonrpc?request={"jsonrpc":"2.0","method":"JSONRPC.NotifyAll","params":{"sender":"Nachricht","message":"Fertig!"},"id":1} in einem Browser absetze, werde ich zuerst nach Benutzername/Passwort gefragt, dann kommt als Ergebnis

    id1
    jsonrpc"2.0"
    result"OK"


    Aber auch hier erscheint in KODI keine Meldung...

  • curl -X POST -H "content-type:application/json" http://127.0.0.1:8080/jsonrpc -u kodi:kodi -d '{"jsonrpc":"2.0","id":1,"method":"GUI.ShowNotification","params":{"title":"test","message":"test","displaytime":5000}}'

    Das funktioniert bei mir. Du musst nur die IP und Username sowie Passwort anpassen.

    @tg0wg66

    Dein Test:

    http://192.168.10.105:8080/jsonrpc?request={"jsonrpc":"2.0","method":"JSONRPC.NotifyAll","params":{"sender":"Nachricht","message":"Fertig!"},"id":1}

    hat einige viele Fehler. Du gibst keinen Benutzernamen oder Passwort mit. Dann gibt es den Paramter "sender" nicht.

    Dein Curl, den du oben nennst, hat ne Menge unnötiger \ drin. Die braucht es alle nicht!!!! Du musst nichts escapen.

    Das -i vor der Angabe der IP ist ebenfalls unnötig.

    Ich habe deinen Curl oben kopiert und nur die Escape-Zeichen entfernt und er funktioniert bei mir. Mit den Escape-Zeichen bekomme ich die gleiche Fehlermeldung, wie du auch. Du musst nichts escapen, da du einfache "Hochkommata" verwendest und innerhalb dieser, doppelte Hochkommata. Das wird über die Shell sauber aufgelöst. Da bedarf es keiner weiteren Zeichen ;)

    Bitte auch innerhalb von Kodi die Steuerung entfernter Systeme erlauben:

    Also beides einschalten.

    Klappt das nicht, dann würde ich Copy und Paste nochmal üben ;)

    Einmal editiert, zuletzt von DaVu (26. Oktober 2021 um 23:41)

  • @DaVu, hast du das auf einem Windows PC gemacht?

    @tg0wg66, falls die Kommandsozeile von Davu nicht geht, kannst mal probieren, deine einfachen Quotes ' durch doppelte " zu ersezten, und (wenn das nicht reicht) die \" durch """.

    (Mein Testprogramm zeigt bei deiner Kommandozeile ohne die Escapes, dass die Quotes nicht im aufgerufenen Programm ankommen bei Standard Windows 10 cmd-Shell. Habe leider auch schon die Erfahrung gemacht, dass im Zweifel unter Windows die Quotes wirklich zu übergeben sehr schwierig sein kann. Insbesondere war mir aufgefallen, dass da der Startupcode von Microsoft Visual C/C++ anders ist als beispielsweise Mingw Gnu C. Was scheinbar verlässlich funktioniert, ist die Quotes zu verdreifachen. aufgeruffeneexe """"QuotedWord1""","""QuotedWord2"""". Das \" funktionierte bei mir insbesondere bei Mingw nicht verlässlich. Bei deiner Kommandozeile erhalte ich mit gcc kompiliertem Trivial-C-Code, der nur die aufgerufenen Argumente ausgibt:


    Wenn da argv[ 1]="-X" steht, muss man sich die " um das -X wegdenken, es kommt genau -X an. Die Quotes sind hier, um Anfang und Ende zu erkennen.

    Bei der Kommandozeile von @tg0wg66


    Passt beides nicht ...
    )

    Kodi 21.1, 17.6, 21.1, 16, 20.5 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 6 (Debian Linux).

  • hast du das auf einem Windows PC gemacht?

    Natürlich nicht ;) . @tg0wg66 Welches System verwendest du beim absetzen des Kommandos? Linux/Mac oder Windows?

    falls die Kommandsozeile von Davu nicht geht, kannst mal probieren, deine einfachen Quotes ' durch doppelte " zu ersezten, und (wenn das nicht reicht) die \" durch """.

    Wenn er das macht, dann muss er escapen. Habs gerade selbst probiert. Ich würde das also nicht empfehlen. ;)

    Er sollte

    • meine Zeile verwenden...unverändert...so wie sie da steht

    oder

    • aus seiner Zeile die \ entfernen. Und zwar alle die, die vor einem " stehen. Diese verursachen unnötiges und vor allem falsches Escapen. Somit werden Parameter und Inhalte durcheinander geworfen. Das kann so gar nicht funktionieren.

    Aber wahrscheinlich hören wir erst in 1,5 Jahren wieder von ihm, wenn er für eine einzelne Zeile mal wieder etwas Zeit hat :D

    @tg0wg66 Ab hier bitte alles ignorieren, da es dich sonst verwirren wird. Ich würde das aber @buers gern zeigen, warum doppelte Anführungszeichen eine schlechte Idee sind ;)

    buers:

    Mit doppelten Anführungszeichen und ohne Escaping:

    Code
    curl -X POST -H "content-type:application/json" http://127.0.0.1:8080/jsonrpc -u kodi:kodi -d "{"jsonrpc":"2.0","id":1,"method":"GUI.ShowNotification","params":{"title":"test","message":"test","displaytime":5000}}"
    {"error":{"code":-32700,"message":"Parse error."},"id":null,"jsonrpc":"2.0"}%

    Mit doppelten Anführungszeichen und mit Escaping:

    Code
    curl -X POST -H "content-type:application/json" http://127.0.0.1:8080/jsonrpc -u kodi:kodi -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"GUI.ShowNotification\",\"params\":{\"title\":\"test\",\"message\":\"test\",\"displaytime\":5000}}"
    {"id":1,"jsonrpc":"2.0","result":"OK"}%

    Ich habe keine Ahnung ob sich das auf einem Windows-PC anders verhält. Unter Linux muss ich auf jeden Fall, logischer Weise, alles escapen.

    Sieht man auch gut hier dran:

    Code
    echo '"Hallo"'                                                                      
    "Hallo"
    
    
    echo ""Hallo""
    Hallo
    
    
    echo "\"Hallo\""
    "Hallo"

    Du siehst den Unterschied?

    2 Mal editiert, zuletzt von DaVu (27. Oktober 2021 um 08:33)

  • Natürlich nicht . @tg0wg66 Welches System verwendest du beim absetzen des Kommandos? Linux/Mac oder Windows?

    C:\WINDOWS\system32>curl -X POST - [...]


    @DaVu, ich denke, ich kenne die Fallen sehr gut. Echo ist unter Windows nicht das ideale Tool, das zu überprüfen. Als internes Kommando verhält es sich anders. Ich kenne das leider zu Genüge. PITA.

    Kodi 21.1, 17.6, 21.1, 16, 20.5 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 6 (Debian Linux).

  • @tg0wg66 nach dem möglicherweise verwirrenden Dialog, nochmals die Lösung: Einfach in deiner Kommandozeile die 4 Hochkomma ' durch Anführungszeichen " austauschen. \" lassen. Dann sollte es gehen. Also

    Code
    curl -X POST -H "Content-Type: application/json" -i http://buerswin01:8080/jsonrpc -u kodi:kodi --data "{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"GUI.ShowNotification\",\"params\":{\"title\":\"Dein Titel\",\"message\":\"Deine Meldung\",\"displaytime\":5000}}"


    funktionierte bei mir. buerswin01 ersetzen durch deine IP oder deinen Computernamen.

    Weiter gerne ignorieren.

    @DaVu, noch kleiner Kommentar zum Kommandozeilentest mit echo

    Code
    echo "Name mit Leerzeichen.txt"
    echo Name mit Leerzeichen.txt
    cat "Name mit Leerzeichen.txt"
    cat Name mit Leerzeichen.txt


    Unter Unix zeigt echo keinen Unterschied (Unter Windows übrigens schon). Für cat macht es aber einen riesen Unterschied. Daher ist echo alleine gefährlich, schwierige Kommandozeilen zu prüfen. Mein oben genanntes Programm argviewer zeigt einfach, was wirklich "normale" Programme beim Aufruf zu sehen bekommen, und insbesondere auch, ob halt "Name mit Leerzeichen" als ein Argument übergeben wurde, oder als 3. (Vorher hatte ich auch meist echo genutzt)

    Ich habe keine Ahnung ob sich das auf einem Windows-PC anders verhält.


    In der Gesamtheit verhält es sich anders :) (Wobei vermutlich deine zweite Zeile mit den Escapes geht - habe ich aber nur visuell geprüft).

    Challenge Kommandozeilen und Quoting-Spezialisten. Man schreibe ein /bin/sh Skript mit 2 Aufrufparametern: myreplace originaltext replacetext. Man nutze dafür sed, stdin, stdout für input/output (also z.B. File redirection myreplace xxx yyy < input > output). Nun rufe man das Skript auf, mit der Maßgabe in der Eingabe alle \" zu ersetzen durch \"\" (und ich meine jetzt wirklich diese beiden Zeichen, das \ ist hier Text, als würde man in einem trivialen Texteditor, der keine regexp etc. nutzt die Ersetzen Funktion nutzen). Was muss man eingeben auf der Kommandozeile? Hochkommata wie doppelte Anführungszeichen und alles andere erlaubt. Viel Spaß (Ich hatte das Problem vor vielen Jahren wirklich ziemlich genau so). (Schwierigkeitsstufe kann noch erhöht werden, wenn start \\" ende nicht ersetzt werden soll start \\\" ende schon.

    Ich sehe hier manchmal sowas wie "Spende mir ein Bier". Falls ich das begreife, kriegt erste korrekte Lösung eins. Aber nicht, dass es so geht, wie damals, als ich einen Kasten Bier ausgesetzt hatte: "Erste Person die das liest, und Autor kontaktiert, kriegt Kasten Bier". (Musste mühsam Doku schreiben, von der ich annahm, dass sie niemand braucht). Den Kasten bin ich nicht los geworden ...

    Kodi 21.1, 17.6, 21.1, 16, 20.5 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 6 (Debian Linux).

    3 Mal editiert, zuletzt von buers (29. Oktober 2021 um 21:54)

Jetzt mitmachen!

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