Module für XBMC

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

Vorheriges Thema - Nächstes Thema

P.A.Trick

#135
2014.06.01 21:11:43 5: XBMC_ProcessRead
2014.06.01 21:11:43 5: No PARTIAL buffer
2014.06.01 21:11:43 5: XBMC_Read: Incoming data: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615011,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:43 3: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615011,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:43 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615011,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:43 3: XBMC_Read: Tail:
2014.06.01 21:11:43 3: XBMC_Read: PARTIAL:
2014.06.01 21:11:50 1: Perfmon: possible freeze starting at 21:11:44, delay is 6.992
2014.06.01 21:11:51 5: XBMC_ProcessRead
2014.06.01 21:11:51 5: No PARTIAL buffer
2014.06.01 21:11:51 5: XBMC_Read: Incoming data: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615012,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615013,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"Audio
2014.06.01 21:11:51 3: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615012,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615013,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"Audio
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615012,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615013,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Tail: {"jsonrpc":"2.0","method":"Audio
2014.06.01 21:11:51 3: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"Audio
2014.06.01 21:11:51 5: XBMC_ProcessRead
2014.06.01 21:11:51 5: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"Audio
2014.06.01 21:11:51 5: XBMC_Read: Incoming data: Library.OnUpdate","params":{"data":{"id":615014,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615015,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"dat
2014.06.01 21:11:51 3: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615014,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615015,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"dat
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615014,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615015,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Tail: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"dat
2014.06.01 21:11:51 3: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"dat
2014.06.01 21:11:51 5: XBMC_ProcessRead
2014.06.01 21:11:51 5: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"dat
2014.06.01 21:11:51 5: XBMC_Read: Incoming data: a":{"id":615016,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615017,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"
2014.06.01 21:11:51 3: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615016,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615017,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615016,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615017,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Tail: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"
2014.06.01 21:11:51 3: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"
2014.06.01 21:11:51 5: XBMC_ProcessRead
2014.06.01 21:11:51 5: XBMC_Read: PARTIAL: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"
2014.06.01 21:11:51 5: XBMC_Read: Incoming data: sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615019,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Current processing buffer (PARTIAL + incoming data): {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"sender":"xbmc"}}{"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615019,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615018,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Decoding JSON message. Length: 112 Content: {"jsonrpc":"2.0","method":"AudioLibrary.OnUpdate","params":{"data":{"id":615019,"type":"song"},"sender":"xbmc"}}
2014.06.01 21:11:51 3: XBMC_Read: Tail:
2014.06.01 21:11:51 3: XBMC_Read: PARTIAL:
2014.06.01 21:11:52 5: XBMC_ProcessRead
2014.06.01 21:11:52 5: No PARTIAL buffer


Ich habe mal im Webfrontend das Dashboard und dann das Logfile anzeigen geklickt. SCheinbar verschluckt er sich dann und füllt PARTIAL! Was heißt das denn genau?
Immerhin ist fhem bisher noch nicht abgestürzt!

UPDATE
Läuft schon 15 Minuten! Sieht gut aus! :-)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

vbs

PARTIAL ist erstmal nix Schlimmes. Ist ein interner Zwischenpuffer. Es kann immer sein, dass eine Nachricht in zwei (oder mehr) Teilen von XBMC kommt. Da fhem die Nachricht erst verarbeiten kann, wenn alle Teile eingegangen sind, sammelt fhem alle Teile in PARTIAL bis der letzte Teil der Nachricht eingetroffen ist und verarbeitet sie dann.
Es ist nur wichtig, DASS alle übrigen Teile irgendwann eintreffen und PARTIAL danach wieder leer ist. Wenn da drin irgendwelche Reste verbleiben, dann ist das schlecht...

Klingt ja erstmal gut, ich hoffe, es bleibt stabil ;)

P.A.Trick

Lief gestern ein paar Stunden durch - ich denke das Stabilitätsproblem können wir abhaken!

Nun zur Apptime Analyse - schaue dir mal den Screenshot an!
Ich hätte gedacht, dass solche "Delays" nicht mehr auftauchen, oder?
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

vbs

#138
Wow, sehr interessante Sache. Das kannte ich noch nicht. Weißt du zufällig, was der Unterschied zwischen "max" und "maxDly" ist? Bzw was MaxDly generell bedeutet?

Anyway, die Funktion "CheckConnection" ist neu und wird 1x pro Minute aufgerufen um zu gucken, ob XBMC noch da ist (nur wenn es denn läuft). Die Funktion wird jedoch synchron, also direkt im fhem-Thread aufgerufen. Also wenn die Funktion mal hängt, dann hängt auch fhem.
Werde mal versuche, diese Funktion im Hintergrund aufzurufen, aber ich hab so spontan noch keine richtig gute Idee dazu.

Muss mir jetzt erstmal dieses "apptime" besorgen... Danke für den Tip.

justme1968

vielleicht habt ihr lust mal das sandbox konzept von hier: http://forum.fhem.de/index.php/topic,18275.msg173732.html#msg173732zu probieren.

damit könnte man ein xbmc deivce komplett in einen eigenen prozess auslagern und muss sich um nichts weiter kümmern:define [sandbox] xbmc XBMC ...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Sehr sehr interessante Sache dieses apptime  8)

@P.A.Trick
Also aus deinen Werten werde ich gar nicht schlau, ehrlich gesagt. Du hast ja bei allen Funktionen maximale Ausführungszeiten jenseits von 10 Sekunden gehabt :o Sieht für mich etwas fishy aus...
Zu XBMC: Also XBMC hat eigentlich *fast* kein Verzögerung. Es gibt jedoch genau einen Moment, wo es für mehrere Sekunden hängt: Und zwar wenn man XBMC auschaltet und dann in dem Momemt, in dem fhem das merkt. Fhem schickt einen Ping an XBMC und wartet 3 Sekunden auf Antwort. Ich glaub, er versucht es sogar zweimal, so dass man in dem Moment auf 6 Sekunden Verzögerung kommt.
Ob das schlimm ist, weiss ich nicht, da es wirklich nur einmalig auftritt, wenn man XBMC ausschaltet.
Hab jedoch eben diesen ganzen Mechanismus nochmal etwas umgebaut. Damit ist auch dieser 6-Sekunden-Hänger besser, liegt jedoch immer noch bei 1 Sekunde. Aber besser bekomm ichs nicht hin, denk ich. Ist aber auch ok, ist mehr so der sportliche Ehrgeiz :D Der Haken ist, dass das Erkennen von dem XBMC Shutdown nun bis zu zwei (anstatt einer) Sekunde dauern kann. Das kann aber mit dem Attribut "pingInterval" noch getunt werden.

Hab die Version mal angehängt, ist aber noch sehr wenig getestet. Kann also auch ins Auge gehen...

Bei mir sieht das Ganze übrigens so aus:
                 name             function    max  count    total  average maxDly
            tmr-XBMC_CheckConnection      HASH(0x93ba6a8)   1021     41     1564    38.15     13 HASH(0x93ba6a8)
                      nty_wz_xbmcAll          notify_Exec   1013     19     1020    53.68      0 HASH(0x9a62150); HASH(0x93ba6a8)
                               wz_tv              STV_Set   1005      6     1005   167.50      0 HASH(0x8f2d558); wz_tv; POWEROFF
                              HMLAN0           HMLAN_Read    602    184     1136     6.17      0 HASH(0x9032078)
              FileLog_wz_hmTcWeather          FileLog_Get    126      2      176    88.00      0 HASH(0x99e0e48); FileLog_wz_hmTcWeather; CURRENT; INT; 2014-06-03_00:00:00; 2014-06-04_00:00:01; 4:wz_hmTcWeather.humidity\x3a::; 4:wz_hmTcWeather.temperature\x3a::
                     FileLog_wz_hmRt          FileLog_Get     68      2      115    57.50      0 HASH(0x98411f0); FileLog_wz_hmRt; CURRENT; INT; 2014-06-03_00:00:00; 2014-06-04_00:00:01; 4:wz_hmRt.actuator\x3a::; 4:wz_hmRt.measured-temp\x3a::; 4:wz_hmRt.desired-temp\x3a::
                                 WEB              FW_Read     68    211     7134    33.81      0 HASH(0x8c45bd8)

Also XBMC_CheckConnection  liegt normalerweise so um die 40 ms. Jedoch hat einen Ausreißer von 1 Sekunde. Das war der Moment also ich XBMC ausgeschaltet habe.

@justme1968
Auch eine sehr interessante Sache, danke! Werd ich mir mit Sicherheit bei Gelegenheit mal näher zur Gemüte führen...

P.A.Trick

#141
So ich habe mal eben installiert und teste nun. Vielen Dank für deine Mühe vbs!

Edit:

Was mich eigentlich schon eine ganze Weile stört ist die (scheinbar) fehlende UTF-8 Unterstützung.
Kannst du da auch etwas dran ändern vbs?

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

P.A.Trick

Zitat von: justme1968 am 03 Juni 2014, 00:22:47
vielleicht habt ihr lust mal das sandbox konzept von hier: http://forum.fhem.de/index.php/topic,18275.msg173732.html#msg173732zu probieren.

damit könnte man ein xbmc deivce komplett in einen eigenen prozess auslagern und muss sich um nichts weiter kümmern:define [sandbox] xbmc XBMC ...

gruss
  andre

Andre, ich bin schon richtig "heiß" auf das Modul. Werde ich danach testen!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

vbs

Sorry, hab so spontan nicht so die Ideen wegen der UTF-8-Sache. Gibt es andere Module die Unicode-Zeichen erfolgreich auf der Webseite anzeigen? Ich könnte mal reingucken, wie die das machen...

justme1968

der erste schritt ist erst mal rauszufinden in welchem encoding die daten an kommen.

falls es latin1 ist gibt es ein latin1ToUtf8 in fhem.pl das du verwenden kannst.

GDS ist ein modul das du dir anschauen kannst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Hatte mir das schon im Wireshark angesehen und ich war der Meinung dort von XBMC UTF-8 gesehen zu haben. Wäre dann die Frage, wo es auf der Strecke bleibt... D.h. eigentlich sollte das alles schon gehen, wenn von XBMC korrekt UTF-8 käme?

justme1968

zeig mal so einen mitschnitt.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Sieht dann so aus:
(https://dl.dropboxusercontent.com/u/24641738/xbmcutf.png)

justme1968

das ist tatsächlich ein unicode ö.

nimm mal statt decode($ret) ein JSON->new->utf8(0)->decode($ret); oder sogar JSON->new->utf8->decode(encode('UTF-8', $ret))

und schau ob das encoding damit stimmt. das ist zumindest das was ich im netatmo und wittings modul tun muss damit es richtig ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

#149
Zitat von: justme1968 am 06 Juni 2014, 23:27:07
JSON->new->utf8->decode(encode('UTF-8', $ret))
Also prinzipiell klappt das damit. Die Strings sind dann UTF-8. Werden jedoch in Chrome falsch angezeigt (als zwei Sonderzeichen). Klappt erst nachdem ich nochmal händisch in Chrome die Kodierung auf UTF-8 gestellt habe (die aber vorher eh schon auf UTF-8 stand).
Die HTML-Seite selber hat keine Encoding-Angaben, aber die Angabe "UTF-8" kommt als HTTP-Header mit... Seltsam, scheint eine Chrome-Macke zu sein? Hat aber bei anderen Webseiten keine Probleme.

EDIT:
PS. Die Version im Anhang... P.A.Trick? Magst ma testen bei dir?