neues Modul: 98_MediaList.pm zur Erstellung einer Playlist für TabletUI

Begonnen von Tobias, 19 Dezember 2016, 15:55:43

Vorheriges Thema - Nächstes Thema

Shadow3561

So, habe es hinbekommen.
Hatte ein anderes Modul MediaList heruntergeladen, aus folgendem Fred https://forum.fhem.de/index.php/topic,53863.msg578201.html#msg578201.

Mit dem klappte die Übergabe der Playlist an MPD nicht.
Habe jetzt das Modul aus diesem Fred installiert und die Übergabe der Playlist klappt.
Nun besteht nur wieder das Problem, dass in keine Ordner gewechselt werden kann, die Leerzeichen erhalten.

Mfg

Tobias

Hi,
ich habe im ersten Post das Modul nochmal aktualisiert. Bitte nimm mal das.
Ich habe gerade getestet, übergabe MPD klappt, Leerzeichen in Verzeichnispfaden klappt auch.

Wenn die Übergabe an den MPD nicht klappt, musst du genau sagen wo was nicht funktioniert.
Was ist als CacheFileDir definiert?
Was steht in diesem Folder drin nachdem du auf "Play currentdir" gedrückt hast?
Was steht in m3u Datei drin?
Wie ist der MPD konfiguriert?
Was gibt der MPD bei einem "get playlists" aus?
Hast du dich an den Wikiartikel gehalten?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

accessburn

#17
Huhu,
hab das sehr interessantes Modul eingebaut und soweit funktioniert es jetzt über ein gemountetes Verzeichnis vom NAS.

Jedoch macht das FTUI 2.6.2 Probleme, kannst du mal schauen?
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

C0mmanda

Mahlzeit,

ich versuche seit Stunden das Plugin zum funktionieren zu bewegen doch leider will es nicht klappen... :(

Ich versuche MediaList mit einem MPD-Player zu verwenden.
Das einlesen usw scheint auch gut zu funktionieren.
Ich bekomme die Ordnerstruktur, die Playlist-Readings, eben alles wie es sein soll.
Der MPD-Player für sich genommen funktioniert auch.

Wenn ich jedoch die Playlist übergeben will (set <MediaList> Play playlist) stürzt FHEM sofort ab.
Im Log, auch mit verbose 4, steht nur:

Can't use an undefined value as a symbol reference at ./FHEM/98_MediaList.pm line 313.

Eine Idee wo ich hier ansetzen kann?

Danke!

gruß
CmdA

C0mmanda

Konnte das Problem nun lösen, der Fehler lag in falschen Zugriffsrechten.
Leider bin ich nur einen kleinen Schritt weiter denn funktionieren tut es noch immer nicht.

Die Playlist wird nicht (korrekt) an MPD weitergegeben.
Die Musik ist auf dem MPD-Device unter /storage/music erreichbar.

Medialist ist wie folgt eingerichtet:

define MyMediaList /media/music

Attribute:


attr MyMediaList MediaList_CacheFileDir /opt/fhem/cache/
attr MyMediaList MediaList_PathReplaceFrom /media/music/
attr MyMediaList MediaList_PathReplaceTo /storage/music/
attr MyMediaList MediaList_PathReplaceToPic /storage/music/
attr MyMediaList MediaList_PlayerDevice MPD_Kueche
attr MyMediaList MediaList_mkTempCopy symlink


Die Readings werden alle korrekt befüllt, bis hin zum playlist_json im MPD-Device.
Leider kann der MPD aber nichts abspielen, ich bekomme die Fehlermeldung "Bad Song Index".

Aufgefallen ist mir das im playlist_json Reading der Pfad nicht geändert ist. Dort steht weiterhin /media/music/.
Ich vermute es müsste hier bereits /storage/music sein.

Im Cache-Verzeichnis von FHEM wird die Playlist befüllt, allerdings mit dem Inhalt:

MyMediaList_Volbeat 13 Thanks.mp3
MyMediaList_Volbeat 04 Fallen.mp3
MyMediaList_Volbeat 10 Magic Zone.mp3
MyMediaList_Volbeat 08 16 Dollars.mp3
MyMediaList_Volbeat 02 Heaven Nor Hell.mp3
MyMediaList_Volbeat 05 A Better Believer.mp3
MyMediaList_Volbeat 03 Who They Are.mp3
MyMediaList_Volbeat 06 7 Shots.mp3
MyMediaList_Volbeat 09 A Warrior's Call.mp3
MyMediaList_Volbeat 12 Being 1.mp3
MyMediaList_Volbeat 11 Evelyn.mp3
MyMediaList_Volbeat 07 A New Day.mp3
MyMediaList_Volbeat 01 The Mirror And The Ripper.mp3


Weiterhin befinden sich dann im cache-Verzeichnis symlinks wie folgt:

MyMediaList_Volbeat 02 Heaven Nor Hell.mp3 -> /media/music/Volbeat/Beyond Hell - Above Heaven - 2010/Volbeat 02 Heaven Nor Hell.mp3


Auf dem MPD-Device selbst wird keine Playlist erstellt/gefüllt.

MPD ist gemäß Wiki konfiguriert:

auto_update "yes"
save_absolute_paths_in_playlists "no"
follow_outside_symlinks "yes"
filesystem_charset "UTF-8"
In der mpd.conf muss das Musik-Verzeichnis und das PlaylistVerzeichnis identisch sein.


Bin mit meinem Latein im Moment am Ende... :(
Bin für jede Hilfe dankbar!

gruß
CmdA

knopf_piano

Hi,
ich hab die files wie im wiki angegeben angelegt, krieg aber keine Anzeige.
wenn ich im template direkt den mpd/medialist angebe, seh ich zumindest die frames und knöpfchen...
kann einer mal eine junktionierende file-struktur der 2/3-Dateien reinhängen.
Greets!
zotac nano mit proxmox und ganz viel zeug drauf

knopf_piano

Zitat von: Petrosilius Zwackelmann am 06 Februar 2017, 21:12:38
ein
set MyMediaList Play
führt nach einigen Sekunden zum Absturz von FHEM...
hab ich auch bei mir
foldendes def bei mir:
define MyMediaList MediaList /media/data_server/music/
attr MyMediaList MediaList_CacheFileDir /media/data_server/music/____fhemTmp/
attr MyMediaList MediaList_PathReplaceFrom /media/data_server/music/
attr MyMediaList MediaList_PlayerDevice KnopfMPD
attr MyMediaList MediaList_mkTempCopy symlink


die tablet_ui hab ich irgendwie jetzt,
so ganz klappt die Anzeige bei mir noch nicht, die listen werden rechts/links hinsichtlich des aktuellen verzeichnisses nicht befüllt
ich hab die mal angehängt
zotac nano mit proxmox und ganz viel zeug drauf

Shadow3561

Zitat von: Tobias am 15 Februar 2017, 12:10:47
Hi,
ich habe im ersten Post das Modul nochmal aktualisiert. Bitte nimm mal das.
Ich habe gerade getestet, übergabe MPD klappt, Leerzeichen in Verzeichnispfaden klappt auch.

Wenn die Übergabe an den MPD nicht klappt, musst du genau sagen wo was nicht funktioniert.
Was ist als CacheFileDir definiert?
Was steht in diesem Folder drin nachdem du auf "Play currentdir" gedrückt hast?
Was steht in m3u Datei drin?
Wie ist der MPD konfiguriert?
Was gibt der MPD bei einem "get playlists" aus?
Hast du dich an den Wikiartikel gehalten?

Hallo,
Es klappt jetzt alles wie gewünscht.
Danke für die Hilfe.

Mfg

Tobias

Hi,
Also bei einem mpd muss das replaceto Attribut auf das in mpd definierte music Verzeichnis zeigen. Wie im Wiki beschrieben muss das das music und playlist Verzeichnis dasselbe sein.

Gesendet von meinem Leap mit Tapatalk

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

C0mmanda

Also ich versuche seit 2 Tagen das Modul ans laufen zu bekommen aber es will einfach nicht klappen.... (siehe 5 Postings weiter oben).

Irgendwo liegt noch ein Fehler, es kommt einfach keine Playlist bei MPD an.
Müssen noch irgendwelche speziellen Dateirechte beachtet werden?
Wie wird die Playlist überhaupt an MPD übertragen?

Tobias

Zitat von: C0mmanda am 19 Februar 2017, 20:32:41
Also ich versuche seit 2 Tagen das Modul ans laufen zu bekommen aber es will einfach nicht klappen.... (siehe 5 Postings weiter oben).

Irgendwo liegt noch ein Fehler, es kommt einfach keine Playlist bei MPD an.
Müssen noch irgendwelche speziellen Dateirechte beachtet werden?
Wie wird die Playlist überhaupt an MPD übertragen?
Also, nun mal zu dir: Das cachefiledir muss dementsprechend auch auf /storage/music zeigen.
Das replaceTo benötigst du nicht

technisch fuktioniert es  beim MPD so:

1. Die abzuspielenden mp3s werden in das CachefileDir = MPD MusicDir per symlink gelegt. Damit sind sie für den MPD zugreifbar
2. Die Dateien werden ohne Pfad in die Playlist Datei m3u aufgenommen. Die Playlist liegt ebenfalls im CachefileDir = MPD PlaylistDir
3. Der MPD kann nun auf die Playliste und auf die Dateien zugreifen und spielt sie ab
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

C0mmanda

Zitat von: Tobias am 21 Februar 2017, 13:35:34
Also, nun mal zu dir: Das cachefiledir muss dementsprechend auch auf /storage/music zeigen.
Das replaceTo benötigst du nicht

technisch fuktioniert es  beim MPD so:

1. Die abzuspielenden mp3s werden in das CachefileDir = MPD MusicDir per symlink gelegt. Damit sind sie für den MPD zugreifbar
2. Die Dateien werden ohne Pfad in die Playlist Datei m3u aufgenommen. Die Playlist liegt ebenfalls im CachefileDir = MPD PlaylistDir
3. Der MPD kann nun auf die Playliste und auf die Dateien zugreifen und spielt sie ab

Danke für die Erläuterung.
Ich denke dann weiß ich auch wo das Problem liegt.
Der MPD-Player läuft auf einem anderen Client als FHEM. Da kann dein Plugin natürlich nicht einfach in das MPD-music-dir schreiben.
Ich dachte die Playlist wird per JSON oder sowas übertragen...

Denke das kann ich nur lösen wenn ich das MPD-music-dir auf dem FHEM-Client mounte.

Melde mich wenn ich das ausprobieren konnte :)

Danke!
grtz

Tobias

Zitat von: knopf_piano am 18 Februar 2017, 20:48:24
hab ich auch bei mir

so ganz klappt die Anzeige bei mir noch nicht, die listen werden rechts/links hinsichtlich des aktuellen verzeichnisses nicht befüllt

Wenn fhem abstürzt, passen meinstens die Berechtigungen des cacheFileDirs nicht. Das habe ich leider noch nicht mit einem eval abgefangen.
Wenn das TabletUI leer bleibt, müssen auch die Readings "playlist_current" und "playlist" im MediaList-Device leer bleiben. "playlist_current" bleibt nur dann leer wenn im aktuell gewählten Verzeichnis keine *.mp3" Dateien gefunden werden
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

C0mmanda

Ich habs nun ENDLICH hinbekommen.

Musik liegt auf einem NAS:

MPD-Device (RasPi): Musiklaufwerk gemountet auf "storage/music".
FHEM-Device (Intel NUC): Musiklaufwerk ebenfalls gemountet auf "storage/music".

(Die richtigen Schreibrechte haben mir etwas zu schaffen gemacht :( )
Es funktioniert auch nur wenn ich auf beiden Devices die gleiche Ordnerstruktur beim mounten verwende.



MyMedialist attr cacheFileDir /storage/music/
MyMediaList attr PlayerCommand playlist KUE_MPD
MyMedialist attr mkTmpCopy none


Damit funktioniert es nun endlich.

Schick wäre jetzt noch wenn auch *.m4a Dateien unterstützt würden, da habe ich nämlich einige von.
Wäre das möglich?

gruß
CmdA

Tobias

Hi,
ZitatEs funktioniert auch nur wenn ich auf beiden Devices die gleiche Ordnerstruktur beim mounten verwende.
Eigentlich nicht, du musst natürlich die MediaList Definition und das Cachefiledir anpassen.
Bei Sonos Geräten ist das einfacher... die können echte UNC Pfade....

m4a Dateien gehen auch mit anpassung, ungetestet:

Suche mal nach
return undef if ($file !~ m/\.mp3$/i);   # keine mp3 Endung
ersetze durch
return undef if ($file !~ m/(\.mp3|\.m4a)$/i);   # keine mp3/m4a Endung

Allerdings weiß ich dann nicht, wie sich die genutzten mp3 Bilbliotheken verhalten
use MP3::Tag;
use MP3::Info;
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter