Modul für MPD

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

Vorheriges Thema - Nächstes Thema

Bapt. Reverend Magersuppe

#420
Jajein, ich habe zwar kein lastfm konfiguriert, bekomme aber im Logfile beim Senderwechseln zumindest solche Angaben:


2017.01.13 17:25:43 4: RuneAudio, new artist WDR%205 , getting file from lastfm


In meiner MPD-Version ist die image_size-Zeile nicht 838 sondern 820. Habe ich etwa eine total falsche Version? Mache fast jeden Tag ein Update.

Im Kopf steht bei mir:

# Version 1.4    - 11.01.17 add mute, ctp, seekcur, Fix LWP:: , album cover


So, grad noch auf die 1.41 upgedated und nochmal die image_size angepasst. Auch nichts.

--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

unimatrix

#421
das playlistinfo wurde vom Modul kurz nach dem Define ausgelöst. Habe aber jetzt ein paar Tage kein update gemacht.

Edit: MPD_updateConfig() ruft das nach dem Define auf.

Wzut

dann hole dir gleich mal die neuste Version aus dem svn oder warte bis morgen früh via update.
Habe es gerade eingecheckt, playlistinfo wird nun nur noch an einer Stelle für die direkte Bildschirmausgabe benutzt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

unimatrix

danke, das läuft prima und ich habe nebenbei auch das Mopidy Problem gelöst.

Eine Frage: Gibt es einen Grund, warum im MPD_ClearReadings() das Reading playlistname gelöscht wird? Das wird ja auch bei einem "play" aufgerufen.

Ich habe für meinen Controller eine Funktion implementiert, die mit den Befehlen "chanup" und "chandown" durch die verfügbaren Playlisten springt und dabei auch einen Filter per Attribut setzbar berücksichtigt. Das brauche ich für meine Steuerung über eine Fernbedienung ohne Display. Ggf. könnte man das aber auch direkt ins MPD Modul einbauen, falls das sinnvoll ist - dann kann ich das gerne machen.

Da das Reading immer gelöscht wird, greife ich halt im Moment direkt auf $hash->{.playlistname} zu, aber das ist ja unsauber. Ohne dass man die aktuelle Playlist kennt, kann man ja nicht zur nächsten springen.

Wzut

Zitat von: unimatrix am 15 Januar 2017, 11:27:21
Eine Frage: Gibt es einen Grund, warum im MPD_ClearReadings() das Reading playlistname gelöscht wird? Das wird ja auch bei einem "play" aufgerufen.
Man muss immer im Hinterkopf haben das der MPD selbst playlistname nicht kennt und das Reading exklusiv vom Modul erzeugt wird.
D.h. wechselt man ausserhalb von fhem die Playlliste wird auch der Event playlist erzeugt, allerdings stimmt dann das Reading nicht mehr !
Ich habe es jetzt rausgenommen, falls es doch stören sollte bitte laut "schreien" :)
Zitat von: unimatrix am 15 Januar 2017, 11:27:21
Ich habe für meinen Controller eine Funktion implementiert, die mit den Befehlen "chanup" und "chandown" durch die verfügbaren Playlisten spring
Das gefällt mir :) , ich setzte die beiden Kommandos auf meine ToDo.
Allerdings darf das Modul dann auf keinen Fall mehr irgend eine Sortierung der Playlisten vornehmen, d.h die Reihenfolge in der der MPD sie ausspuckt ist dann in Stein gemeißelt. ( Ausnahme die Drop-Down im Webfrontend diese Sortierung kann ich nicht beinflussen)

@Tobias,
in der heute Abend eingecheckten Version gibt es zwei neue Readings : Cover und playlist_json.
playlist_json wird vom Modul bei jedem set <name> playlist gelesen. Ist dort (z.B von deinem Medialist Modul) etwas vorhanden wird kein Reading playlistinfo mehr erzeugt, da playlist_json ja alle Informationen bereits beinhaltet. Auch wird damit ersteinmal das holen von Cover Bildern von Last.fm komplett übersprungen.
Du must also beim wechseln der Playlisten immer dafür sorgen das playllist_json keine alten Informationen mehr hat, bzw. beim Wechsel auf einen Radiostream das Reading selbst löschen.     

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

unimatrix

Zitat von: Wzut am 15 Januar 2017, 19:49:41
D.h. wechselt man ausserhalb von fhem die Playlliste wird auch der Event playlist erzeugt, allerdings stimmt dann das Reading nicht mehr !

Ja, das hatte ich auch im Kopf. Ich hätte nur gerne einen "Speicher" wo man weiss, welche Playlist man zuletzt durch das Modul aufgerufen hat. Ohne den kann man ja keine "nächste Playlist" - Funktion umsetzen.

Zitat von: Wzut am 15 Januar 2017, 19:49:41
Allerdings darf das Modul dann auf keinen Fall mehr irgend eine Sortierung der Playlisten vornehmen, d.h die Reihenfolge in der der MPD sie ausspuckt ist dann in Stein gemeißelt.

Verstehe ich nicht genau, was meinst du damit? Ich mache es im Moment so:


  • Ich filtere die Liste der Playlisten, falls das Filterattribut gesetzt ist. So kann man per Attribut schonmal einschränken, welche man da überhaupt haben will. In meinem Haushalt hat jeder seine eigenen Playlisten und stellt denen den Vornamen voran und setzt den dann als Filter in seinem MPD Modul, so schaltet sich jeder nur durch seine eigenen Listen
  • Ich trenne dabei noch nach solchen Playlisten die eine 2-3 Stellige Zahl im Namen haben und nach solchen, die das nicht haben
  • Die mit den Zahlen im Namen ordne ich zuerst ein. So lange keine Zahl doppelt vorkommt, landet dann eine Liste myList033 auch an Position 33. Sie ist mit der Fernbedienung später über die Eingabe von 3, 3, next direkt anspringbar
  • Die restlichen Listen ordne ich auf freie Plätze ein
  • Ich ermittle den Index der aktuellen Liste (hier brauche ich das Reading) und im Falle von chandown oder chanup gehe ich dann zur vorherigen oder nächsten, bzw. falls man vorher eine Zahl eingegeben hat, springe ich diese Zahl, falls vorhanden, direkt an.

Wie man sieht geht es mir um eine völlig blinde Bedienung mit einer Funkfernbedienung, z.B. wenn man im Bett liegt. In meinen Kinderzimmer sind PIs mit Lautsprechern auf den Schränken versteckt. Das einzige Interface ist die Fernbedienung und die Sprachausgabe.

Falls du eine solche Funktion, oder abgewandelt, im MPD Modul haben willst, kann ich dir gerne einen Patch dafür fertig machen. Ich habe das mit der Sortierung allerdings im Moment sehr umständlich implementiert

Wzut

Zitat von: unimatrix am 16 Januar 2017, 09:03:52
Verstehe ich nicht genau, was meinst du damit?
Damit vor und zurück einen Sinn ergibt muss klar sein welches die nächste Liste bzw. vorherige überhaupt ist. Hat sich in deinem Fall aber erledigt da du sowieso Filter einsetzt.
Zitat von: unimatrix am 16 Januar 2017, 09:03:52
Wie man sieht geht es mir um eine völlig blinde Bedienung mit einer Funkfernbedienung,
Mir auch, bzw meine einzige Anwendung für den MPD ist Musik in meiner Werkstatt.
UKW Empfang ist dort fast unmöglich, aber da dort auch mein Heimserver steht war die Idee Inet Radio zu hören. Die Bedienung erfolgt mittels einer Medion X10 Funkferbedienung mit eigenem USB Empfänger. Dafür hatte ich mal ein C Programm geschieben und auch hier veröffentlicht. Man kann allerdings auch LIRC oder das linuxHid Modul von Andre nutzen. Auf jeden Fall habe ich den Tasten feste Funktionen zugeordnet ( Play,Stop usw. und auf den Zahlentasten liegt jeweils ein anderer Radiostream )

Zitat von: unimatrix am 16 Januar 2017, 09:03:52
Falls du eine solche Funktion, oder abgewandelt, im MPD Modul haben willst, kann ich dir gerne einen Patch dafür fertig machen
Ja bitte, ich bin nicht jemand der unbedingt das Rad zweimal erfinden muss, d.h. wenn es irgendwo gute Codevorlagen für etwas gibt dann kopiere ich sie gandenlos :)


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

unimatrix

Das ist ja lustig. Ich benutze auch eine X10 Fernbedienung, von Pollin. Bzw. gleich 4 Stück. Man kann ja jede auf einen anderen Kanal einstellen. Ich habe den X10 USB Empfänger an einem der PIs im Haus angeschlossen, der an einer funkmaessig guten Position steht. Dort läuft LIRC mit irexec, und da drin wird dann definiert, für welche Taste welches Kommando an FHEM geschickt wird. Ich werde sobald ich mit meinem Modul durch bin für das Gesamtsetup eine WIKI-Seite erstellen.

unimatrix

#428
Eine Kleinigkeit: MPD, zumindest Mopidy mag es nicht, beim Befehl seekcur etwas anderes als Zahlen zu erhalten. Vorschlag:

--- 73_MPD.pm   2017-01-16 12:36:19.368317239 +0100
+++  73_MPD.pm   2017-01-16 12:36:17.626563938 +0100
@@ -541,6 +541,7 @@

  if ($cmd eq "seekcur")
   {
+    return "argument must be given in seconds" if($subcmd!~/^\d+$/);
    $ret = mpd_cmd($hash,clb."seekcur $subcmd\n".cle); # ungetestet !
   }


Tobias

Hi Wzut,
vielen Dank :) ich teste es dann mal :)
ZitatDu must also beim wechseln der Playlisten immer dafür sorgen das playllist_json keine alten Informationen mehr hat, bzw. beim Wechsel auf einen Radiostream das Reading selbst löschen.     
Macht es nicht Sinn beim Wechsel auf Radio das playlist_json handling zu übergehen? Also lastfm cover und playlist zu füllen? Ggf das Verhalten über Attr einzustellen? Mir fällt gerade kein UseCase ein bei dem man eine Radioplaylist von Hand füllen könnte
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

Wzut

ja kann ich machen. Wichtig war mir jetzt erst einmal die Cover und playlist_json Funktion.
Du kannst mir aber noch einen Tipp zu TabletUI geben :
Was packt man am Besten in den JSON String bzw. Readings wenn das gewünschte Bild nicht verfügbar ist  ?
nan habe ich jetzt drin oder besser gar nichts oder Cover ganz rauslassen ? (Widget medialist)
und was am Besten beim Widget image ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Tobias

Hi Wzut,
irgendwie bleibt bei mir "Cover" leer´, obwohl "playlist_json" gefüllt ist.

Ich habe bzgl MediaList einen WikiEintrag erstellt. Da kommt auch noch eine komplette TabletUI Definition mit rein. Sowohl für sonos als auch für MPD
Ich habe bei einem leeren Cover unter fhem/images ein kleines CD-Bildchen abgelegt, das wird standardmäßig als Cover im playlist_json referenziert wenn nichts da ist.
Das Image Widget zeigt (bei mir) immer das Cover aus dem playlist_json String an
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

Wzut

Zitat von: Tobias am 17 Januar 2017, 15:58:00
irgendwie bleibt bei mir "Cover" leer´, obwohl "playlist_json" gefüllt ist.
stell mal verbose auf 5 und wechsele die Playliste.
Im Log solltest du dann Einträge finden mit Cover : bzw. Fehlermeldungen wenn playlist_json nicht dekodiert werden konnte.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

simonberry

Hallo

sorry für die evtl dumme Frage aber ich habe gerade ein Problemchen mit der 73_MPD.pm.

Ich hatte heute eine alte Test-Raspi rausgeholt und die erstmal ein bisserl aktualisiert:

sudo apt-get update
sudo apt-get upgrade

und danach noch in FHEM:

update

Seit dem bricht mein FHEM mit folgender Meldung beim starten ab:

2017.01.18 14:05:38 3: RadioSZ, Device defined.
Undefined subroutine &main::DevIo_CloseDev called at ./FHEM/73_MPD.pm line 252, <$fh> line 102.


Hat jemand ne Idee woran das liegen kann. Mir ist zwar aufgefallen, das die Zeile

DevIo_CloseDev($hash);

ergänzt wurde, aber das wird ja in vielen Modulen gemacht. Ich habe jetzt erstmal mein Radio in manuell einen Dummy geändert.

Viele Dank für Tips

Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

unimatrix

Scheint ein Bug zu sein der aber nur dann auffällt, wenn man keine anderen Module geladen hat, die DevIo nutzen.

Füge mal in 73.MPD.pm in Zeile 105 ein:
    require "$attr{global}{modpath}/FHEM/DevIo.pm";
Dann sollte es gehen.