Habe versucht mit einem Commandserver auf ein Socket (Perl Script) zu verbinden und kann dort auch die Befehle absetzen. Erhalte aber kein Feedback. Kriegt der Commandserver überhaupt irgendwas mit oder muss man im Perl Script die Ausgabe wieder an den Commandserver schicken? Wenn ja wie?
Commandserver:
[CONFIG];
ACTIVE;YES
SERVERIP;xxx.xxx.xxx.xxx
SERVERPORT;8222
SERVERMODE;ASCII
SERVERTIMEOUT;NONE
SERVERPROTOCOL;UDP
MATCHING=FULL
[COMMANDS];
SEND;\#;
Filme;Filme
25;25
TV;TV
ALBEN;Alben
INTERPRET;Interpret
SONGS;Songs
[MAPPINGS]
--------------------------------------------------------------------------------------
Perl Script:
# Server Program
use IO::Socket::INET;
print ">> XBMC JSON <<\n";
# Create a new socket
$MySocket=new IO::Socket::INET->new(LocalPort=>8222,Proto=>'udp');
# Keep receiving messages from client
$def_msg="\nReceiving message from client.....\n";
while(1)
{
$MySocket->recv($text,128);
if($text ne '')
{
if ($text=~/Filme/) {
system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetMovies');
}
{
if ($text=~/25/) {
system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetRecentlyAddedMovies');
}
{
if ($text=~/TV/) {
system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetTVShows');
}
{
if ($text=~/Alben/) {
system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetAlbums');
}
{
if ($text=~/Interpret/) {
system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetArtists');
}
{
if ($text=~/Songs/) {
system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetSongs');
}
print "\nReceived message '", $text,"'\n";
}
}
}
}
}
}
}
Klaus
Ankündigung
Einklappen
Keine Ankündigung bisher.
[mmh] Mappingbeispiel Commandserver XBMC
Einklappen
X
-
Hallo,
die HTTP API von XBMC soll von JSON-RPC abgelöst werden. Ist es möglich in der aktuellen Version einen Commandserver für die neue Schnittstelle zu XBMC zu erstellen?
Im Terminal kann man die Daten per Skript abfragen.
Python Skript zur Abfrage der Daten:
import json
import httplib, urllib
import sys
for arg in sys.argv:
print arg
url = 'http://localhost:8080'
jsonrpcurl = url + '/jsonrpc'
if len(sys.argv) > 2:
postdata = '{"jsonrpc": "2.0", "method": "' + sys.argv[1] + '", "params": ' + sys.argv[2] + ', "id": "1"}'
else:
postdata = json.dumps({'jsonrpc': "2.0", 'method': sys.argv[1], 'id': "1"})
print postdata
respdata = urllib.urlopen(jsonrpcurl, postdata).read()
print respdata
Im Terminal kann man dann mit:
python /Pfad zum Skript/xbmc.py VideoLibrary.GetMovies
zum Beispiel alle Filme der Videodatenbank abfragen oder die 10 zuletzt hinzugefügten Filme etc.
python /Pfad zum Skript/xbmc.py VideoLibrary.GetRecentlyAddedMovies '{ "start": 0, "end": 10 }'
Die Ausgabe sieht dann so aus:
{ "start": 0, "end": 10 }
{"jsonrpc": "2.0", "method": "VideoLibrary.GetRecentlyAddedMovies", "params": { "start": 0, "end": 10 }, "id": "1"}
{
"id" : "1",
"jsonrpc" : "2.0",
"result" : {
"end" : 10,
"movies" : [
{
"file" : "/Volumes/Videos/ZUSAMMEN IST MAN WENIGER ALLEIN (2007)/TITLE01-ANGLE1.VOB",
"label" : "Ensemble, c'est tout",
"movieid" : 227,
"thumbnail" : "special://masterprofile/Thumbnails/Video/f/f8f60d30.tbn"
...
Eine Liste aller commands erhält man durch JSONRPC.Introspect
Es ist ein POST HTTP REQUEST...
Wie kriegt man die Daten nach mmh?
Klaus
Einen Kommentar schreiben:
-
Ein Gast antworteteIch bin stolz auf Dich... wenigstens mal jemand der das Handbuch liestMap String=OK
mmh-Bezeichnung=OK
Action=keine
ONCHANGE=keine
Bedingung=?
"Bedingung=" ist korrekterweise eine Formatoption ähnlich Regex...
Handbuch Kapitel 4.4.1 Seite (33)
...
%r steht für "replace" und ersetzt entsprechend Zeichenketten... in Deinem Fall hast das ja richtig erkannt.
Wird auch gern genommen um Werte zu berechnen wenn zB bei komischen Protokollen wie dem Russound die Lautstärke in HEX und dann noch in einem Bereich von 00h - 32h kommt und Du das in 0-100% wandeln möchtest... oder eben die ekligen %20 bei Webabfragen durch Leerzeichen ersetzen möchtest... oder, oder, oder....
LG
Einen Kommentar schreiben:
-
Super Support! Funktioniert.
Beim Verstehen hapert es noch...
{Map String};{mmh-Bezeichnung};{Action};ONCHANGE;{Bedingung}
<record><field>\*</field></record></html>;VIDEODATENBANK;;;{%r</field></record><record><field>,|}
Map String=OK
mmh-Bezeichnung=OK
Action=keine
ONCHANGE=keine
Bedingung=?
</field></record><record><field> wird durch | ersetzt
Das funktioniert nur mit %r
In der Doku steht was mit \% ignoriert beliebig viele Zeichen...
Was macht %r
Würdet ihr mir das erklären?
Klaus
Einen Kommentar schreiben:
-
Ein Gast antworteteNach 30 Minuten Brainstorming mit Sascha kommen wir auf folgende Lösung:
<record><field>\*</field></record></html>;VIDEODATENBANK;;;{%r</field></record><record><field>,|}
Wie heißt es doch so schön, entdecke die Möglichkeiten....
Sascha hat es ausprobiert, Ergebnis:
<TEST>VIDEODATENBANK=What Dreams May Come|Lock, Stock and Two Smoking Barrels|OK</TEST>

<TEST>, weil Sascha's CServer so benannt
Fragen ?
LG
Einen Kommentar schreiben:
-
Ein Gast antworteteversuche mal so:
[MAPPINGS]
<record><field>\*</field></record></html>;VIDEODATENBANK
LG
Einen Kommentar schreiben:
-
Ok hartnäckig bleiben
Im xbmc commandserver habe ich unter Mappings folgendes definiert:
[MAPPINGS]
<html>\0x0A<record><field>\*</field></record></html>\0x0A;VIDEODATENBANK
Damit erhalte ich die gewünschte Rückmeldung sofern es sich um einen Datensatz handelt.
Abfrage Filme von James Cameron in der Datenbank
<XBMC>VIDEODATENBANK=Titanic|OK</XBMC>
Abfrage Filme von Guy Ritchie in der Datenbank
<XBMC>VIDEODATENBANK=Lock, Stock and Two Smoking Barrels</field></record><record><field>Snatch.</field></record><record><field>RocknRolla|OK</XBMC>
Wie kann man die tags von der Rückmeldung ausschließen und alle Datensätze zwischen den beiden </record><record als Liste an mmh übergeben.
Gewünschtes Ergebnis
<XBMC>VIDEODATENBANK=Lock, Stock and Two Smoking Barrels|Snatch.|RocknRolla|OK</XBMC>
Konnte in der Doku kein Beispiel zu Listen finden außer iTunes Listen und Folder Listen bei denen man nicht sieht wie es funktioniert.
Klaus
Einen Kommentar schreiben:
-
Ein Gast antworteteNe echte Kniffel Aufgabe, wer die löst kriegt einen ausgegeben
sollte aber machbar sein nur mußt Du Dich einen Moment gedulden, da recht busy und unsere ATV Schnittstelle fertig ist und ich mit meinem Editor durch bin.
Generell ist unsere Anbindung für XBMC nur ein Schnellschuss aus einem Kundenprojekt. Die Anbindung dient eigentlich nur zur Steuerung eines XBMC Clients.
Für die direkte Steuerung der Inhalte, wie Du es ja möchtest, werden wir ein AddOn bauen müssen um die XBMC request's korrekt in unserem Statusport zu posten...
LG
Einen Kommentar schreiben:
-
[mmh] Mappingbeispiel Commandserver XBMC
Hallo,
kann mir jemand helfen wie ich die Daten der folgenden Abfrage in mmh als Liste darstellen kann.
Komme mit den Mapping und Parser Optionen nicht klar.
20:38:06.211 - network: udp message from xxx.xxx.xxx.xxx, size 79 bytes
20:38:06.211 - parser: parsing sequence: <XBMC><VIDEODATENBANK=select%20c00%20from%20movie% 20where%20c07%20=1998></XBMC>
20:38:06.212 - parser: command: XBMC - VIDEODATENBANK=select%20c00%20from%20movie%20where %20c07%20=1998
20:38:06.212 - parser: reply sequence: <XBMC>VIDEODATENBANK=|OK</XBMC>
20:38:06.217 - commandserver: http send: GET /xbmcCmds/xbmcHttp?command=queryvideodatabase(select%20c00%2 0from%20movie%20where%20c07%20=1998) HTTP/1.1
20:38:06.223 - network: message parsed
20:38:06.229 - commandserver: translated reply sequence: <XBMC><html>\0x0A<record><field>What Dreams May Come</field></record><record><field>Lock, Stock and Two Smoking Barrels</field></record></html>\0x0A|OK</XBMC>
Es soll folgende Rückmeldung ausgegeben werden:
<XBMC><VIDEODATENBANK=What Dreams May Come|Lock, Stock and Two Smoking Barrels|OK</XBMC>
KlausStichworte: -


Einen Kommentar schreiben: