Modul für MPD

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

Vorheriges Thema - Nächstes Thema

drdownload

Also mMn macht MPD vor allem in Zusammenhang mit Pulseaudio Sinn. Mit Pulse-Audio kann man den Multi-Room Aspekt realisieren, alles was fehlt (einige gibt es ja schon) wäre ein auf diesen Aspekt hin-optimiertes Web-Interface. Bei Android-Clients geht MPDroid bis jetzt ganz gut. Der LMS-Mediaserver ist ja leider ein "bloated" Ding einer Software (was aber auf meinem überdimensionierten Heimserver egal wäre)

Insg. muss ich sagen, ich bin auch in der Experimentierphase und noch unschlüssig was die zwei großen Richtungen Squeezbox oder MPD mit Pulseaudio betrifft. Ich habe leider das Gefühl, dass keine der beiden Lösungen perfekt ist, aber Squeezebox dem näher kommt (more "mature") aber MPD mit Pulseaudio mehr Potential hat alle möglichen Anwendungsfälle abzudecken.

Nur als Beispiel: Ich will nur für einen Audiostream zum Frühstück nicht unbedingt meinen ION-HTPC aufwecken (auch weil er doch einiges an Strom verbraucht) wenn der Router direkt neben der AVR mit USB-Soundkarte entwedder über Pulseaudio oder squeezelite genauso den Sound mit 2-3W Verbrauch schaffen würde. Oder meine Radiowecker, Badezimmer-Radios in denen iPods 1G stecken und über Audiofoil-Speakers Airplay Server sind. Das schaffe ich derzeit nur über iTunes und Pulseaudio.
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

gemx

Habe mir ebenfalls mal MPD angesehen.
Da ich eigentlich aus der Windows Welt komme, war mir nur mplayer ein Begriff.
Dafür habe ich ja auch ein entsprechendes Modul gebaut => StreamRadio.

Gerade für den RPi bzw. die Benutzung über FHEM scheint mir der mplayer etwas geeigneter zu sein.
MPD kann zwar recht viel, aber es ist schon  fast umständlich diese ganzen Funktionen in ein Modul zu bauen.
Playlisten verwalten würde man ja per FHEM Modul ohnehin eher nicht tun.

Ich fand den mplayer da einfacher zu handeln und ich kam sogar auch Eventgesteuert klar, also ohne Polling.
Wobei per MPD gehts ja eh ohne Polling, da du eine TCP Verbindung hast. Dort gehts ja einfach per READ Funktion.

Dietmar63

#62
Ich verstehe nicht wozu polling (MPDroid kommt meiner Meinung nach auch ohne aus).  Wenn man MPDroid längere Zeit nicht nutzt, erkennt MPDroid dies, und macht sich dann erneut bei MPD schlau. Ein solches Verhalten wäre aus meiner Sicht in fhem auch machbar: Immer wenn ein item angezeigt wird, besorgt mpc sich die Info bei mpd. Ob man Benachrichtigungen aus dem Server hinbekommt kann ich nicht sagen, hört sich aber aufwendig an. 

Ich habe mir 73_mpc angesehen und habe festgestellt, das (zu) oft  die komplette playlist eingelesen wird(bei 500 Titeln dauert dies ein wenig). Das ist vielleicht nicht beabsichigt. Sinvoll ist aus meiner Sicht, nach jeder Änderung des Playerzustandes (mpd play, mpd pause, mpd remote, ...)  nur status und currentsong neu zu besorgen. Diese Werte gehören dann aus meiner Sicht in die Readings. Die im Moment angezeigten Zwischenwerte sind nicht wirklich alle interessant bzw. verwirren.

Wenn man sie braucht könnte man in $hash->{helper}{sonstwieName} verstecken. 

ZitatMPD kann zwar recht viel, aber es ist schon  fast umständlich diese ganzen Funktionen in ein Modul zu bauen.
muss man ja auch nicht.

ZitatPlaylisten verwalten würde man ja per FHEM Modul ohnehin eher nicht tun.
sehe ich auch so
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Wernieman

Wenn man die TCP-Verbindung zum mpd nicht schließt, sondern mit idle nur "schlafenlegt", bekommt man eben ohne Polling eine meldung von mpd, wenn sich etwas geändert hat. Sogar in welchem Bereich.

mpd und mplayer kann man nicht vergleichen. mplayer ist ein Abspieler/Player, mpd eine Musikdatenbank mit playlisten etc.

@Wzut:
Bevor wir hier jetzt doppelt dran arbeiten ... wie kann ich Dir helfen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Wzut

#64
Zitat von: Dietmar63 am 14 Januar 2014, 11:38:21
habe festgestellt, das (zu) oft  die komplette playlist eingelesen wird(bei 500 Titeln dauert dies ein wenig).
Richtig das ist ein Bug in der aktuellen Version vom Sonntag. Die Playlisten sollen eigentlich nur eingelesen werden
beim Start wenn das attr loadPlaylists auf 1 gesetzt ist oder per manuellem Set loadPlaylists. Das gleiche gilt auch für die Songliste.

Zitat
Bevor wir hier jetzt doppelt dran arbeiten ... wie kann ich Dir helfen?
Gebt mir bitte noch 1-2 Tage um die z.Z offenen Baustellen abzuarbeiten, dann werde ich die nächste Version veröffentlichen.

Kommende Änderungen :
- Bug Playlisten einlesen (erledigt)
- Set/Get Liste erweitert (erledigt)
- Webinterface um Outputs enable/disable ereitert (erledigt)
- attr Liste erweitert wegen MPD Idle Status config (erledigt)
- Readings um Volume erweitert - Vol Slider im Webinterface steht auf aktuellem Vol Wert statt immer auf 0  (erledigt)
- mit Ende MPD Idle die Readings versorgen und Idle neu starten ( in Arbeit)
 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Dietmar63

Zitat- mit Ende MPD Idle die Readings versorgen und Idle neu starten ( in Arbeit)

würde mich interessieren wie das funktioniert. Der Prozess MPD läuft auf einem eigenen Server.  FHEM müßte dann irgendwie geweckt werden, wenn MPD durch ein anderes Gerät geändert wird. Ich kann mir keine Prozess vorstellen wie das gehen soll. Auf die Lösung bin ich gespannt.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Wzut

#66
Zitat von: Dietmar63 am 14 Januar 2014, 15:49:36
FHEM müßte dann irgendwie geweckt werden, wenn MPD durch ein anderes Gerät geändert wird.
Richtig , das mache ich mit einem BlockingCall, dieser neue Prozess schickt dem MPD das Kommando Idle und wartet bis der MPD meint das ich etwas geändert hat. Dadurch erfolgt der Rücksprung zu FHEM wertet die Änderung aus und versorgt die Readings mit neuen Werten und das Spiel geht wieder von vorne los. ( Wenn in der Rückantwort keine Error Kennung war)
Zum testen hatte ich attr intervall auf 9999 gesetzt und die aktuelle Playliste von einem anderen PC aus mit dem Konsolen MPC Programm gewechselt.
screenshot2 zeigt die Veränderungen im Event monitor die dort sehr schnell angezeigt wurden.
Wenn der BlockingCall mit Fehler zurück kommt wird kein neuer Versuch gestartet ! Um das Spiel aber wieder in Gang zusetzen kann das set reset Kommando benutzt werden.
Testet das bitte, ich selbst wüsste nicht wie ich es bei mir sinnvoll einsetzen soll.

Bei der Gelgenheit noch ne Frage ( die vermutlich ins Anfänger Forum gehört ) :
Was muss ich tun damit sich die Webseite mit der Fernbedieung (screenshot1) automatisch neu läd wenn sich die Readings ändern ?   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

drdownload

CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

Wzut

nochmal ein kleines Update, Änderungen in der jetzigen V0.5 zur V0.4 vom Dienstag Abend :
- Interpret & Titel werden in der Raumübersicht neben dem state gezeigt wenn der state play oder pause ist

- Da bei den Radio Streams wohl immer die Interpreten Info fehlt bzw. diese den Titel als "Interpret - Titel" übertragen, wird diese Titelinfo am ersten - Zeichen in Interpret und Titel zerteilt. Wer dieses Zerschneiden nicht mag kann es mit
attr  <name> titleSplit 0
abschalten , als default ist es auf 1 gesetzt
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wernieman

Wartet er jetzt standartmäßig eigentlich auf Events oder muß man es einschalten bzw. as Polling deaktivieren?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Wzut

um auf diese Events zu warten muss mit
attr <name> useIdle 1
das eingeschakltet werden
Wenn du den Interval dann auch noch auf 0 setzt wird der MPC von FHEM gar nicht mehr angerfagt   

useIdle 1 + intervall 0  -> Readings nur bei Änderung MPD aktuell
useIdle 1 + intervall > 0  -> Readings bei Änderung MPD aktuell und wenn Intervall abgelaufen
useIdle 0 + intervall 0  -> Readings werden nur noch beim ausführen bestimmter GET/SET Kommandos neu gesetzt
useIdle 0 + intervall > 0  -> Readings nach x Sekunden neu setzen
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wernieman

Was passiert eigentlich, wenn mal (bei useIdle) die verbindung zum mpd zusammenbricht, aber per INTERVAL geprüft wird ... wird dann die Verbindung versuchsweise wieder aufgebaut?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Wzut

Zitat von: Wzut am 14 Januar 2014, 21:30:37
Wenn der BlockingCall mit Fehler zurück kommt wird kein neuer Versuch gestartet ! Um das Spiel aber wieder in Gang zusetzen kann das set reset Kommando benutzt werden.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wernieman

Wenn also der MPD-Server mal restartet wird, ist der FHEM nicht selbstreparierent .... ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Wernieman

Habe Deine letzte Version Zuhause auspobiert ... das update per IDLE funktioniert nur nicht.

Finde den Grund nicht.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html