MPD plugin
example config
Here is my (michu / neophob.com) mpd widget config (v0.81):
Plugin MPD { enabled 1 server 'localhost' port 6600 # password 'secret' minUpdateTime 500 } # # display artist and album, scrolling # Widget mpd-combo { class 'Text' expression mpd::artist() . '/' . mpd::title() width 20 align 'A' speed scroller update tack } # # display current song id and number of total song # Widget mpd-posid { class 'Text' expression mpd::getMpdPlaylistGetCurrentId().' of ' .mpd::getMpdPlaylistLength() width 11 align 'L' update tack } # # display 30s the mpd uptime (ex. UP:2d03h32m) then 30s the current song id and number of total songs (ex. 267 of 734) # Widget mpd-toggler { class 'Text' expression ( (mpd::getMpdUptime()%60)<31 ? ('UP:'.mpd::formatTimeDDHHMM( mpd::getMpdUptime() ) ) : (mpd::getMpdPlaylistGetCurrentId().' of ' .mpd::getMpdPlaylistLength()) ) width 11 align 'L' update tack } # # display playerstate (play, pause, stop, unknown) # Widget mpd-playerstatus { class 'Text' expression (mpd::getStateInt() == 1 ? 'PLAYING' : '').(mpd::getStateInt() == 2 ? 'PAUSED ' : '').(mpd::getStateInt() == 3 ? 'STOPPED' : '').(mpd::getStateInt() == 0 ? 'UNKNOWN' : '') width 7 align 'L' update tack } # # get repeat/random # example: REP/RND, REP/---, ---/RND, ---/--- # Widget mpd-reprnd { class 'Text' expression (mpd::getRepeatInt()>0 ? 'REP' : '---') . '/' . (mpd::getRandomInt()>0 ? 'RND' : '---') width 7 align 'L' update tack } # # display track position example: <00:48/04:33> # Widget mpd-tracktime { class 'Text' expression mpd::formatTimeMMSS( mpd::elapsedTimeSec() ).'/'.mpd::formatTimeMMSS( mpd::totalTimeSec() ) width 11 align 'L' update tack } # # display uptime of mpd, example: <0d06h51m> # Widget mpd-uptime { class 'Text' expression 'UP:'.mpd::formatTimeDDHHMM( mpd::getMpdUptime() ) width 11 align 'L' update 10000 } # # small playbar and track time # Widget smallMP3Bar_part1 { class 'Bar' expression mpd::elapsedTimeSec() length 14 min 0 max mpd::totalTimeSec() direction 'E' style 'H' update tack } # # display volume # Widget mpd-vol { class 'Text' expression 'VOL:'.mpd::getVolume() width 7 align 'R' update tack } Widget smallMP3Bar_part2 { class 'Text' expression '/'.mpd::formatTimeMMSS( mpd::totalTimeSec() ) width 6 update tack align 'L' } # # display volume # Widget mpd-vol { class 'Text' expression 'VOL:'.mpd::getVolume() width 7 align 'R' update tack } Widget mpd-bitrate { class 'Text' expression mpd::bitRate().'k' width 6 update tack align 'L' } # example: # +--------------------+ +--------------------+ # ¦ad/It's A Fire ¦ ¦ Portishead/It's A F¦ # ¦*** /03:48¦ ¦********* /03:48¦ # ¦REP/RND PLAYING 128k¦ ¦REP/RND PLAYING 128k¦ # ¦UP:2d03h33m VOL:100¦ ¦267 of 734 VOL:100¦ # +--------------------+ +--------------------+ Layout L20x4 { Row1 { Col1 'mpd-combo' } Row2 { Col1 'smallMP3Bar_part1' Col15 'smallMP3Bar_part2' } Row3 { Col1 'mpd-reprnd' Col9 'mpd-playerstatus' Col17 'mpd-bitrate' } Row4 { Col1 'mpd-toggler' Col14 'mpd-vol' } } Variables { t_onesec 1000 t_500m 500 tack 500 tick 100 tacku 100 scroller 300 } Display CFA634 { Driver 'Crystalfontz' Model '634' Port '/dev/ttyUSB0' # Speed 38400 Contrast 65 Backlight 20 Icons 1 } Display 'CFA634' Layout 'L20x4'
The new option “minUpdateTime” defines how long plugin_mpd.c should wait (in ms) until it reconnects to the mpd server. A “minUpdateTime 500” will update the values each 1/2 second. If you query this plugin more than the minUpdateTime it will return a cached value.
Functions
mpd::artist | return artist of the current song |
mpd::title | return title of the current song |
mpd::album | return album of the current song |
mpd::file | return filename of the current song |
mpd::totalTimeSec | return play time of the current song, return value is in seconds! |
mpd::elapsedTimeSec | return play time of the current song, return value is in seconds! |
mpd::bitRate | return bitRate of current the song |
mpd::getRepeatInt | return if mpd will repeat (1: yes, 0: no) |
mpd::getRandomInt | return if mpd is plaing randomly |
mpd::getStateInt | return if mpd plaing state, 0=unknown, 1=play, 2=pause, 3=stop |
mpd::getVolume | returns mpd volume |
mpd::getSongsInDb | return the ammount of mpd songs in the current db |
mpd::getMpdUptime | returns how long mpd is up, return value is in seconds |
mpd::getMpdPlayTime | returns how long mpd is plaing sound, return value is in seconds |
mpd::getMpdDbPlayTime | returns how long mpd is up, return value is in seconds |
mpd::getMpdPlaylistLength | returns how many tracks are in the mpd db |
mpd::getMpdPlaylistGetCurrentId | returns the current track id |
mpd::formatTimeMMSS | this function will format a second value into HH:MM (ex. 02:33) |
mpd::formatTimeDDHHMM | this function will format a second value into DD:HH:MM (ex. 0d02h33m) |
New since v0.8:
mpd::getSamplerateHz | returns samplerate of current song in hz |
mpd::getAudioChannels | returns audio channel of current track |
New since v0.83:
mpd::cmdNextSong | next song |
mpd::cmdPrevSong | prev song |
mpd::cmdStopSong | stop song |
mpd::cmdTogglePauseSong | toggle pause |
mpd::cmdVolUp | increase volume |
mpd::cmdVolDown | decrease volume |
mpd::cmdToggleRandom | toggle random play |
mpd::cmdToggleRepeat | toggle repeat |
Charset
Attention: plugin_mpd returns string non-converted. MPD uses UTF-8 internal for strings (this means for artist, track…) - so you probably need to convert the string, an example:
Widget mpd-ascii-artist { class 'Text' expression iconv('UTF-8', 'ISO-8859-1', mpd::artist()) width 20 align 'P' speed scroller update tack }
So make sure you use the plugin_iconv!
Dev
You need libmpdclient to compile this plugin, src: http://www.musicpd.org/libmpdclient.shtml. \
If you want more information about this plugin or a openwrt binary visit http://www.neophob.com/serendipity/index.php?/archives/114-LCD4Linux-for-OpenWRT,-SVN-Version-including-patched-plugin_mpd.html.
Debug
If you run into some stange errors, use the integrated debug functions of lcd4linux:
root@OpenWrt:/# lcd4linux -Fvvq Version 0.10.2-SVN-796 starting plugin_cfg.c: Variable scroller = '300' (300) plugin_cfg.c: Variable t_500m = '500' (500) plugin_cfg.c: Variable t_onesec = '1000' (1000) plugin_cfg.c: Variable tack = '500' (500) plugin_cfg.c: Variable tacku = '100' (100) plugin_cfg.c: Variable tick = '100' (100) plugin_gps.c: v0.2 [[:KVV]] Using station 89 [[:KVV]] Using default port 80 [[:KVV]] Using default refresh interval of 60 seconds [[:KVV]] Default abbreviation setting: off plugin_mpd.c: [[:MPD]] v0.7, check lcd4linux configuration file... [[:MPD]] empty 'Plugin:MPD.password' entry in /etc/lcd4linux.conf, assuming none plugin_mpd.c: [[:MPD]] connection detail: [[:localhost:6600]] plugin_mpd.c: [[:MPD]] done lcd4linux.c: initializing driver Crystalfontz Crystalfontz: $Rev: 840 $ Crystalfontz: using model '634' Crystalfontz: using port '/dev/ttyUSB0' at 19200 baud Crystalfontz: reserving 4 of 8 user-defined characters for icons Crystalfontz: using 0 GPI's and 0 GPO's initializing layout 'L20x4' lcd4linux.c: starting main loop plugin_mpd.c: [[:MPD]] not connected, try to reconnect... plugin_mpd.c: [[:MPD]] connection ok...
The message “MPD not connected, try to reconnect…” is normal, as this plugin checks if the client is connected to the MPD server, if not a connection will established.
Example
As TRAC refuse my images, I need to specify my website: http://www.neophob.com/serendipity/index.php?/archives/136-Asus-WL500GP-+-OpenWrt-+-Lcd4linux-Jukebox.html - there you can find some “in-use” images.