Curl Befehle an LMS von anderem PI

AxelHoss
Beiträge: 4
Registriert: 21. April 2020 10:41

Curl Befehle an LMS von anderem PI

Beitrag von AxelHoss »

Guten Morgen liebe Musik-Freunde,

dank euch habe ich schon sehr viel Zeit sparen können, nur leider bin ich jetzt mit meinem Latein am Ende und musste mich doch regiestrieren :-)

Ich versuche seit Tagen curl Befehle von einem Pi an meinen Squeezebox LMS PI zu senden.
Der Befehl selber lautet : curl -m 1 "http://192.168.xxx.xx:9000/anyurl?p0=mi ... lume&p2=50"
Laut Command Line wird auch "anyurl processed" ausgegeben. Allerdings setzt er die Lautstärke nicht auf 50%. Am PC funtkioniert es ohne Probleme.

Gibt es hier irgendwelche Rechteprobleme o. Ä.?
karlek
Moderator
Beiträge: 2098
Registriert: 2. November 2011 12:35
SqueezeBox: Touch
SqueezeBox: Radio
SqueezeBox: Boom
SqueezeBox: Classic
SqueezeBox: Transporter
SqueezeBox Server läuft auf: Raspberry Pi 3 (Jessie) mit LMS 7.9
(O2 Joggler mit LMS 7.9)
(QNAP-212 (Turbo) mit LMS 7.9)

Re: Curl Befehle an LMS von anderem PI

Beitrag von karlek »

Das sieht so aus, als würdest Du die Befehle des Webinterface nutzen, um Deinen LMS fernzusteuern. Dafür ist aber eigentlich das CLI, besser: die JSON-Schnittstelle gedacht. Leider habe ich nur mal kurz reingeschaut und bin bei weitem nicht firm genug, Dir da großartig Hilfestellung zu geben, aber ein paar Links fallen schon ab. :)
  1. CLI wird Dir im LMS selbst erklärt:
    Einstellungen: Hilfe -> Technische Informationen -> The Logitech Media Server Command Line Interface
    oder direkt:
    http://192.168.178.37:9000/html/docs/help.html
    Dabei ist 192.168.178.37 die IP-Adresse meines LMS
  2. der JSON Aufruf erfolgt bei mir dementsprechend über 192.168.178.37:9000/jsonrpc.js
    Ein Beispiel für das JSON-Format für den Befehl zum Einschalten meiner Squeezebox:

    Code: Alles auswählen

    { "id": 1, "method": "slim.request", "params":["00:04:20:xx:xx:xx", ["power", 1]]}
  3. eine Art Dokumentation in Englisch findest Du hier: https://docs.google.com/document/d/15-A ... ejbv44g818
  4. Ein Beispiel mit curl:

    Code: Alles auswählen

    curl -H -X POST -d '{"id":1,"method":"slim.request","params":["12:36:aa:47:b4:08",["status","-",1,"tags:al"]]}' http://192.168.2.93:9000/jsonrpc.js
    Quelle:
    https://forums.slimdevices.com/showthre ... c-js/page2
Wäre ich ein wenig fitter würde ich Dir einen Vorschlag zusammenbasteln. Allerdings bin ich interessiert und würde mich freuen, wenn wir das zusammen schaffen könnten:

Der CLI-Befehl für die Lautstärke ist beispielsweise (Interessant ist auch der Hinweis zum Befehl "button"):
<playerid> mixer volume <0 .. 100|-100 .. +100|?>

The "mixer volume" command returns or sets the current volume setting for the player. The scale is 0 to 100, in real numbers (i.e. 34.5 is valid). If the player is muted, the volume is returned as a negative value. Note that players display a 0 to 40 scale, that is, the 0..100 volume divided by 2,5. Likewise, using the "button" command with "volume_up" or "volume_down" parameters increases or decreases the volume by 2,5.

Examples:

Request: "04:20:00:12:23:45 mixer volume ?<LF>"
Response: "04:20:00:12:23:45 mixer volume 98<LF>"

Request: "04:20:00:12:23:45 mixer volume 25<LF>"
Response: "04:20:00:12:23:45 mixer volume 25<LF>"

Request: "04:20:00:12:23:45 mixer volume +10<LF>"
Response: "04:20:00:12:23:45 mixer volume +10<LF>"
Ich könnte mir jetzt mal die Parameterliste für Deinen Befehl so vorstellen:

Code: Alles auswählen

{ "id": 1, "method": "slim.request", "params":["00:04:20:xx:xx:xx", ["mixer volume", 50]]}
Eigentlich erwartet der entsprechende CLI-Befehl ja die Player-ID, die man sich zuvor über die MAC-Adresse holt. Aber offensichtlich (weil es bie mir wie oben beschrieben geht) geht es auch direkt über die MAC-Adresse in den params.
AxelHoss
Beiträge: 4
Registriert: 21. April 2020 10:41

Re: Curl Befehle an LMS von anderem PI

Beitrag von AxelHoss »

Hallo karlek,

danke dir schon mal für deine Hilfe :-)

Das mit den CLI commands habe ich in meinen zig Recherchen auch gesehen, schnall ich aber überhaupt nicht. Darum wollte ich es auch mit den Web-Commands bewältigen.
Wo gebe ich diese Befehle z.B. ein? Das ist für mich zum Verständnis her total komisch. Vielleicht muss es einfach klick machen :-)
Die Seite http://192.168.xxx.xx:9000/jsonrpc.js gibt es bei mir schonmal gar nicht.
karlek
Moderator
Beiträge: 2098
Registriert: 2. November 2011 12:35
SqueezeBox: Touch
SqueezeBox: Radio
SqueezeBox: Boom
SqueezeBox: Classic
SqueezeBox: Transporter
SqueezeBox Server läuft auf: Raspberry Pi 3 (Jessie) mit LMS 7.9
(O2 Joggler mit LMS 7.9)
(QNAP-212 (Turbo) mit LMS 7.9)

Re: Curl Befehle an LMS von anderem PI

Beitrag von karlek »

Die gibt man per se mal nicht ein, sondern sendet sie mit curl. Oben habe ich Dir ein Beispiel kopiert.
Hast Du das schon von Deinem Pi aus ausprobiert? Ich kann gerade nicht.
Du musst natürlich IP- und MAC-Adresse anpassen.
AxelHoss
Beiträge: 4
Registriert: 21. April 2020 10:41

Re: Curl Befehle an LMS von anderem PI

Beitrag von AxelHoss »

Gibt folgendes aus:


> curl -H -X POST -d '{ "id": 1, "method": "slim.request", "params":["ab:cd:ef:12:34:62", ["mixer volume", 100]]} http://192.168.xxx.xx:9000/jsonrpc.js
curl: (6) Could not resolve host: POST
curl: (6) Could not resolve host: id
curl: (6) Could not resolve host: 1,
curl: (6) Could not resolve host: method
curl: (6) Could not resolve host: slim.request,
curl: (3) bad range in URL position 9:
params:[ab:cd:ef:12:34:62,
^
curl: (3) bad range in URL position 2:
[mixer volume,
^
curl: (3) unmatched close brace/bracket in URL position 4:
100]]}
^
karlek
Moderator
Beiträge: 2098
Registriert: 2. November 2011 12:35
SqueezeBox: Touch
SqueezeBox: Radio
SqueezeBox: Boom
SqueezeBox: Classic
SqueezeBox: Transporter
SqueezeBox Server läuft auf: Raspberry Pi 3 (Jessie) mit LMS 7.9
(O2 Joggler mit LMS 7.9)
(QNAP-212 (Turbo) mit LMS 7.9)

Re: Curl Befehle an LMS von anderem PI

Beitrag von karlek »

Schnellschuss: bei Dir fehlt das abschließende Hochkomma nach dem JSON-Zeug.

Edit:
bei mir funktioniert schon mal der folgende Befehl zum Ausschalten (kannst ja mal ausprobieren":

Code: Alles auswählen

curl -X POST -d '{ "id": 1, "method": "slim.request", "params":["00:04:20:xx:xx:xx", ["power", 0]]}' 192.168.178.37:9000/jsonrpc.js
Das heißt, das -H stört auf dem RasPi.
curl liefert bei Erfolg vermutlich auch immer eine Art Echo zurück. Bei mir:

Code: Alles auswählen

{"id":1,"params":["00:04:20:xx:xx:xx",["power","0"]],"result":{},"method":"slim.request"}
Wenn ich nun statt

Code: Alles auswählen

"power", 0

Code: Alles auswählen

"mixer volume", 10
einsetze, ändert sich die Lautstärke nicht und ich erhalte zurück:

Code: Alles auswählen

curl: (52) Empty reply from server
karlek
Moderator
Beiträge: 2098
Registriert: 2. November 2011 12:35
SqueezeBox: Touch
SqueezeBox: Radio
SqueezeBox: Boom
SqueezeBox: Classic
SqueezeBox: Transporter
SqueezeBox Server läuft auf: Raspberry Pi 3 (Jessie) mit LMS 7.9
(O2 Joggler mit LMS 7.9)
(QNAP-212 (Turbo) mit LMS 7.9)

Re: Curl Befehle an LMS von anderem PI

Beitrag von karlek »

Ich hab's:

Code: Alles auswählen

curl -X POST -d '{ "method": "slim.request", "params":["00:04:20:xx:xx:xx", ["mixer", "volume", "50"]]}' 192.168.178.37:9000/jsonrpc.js
Man muss also jedes Wort des Befehls einzeln absenden und auch dieLautstärke als String verpacken:
Echo:

Code: Alles auswählen

{"method":"slim.request","params":["00:04:20:06:6c:b7",["mixer","volume","50"]],"result":{}}
Jetzt frage ich mal nach der Lautstärke:

Code: Alles auswählen

curl -X POST -d '{ "method": "slim.request", "params":["00:04:20:06:6c:b7", ["mixer", "volume", "?"]]}' 192.168.178.37:9000/jsonrpc.js
liefert nun:

Code: Alles auswählen

{"params":["00:04:20:06:6c:b7",["mixer","volume","?"]],"result":{"_volume":"50"},"method":"slim.request"}
Die Reihenfolge der parameter scheint willkürlich, aber das ist bei JSON ja egal.
AxelHoss
Beiträge: 4
Registriert: 21. April 2020 10:41

Re: Curl Befehle an LMS von anderem PI

Beitrag von AxelHoss »

Das funktioniert!!!! Hätte ich nicht gedacht :-D Es ist immer noch ein Mysterium für mich *duck*

Danke dir :-)

Wie wäre dann der Befehlt für einen gewissen Track abspielen? Ich blick da nicht durch.

curl -X POST -d '{ "method": "slim.request", "params":["ab:cd:ef:12:34:62 playlist play file:///home/Music/test.wav]]}' 192.168.xxx.xx:9000/jsonrpc.js

So in etwa müsste er doch aussehen oder?
karlek
Moderator
Beiträge: 2098
Registriert: 2. November 2011 12:35
SqueezeBox: Touch
SqueezeBox: Radio
SqueezeBox: Boom
SqueezeBox: Classic
SqueezeBox: Transporter
SqueezeBox Server läuft auf: Raspberry Pi 3 (Jessie) mit LMS 7.9
(O2 Joggler mit LMS 7.9)
(QNAP-212 (Turbo) mit LMS 7.9)

Re: Curl Befehle an LMS von anderem PI

Beitrag von karlek »

Sicher nicht. :)
Zum einen fehlen da ganz viele Zeichen, eckige Klammern und Anführungszeichen um jedes Wort des CLI-Befehls. Zum andern weiß ich nicht, wie im CLI Titel übergeben werden.
Dazu müsstest Du Dich im CLI einlesen und schauen, was beim Drag and Drop abläuft. Das file:// - Protokoll wird vermutlich nicht benutzt.
ankalagon
Beiträge: 2
Registriert: 10. Juli 2020 23:21
SqueezeBox: SqueezePlay
SqueezeBox: SqueezePlay
SqueezeBox: SqueezePlay
SqueezeBox: SqueezePlay
SqueezeBox Server läuft auf: piCorePlayer, raspPi

Re: Curl Befehle an LMS von anderem PI

Beitrag von ankalagon »

Erst einmal: Der Thread war sehr hilfreich für mich!
Eine Anmerkung möchte ich noch machen: die MAC-Adresse muss in kleinbuchstaben übermittelt werden. Hab mich bestimmt 10 min. gewunder warum das bei mir einfach nicht funktionieren will, bis ich aus "Spass" einfach mal die Großbuchstaben der MAC-Adresse in kleine geschrieben hab.
Antworten