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

Tobias

ist mir unbegreiflich, da es bei mir fehlerfrei funktioniert.....

er meckert bei Zeile 610:
open($fh, ">>", $file) or die "Datei nicht gefunden";

sieht stark nach einem Rechteproblem bei dir aus....
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

dirk.k

Hallo zusammen,
ich bin vom MediaList-Modul schwer begeistert.
Nur ... bei mir laufen FHEM und MPD auf unterschiedlichen Geräten. Und nur am MPD kann ich einen USB-Stick verwenden.
Diesen habe ich dort gemountet und kann direkt vom MPD aus auch die Songs abspielen.
Aber MediaList sieht dieses (aus FHEM-Sicht) entfernte Dateisystem ja gar nicht. Oder liege ich falsch?
Gibt es eine Möglichkeit mittels MediaList einen entfernten MPD mit seinen lokalen Verzeichnissen zu bedienen?


Tobias

einfach nur boardmittel. Das Dateisystem des MPD per NFS oder SMB freigeben und in FHEM für die Medialist einmounten. Parameter des Moduls setzen - fertig
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

dirk.k

OK, danke.
Das hat mir schon mal etwas weitergeholfen.
Ich habe das MPD-Server-Media-Verzeichnis per NFS freigegeben und am FHEM-Server unter dem gleichen Verzeichnisnamen gemountet.
MediaList kann das Verzeichnis durchsuchen und erstellt auch das leere playlist-File in der Freigabe.
Mehr passiert leider nicht.
Play currentdir //playlist_add bleiben leider ohne Wirkung.
Im Event-Monitor ist ausser 2019-07-28 21:12:39 MediaList MPDMediaList FolderContent: Back:01_So_Far_Away.mp3:02_Money_For_Nothing.wav:03_Walk_Of_Life.wav:04_Your_Latest_Trick.wav:05_Why_Worry.wav:06_Ride_Across_The_River.wav:07_The_Man's_Too_Strong.wav:08_One_World.wav:09_Brothers_In_Arms.wav
2019-07-28 21:12:39 MediaList MPDMediaList CurrentDir: /media/pi/Dire_Straits/Brothers_In_Arms
2019-07-28 21:12:39 MediaList MPDMediaList SelectedItem: /media/pi/Dire_Straits/Brothers_In_Arms
2019-07-28 21:12:39 MediaList MPDMediaList status: gathering filelist
nichts zu finden.

meine Definition

Internals:
   DEF        /media/pi
   FUUID      5c44d12c-f33f-ed2c-e37d-321c674f7fbae979
   NAME       MPDMediaList
   NR         253
   ROOT       /media/pi
   STATE      ???
   TYPE       MediaList
   .attraggr:
   .attrminint:
   READINGS:
     2019-07-28 21:12:39   CurrentDir      /media/pi/Dire_Straits/Brothers_In_Arms
     2019-07-28 21:12:39   FolderContent   Back:01_So_Far_Away.mp3:02_Money_For_Nothing.wav:03_Walk_Of_Life.wav:04_Your_Latest_Trick.wav:05_Why_Worry.wav:06_Ride_Across_The_River.wav:07_The_Man's_Too_Strong.wav:08_One_World.wav:09_Brothers_In_Arms.wav
     2019-07-28 21:12:39   SelectedItem    /media/pi/Dire_Straits/Brothers_In_Arms
     2019-07-28 21:05:22   currentdir_playlist []
     2019-07-28 21:05:22   currentdir_playlistduration 0
     2019-07-28 20:51:46   playlist        []
     2019-07-28 20:51:46   playlistduration 0
     2019-07-28 19:22:32   playlistname    WifiRadio
     2019-07-28 21:05:22   sortby          File
     2019-07-28 21:12:39   status          gathering filelist
   helper:
     RUNNING_PID:
       abortArg   
       abortFn   
       arg        MPDMediaList|/media/pi/Dire_Straits/Brothers_In_Arms
       bc_pid     1118
       finishFn   MediaList_done_playlistinfo
       fn         MediaList_CollectID3Tags
       pid        DEAD:3808
       timeout    120
Attributes:
   MediaList_CacheFileDir /media/pi/
   MediaList_PathReplaceFrom /media/pi/
   MediaList_PathReplaceTo /media/pi/
   MediaList_PlayerDevice WifiRadio
   MediaList_mkTempCopy symlink
   group      MediaPlayer
   room       1.1_Wohnzimmer
   verbose    5
 

Tobias

Es müssen mp3 Dateien sein


Gesendet von iPhone 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

dirk.k

das ändert leider auch nichts..
Die Parameter für die Pfade könnten so passen?

Internals:
   DEF        /media/pi
   FUUID      5c44d12c-f33f-ed2c-e37d-321c674f7fbae979
   NAME       MPDMediaList
   NR         253
   ROOT       /media/pi
   STATE      ???
   TYPE       MediaList
   .attraggr:
   .attrminint:
   READINGS:
     2019-07-29 18:21:37   CurrentDir      /media/pi/Otto/2001otto
     2019-07-29 18:21:37   FolderContent   Back:03-Friesenjung.mp3:04-Ostfriese.mp3:24-Schlaflied.mp3:26-Dummasack.mp3:Titanic.mp3
     2019-07-29 18:21:37   SelectedItem    /media/pi/Otto/2001otto
     2019-07-29 18:21:35   currentdir_playlist []
     2019-07-29 18:21:35   currentdir_playlistduration 0
     2019-07-28 21:29:11   playlist        []
     2019-07-28 21:29:11   playlistduration 0
     2019-07-28 19:22:32   playlistname    WifiRadio
     2019-07-29 18:21:35   sortby          File
     2019-07-29 18:21:37   status          gathering filelist
   helper:
     RUNNING_PID:
       abortArg   
       abortFn   
       arg        MPDMediaList|/media/pi/Otto/2001otto
       bc_pid     12017
       finishFn   MediaList_done_playlistinfo
       fn         MediaList_CollectID3Tags
       pid        DEAD:10977
       timeout    120
Attributes:
   MediaList_CacheFileDir /media/pi/
   MediaList_PathReplaceFrom /media/pi/
   MediaList_PathReplaceTo /media/pi/
   MediaList_PlayerDevice WifiRadio
   MediaList_mkTempCopy none
   group      MediaPlayer
   room       1.1_Wohnzimmer
   verbose    5

Tobias

das cachefiledir muss das playlistdir vom MPD und von diesem auch scheibbar sein.
Dort hinein wird die m3u Datei vom modul geschrieben.
Erstelle mal dort selbst eine und übergeben die per Hand dem MPD. dann muss er sie auch abspielen.

Irgendwo ist bei dir der wurm drin warum currentdir_playlist leer ist. Diese ist gefüllt, sobald im currentDir sich mp3 dateien befinden

Erst das Probelm mit dem MPD playlistdir lösen, dann fehlermeldungen im fhem log checken
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

TomLee

Hallo,

das Problem das sich currentdir_playlist nicht füllt hab ich auch gerade.

Auf meiner alten Installation hatte ich keine Probleme mit MediaList, auf der Neuen wollte ich jetzt die alte Definition einfach übernehmen, geändert hat sich eigentlich nichts außer der Name des Sonos-Device, aber Pustekuchen.

Der  Wechsel ins RootDirectory mit set <MediaList> RequestedDirectory / klappt noch ohne Probleme, doch mit jeder Auswahl eines Verzeichnis mit set <MediaList> RequestedDirectory <SubDirName>  bekomm ich folgenden Hinweis im Log und das Reading currentdir_playlist wird auch nicht gefüllt:

Undefined subroutine &math::round called at ./FHEM/98_MediaList.pm line 585.



Internals:
   DEF        /media/usbstick/Privat/Musik
   FUUID      5d403bac-f33f-78f5-1eec-a506d680508768f3
   NAME       MyMediaList
   NR         194
   ROOT       /media/usbstick/Privat/Musik
   STATE      ???
   TYPE       MediaList
   READINGS:
     2019-08-03 17:06:31   CurrentDir      /media/usbstick/Privat/Musik/Toene
     2019-08-03 17:06:31   FolderContent   Back:Airhorn.mp3:Doorbell.mp3:Doorbell2.mp3:Fax-Beep.mp3:Ring.mp3:Sirene.mp3:Temple.mp3
     2019-08-03 17:06:31   SelectedItem    /media/usbstick/Privat/Musik/Toene
     2019-08-03 17:06:14   currentdir_playlist []
     2019-08-03 17:06:14   currentdir_playlistduration 0
     2019-08-03 17:06:14   sortby          File
     2019-08-03 17:06:31   status          gathering filelist
   helper:
     RUNNING_PID:
       abortArg   
       abortFn   
       arg        MyMediaList|/media/usbstick/Privat/Musik/Toene
       bc_pid     3384
       finishFn   MediaList_done_playlistinfo
       fn         MediaList_CollectID3Tags
       pid        DEAD:18202
       timeout    120
Attributes:
   MediaList_PathReplaceFrom /media/usbstick/Privat/Musik
   MediaList_PathReplaceTo \\192.168.188.26/OwnMusic/
   MediaList_PlayerDevice Sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
   MediaList_mkTempCopy none
   room       Media


sudo apt-get install libmp3-tag-perl
sudo apt-get install libjson-xs-perl
sudo apt-get install libmp3-info-perl
sudo apt-get install libmath-round-perl


Hat jemand Tipps wie ich dem Problem auf die Schliche komme ?

Gruß

Thomas

dirk.k

Hi,
genau das gleiche wie bei mir. Nur bekomme ich die Meldung im Log nicht (oder finde sie nicht)
Wechsle ich in ein Verzeichnis ohne Musik (nur Unterverzeichnisse), bekomme ich nahezu sofort im reading status="idle".
Wechsle ich in ein Verzeichnis mit Musik bleibt das Reading status auf "gathering filelist".

Im Playlist-Verzeichnis (MediaList_CacheFileDir) kann ich vom FHEM-Server aus Dateien erstellen und liegen die Playlists für die Radiosender und die automatisch erstellte Playlist für den USB-Stick. All das funktioniert und kann vom MPD-Device aus gewählt/abgespielt werden. 


Tobias

versucht bitte mal folgendes im Modul zeile 585 zu ersetzen:
alt:
$res = {"Artist" => $artist, "Title" => $title, "Album" => $album, "Time" => math::round($mp3info->{SECS}), "File" => $file, "Cover" => ""};
neu:
$res = {"Artist" => $artist, "Title" => $title, "Album" => $album, "Time" => round($mp3info->{SECS}), "File" => $file, "Cover" => ""};
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

TomLee

Hallo,

dann kann das Modul wegen einem fehlendem Argument nicht mehr geladen werden.

Wenn ich die Funktion um 2 Kommastellen (keine Ahnung wieviele es sein müssen) erweitere round($mp3info,2->{SECS} wird das Modul geladen.
Nach dem Wechsel ins RootDirectory und ausführen von set <MediaList> RequestedDirectory <SubDirName>  wird jetzt auch currentdir_playlist gefüllt.
Aber mit set <MediaList> Play currentDir startet FHEM neu und ich hab folgendes als letztes im Log stehen:

2019.08.13 09:10:37 1: PERL WARNING: Use of uninitialized value $n in concatenation (.) or string at ./FHEM/99_Utils.pm line 244.
Can't call method "print" on an undefined value at ./FHEM/98_MediaList.pm line 329.

Tobias

also die Kommastellen erweiterung sagt mir leider nichts. Meine gepostete Änderungläuft bei mir sauber. Ggf. hast du eine andere Perlversion?

Mache mal bitte einen kompletten FHEM Neustart. Die Print Methode gehört zum Datei-Prozess und muss funktionieren.
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

TomLee

2019.08.13 10:48:10 1: reload: Error:Modul 98_MediaList deactivated: Not enough arguments for main::round at ./FHEM/98_MediaList.pm line 585, near "})"

Hab ich im Log, ohne Kommastellen-Erweiterung.
Wo das genau beschrieben ist keine Ahnung, hätte erwartet hier, gelesen hab ichs hier.


perl -v

This is perl 5, version 24, subversion 1 (v5.24.1) built for arm-linux-gnueabihf-thread-multi-64int
(with 85 registered patches, see perl -V for more detail)




ZitatWurde das MediaList_ReplaceFrom und(!) MediaList_ReplaceToAttibut gesetzt, so wird diese Regel auf den absoluten Dateipfad hier angewendet.
Hab ich ja gesetzt, sollte ich dann nicht eine .m3u im entsprechenden Ordner sehen, find nämlich keine.

Tobias

Dann müsste es aber so sein
round($mp3info->{SECS},0)

btw: mir fällt gerade nicht ein warum ich damals die round Funktion eingebaut hatte.
Probier mal sie einfach rauszunehmen
$res = {"Artist" => $artist, "Title" => $title, "Album" => $album, "Time" => $mp3info->{SECS}, "File" => $file, "Cover" => ""};
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

TomLee


round($mp3info->{SECS},0)

Ja, dann werden die Sekunden richtig berechnet.


"Time" => $mp3info->{SECS}

Dann werden aus bspw. 252 Sekunden 252.1763125




2019.08.13 14:27:49 1: SONOS4: Restore-Thread gestartet. Warte auf Arbeit... Can't call method "print" on an undefined value at ./FHEM/98_MediaList.pm line 329.

Mit dem abspielen hab ich aber weiterhin ein Problem, weiß nicht mehr wie das auf der alten Installation, es sollte doch nach einem set <MediaList> RequestedDirectory <SubDirName> eine .m3u im absoluten Pfad zu finden sein oder nicht ?

Internals:
   DEF        /media/usbstick/Privat/Musik
   FUUID      5d403bac-f33f-78f5-1eec-a506d680508768f3
   NAME       MyMediaList
   NR         194
   ROOT       /media/usbstick/Privat/Musik
   STATE      ???
   TYPE       MediaList
   READINGS:
     2019-08-13 14:32:57   CurrentDir      /media/usbstick/Privat/Musik/Birdy
     2019-08-13 14:32:57   FolderContent   Back:Wings.mp3
     2019-08-13 14:32:57   SelectedItem    /media/usbstick/Privat/Musik/Birdy
     2019-08-13 14:32:58   currentdir_playlist [{"Time":252.1763125,"Artist":"","File":"/media/usbstick/Privat/Musik/Birdy/Wings.mp3","Album":"","Cover":"images/cd-empty.png","Title":"Wings"}]
     2019-08-13 14:32:58   currentdir_playlistduration 252
     2019-08-13 14:32:58   sortby          File
     2019-08-13 14:32:58   status          idle
   helper:
Attributes:
   MediaList_PathReplaceFrom /media/usbstick/Privat/Musik
   MediaList_PathReplaceTo \\192.168.188.26/OwnMusic/
   MediaList_PlayerDevice Sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
   MediaList_mkTempCopy none
   room       Media