Modul für MPD

Begonnen von roedert, 08 Januar 2014, 12:17:21

Vorheriges Thema - Nächstes Thema

unimatrix

MPD kann alles als Playlist abspeichern, was es gerade abspielt. Das war aber nur als Test gedacht, irgendwas muss ja bei dir komisch sein. Natürlich ist es ansonsten normal, einfach die m3u Dateien vom Radioanbieter runterzuladen und in den Playlist-Ordner zu speichern. Dachte mir nur, reduziere das bei dir mal auf nur eine Datei und schaue was passiert.

Tobias

Hmm, hab ich  mal gemacht,

So siehts das Verzeichnis aus:
790023 drwxrwxr-x 2 mpd  audio   4096 Jan 20 12:06 .
530440 drwxr-xr-x 4 mpd  audio   4096 Jan 12 16:09 ..
790906 -rw-r--r-- 1 fhem dialout  332 Jan  3 16:52 Bayern 3.m3u
790935 -rw-r--r-- 1 fhem dialout 4047 Jan 19 19:20 covers.txt
790907 -rw-r--r-- 1 fhem dialout   88 Jan  3 16:52 Eins live.m3u
790908 -rw-r--r-- 1 fhem dialout   40 Jan  3 16:52 FFH 80er.m3u
790909 -rw-r--r-- 1 fhem dialout   46 Jan  3 16:52 FFH Eurodance.m3u
790910 -rw-r--r-- 1 fhem dialout   41 Jan  3 16:52 FFH Top 40.m3u
790911 -rw-r--r-- 1 fhem dialout   40 Jan  3 16:52 FFH Weihnachtsradio.m3u
790912 -rw-r--r-- 1 fhem dialout   43 Jan  3 16:52 Hitradio FFH.m3u
790914 -rw-r--r-- 1 fhem dialout   24 Jan  3 16:52 Radio Fritz.m3u
790915 -rw-r--r-- 1 fhem dialout   29 Jan  3 16:52 Radio Salzburg.m3u
790916 -rw-r--r-- 1 fhem dialout  133 Jan  3 16:52 Radio SAW 90er.m3u
790917 -rw-r--r-- 1 fhem dialout  138 Jan  3 16:52 Radio SAW.m3u
790936 -rw-r--r-- 1 fhem dialout  138 Jan  3 16:52 Radio SAW Neuheiten.m3u
790937 -rw-r--r-- 1 fhem dialout  162 Jan  3 16:52 Sputnik.m3u

So sieht die tag_cache aus:
info_begin
format: 1
mpd_version: 0.16.7
fs_charset: UTF-8
tag: Artist
tag: ArtistSort
tag: Album
tag: AlbumArtist
tag: AlbumArtistSort
tag: Title
tag: Track
tag: Name
tag: Genre
tag: Date
tag: Composer
tag: Performer
tag: Disc
tag: MUSICBRAINZ_ARTISTID
tag: MUSICBRAINZ_ALBUMID
tag: MUSICBRAINZ_ALBUMARTISTID
tag: MUSICBRAINZ_TRACKID
info_end
playlist_begin: MPD_KiZi.m3u
mtime: 1484895601
playlist_end
playlist_begin: MPD_DG.m3u
mtime: 1484850031
playlist_end
playlist_begin: Radio Fritz.m3u
mtime: 1483458775
playlist_end
playlist_begin: Hitradio FFH.m3u
mtime: 1483458775
playlist_end
playlist_begin: FFH Eurodance.m3u
mtime: 1483458775
playlist_end
playlist_begin: FFH 80er.m3u
mtime: 1483458775
playlist_end
playlist_begin: Radio SAW 90er.m3u
mtime: 1483458775
playlist_end
playlist_begin: FFH Top 40.m3u
mtime: 1483458775
playlist_end
playlist_begin: Eins live.m3u
mtime: 1483458775
playlist_end
playlist_begin: FFH Weihnachtsradio.m3u
mtime: 1483458775
playlist_end
playlist_begin: Radio Salzburg.m3u
mtime: 1483458775
playlist_end
playlist_begin: Bayern 3.m3u
mtime: 1483458775
playlist_end
playlist_begin: Radio SAW Neuheiten.m3u
mtime: 1483458775
playlist_end
playlist_begin: Radio SAW.m3u
mtime: 1483458775
playlist_end
playlist_begin: Sputnik.m3u
mtime: 1483458775
playlist_end
playlist_begin: MPD.m3u
mtime: 1483880023
playlist_end

das wirft der MPD nach einem Update_db mit "get playlists" raus
Playlists
-----------------------
Sputnik.m3u
Radio SAW.m3u
Radio SAW Neuheiten.m3u
Bayern 3.m3u
Radio Salzburg.m3u
FFH Weihnachtsradio.m3u
Eins live.m3u
FFH Top 40.m3u
Radio SAW 90er.m3u
FFH 80er.m3u
FFH Eurodance.m3u
Hitradio FFH.m3u
Radio Fritz.m3u
Sputnik
Radio SAW
Radio SAW Neuheiten
Bayern 3
Radio Salzburg
FFH Weihnachtsradio
Eins live
FFH Top 40
Radio SAW 90er
FFH 80er
FFH Eurodance
Hitradio FFH
Radio Fritz


ich teste weiter....
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

unimatrix

get playlists ist ja über das MPD modul. Ich würde erstmal direkt mit mpd / mpc testen. Und nur eine Playlist nehmen. Habe so ein Problem aber auch noch nie gesehen. Habe mir mal die originale m3u von Bayern 3 in den Ordner gespeichert, und die wird auch nur einmal angezeigt - ohne Endung.

Homatrix

Hi,

kurze Frage:
Ich habe ein notify, dass so beginnt:
MusicPlayer:.*|MusicPlayer:artist:.*|MusicPlayer:state:.*|MusicPlayer:title:.*
MusicPlayer ist der MPD.
Artist und Title geht und ich bekomm meine Infos. State informiert mich nicht. :-(
Deshalb habe ich auch das .* mal hinzugefügt (testweise), da ist kein state dabei.

Mach ich da was falsch oder geht das anders?

Wzut

schau doch mal in deinen Event Monitor, ich wette da kommt auch nie eine Zeile die mit MusicPlayer state beginnt,
sondern eher sowas wie -> MusicPlayer stop , MusicPlayer play, usw.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

Zitat von: unimatrix am 19 Januar 2017, 10:54:56
- Automatisches abspeichern und neu laden des Zustandes beim Nutzen von channelUp oder channelDown. (Per Attribut aktivierbar). So kann man aus seinem Hörbuch mal eben schnell auf die Radioplayliste schalten und wenn man dann zurück schaltet, hört man an der gleichen Stelle weiter.
Also ich denke das warum habe ich kapiert und kann es auch nachvollziehen, hätte man mir das als Aufgabe gestellt dann hätte ich ein neues Reading
mit Namen playlist_bookmark erzeugt und darin die Infos gespeichert.
Gibt es einen besonderen Grund warum du das unbedingt als File abspeichern möchtest ?
Das speichern und wiederherstellen hätte ich mit den Befehlen set <name> playlist_bookmark und get <name> playlist_bookmark gemacht statt load und save.
Stichwort load/save : Warum hast du die beiden Kommandos nicht auch zu %set hinzugefügt, dann wären sie auch im Webfrontend verfügbar statt nur auf der Kommandozeile ?

Noch eine allgemeine Info : Der Anteil an Unterprogrammen die JSON benötigen wird jetzt immer mehr, ich habe mich daher entschieden die Last.fm Informationen von XML auf JSON umzustellen. Damit benötigen zukünftige Versionen zwar kein libxml-simple-perl mehr, aber libjson-perl sollte man dann doch so langsam an Bord haben.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

unimatrix



Zitat von: Wzut am 20 Januar 2017, 22:42:22
Gibt es einen besonderen Grund warum du das unbedingt als File abspeichern möchtest
Grund wa 1. dass es ja sehr viele Playlisten geben kann und das würden dann ja immer mehr Readings oder ein sehr langes und 2. dass so der Zustand auch anderen Instanzen des MPD Moduls zur Verfügung stehen kann, wenn man mehrere MPDs laufen hat. wenn du das so nicht möchtest änder ich es nochmal. 
Zitat von: Wzut am 20 Januar 2017, 22:42:22
Das speichern und wiederherstellen hätte ich mit den Befehlen set <name> playlist_bookmark und get <name> playlist_bookmark gemacht statt load und save.
Ok das macht Sinn.
Zitat von: Wzut am 20 Januar 2017, 22:42:22Stichwort load/save : Warum hast du die beiden Kommandos nicht auch zu %set hinzugefügt, dann wären sie auch im Webfrontend verfügbar statt nur auf der Kommandozeile ?
Mein Fehler...das muss ich nachbessern
Zitat von: Wzut am 20 Januar 2017, 22:42:22
Noch eine allgemeine Info : Der Anteil an Unterprogrammen die JSON benötigen wird jetzt immer mehr, ich habe mich daher entschieden die Last.fm Informationen von XML auf JSON umzustellen. Damit benötigen zukünftige Versionen zwar kein libxml-simple-perl mehr, aber libjson-perl sollte man dann doch so langsam an Bord haben.
Ok. Ich habs nur benutzt weil du es eh schon hattest. Braucht man aber nur wenn man die option aktiviert.



Gesendet von meinem SM-G920F mit Tapatalk


Wzut

Zitat von: unimatrix am 20 Januar 2017, 23:35:26
2. dass so der Zustand auch anderen Instanzen des MPD Moduls zur Verfügung stehen kann, wenn man mehrere MPDs laufen hat.
überzeugt
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

ext23

Moin, eine Frage, gibt es einen Trick das Knacken zu unterbinden beim ersten Start eines Streams nachdem der RPi gestartet wurde? Ka was der da macht aber vermutlich wird das Sound Device da initialisiert oder so.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

unimatrix

Zitat von: Wzut am 21 Januar 2017, 09:02:26
überzeugt
Ich bin heute unterwegs und kann den patch wahrscheinlich erst morgen korrigueren.

Gesendet von meinem SM-G920F mit Tapatalk


Wzut

@ext23, k.A. ich kenne das von meinem Server nicht (ok wird auch fast nie neu gestartet). Leg dir doch eine 1-2 Sekunden lange mp3 Datei ins Music Dir
und erstelle dir eine  CommandListe die du direkt nach dem MPD Start via mpc in der shell ausführst.
Bsp :
command_list_begin
volume 0   # knackt es dann auch ?
clear
add (deine kurze MP3)
play
command_list_end

@unimatrix, ne ist schon gut das werde ich hin bekommen :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

#461
ich habe den Patch von unimatrix weitgehend umgesetzt (autorestor fehlt noch)
Die Kommandos zum "Bookmarken" sind set bzw get <name> bookmark.
Der Speicherort wird mit dem Attribut bookmarkDir festgelegt.
Das Ganze funktioniert allerdings nicht bei Radiostreams ( ist wohl logisch .. :)  )

Da mein MPD leider kein seekcur kennt (0.16.0) und ich auch noch andere Dinge intern geändert habe, möchte ich diese Version nicht sofort einchecken und hänge sie daher zum ausgibigen testen hier erst einmal nur an.

Edit : Anhang gelöscht , siehe https://forum.fhem.de/index.php/topic,18517.msg567045.html#msg567045
   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

unimatrix

Zitat von: Wzut am 21 Januar 2017, 21:38:44
ich habe den Patch von unimatrix weitgehend umgesetzt (autorestor fehlt noch)

Super, vielen Dank für deine Mühen. Ich habe die Version jetzt mal laufen, habe aber bisher nur eine Sache gefunden:

Beim Setzen des Bookmark-Dirs hast du meine Zeile so ersetzt:

- $_[3] = $abs_path ; # Absoluten Pfad im Attribut speichern.
+ $attr{$name}{'bookmarkDir'} = $abs_path; # Absoluten Pfad im Attribut speichern.


Das funktioniert so nicht, da FHEM das Attribut danach mit dem Wert aus $_[3] überschreibt. Um den Wert eines Attributes in der AttrFn zu ändern, muss man es direkt nach $_[3] zuweisen. Das steht so in https://wiki.fhem.de/wiki/DevelopmentModuleIntro. Da hatte ich es rausgefunden, weil ich es ursprünglich so gemacht hatte wie du.

Homatrix

Zitat von: Wzut am 20 Januar 2017, 17:56:00
schau doch mal in deinen Event Monitor, ich wette da kommt auch nie eine Zeile die mit MusicPlayer state beginnt,
sondern eher sowas wie -> MusicPlayer stop , MusicPlayer play, usw.
Das ist richtig.
Kein state. :-(
Aber gut, nun frage ich nach stop und play. Damit gehts.

Dank dir.


Andere Frage:
Im Zuge der Suche nach einer Lösung für obiges Problem, hab ich auch mal mein fhem geupdatet. Nun habe ich mit dem MPD 2 Probleme.
1. Im DeviceOverview wird jetzt eine Combobox mit allen Titeln angezeigt. Die enthält bei mir einige Tausend u.U. recht lange Einträge. Das dauert und zerhaut das fhem Design, weil die Box seeeehr breit ist.
2. Das Reading playlistinfo enthält scheinbar alle Playlistinfos, was es auch seeeehr lang und unübersichtlich macht.

Für andere mögen die 2 Änderungen passen, für mich nicht.

Kann ich das bei mir irgendwie anpassen, so dass beide Anzeigen rausfallen?

Homatrix

Wzut

Zitat von: unimatrix am 22 Januar 2017, 15:32:09
Das funktioniert so nicht,
ja, ja man lernt halt nie aus ....  ;)
Habe das für meine attrs auch gleich geändert , THX !
Beim Lesen des Artikels ist mir noch etwas aufgefallen (Stichwort set/get) aber erst einmal der Reihe nach :

Die Idee mit den Bookmarks finde ich richtig gut, allerdings gefällt mir meine jetzige Umsetzung noch nicht.
Das man eine Bookmark nur für die aktuelle Playliste laden kann ist doch unlogisch bzw. nicht konsequent.
Ich werde daher das Kommando set <name> bookmark wieder umbennen und erweitern .
set <name> load_bookmark wird die neue Funktion, die lädt dann zur aktuellen Playliste den gespeicherten Track und springt zur entsprechenden Position.
set <name> load_bookmark <bookmark> wird neu dazukommen und erlaubt es zu jeder Zeit eine beliebige Bookmark zu laden mit zusätzlichem direkten Wechsel auf die passende Liste.

Der Befehl get <name> bookmark wird geändert zu set <name> save_bookmark (Stichwort Wiki Richtlinie)
Neu hinzukommen wird aber der Befehl get <name> bookmakrs, der eine Liste aller bisher gespeicherten Bookmarks ausgibt.
Fehlt dann eigentlich nur noch eine Funktion zum löschen von nicht mehr erwünschten Bookmarks .... aber Rom wurde ja auch nicht an einem Tag erbaut :)


Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher