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

das liegt an der obigen fehlermeldung, er kann nicht in die Datei schreiben. Dementsprechend gibt es auch keine ;) Eventuell ein Berechtigungsproblem für den fhem user??
Setze mal das CacheFileDir wie in der Doku auch angegeben ;) eventuell liegts daran
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

Tobias

Ich habe das Modul in meinem Repo bzgl des round Problems aktualisiert, bitte testen
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 Tobias,
nach manuellem Entfernen des round-Eintrages liest mein System das Dateisystem und erstellt auch die Playlist.
Da diese dann zwischen den anderen Playlists des MPD liegt, kann ich sie vom MPD aus wählen und sie funktioniert.

Von medialist aus bekomme ich das noch nicht zum laufen.
Weder "set MPDMediaList play currentdir" noch "set MPDMediaList play playlist" zeigen eine Wirkung.
Internals:
   DEF        /media
   FUUID      5c44d12c-f33f-ed2c-e37d-321c674f7fbae979
   NAME       MPDMediaList
   NR         251
   ROOT       /media
   STATE      ???
   TYPE       MediaList
   .attraggr:
   .attrminint:
   READINGS:
     2019-08-15 13:32:05   CurrentDir      /media/pi/music/test
     2019-08-15 13:32:05   FolderContent   Back:Enya-Watermark.mp3
     2019-08-15 13:32:05   SelectedItem    /media/pi/music/test
     2019-08-15 13:32:06   currentdir_playlist [{"Cover":"https://is4-ssl.mzstatic.com/image/thumb/Music118/v4/43/51/51/43515106-87b2-c8f0-8f9f-42272f2ecee4/source/100x100bb.jpg","Artist":"Enya","File":"/media/pi/music/test/Enya-Watermark.mp3","Album":"Paint The Sky With Stars - The","Time":146.677551020408,"Title":"Watermark"}]
     2019-08-15 13:32:06   currentdir_playlistduration 146.677551020408
     2019-08-14 21:41:00   playlist        [{"File":"/media/pi/music/test/Enya-Watermark.mp3","Artist":"Enya","Cover":"https://is4-ssl.mzstatic.com/image/thumb/Music118/v4/43/51/51/43515106-87b2-c8f0-8f9f-42272f2ecee4/source/100x100bb.jpg","Title":"Watermark","Time":146.677551020408,"Album":"Paint The Sky With Stars - The"}]
     2019-08-14 21:41:00   playlistduration 146.677551020407
     2019-07-30 19:34:49   playlistname    WifiRadio
     2019-08-15 13:32:06   sortby          File
     2019-08-15 13:32:06   status          idle
   helper:
Attributes:
   MediaList_CacheFileDir /media/pi/playlists/
   MediaList_PathReplaceFrom /media/pi/
   MediaList_PathReplaceTo /media/pi/
   MediaList_PlayerDevice WifiRadio
   MediaList_mkTempCopy none
   group      MediaPlayer
   room       1.1_Wohnzimmer
   verbose    5
 

mein MDP heist:
NAME       WifiRadio

Tobias

Hi,
wichitg ist, das ein "set MPDMediaList play *" dir die playlist aufbaut.
Bei meinem MPD funktioniert das leider auch nicht, das diese dann auch sofort abgespielt wird. Ich muss nach ein paar sekunden immer nochmal ein "set MPD start playlist" absetzen. Das liegt aber am MPD selbst da er einen Augenblick benötigt um die neuen Files in seine Bibliothek aufzunehmen. Beim Sonos mit Übergabe von NFS.Share links funktioniert das dagegen sofort

Das round solltest du in der letzten Fassung drin lassen, ansonsten kommt irgendetwas ev. nicht mit den Kommastellen klar
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,
die Playlist wird aufgebaut und via FTUI entweder mit den gewählten Titeln oder dem Verzeichnisinhalt geladen.
Nur wird im MPD nicht auf diese Playlist umgeschaltet. Dort läuft einfach der RadioStream weiter.

Ich habe ein bisschen gebastelt und einen funktionierenden Workaround gefunden.
(ich hab von Pearl nicht viel Ahnung und die Funktionsweise nur grob gedeutet ... liege ich weit daneben?)
Im Sub "MediaList_OnPlayPressed"  gibt es am Ende " fhem ("set ".$PlayerDevice." ".$PlayerStartCommand);"
Das wird aber nur ausgeführt wenn das Attribut PlayerStartCommand auch gesetzt ist.
... ist das nicht gesetzt ... wie wird die Wiedergabe gestartet?
Ich habe also das attribut PlayerStartCommand = play gesetzt  noch die Auswahl der Playlist erzwungen...
Das sieht jetzt so aus und funktioniert ...
    Log3 $hash->{NAME}, 5, "MediaList: Starte Player mit: set ".$PlayerDevice." ".$PlayerStartCommand;
    fhem ("set ".$PlayerDevice." playlist WifiRadio");
    sleep(5);
    fhem ("set ".$PlayerDevice." ".$PlayerStartCommand);


Tobias

stimmt, du brauchst dieses Attr, ist mir wohl entfallen.

HIer meine Definition für ein Sonos Device
defmod ML_test MediaList /media/music
attr ML_test DbLogExclude .*
attr ML_test MediaList_PathReplaceFrom /media/music/
attr ML_test MediaList_PathReplaceTo \\192.168.10.20/music/
attr ML_test MediaList_PathReplaceToPic https://www.xxxxx.de/music/
attr ML_test MediaList_PlayerDevice sonos_Wohnzimmer
attr ML_test MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
attr ML_test room Audio
attr ML_test verbose 3


Und eine Definition für ein MPD Device
defmod ML_MPD_DG MediaList /media/music
attr ML_MPD_DG DbLogExclude .*
attr ML_MPD_DG MediaList_CacheFileDir /var/lib/mpd1/playlists/
attr ML_MPD_DG MediaList_PathReplaceFrom /media/music/
attr ML_MPD_DG MediaList_PathReplaceToPic https://www.xxxxxx.de/music/
attr ML_MPD_DG MediaList_PlayerDevice MPD_DG
attr ML_MPD_DG MediaList_PlayerStartCommand playlist <filename><fileext>
attr ML_MPD_DG MediaList_mkTempCopy symlink
attr ML_MPD_DG room Audio
attr ML_MPD_DG verbose 3
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

Mahlzeit,

gibt es eigentlich eine Möglichkeit Medialist dazu zu bringen etwas höher aufgelöste Cover aus dem Internet zu ziehen?
Habe keine Einstellung dazu finden können.

Danke!

grtz
C0mmanda

Tobias

Es ist auch nicht so einfach ein korrektes und passendes Cover zu finden , da nehme ich im Modul was ich finden kann ;)


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

C0mmanda

Zitat von: Tobias am 25 August 2019, 12:39:34
Es ist auch nicht so einfach ein korrektes und passendes Cover zu finden , da nehme ich im Modul was ich finden kann ;)


Gesendet von iPhone mit Tapatalk

Hab ich mir fast gedacht.. aber ein Versuch wars wert ;))

danke!

eckibrecki

Hallo Tobias,

ich hatte schon einmal am 13.06.2019 geschrieben, da ich keine Playlist angezeigt bekam. Ich hatte leider Deine Antwort übersehen, Sorry!  :'(
Hatte aber auch nicht mehr so darauf geachtet, da ich das Problem so umschifft hatte  8) und ich das Tool erfolgreich nutzen konnte. Jetzt ist aber noch ein anderes Problem aufgetreten, dazu aber später. Zuerst meine Rückmeldung zu dem "alten Problem":

Also ein Rechteproblem würde ich eher nicht vermuten. Ich bin zwar kein Programmierer, habe mir den Code aber nochmal angeschaut und würde vermuten, dass die Variable $fh nicht bestückt wird und daher der Fehler auftaucht. Anbei der CodeTeil aus Deiner aktuellen Datei:

596 sub MediaList_GetCover($$$$) {
597   my ($device, $filename, $artist, $album) = @_;
598   my $cover; 
599   my $fh;
600   
601

602   my $MediaList_CacheFileDir = AttrVal($device, "MediaList_CacheFileDir", "cache/");
603   my $file = $MediaList_CacheFileDir.'covers.txt'; #Format: Artist;Album;Url
604

605   # Todo persistente Speicherung der Cover
606   $cover = MediaList_CheckCoverAtPath($device, $filename);
607   $cover = MediaList_DownloadCover($device, $artist, $album) if(!$cover);
608   
609   if ($cover && (length($artist) > 0 || length($album) > 0 )) {
610     open($fh, ">>", $file) or die "Datei nicht gefunden";


Daher habe ich zum Testen einen "Test" Musikordner lokal abgespeichert und alles dem Benutzer fhem zugeordnet. --> Trotzdem keine Dateien zu sehen.
Dann habe ich nochmal einen anderen Musikordner lokal abgespeichert und auch dem Benutzer fhem zugeordnet. Hier hatte ich im ftui gesehen, dass es Covers gab. --> Liste wurde erstellt
Tritt bei Dir der Fehler evtl. nicht auf, da bei Dir zu allen Dateien Covers zu finden sind?


Aber jetzt zu meinem aktuellen Problem, was ich leider nicht alleine umschiffen kann.
Wie gesagt, MediaList hat bis vor kurzem soweit funktioniert, auch in ftui. Anfängeraussage wie immer: Ich hatte aber gar nichts gemacht  ;D (...naja, nicht wissentlich zumindest, außer generelles Update des Raspberry)

Das Problem äußerte sich dadurch, dass FEHM nicht mehr erreichbar war. Ich habe den FHEM Service mit Status abgefragt und dort stand u.a. "Active: deactivating (stop-sigterm)". Weiß nicht ob das von Bedeutung ist, steht aber leider nicht "Active: running".
Der Abbruch trat immer dann auf, wenn ich bei der "Playlist_Name" einen Namen eingegeben habe. Irgendwann ist mir eine Fehlermeldung im Logfile aufgefallen, die einen Hinweis auf "ReadingsSingleUpdate" gebracht hat. In Deinem Code in Zeile 211 steht:
ReadingsSingleUpdate($hash, "playlist", $par, 1);
Müsste dies nicht readingsSingleUpdate heißen? Wenn ich es in dieser Schreibweise eingebe, führt es an dieser Stelle zu keinem Abbruch mehr.

Dann leider noch das Problem, an dem ich nicht mehr weiterkomme...
Wenn ich den Namen eingegeben habe, die "currentplaylist_dir" zeigt die Lieder an und ich dann auf "Playlist_add" klicke, kommt es erneut zu einem Abbruch. Hierbei bin ich dann bei einer möglichen Fehlersuche irgendwann über JSON gestolpert. Könnte es evtl. etwas mit einem Update zu tun haben in Verbindung mit dem Crashverhalten von JSON bei Fehler/fehlerhaften Daten:
https://forum.fhem.de/index.php?topic=71737.0

Viele Grüße
Carsten

Tobias

sorry :(
PlayListName habe ich wohl vergessen aus dem Code wieder rauszunehmen. Das war etwas halbfertiges. Hier sollte es möglich sein, zusammengestelle Playlisten abzuspeichern um sie dann später wieder einladen zu können. Ist nie fertig geworden, sollte eigentlich auch nie ins Repo wandern.
Ich schau mir das an und nehms raus. Bitte nicht verwenden ;) :(

Zum alten Problem, die variable $fh wird immer dann nicht gefüllt (Dateipointer wird nicht geöffnet) wenn ein Zugriffsproblem auftritt. Ggf. erstelle doch mal die covers.txt manuel lund gibt fhem dran alle rechte.
Und ja, sebstverstänlich funktioniert alles, auch wenn kein cover gefunden wird. Dann wird "images/cd-empty.png" benutzt. Ist ein kleines CD Symbol.
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

eckibrecki

#116
ok, wenn man den PlayListName raus lässt, funktioniert das Modul auch wie es soll  ::)
Mist, nen halben Tag umsonst den Fehler gesucht. Dieser saß mal wieder vor dem Schirm  >:( Aber mit jedem Fehler den man macht, lernt man auch einiges...

Die Idee mit dem Abspeichern einer Playlist ist doch gut. Ich wollte mir auf der Weboberfläche einen Button einbauen um eine mit Deinem Tool erzeugte Playlist zu speichern. Das was Du vor hast, wäre Deluxe, ist bestimmt nicht so einfach umzusetzen.
Die Grundfunktion eine Playlist einfach nur mit einem anderen Namen zu speichern und evtl. zu löschen dürfte für den ein oder anderen durchaus hilfreich sein. Hast Du noch vor eine solche Funktion bei Dir einzubauen?

Das "alte" Problem, das die currentdir_playlist hatte anscheinend wirklich etwas mit Rechten zu tun. Ich hatte zwar die Ordner dem Benutzer fhem zugeordnet, aber nachdem ich die Rechte mit chmod 777 überarbeitet hatte, funktionierte es auf einmal.

Danke für Deine Unterstützung  :)

eckibrecki

Irgendwie ist bei mir der Wurm drin, oder ich stehe auf nem sehr dicken Schlauch...
Konnte man nicht früher mit Playlist_Add eine Playlist erzeugen, die im Ordner von "MediaList_CacheFileDir" abgespeichert wurde?  :-\

Jetzt werden bei mir Playlist (und Link-MP3's) nur noch erzeugt, wenn ich auf Play klicke.

Viele Grüße
Carsten

Tobias

Playlist_New und Playlist_Name haben noch nie  funktioniert da ich die Funktionalität noch nie komplett eingebaut hatte.
Playlist_Add und Playlist_Del funktionieren, hier werden aus der currentdir_playlist einzelne Tracks (oder alle) in die (eine !) playlist kopiert / gelöscht. Playlist_Empty leert die playlist komplett.

Fazit: es gibt also immer 2 Playlists. Die currentdir_playlist wird automatisch befüllt aus alles gefundenen Tracks des aktuellen verzeichnisses, die normale playlist wird manuelle befüllt.
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

ch.eick

Hallo Tobias
wie würdest Du es einschätzen mit diesem Modul eine Bibliothek von >60000 Titel zu verwalten?
mp3 tags sind ziemlich gut gepflegt und cover sind über itunes auch in den mp3 files vorhanden.

Ich würde dann  auf Sonos abspielen wollen, benötige jedoch aufgrund der Menge auch eine Suchmöglichkeit und verschiedene Gruppierungen.

Momentan spiele ich vom Server aus einer Virtuellen Maschine mit itunes ab.
Die mp3 werden mit itues verwaltet und in der Direktorystruktur abgelegt.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick