====== 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.