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

Hi,
ich habe jetzt  mal in einer ruhigen  minute  meine 99_Utils sammlung bzgl der Erstellung meiner Medialist auf ein Modul umgestellt.
Das Modul kann auf Grundlage einer lokalen Mediathek (zb. von einem NAS per Samba auf dem FHEM Server eingebunden) durch die Menüstruktur navigieren und für das aktuelle Verzeichnis automatisch eine Playlist erstellen.
Dazu wird noch entweder ein lokal vorhandenes Cover oder ein Cover im Internet gesucht.
Die Ausgabe der Medialist ist an das TableUI Widget "MediaList" angepasst.

So wird das Modul definiert:

define <MyMediaList> MediaList <StartPfad>

define MyMediaList MediaList /media/music/

Folgende Attribute sollten gesetzt sein

  • MediaList_PathReplaceFrom: Der lokal eingemountete Pfad
  • MediaList_PathReplaceTo: die UNC Samba Freigabe im lokalen LAN (ohne Passwort(!)) für die mp3 Dateien
  • MediaList_PathReplaceToPic: Ein öffentlicher im lokalen LAN zugänglicher pfad, per Apache oder FHEM freigegeben
  • MediaList_PlayerDevice: Das Zieldevice was die Playlist abspielen kann, aktuell nur Sonos
  • MediaList_PlayerStartCommand: Das Startkommando für das Zieldevice. Der PLatzhalter <file> wird beim Start durch den Pfad der generierten m3u Datei ersetzt

Mit "set <MediaList> Play" wird die aktuelle Playliste dem Zieldevice übergeben und angestartet


Hier eine Beispielconfig:

   MediaList_PathReplaceFrom /media/music/
   MediaList_PathReplaceTo \\NAS/music/
   MediaList_PathReplaceToPic https://192.168.10.30/music/
   MediaList_PlayerDevice sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<file>

Die Bilder zeigen den RealLife Einsatz. Übrigens:  Ein sehr hoher WAF  Faktor! Ich setze diese Funktionalität auf meinem FHEM Tablet schon ca 6 Monate ein.

EDIT: Wikieintrag gibts auch: https://wiki.fhem.de/wiki/MediaList

MediaList Modul aktualisiert am 15.02.17
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

Petrosilius Zwackelmann

#1
Hallo Tobias,

ich möchte mein Tablet UI auch zur Stuerung meines Sonos Systems nutzen und dabei auf meine MP3-Sammlung von meinem NAS zugreifen.
Dein Modul 98_MediaList.pm habe ich runtergeladen, brauche aber noch etwas Starthile....

Was ich bisher gemacht habe...

erforderliche Module nach installiert:
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

sudo mkdir /media/music

define MyMediaList MediaList /media/music/
attr MyMediaList MediaList_PathReplaceFrom /media/music/
attr MyMediaList MediaList_PlayerDevice Sonos_Wohnzimmer
attr MyMediaList MediaList_PlayerStartCommand StartPlaylist file:<file>

Nun dachte ich über den Pfas /media/music soll auf meinem NAS zugegriffen werden also habe ich mein Media-Verzeichnis gemounted.

sudo mount -t cifs -o user=xxxx,password=yyyy,rw,file_mode=0777,dir_mode=0777 //192.168.178.4/Mulitmedia/Musik /media/music/

Eigentlich sollte ja eine UNC Samba Freigabe ohne Paswd erstellt werden.
Muss man dazu einen neuen Abschnitt in die smb.conf des Raspberry eintragen oder muss hier am NAS "geschraubt" werden?
sudo nano /etc/samba/smb.conf

Die folgenden attr habe ich noch nicht gesetzt, da mir nicht ganz klar ist was ich jetzt tun soll..
MediaList_PathReplaceTo \\NAS/music/
MediaList_PathReplaceToPic https://192.168.10.30/music/

Ich hoffe du kannst mich noch etwas unterstützen..
Interessant wäre auch dein Tablet-UI Konfiguration?

Gruß Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Tobias

Hi,
du must am NAS dein Music Verzeichnis ohne Passwort freigeben. Am besten nur lesend ;) und auch nur im internen LAN ;)
Das gilt aber nur im Falle eines Sonos da das ein eigenes Device ist und dort keine Möglichkeit der Eingabe einer Zugangsbeschränkung gibt, ich gab sie jedenfalls noch nicht gefunden. Beim Sonos wird nur die Playliste in das sonosdevice geladen, danach greibt das Sonos selbst suf das NAS zu, FHEM ist hier raus ;)

Nutzt du einen (oder mehrere) MPD auf dem FHEM Server musst du die attribute anders setzen, schau mal ins Wiki da ist ein Beispiel.

Da Attribut ReplaceFrom macht nur sinn in Verbindung mit einem/bedien ReplaceTo.
Zb., bei Sonos, dein Sonos kennt nicht den Pfad /media/music/bla/blub/song.mp3. Sondern es kennt nur: \\192.168.178.4/Multimedia/Musik/bla/blub/song.mp3
Also lautet dein ReplaceTo: \\192.168.178.4/Multimedia/Musik/

Das ReplaceToPic ist deshalb da, weil man keine Bild-URL als UNC-Freigabe übergeben kann ;)
Hier geht nur eine URL, absolut als vollwertiger Pfad.
Das brauchst du aber nur, wenn du Cover zu deinen Alben auch im NAS hast.

Ich hoffe das Hilft
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

Petrosilius Zwackelmann

Hallo Tobias,

danke für deine Rückmeldung.
Ich habe nun auf meinem QNAP das Multimedia Verzeichnis für jedermann lesbar gemacht.

Automatisch wird das Multimediaverzeichnis dem Raspberry verfügbar gemacht, hierzu habe ich das File fstab mit folgender Zeile ergäntz.
sudo nano /etc/fstab
//192.168.178.4/Multimedia/Musik/ /media/music/ cifs username=xxx,password=yyy,iocharset=utf8,sec=ntlm 0 0

ein ls -l ergbit dann folgendes

drwxr-xr-x 2 root root        0 Jan 15  2012 ABBA
drwxr-xr-x 2 root root        0 Jan 11  2012 ACDC
drwxr-xr-x 2 root root        0 Jul 31  2016 Adele
drwxr-xr-x 2 root root        0 Oct  3  2013 Adriano Celentano
drwxr-xr-x 2 root root        0 Dec 10  2011 Aerosmith
drwxr-xr-x 2 root root        0 Dec 11  2011 Alanis Morissette
drwxr-xr-x 2 root root        0 Dec 10  2011 Alannah Myles
drwxr-xr-x 2 root root        0 Aug 23  2014 Alle Farben feat Graham Candy
drwxr-xr-x 2 root root        0 Sep 17 20:54 Amy MacDonald

ein list ergibt folgendes

Internals:
   DEF        /media/music/
   NAME       MyMediaList
   NR         2487
   ROOT       /media/music/
   STATE      ???
   TYPE       MediaList
Attributes:
   MediaList_PathReplaceFrom /media/music/
   MediaList_PathReplaceTo \\192.168.178.4/Multimedia/Musik/
   MediaList_PlayerDevice Sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<file>
   room       Sonos



ein
set MyMediaList Play
führt nach einigen Sekunden zum Absturz von FHEM...

Fehlt hier nun die TabletUI Konfiguration?

Gruß Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Tobias

Ich habe den WikiArtikel nochmal gründlich erweitert.

Bzgl Absturz hilft immer das Log, bzw der Fehler auf der Konsole.
Bitte starte fhem von der Konsole aus "service fhem stop; service fhem start" und provoziere den Fehler/Absturz. Spätestens jetzt solltest du etwas im Log bzw auf der Konsole sehen.
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

Petrosilius Zwackelmann

Hallo Tobias,

ich habe nun die 98_MediaList.pm die du gestern in einem anderen Thread veröffentlicht hast in Verwendung.
Zusätzlich habe ich noch
MediaList_mkTempCopy none
verwendet wie im aktualisierten Wiki Eintrag zu entnehmen war.

nun tut sich was:
Internals:
   DEF        /media/music/
   NAME       MyMediaList
   NR         2487
   ROOT       /media/music/
   STATE      ???
   TYPE       MediaList
   Readings:
     2017-02-07 11:39:10   CurrentDir      /media/music/
     2017-02-07 11:39:10   FolderContent   *AA_Kinder:*AA_LISA:*ABBA:*ACDC:*Adele:*Adriano Celentano:*Aerosmith:*Alanis Morissette: ....
     2017-02-07 11:39:10   SelectedItem    /
     2017-02-07 11:39:10   currentdir_playlist []
     2017-02-07 11:39:10   currentdir_playlistduration 0
   Helper:
Attributes:
   MediaList_PathReplaceFrom /media/music/
   MediaList_PathReplaceTo \\192.168.178.4/Multimedia/Musik/
   MediaList_PlayerDevice Sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<file>
   MediaList_mkTempCopy none
   room       Sonos



Ich habe angenommen mit einem
set MyMediaList RequestedDirectory /
landet man im Hauptverzeichnis und kann sich einen Ordner wählen. Das funktioniert aber nicht.
Der State steht noch immer auf ???

Mache ich hier noch etwas falsch?
Wirst du noch eine Tablet UI-Konfiguration für Sonos veröffentlichen ?

Gruß Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Tobias

DAs Root ist dein Pfad aus der Definition. Also wenn du nach / wechselst bist du im Root des Moduls, hier /media/music ;)
Der State des ML Devices ist uninteressant und undefiniert... (noch)
Was passiert wenn du ein "Play current" machst wenn dein currentdir_playlist" gefüllt ist?
Heißt dein Sonos Dev auch sonos_wohnzimmer?

Für sonos muss das so heißen:
attr <ML> MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
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

Petrosilius Zwackelmann

Hallo Tobias,

attr <ML> MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
habe ich eingestellt.

ich habe jetzt nacheinander ..
set MyMediaList RequestedDirectory /
set MyMediaList RequestedDirectory /ACDC
set MyMediaList RequestedDirectory ACDC

eingegeben. Der Inhalt dieses Unterordners wird auch angezeigt


Internals:
   DEF        /media/music/
   NAME       MyMediaList
   NR         2487
   ROOT       /media/music/
   STATE      ???
   TYPE       MediaList
   Readings:
     2017-02-07 12:14:32   CurrentDir      /media/music//ACDC
     2017-02-07 12:14:32   FolderContent   Back:ACDC - Back In Black.mp3:ACDC - For Those About To Rock.mp3:ACDC - Hells Bells.mp3:ACDC - Highway to hell.mp3:ACDC - Who made who.mp3:ACDC - Whole Lotta Rosie.mp3
     2017-02-07 12:14:32   SelectedItem    /media/music//ACDC/ACDC
     2017-02-07 12:14:34   currentdir_playlist [{"Artist":"ACDC","Album":"","Title":"Back in Black","Time":254,"File":"/media/music//ACDC/ACDC - Back In Black.mp3"},{"Artist":"ACDC","Title":"For Those About To Rock","Album":"","Time":345,"File":"/media/music//ACDC/ACDC - For Those About To Rock.mp3"},{"Artist":"ACDC","Album":"Who Made Who","Title":"Hells Bells","File":"/media/music//ACDC/ACDC - Hells Bells.mp3","Time":314},.....}]
     2017-02-07 12:14:34   currentdir_playlistduration 1654
   Helper:
Attributes:
   MediaList_PathReplaceFrom /media/music/
   MediaList_PathReplaceTo \\192.168.178.4/Multimedia/Musik/
   MediaList_PlayerDevice Sonos_Wohnzimmer
   MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
   MediaList_mkTempCopy none
   room       Sonos



Die Readings sehen allerdings etwas seltsam aus..
SelectedItem                 /media/music//ACDC/ACDC
CurrentDir                     /media/music//ACDC

sieht so aus als wenn bei jeder Abfrage ein zusätzlicher Inhalt angehängt wird. Ich nehme an das ist der Grund warum bei
set MyMediaList Play currentdir
nichts passiert.

Gruß Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Tobias

das war falsch:
set MyMediaList RequestedDirectory /ACDC
Bitte nur die Werte aus dem FolderContent Reading benutzen...
Also wäre das richtig gewesen:
set MyMediaList RequestedDirectory ACDC

Bitte überprüfe, ob die Datei Sonos_Wohnzimmer.m3u im Ordner cache/ unterhalb deines FHEM Verzeichnisses existiert.
Wenn ja, ob der Inhalt korrekt ist. Wenn auch ja, bitte f+hre das Startcommand über dein Sonos Device selbst mal aus
set Sonos_Wohnzimmer StartPlaylist cache/Sonos_Wohnzimmer.m3u
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

Petrosilius Zwackelmann

Hallo Tobias,
das File Sonos_Wohnzimmer.m3u ist wie beschrieben vorhanden und funktioniert, wenn ich es mit einem Media Player probiere.
Das Startkommando zeigt aber keine Reaktion.

LG Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Tobias

Check mal mit verbose=4 was im LOg steht wenn du im ML Dev auf "Play current" drückst.
Kannst auch mal verbose=5 probieren. Das komplette Command sollte im Log auftauchen, bitte mal manuell absetzen. Ev. Gross/Kleinschreibung??
Da bin ich gerade ratlos da es bei mir funktioniert.
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

Petrosilius Zwackelmann

Hallo Tobias,
im Logfile steht ...
2017.02.07 22:20:29 5: MediaList: Starte Player mit: set Sonos_Wohnzimmer StartPlaylist file:cache/Sonos_Wohnzimmer.m3u
das schaut für mich korrekt aus.

merkwürdig finde ich nur diese Readings mit dem doppelten "/":

Readings
CurrentDir                         /media/music//ABBA
FolderContent                     Back:*Gold:*Thank You for the Music (4 of 4)
SelectedItem                     /media/music//ABBA
currentdir_playlist              []
currentdir_playlistduration  0

Gruß Manuel


Ich habe in meinem Logfile aber verschiedene Fehlermeldungen im Zusammenhang mit Sonos gefunden. Ich werde erstmal versuchen diese zu lösen bevor ich mich wieder melde. Die tauchen vor und nach dem abgesetzten Kommando auf...

Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 5396 thread 13.
2017.02.07 22:24:52 1: SONOS13: Rendering-Service-subscribing NOT successful
2017.02.07 22:25:23 1: SONOS13: Service-subscribing not possible due to missing TransportService
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 5396 thread 13.
2017.02.07 22:25:23 1: SONOS13: Rendering-Service-subscribing NOT successful
2017.02.07 22:25:23 1: SONOS13: Service-subscribing not possible due to missing TransportService
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 5396 thread 13.
2017.02.07 22:25:23 1: SONOS13: Rendering-Service-subscribing NOT successful
2017.02.07 22:25:24 1: SONOS13: Service-subscribing not possible due to missing TransportService
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 5396 thread 13.
2017.02.07 22:25:24 1: SONOS13: Rendering-Service-subscribing NOT successful
2017.02.07 22:25:24 1: SONOS13: Service-subscribing not possible due to missing TransportService
Subscription request failed with error: 500 Internal Server Error at ./FHEM/00_SONOS.pm line 5396 thread 13.
2017.02.07 22:25:24 1: SONOS13: Rendering-Service-subscribing NOT successful
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Eisix

Hallo Tobias,

versuche mich gerade an deiner FTUI version aus dem Wiki und hätte noch eine Frage dazu.
Welche devices sind die beiden Parameter die du hier übergibst?

<body>
    <div class="page" id="musik-dg-settings">
      <div data-template="template_musik_mpd_settings.html"
                     data-parameter='{"MPD_par_device":"MPD_DG",
                                      "ML_par_device":"ML_MPD_DG"}'>
      </div>
    </div>
</body>


Ist das so korrekt?

                     data-parameter='{"MPD_par_device":"MPD1",
                                      "ML_par_device":"MyMediaList"}'>


Sieht übrigends gut aus!

Versuche gerade eine Bose Soundtouch als Player zu nutzen.

Gruß
Eisix

Tobias

Das ist korrekt, ML = Medialist
Der obige parameter ist das Zieldevice, der untere Parameter die zugehörige Medialist
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

Shadow3561

#14
hallo,
und danke für das tolle Modul.

jedoch funktioniert bei mir die Übergabe an MPD nicht.

Ich kann auch, die im WIKI aufgeführten, Attribute(mit +++ gekennzeichnet) nicht setzen.
EDIT: Dieser Punkt hat sich erledigt. (neues Modul installiert)


+++ MediaList_CacheFileDir /var/lib/mpd/playlists/ +++
MediaList_PathReplaceFrom /media/music/
MediaList_PathReplaceToPic https://192.168.10.30/music/
MediaList_PlayerDevice MPD_KiZi
+++ MediaList_mkTempCopy symlink +++




habe mein MPD so definiert

define myMPD MPD
attr myMPD devStateIcon play:rc_PLAY:stop stop:rc_STOP:play pause:rc_PAUSE:pause
attr myMPD icon it_radio
attr myMPD loadPlaylists 1
attr myMPD room Server
attr myMPD titleSplit 1




und MediaList so:

define MyMediaList MediaList /media/pi/SSD
attr MyMediaList MediaList_PathReplaceFrom /cache
attr MyMediaList MediaList_PathReplaceTo /media/pi/SSD
attr MyMediaList MediaList_PathReplaceToPic /cache
attr MyMediaList MediaList_PlayerDevice myMPD
attr MyMediaList MediaList_PlayerStartCommand StartPlaylist file:<fullfile>
attr MyMediaList verbose 4



wenn ich jetzt in Tabletui oder im Webif bei MediaList auf play drücke, passiert nichts.

des Weiteren ist mir aufgefallen, dass ich nicht in Verzeichnisse wechseln kann die Leerzeichen enthalten.(EDIT: erledigt)

vielleicht hat ja jemand einen Tip für mich was ich falsch mache.

mfg