Module für XBMC

Begonnen von Dennis B., 06 Januar 2013, 22:32:24

Vorheriges Thema - Nächstes Thema

stiftmaster

Achso,
ich dachte du hättest direkt das XBMC Modul etwas aufgebohrt.

Hm,
aber es gibt doch kein powerCmdOn Attribut im XBMC

vbs

Ja, hab ich ja auch  ;) Musst wahrscheinlich mal ein Update machen, dann sollte es das geben.

stiftmaster

#332
feature: 70_XBMC.pm: new commands poweron,poweroff. configurable by attribute powerCmd
Das gibts aber noch nicht lange  ;D

Edit:
Und läuft super :-)
Danke für Deine Mühe

Gruß
.stiftmaster

vbs

Gern doch, freut mich.

Nochmals zum Thema "Alte Readings löschen":
Sollten die alten Readings auf "-" gesetzt werden (wie von fhainz) vorgeschlagen oder besser direkt gelöscht werden? Oder macht man sowas generell besser nicht (also löschen von Readings)?

blade-of-fire

Hallo,

ich klink mich hier mal ein. Ich habe ein Problem mit dem Modul. Wenn ich den XBMC per Telnet anspreche, steigt das FHEM aus mit folgender Fehlermeldung:
malformed JSON string, neither array, object, number, string or atom, at character offset 1 (before "(end of string)") at ./FHEM/70_XBMC.pm line 303.

Die Zeile 303 im Modul lautet

my $obj = JSON->new->utf8(0)->decode($msg);

Mir ist klar, dass es was mit der utf8 Kodierung bzw. Dekodierung zu tun hat.

Wenn ich die folgenden Zeilen auskommentiere, kommen keine Fehler, allerdings haben diese Zeilen ja einen Sinn (der sich mir nicht ganz erschließt)

while($msg) {
    Log3($name, 5, "XBMC_Read: Decoding JSON message. Length: " . length($msg) . " Content: " . $msg);
    my $obj = JSON->new->utf8(0)->decode($obj);
    #it is a notification if a method name is present
    if(defined($obj->{method})) {
      XBMC_ProcessNotification($hash,$obj);
    }
    elsif(defined($obj->{error})) {
        Log3($name, 3, "XBMC_Read: Received error message: " . $msg);
    }
    #otherwise it is a answer of a request
    else {
      XBMC_ProcessResponse($hash,$obj);
    }
    ($msg,$tail) = XBMC_ParseMsg($tail);
  }


Ich hoffe, ich habe in diesem Thread die Lösung nicht überlesen. Änderungen wie JSON->new->utf8(0)->decode(encode('UTF8', $obj)); haben leider auch nichts gebracht.

Danke schonmal im Voraus :)

VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

vbs

Hm, kann ich so erstmal nicht reproduzieren. Könntest du etwas mehr Details geben bitte, was genau du machst und ein Log (mit verbose 5) erstellen? Danke!

blade-of-fire

Der Fehler kommt direkt wenn ich fhem gestartet hab und das Webinterface öffne. Der Fehler kommt nicht, wenn der HTPC (XBMC bzw. Kodi) ausgeschaltet ist. Ich vermute also, dass eine Meldung von XBMC irgendwie nicht verarbeitet werden kann. Ich kann das im Moment nicht direkt nachspielen, aber ich habe das Logging schon auf Verbose 5 gestellt und schicke dann später den Log.
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

vbs

Ok danke. Unklar ist mir aber vor allem noch der Teil "XBMC per Telnet ansprechen". Könntest du da nochmal bitte sagen, was du da genau schickst?

blade-of-fire

Oh, die Info war falsch. Ich meinte TCP, nicht Telnet. Naja, es war schon spät  8)

Ich meinte, dass ich den xbmc mit folgender Zeile im fhem angelegt habe

define wz.XBMC XBMC 192.168.178.6 tcp xbmc xbmc

Als Benutzer und Passwort habe ich das gleiche geonommen, was beim XBMC für den Zugriff aufs Webinterface eingestellt ist. Ist das richtig?
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

siggi85

#339
Zitat von: blade-of-fire am 20 Januar 2015, 09:47:08
Als Benutzer und Passwort habe ich das gleiche geonommen, was beim XBMC für den Zugriff aufs Webinterface eingestellt ist. Ist das richtig?

Korrekt.  :)



Zitat von: vbs am 19 Januar 2015, 21:38:16
Gern doch, freut mich.

Nochmals zum Thema "Alte Readings löschen":
Sollten die alten Readings auf "-" gesetzt werden (wie von fhainz) vorgeschlagen oder besser direkt gelöscht werden? Oder macht man sowas generell besser nicht (also löschen von Readings)?

Ob man Readings in FHEM ohne Probleme löschen kann, kann ich nicht sagen. Allerdings scheint das laut einer etwas älteren Aussage von justme1968 in Ordnung zu sein. Vielleicht kann er ja noch was dazu sagen?! Anbei sein Kommentar:

Zitat von: justme1968 am 22 September 2014, 14:35:21
was das anpassen der readings angeht gibt es noch einen punkt der noch offen und noch nicht ganz zuende gedacht ist.

es gab die idee das man alle readings die nicht zum aktuell abgespielten medium gehören entfernt. d.h. wenn ein film gespielt wird alles was tv serie oder musik betrifft löschen und jeweils umgekehrt und zusätzlich eine zusammenfassung in ein eigenes reading schreibt.

blade-of-fire

So, ich habe das ganze nun mal mit verbose 5 geloggt.

2015.01.20 15:52:37 0: Server started with 49 defined entities (version $Id: fhem.pl 7358 2014-12-29 16:03:31Z rudolfkoenig $, os linux, user pi, pid 5144)
2015.01.20 15:52:38 1: 192.168.178.6:9090 reappeared (wz.XBMC)
2015.01.20 15:52:38 5: XBMC_Call: Sending: {"params":{"properties":["volume","muted","name","version"]},"jsonrpc":"2.0","id":198845,"method":"Application.GetProperties"}
2015.01.20 15:52:38 5: SW: 7b22706172616d73223a7b2270726f70657274696573223a5b22766f6c756d65222c226d75746564222c226e616d65222c2276657273696f6e225d7d2c226a736f6e727063223a22322e30222c226964223a3139383834352c226d6574686f64223a224170706c69636174696f6e2e47657450726f70657274696573227d
2015.01.20 15:52:38 5: XBMC_Call: Sending: {"params":{"properties":["skin","fullscreen"]},"jsonrpc":"2.0","id":536053,"method":"GUI.GetProperties"}
2015.01.20 15:52:38 5: SW: 7b22706172616d73223a7b2270726f70657274696573223a5b22736b696e222c2266756c6c73637265656e225d7d2c226a736f6e727063223a22322e30222c226964223a3533363035332c226d6574686f64223a224755492e47657450726f70657274696573227d
2015.01.20 15:52:38 5: XBMC_Call: Sending: {"jsonrpc":"2.0","id":"793126","method":"Player.GetActivePlayers"}
2015.01.20 15:52:38 5: SW: 7b226a736f6e727063223a22322e30222c226964223a22373933313236222c226d6574686f64223a22506c617965722e476574416374697665506c6179657273227d
2015.01.20 15:52:39 5: XBMC_ProcessRead
2015.01.20 15:52:39 5: No PARTIAL buffer
2015.01.20 15:52:39 5: XBMC_Read: Incoming data: {
"id": 198845,
"jsonrpc": "2.0",
"result": {
"muted": false,
"name": "Kodi",
"version": {
"major": 14,
"minor": 0,
"revision": "ad747d9",
"tag": "stable"
},
"volume": 100
}
}
{
"id": 536053,
"jsonrpc": "2.0",
"result": {
"fullscreen": false,
"skin": {
"id": "skin.aeon.nox.5",
"name": "Aeon Nox"
}
}
}
{
"id": "793126",
"jsonrpc": "2.0",
"result": [

]
}

2015.01.20 15:52:39 5: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {
"id": 198845,
"jsonrpc": "2.0",
"result": {
"muted": false,
"name": "Kodi",
"version": {
"major": 14,
"minor": 0,
"revision": "ad747d9",
"tag": "stable"
},
"volume": 100
}
}
{
"id": 536053,
"jsonrpc": "2.0",
"result": {
"fullscreen": false,
"skin": {
"id": "skin.aeon.nox.5",
"name": "Aeon Nox"
}
}
}
{
"id": "793126",
"jsonrpc": "2.0",
"result": [

]
}

2015.01.20 15:52:39 5: XBMC_Read: Decoding JSON message. Length: 201 Content: {
"id": 198845,
"jsonrpc": "2.0",
"result": {
"muted": false,
"name": "Kodi",
"version": {
"major": 14,
"minor": 0,
"revision": "ad747d9",
"tag": "stable"
},
"volume": 100
}
}
2015.01.20 15:52:39 5: XBMC_Read: Decoding JSON message. Length: 143 Content:
{
"id": 536053,
"jsonrpc": "2.0",
"result": {
"fullscreen": false,
"skin": {
"id": "skin.aeon.nox.5",
"name": "Aeon Nox"
}
}
}
2015.01.20 15:52:39 5: XBMC_Read: Decoding JSON message. Length: 57 Content:
{
"id": "793126",
"jsonrpc": "2.0",
"result": [

]
}
2015.01.20 15:52:39 5: XBMC_Read: Decoding JSON message. Length: 1 Content:

2015.01.20 15:52:41 1: CallBlockingFn: Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt


nach dem letzten Eintrag wird fhem beendet. In der Putty Konsole steht dann
malformed JSON string, neither array, object, number, string or atom, at character offset 1 (before "(end of string)") at ./FHEM/70_XBMC.pm line 303.
Can't use an undefined value as a symbol reference at FHEM/Blocking.pm line 135.


Die benannte Zeile in Blocking.pm lautet:
  syswrite($telnetClient, "{$informFn($param)}\n");

Ich hoffe, das ihr könnt damit was anfangen :)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

vbs

#341
Bist du sicher, dass du die aktuelle Version benutzt? Bei mir ist Zeile 303 die hier:
$buffer = $hash->{PARTIAL};

Hätte eine Idee woran es liegt, aber komisch dass das nur bei dir passiert...

Ich denke nicht, dass das hier von XBMC kommt
2015.01.20 15:52:41 1: CallBlockingFn: Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt
Eine Idee wer sich bei dir lokal auf Port 7072 verbinden will?

blade-of-fire

Habe mir nochmal die neueste Version kopiert. Leider steigt es immer noch aus, allerdings an einer anderen Stelle:
malformed JSON string, neither array, object, number, string or atom, at character offset 1 (before "(end of string)") at ./FHEM/70_XBMC.pm line 318.


Wegen der Telnetmeldung:
mmh, keine Ahnung
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

vbs

#343
Hm, ich denke, dass es daran liegt, dass hinter der letzten JSON-Nachricht noch ein Whitespace-Zeichen kommt. Das wird dann versucht als JSON-Nachricht zu lesen. Da ist der Parser nicht drauf vorbereitet. Probier mal bitte die Version im Anhang.

blade-of-fire

Super, vielen dank, nun funktioniert es :)
Aber seltsam, dass nur ich das Problem hatte  ::)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino