[Neues Modul] MediaPortal

Begonnen von gemx, 16 Januar 2014, 18:19:46

Vorheriges Thema - Nächstes Thema

AET_FHEM

Hallo ich hab in meinem Log auch ständig die Meldungen:

Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 191.
Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 194.
Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 197.
Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 204.
Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 210.
Use of uninitialized value in string eq at ./FHEM/70_MEDIAPORTAL.pm line 212.
Use of uninitialized value in concatenation (.) or string at ./FHEM/70_MEDIAPORTAL.pm line 215.

--> und bei ein paar Filmen hängt sich das Modul auf und damit stürzt FHEM ab ...
--> und wie gesagt Pause Play alle möglichen Commands gehen aber stop leider nicht :-(

mir wäre schon geholfen wenn die Meldungen nicht mehr kommen würden..

bekommt man das noch irgendwie in den griff?


Spiff

Hallo!

Den Fehler mit "set mediaportal command stop" habe ich gefunden: es fehlt ein Leerzeichen in Zeile 108 vor stop. So funktioniert es:
my $mpcommands=" stop record pause play rewind forward replay skip back info menu up down left right ok volup voldown volmute chup chdown dvdmenu 0 1 2 3 4 5 6 7 8 9 0 clear enter teletext red blue yellow green home basichome nowplaying tvguide tvrecs dvd playlists first last fullscreen subtitles audiotrack screenshot ";

Die ganzen Fehler im Log scheinen mit der Variable $json im Log-Teil des Moduls zu tun zu haben. Kann jemand helfen? Ich habe die Zeilen, in denen die Fehler auftauchen, fett markiert.

Vielen Dank & Grüße
Spiff

Zitatsub ProcessMessage($$) {
   my ($hash,$msg)=@_;

   my $json=decode_json($msg);
   if ($json->{Type} eq "welcome") {
      Log 5, "WELCOME received. Sending identify message.";
      DevIo_SimpleWrite($hash,GetMSG_identify($hash),0);
   } elsif ($json->{Type} eq "authenticationresponse") {
      Log 5,"AUTHRESPONSE received. SUCCESS=$json->{Success}";
      $hash->{STATE}="Authenticated. Processing messages.";
   } elsif ($json->{Type} eq "status") {
      Log 5,"STATUS received.";
      readingsBeginUpdate($hash);
      readingsBulkUpdate($hash,"IsPlaying",$json->{IsPlaying});
      readingsBulkUpdate($hash,"IsPaused",$json->{IsPaused});
      readingsBulkUpdate($hash,"Title",$json->{Title});
      readingsEndUpdate($hash,1);
   } elsif ($json->{Type} eq "volume") {
      Log 5,"VOLUME received.";
      readingsBeginUpdate($hash);
      readingsBulkUpdate($hash,"Volume",$json->{Volume});
      readingsBulkUpdate($hash,"IsMuted",$json->{IsMuted});
      readingsEndUpdate($hash,1);
   } elsif ($json->{Type} eq "nowplaying") {
      Log 5,"NOWPLAYING received.";
   } elsif ($json->{Type} eq "nowplayingupdate") {
      Log 5,"NOWPLAYINGUPDATE received.";
   } else {
      Log 5, "unhandled message received: MessageType= $json->{Type}";
   }
}

AET_FHEM

Danke für die Lösung mit dem Stop

jetzt wäre noch schön wenn man herausfinden würde wieso FHEM abstürzt bei ein paar wenigen Filmen....

justme1968

je nach plattform kann das z.b. passieren wenn umlaute oder andere nicht ascii zeichen im json string sind. eventuell nicht so kodiert wie erwartet.

die fritzbox hat damit z.b. probleme.

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

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

Spiff

Hi,

ich habe die Fehler in der Konsole behoben.
Der Code war so aufgebaut, dass manche Nachrichten an einer falschen Stelle abgeschnitten wurden, was dazu führte, dass sie nicht wie erwartet anfingen.

Außerdem habe ich Befehle für das Einstellen eines Radiosenders (playradiochannel) und das Abspielen von Playlists mit Shuffle-Funktion (playlist loadlist_shuffle / playlist loadfrompath_shuffle) hinzugefügt und die Playlist-Befehle korrigiert. Funktioniert jetzt.

Version 0.3 im Anhang.

Zu dem Problem mit deinem Absturz:
Ist das auch bei Musik so? Ich habe gerade mal eine Datei mit "Ä" im Titel abgespielt, die Übertragung der Nachrichten ist laut Log okay - nur in fhemweb wird das Ä so angezeigt: �
Probier doch so mal, ob es bei dir deswegen abstürzt, bei mir geht das - ich lasse FHEM allerdings auch auf Windows laufen.
Du könntest FHEM mal auf verbose 5 laufen lassen und die Logs ansehen. Vorher bitte in angehängter Datei das "#" vor "Log 5,"MediaPortal: RAW DATA: $buf";" entfernen, dann können wir genau sehen, was vor dem Parsen ankommt.

Viele Grüße
Spiff

justme1968

#20
wenn du aus den decode_json() aufrufen ein JSON->new->utf8(0)->decode() machst stimmen die umlaute eventuell. damit hat die fritzbox aber wirkliche probleme.

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

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

Spiff

Hi Andre,

ja, das funktioniert tatsächlich!
Was meinst du genau? Hat die Fritzbox mit utf8 Probleme oder mit dem, wie es vorher war?
Wenn mit utf8, wie könnte man das Modul so gestalten, dass die fritzbox es mag, ich meine Umlaute aber trotzdem habe? :)

Viele Grüße
Spiff

justme1968

klar funktioniert das :).

ja die fritzbox hat mit utf8 probleme. die JSON->new->utf8(0)->decode() variante schmiert komplett ab. ich weiss nicht ob immer oder nur abhängig von der perl version. schau mal im wiki da gibt es etwas zu fritzbox und utf8. der aktuelle 5.5. fhem installer bringt ein bisschen utf8 mit. aber nur wenn von grund auf installiert wird und nicht nur per update.

man kann im modul die plattform abfragen und dann abhängig davon die eine oder die andere variante aufrufen.

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

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

justme1968

ich hab gestern ins netatmo modul eine fritzbox erkennung  und das umschalten zwischen beiden dexode aufrufen eingebaut.

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

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

Spiff

Hi Andre,

dankeschön für den Tipp!
Habe ich das richtig herausgelesen?

my $netatmo_isFritzBox = undef;
sub
netatmo_isFritzBox()
{
  $netatmo_isFritzBox = int( qx( [ -f /usr/bin/ctlmgr_ctl ] && echo 1 || echo 0 ) )  if( !defined( $netatmo_isFritzBox) );

  return $netatmo_isFritzBox;
}


    if( netatmo_isFritzBox() ) {
      $json = decode_json($data);
    } else {
      $json = JSON->new->utf8(0)->decode($data);
    }


Gruß
Spiff

justme1968

ja. das ist die stelle. du solltest nur in deiner kopie überall netatmo umbenennen :)

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

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

fh168

Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

gemx

Habe gerade die V0.3 im ersten Post veröffentlicht.

Diese überarbeitung stammt komplett von spiff. Vielen Dank :)

mago0211

Hallo gmex,

ich habe dein Modul für MediaPortal gerade entdeckt da wollte ich gleich ausprobieren  8) .

Leider scheitert es schon daran das Modul zu laden da er die JSON.pm Datei nicht Localisieren kann.

Folgende Fehlermeldung:
Can't locate JSON.pm in @INC (@INC contains: /opt/fhem /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM ./FHEM/lib) at ./FHEM/70_MEDIAPORTAL.pm line 35.
BEGIN failed--compilation aborted at ./FHEM/70_MEDIAPORTAL.pm line 35.


In den angegebenen Ordnern ist die Datei auch nicht zu finden.

Ich habe das JSON Modul für Perl so Installiert wie du es im ersten Beitrag angegeben hast
cpan install JSON

unter

/home/pi/perl5/lib/perl5

konnte ich eine JSON.pm Datei finden.

Vielleicht kannst du mir helfen das gerade zu biegen?

Danke und Gruß

Markus



Spiff

Hallo Markus,

versuche doch mal, die JSON.pm in eines dieser Verzeichnisse zu kopieren:
/opt/fhem
/etc/perl
/usr/local/lib/perl/5.14.2
/usr/local/share/perl/5.14.2
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.14
/usr/share/perl/5.14
/usr/local/lib/site_perl
. ./FHEM
./FHEM/lib


Gruß
Spiff