Schnittstellen Soap, Seriell; Doku

Moin zusammen,
wir sitzen gerade bei der Einrichtung, die Automation der nicht moderierten Sendungen von einem Umbeaufsichtigen Server aus zu fahren. Natürlich mit mAirList.
Nun müssen wir uns eine Fernsteuerung für gewisse Funktionen basteln, z.B das on- / offAir schalten.

Gibt es rigendwo eine Doku, wo drin steht, welche Befehle unterstützt werden? Ich würde z.B. gerne ein mAirlist Script per remote starten. Gibt es Unterschiede zwischen SOAP und Seriell, mal abgesehen vom Syntax? Ggf. würden wir eien virtuelle Serielle schnittstelle einrichten, für die Fernsteuerung. Hätte den Vorteil, dass man auch Zeiten runterzählen kann bis zum Song-Ende, für die Stream Übergabe an das nächste Sendestudio. SOAP kann ja anscheinendn nur Befehle annehmen, aber noch nichts zurück geben.

Ist im Moment alles noch in der Überlegungsphase vermutlich erfolgt die Steuerung aus einem PHP Script heraus, Webserver läuft dann mit auf dem mAirList Rechner.

mAirList Edition ist Professional

Greetz
Malte

Die “Dokumentation” des SOAP-Webservice liefert der Server automatisch als WSDL-Dokument, und zwar bei den Standardeinstellungen unter dieser URL: http://127.0.0.1:9300/soap?wsdl

Mit PHP und SoapClient kann man dann ganz einfach Kommandos ausführen (Methode “ExecuteCommand”).

Ach so, um deine Frage zu beantworten: Mehr als Befehle auszuführen kann die Schnittstelle derzeit nicht.

Danke Torben!
Habe gerade keine Testmöglichkeit, werde ich aber ASAP nachholen.
Ich hab noch mal das Forum durchforstet und das hier gefunden, falls noch jemand Interesse hat.

http://forum.mairlist.com/index.php/topic,978.0.html Passen die PHP Schnipsel noch? Ist ja schon ein paar Versionen alt… :wink:
http://forum.mairlist.com/index.php/topic,3486.0.html
http://forum.mairlist.com/index.php/topic,2461.0.html
http://forum.mairlist.com/index.php/topic,792.0.html

Verstehe ich das also richtig, dass ich jeden Befehl per ExecuteCommand senden kann, den ich auch für Hotkeys definieren kann? Ich meine mal irgendwo aufgeschnappt zu haben, dass nicht alle funktionieren. Kann mich aber auch irren.

Greetz
Malte

Du kannst beliebige Befehle darüber schicken, wie auch bei den anderen Fernsteuerungs-Schnittstellen. Der Befehlssatz ist überall identisch, denn die Befehler werden an eine zentrale Stelle (RemoteController) weitergeleitet und von da an die verschiedenen Objekte weiterverteilt.

Was PHP und SOAP angeht, so fehlt mir da gerade etwas der aktuelle Überblick. Wie es aussieht, ist das in PHP 5 nun alles objektorientiert: http://php.net/manual/en/book.soap.php

Vielleicht reicht schon das hier (kann gerade nicht testen):

$client = new SoapClient('http://127.0.0.1:9300/soap?wsdl');
$client->ExecuteCommand('PLAYER 1-1 START');

Ich hab in der Changelog zur Build 718 und im Wiki Bruchteile an Informationen zur REST Schnittstelle gefunden.
http://wiki.mairlist.com/index.php/REST_Remote_Interface

Gibt’s da schon näheres, weil wir eigenltich gerade auf Soap aufsetzen wollten. Das ist damit wohl hinfällig. Hast Du vielleicht ein kleines PHP beispiel, so’n 2 Zeiler wie für soap?
Gibt es eine empfohlene PHP library

Danke
Malte

Wie du am Datum siehst, arbeite ich gerade an dem Artikel.

Kommandos ausführen geht über ein POST an die URL http://127.0.0.1:9300/execute, wobei du als Parameter “command” den Befehl übergibst (IP natürlich anpassen).

Ich würde das mit cURL machen: http://php.net/manual/de/book.curl.php

Auf der Kommandozeile geht das so:

curl -d'command=PLAYER 1-1 START' http://127.0.0.1:9300/execute

Genaue Syntax für PHP müsste ich gleich mal nachschauen. Schreibe ich dann ins Wiki.

curl gibt es übrigens auch für Windows - damit ist es dann vermutlich überflüssig, ein neues mAirListCommand.exe zu schreiben, oder?

Wichtig: Das neue REST-Interface ist mit dem alten SOAP-Interface nicht kompatibel. Das bedeutet, dass mAirList 3.0 und mAirList 3.1 nicht miteinander sprechen können.

Hier ist ein Codefragment für PHP:

$ch = curl_init('http://192.168.178.26:9300/execute');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'command='.urlencode('PLAYER 1-1 START'));
curl_exec($ch);
curl_close($ch);

Wie du siehst, muss man den String mit dem Kommando derzeit noch selber zusammenbauen. Es gibt auch eine Variante mit CURLOPT_POSTFIELDS, wo man ein Array übergibt, dann allerdings werden die Parameter als multipart übertragen, was der in mAirList eingebaute Webserver (derzeit) nicht versteht.

Uff, nun läuft php5 mit curl unter Windows7. ::slight_smile:

Ähm, hast du dafür jetzt extra PHP aufgesetzt?

cURL ist ursprünglich ein Kommandozeilen-Tool. Und eben das gibt es auch für Windows:
http://curl.haxx.se/download.html (nach ganz unten scrollen)

Ja, habe ein PHP5 unter Windows am laufen :wink: Geht sehr gut.
Jedoch werde ich das kleine Tool gerne noch testen. DANKE!

Nur zum Verständnis:

Was du “das kleine Tool” nennst, das ist das eigentliche cURL.

Die cURL-Funktionen von PHP sind nur ein Wrapper dafür bzw. für die in das Tool einkompilierte libcurl.

Alles klar :-[

WOW. Habe heute versucht mit curl zu arbeiten. Beim aufruf der Hilfefunktion kommt eine sehr, sehr lange Liste mit Möglichkeiten.
Jedoch habe ich nicht rausbekommen, wie ich einen Befehl an mAirList senden kann.

curl.exe -d ONAIR http://ip-adresse:9300/execute

Was mache ich falsch?

Michel

curl.exe -d ‘command=ONAIR’ http://ip-adresse:9300/execute

ON AIR war’s
curl.exe -d ‘command=ON AIR’ http://ip-adresse:9300/execute

Verwende nun aber
curl.exe --data-url-encode ‘command=ON AIR’ http://ip-adresse:9300/execute

So, nun kann ich das ganze morgen scharf schalten ::slight_smile:

Besten Dank

Wie muss ich den Aufruf in ein ShellExecute einbinden?

ShellExecute('C:\Programme\mAirList\Tools\Curl\Curl.exe','--data-url-encode "command=ON AIR" http://ip-adresse:9300/execute')

Geht leider nicht??? Muss ich die “” irgendwie Escapen?

Michel

ShellExecute('C:\Programme\mAirList\Tools\Curl\Curl.exe','--data-urlencode "command=ON AIR" http://ip-adresse:9300/execute')

So geht es ::slight_smile:

Warum nimmst du nicht das neue RESTExecuteCommand()?

RESTExecuteCommand('http://ip:9300', 'ON AIR');

Das “/execute” bei der URL kannst du weglassen, wird automatisch ergänzt.

Weil ich aber im Moment noch eine Mischung mit mAirList 2.2.2 / 3.0 & 3.1 habe. Jedoch ist dies nur für den Übergang.
Wäre jedoch in der Tat wirklich einfacher ::slight_smile:

Nun läuft alles soweit, dass ich das Script,Script heute einbauen kann

Michel