Modul für MPD

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

Vorheriges Thema - Nächstes Thema

roedert

Gut möglich, aber FHEM einrichten/bedienen und ein Modul dafür zu Programmieren sind ja nun 2 völlig verschiedene Bereiche.

Klar, Grundlagen der Programmierung kenne ich auch, paar kleine Shellscripte etc. ist ja alles kein Problem ..... aber richtige Programmierung und evtl. noch objektorientiert ist 20 Jahre her beim Studium  ::)

Wernieman

Erwarte von mir keine Wunder ... bei mir ist es (etwas) länger her .....

Aber als Linux-Admin muß man doch etwas häufiger an Scripten "doktorn" ....
- 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

Ein erster "Schnellschuß"

Definieren mit: define define myMPD MPD
Kannst Dir dann ansehen, welche Atribute es hat, Standard ist localhost

Starten mit set myMPD on
stoppen analog

Mehr (noch) nicht implementiert.

P.S. Ich hätte anstatt mpc auch direkt den Port per nc ansprechen können ... nur das liegt nicht in meiner Liga ....
- 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

roedert

Hey, super ... das ging ja schnell  :)

Ich habe mal zusammengefasst wie das MPD-Teil am Ende mal aussehen könnte.
Sieht erstmal nach viel Arbeit aus, isses aber wahrscheinlich nicht, da es an dem mpc-Syntax angelehnt ist und die meisten Befehle 1:1 an mpc durchgereicht werden können.

Da mpd nicht nur Audiodateien, sondern auch Streams abspielt, hat man damit ein prima Internetradio.
Oder spielt Radio vom Satellit übers Netzwerk mit einem Elgato EyeTV NetStream Sat ... nutze ich aktuell selbst, da ich bei Internetradio öfter auch Aussetzer habe bei größeren Downloads - ausserdem "mülle" ich die Leitung nicht zu.

Ein weiterer Einsatzzweck für dieses Modul könnte die Ton-/Sprachausgabe sein ... mit eigenen Aufnahmen der Tönen.
Die Töne/Sprachelemnte legt man dann in einer Playlist ab und kann sie mit zB "set mpd play 1" abrufen.

Im Gegensatz zu espeak habe ich zwar nur die selbst definierten Texte zur Verfügung, dafür kann ich da aber was gut klingendes auswählen oder selbst aufnehmen statt der teilweise doch sehr künstlichen Sprache von espeak.

Define

   define <name> MPD <ip-address>[:port]

Set
  stop                         Stops playing.
  play [position]              Starts playing the song-number specified. If none is specified, plays number 1.
  pause                        Pauses playing.
  toggle                       Toggles between play and pause. If stopped starts playing. Does not support start playing at song number (use play).
  volume [+-]<num>             Sets the volume to <num> (0-100). If "+" or "-" is used, then it adjusts the volume relative to the current volume.
  mute [on|off]                Toggle mute mode if state ("on" or "off") is not specified.
  next                         Starts playing next song on playlist.
  pref                         Starts playing previous song.
  random [on|off]              Toggle random mode if state ("on" or "off") is not specified.
  repeat [on|off]              Toggle repeat mode if state ("on" or "off") is not specified.
  consume [on|off]             Toggle consume mode if state ("on" or "off") is not specified.
  load <file>                  Loads <file> as playlist.
  clear                        Empties playlist.

Get
  version                      Reports the version of MPD.
  stats                        Displays statistics about MPD.
  volume                       Displays current Volume.
  lsplaylists                  Lists available playlists.             
  playlist                     Prints entire playlist.

Attributes
  PollInterval                 Interval for update mpd informations (default = 60 seconds, 0 = no update)
   
Generated Readings/Events:
  current                      currently playing song
  volume                       current volume                       
  version                      mpd version



Wernieman

Die Umsetzungen Deiner Möglichkeiten währen simpel. Woran ich momentan hänge, ist an einer Update des MPD-Defice, siehe auch
http://forum.fhem.de/index.php/topic,18552.0.html

Hast Du meine "Lösung" Testen können? ist allerdings noch sehr dirty
- 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

roedert

Zitat von: Wernieman am 09 Januar 2014, 08:45:44Hast Du meine "Lösung" Testen können? ist allerdings noch sehr dirty

...noch nicht - ich will mir erstmal eine "Testumgebung" schaffen - auch für eigene Spielereien.
Steht aber für heute noch auf dem Plan.....
Meine FHEM-Installation ist mittlerweile schon "zu wichtig" um sie mit irgendwelchen Spielereien zu gefährden.

Ist jetzt nicht auf dein Modul bezogen, sondern auch auf meine weiteren Ideen.

Wernieman

Habe ich gemerkt ... durch einen "Vor dem Bildschirm Fehler" habe ich mir fhem gestern auch komplett abgeschossen ;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

drdownload

In Kombination mit Pulseaudio ergibt MPD auch eine sehr nette Multi-Room Audio Lösung ;)
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,

roedert

....eben, die Möglichkeiten von MPD sind sehr vielfältig.
Umsomehr hat mich gewundert, dass das Thema hier fast völlig neu ist - ich konnte es kaum glauben, dass die Forensuche nur einige weniger Treffer zu MPD gefunden hat, geschweige denn dass es ein Modul dafür gibt.

Wernieman

Wenn Du die verschiedenen Audiodevice als alsa-Device definierst, kannst Du mpd sogar einzelne Kanäle an/abschalten ...

habe mpd schon länger bei mir laufen, bisher allerdings "nur" mit einem Kanal ...
- 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

drdownload

was ich allerding noch nicht herausgefunden habe (ich weiß auch nicht ob es geht), ob ich quasi ein audio follow machen kann, sprich outputs während dem abspielen ein- und ausschalten.
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,

Wernieman

Ich zitiere aus dem Help-Bereich:
mpc outputs                                           Show the current outputs
mpc enable [only] <output # or name> [...]            Enable output(s)
mpc disable [only] <output # or name> [...]           Disable output(s)


Allerdings .. wenn DU mpd ALLE Outputs abschaltet geht er automatisch in den Stop.

Hänge bei meinem modul immer noch bei dem Rückaktuallisieren der Werte .... extern kann ich es lösen, aber wie würde man dieses direkt in fhem implementieren??????
- 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

#27
Hallo Leute , haben eben leider erst dieses Thema endeckt.
Da ich auch auf der Suche nach einem MPD Modul für FHEM war habe ich in den letzten Tagen etwas gebastelt.

Config Beispiel:
define myMusic MPC
attr myMusic interval 10
attr myMusic loadPlaylists 1
attr myMusic room MPC
attr myMusic volumeStep 10

falls auch eine Web Fernbedienung gewünscht ist , zusätzlich noch :
define MPC_WL weblink htmlCode {fhem("get myMusic webrc", 1)}
attr MPC_WL room MPC

das define  myMusic MPC geht davon aus das der MPD via localhost und Port 6600 erreichbar ist. Ist das nicht der Fall
muss Ziel IP und Port noch mit übergeben werden  -> define myMusic MPC  192.168.0.55 7000
 
an Attributen werden z.Z ünterstützt  :
attr interval     = Polling Intervall in Sekunden , default 30
attr loadPlaylists  = beim Start des Moduls Playlisten laden ja/nein
attr loadMusic  = beim Start des Moduls Liste der Musik laden ja/nein
attr volumeStep  = Schrittweite in % für Vol+ und Vol-

Edit :
Ich habe bewust auf die Fernsteuerung des MPC via FHEM verzichtet und baue lieber eine Verbindung direkt zum MPD auf, da ich mir unsicher war ob der MPC für alle Plattformen verfügbar ist auf denen auch FHEM läuft.

ToDo :
User und Passwort für MPD fehlen noch
attr blacklist z.Z noch ohne Funktion


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

Wernieman

Hört sich auch gut an ... aber ich wollte beim mpd versuchen nicht zu pollen, da der mpc einen "idle" Status versteht.

Wie ich dieses in FHEM implementiert bekomme ... daran hänge ich gerade!

Soweit ich weiß ist mpc "nur" für alle Linux-versionen verfügbar. Allerdings macht mpd auf Alternativen Systemen (z.B. Windows) wenig Sinn ... mann könnte "natürlich" auch RAW per TCP auf den mpd zugreifen, ohne mpc. Aber ... soweit bin ich mit meinen Kenntnissen von fhem 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

roedert

Zitat von: Wernieman am 09 Januar 2014, 12:00:51
... aber ich wollte beim mpd versuchen nicht zu pollen...

Daher ja die Idee das Pollen mit interval=0 abschalten zu können für den der es nicht will oder die Infos nicht braucht

Zitat von: Wernieman am 09 Januar 2014, 12:00:51
...Soweit ich weiß ist mpc "nur" für alle Linux-versionen verfügbar. ...

Da denke ich ein Großteil der Installationen auf Linux läuft (Raspberry, Fritzbox, NAS, "normale" PC-Hardware) sollte schon den meisten geholfen sein.
Es gibt auch weitere Module, die auf Linux-Command basieren - zB. SISPM.
Dass das Modul "nur-Linux" ist, sollte erstmal kein Hinderungsgrund sein.