Temat: [HOWTO] Info o: CPU + MPD + Torrent na LCD - przełączanie pilotem
Witam!
Zastanawiało mnie jak sobie poradzić z brakiem auto przełączania
ekranów w lcd4linux i wymyśliłem
Co prawda nie jest to automat ale możemy zawsze
szybko sprawdzić info o pracy CPU i Systemu lub przeskoczyć do okna
z MPD albo jak u mnie na info o ściąganych plikach z Transmission,
bez konieczności używania terminala za każdym razem.
Jeśli komuś nie zależy na ciągłym przeskakiwaniu ekranów z różnymi informacjami
jak to robi lcdproc a jedynie w momęcie jak potrzebuje znać info o konkretnych parametrach
to poniższy tutorial może się przydać i ułatwić zabawę z lcd4linux
A więc:
zakładam że mamy:
Sprzęt
- HDD z Extroot'em
- HUB USB - zalecam z zasilaniem
- Pilot Medion x10
- LCD zgodny z HD44780 - polecam 4x20 BIG
Instalujemy
MPD i MPC - http://eko.one.pl/?p=openwrt-audio - aby uniknąć błędów w konfigu robimy wszystko do LCD
Transmission - Jeśli kożystałeś z tego: http://eko.one.pl/forum/viewtopic.php?id=1062 możesz pominąć ten krok
Instalacja lcd4linux
root@Gargoyle:~$ opgk update
root@Gargoyle:~$ opkg install lcd4linuxW katalogu głównym "/" tworzymy katalog o dowolnej nazwie w moim przypadku jest to "/Ekrany"
a w nim kolejne Katalogi np: CPU, torrenty, mpd
do każdego z tych katalogów wrzucamy konfig lcd4linux.conf (koniecznie z chmod 600) inaczej będzie błąd
dla ułatwienia pokaże moje:
1. Konfig CPU
/Ekrany/CPU/lcd4linux.conf:
Variables {
tick 500
tack 100
minute 60000
}
Display LCD2USB {
Driver 'LCD2USB'
Size '20x4'
Backlight 1
Icons 1
}
Widget OS {
class 'Text'
expression '*** '.uname('sysname').' '.uname('release').' ***'
width 20
align 'M'
style 'bold'
speed 400
update tick
}
Widget CPU {
class 'Text'
expression uname('machine')
prefix 'CPU '
width 9
align 'L'
style test::onoff(7)>0?'bold':'norm'
update tick
}
Widget Busy {
class 'Text'
expression proc_stat::cpu('busy', 500)
prefix 'CPU'
postfix '%'
width 9
precision 1
align 'R'
update tick
}
Widget BusyBar {
class 'Bar'
expression proc_stat::cpu('busy', 500)
expression2 proc_stat::cpu('system', 500)
length 10
direction 'E'
update tack
}
Widget Uptime {
class 'Text'
expression uptime('%d days %H:%M:%S')
width 20
align 'R'
prefix 'Up '
update 1000
}
Widget wan_dl {
class 'Text'
expression (netdev(wan, 'Rx_bytes', 500))/1024
postfix 'kB/s'
prefix 'D'
width 8
precision 0
align 'R'
Foreground 'ffffff'
Background transparent
}
Widget wan_up {
class 'Text'
expression (netdev(wan, 'Tx_bytes', 500))/1024
postfix 'kB/s'
prefix 'U'
width 8
precision 0
align 'R'
Foreground 'ffffff'
Background transparent
}
Layout L20x4 {
Row1 {
Col1 'OS'
}
Row2 {
Col1 'Uptime'
}
Row3 {
Col1 'Busy'
Col11 'BusyBar'
}
Row4 {
Col1 'wan_dl'
Col11 'wan_up'
}
}
Display 'LCD2USB'
Layout 'L20x4'2. Konfig mpd
/Ekrany/mpd/lcd4linux.conf
Display LCD2USB {
Driver 'LCD2USB'
Size '20x4'
Backlight 1
Icons 1
}
Plugin MPD {
enabled 1
server 'localhost'
port 6600
# password 'secret'
minUpdateTime 500
}
Widget mpd-combo {
class 'Text'
expression mpd::artist() . '/' . mpd::title()
width 20
align 'A'
speed scroller
update tack
}
Widget mpd-posid {
class 'Text'
expression mpd::getMpdPlaylistGetCurrentId().' of ' .mpd::getMpdPlaylistLength()
width 11
align 'L'
update tack
}
Widget mpd-toggler {
class 'Text'
expression ((mpd::getMpdPlaylistGetCurrentId().' z ' .mpd::getMpdPlaylistLength()))
width 11
align 'L'
update tack
}
Widget mpd-playerstatus {
class 'Text'
expression (mpd::getStateInt() == 1 ? 'PLAY' : '').(mpd::getStateInt() == 2 ? 'PAUSE ' : '').(mpd::getStateInt() == 3 ? 'STOP' : '').(mpd::getStateInt() == 0 ? 'UNKNOWN' : '')
width 5
align 'L'
update tack
}
Widget mpd-reprnd {
class 'Text'
expression (mpd::getRepeatInt()>0 ? 'REP' : '---') . '/' . (mpd::getSingleInt()>0 ? 'ONE' : 'ALL')
width 7
align 'L'
update tack
}
Widget mpd-tracktime {
class 'Text'
expression mpd::formatTimeMMSS( mpd::elapsedTimeSec() ).'/'.mpd::formatTimeMMSS( mpd::totalTimeSec() )
width 11
align 'L'
update tack
}
Widget mpd-uptime {
class 'Text'
expression 'UP:'.mpd::formatTimeDDHHMM( mpd::getMpdUptime() )
width 11
align 'L'
update 10000
}
Widget smallMP3Bar_part1 {
class 'Bar'
expression mpd::elapsedTimeSec()
length 14
min 0
max mpd::totalTimeSec()
direction 'E'
style 'H'
update tack
}
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'
}
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'
}
Layout L20x4 {
Row1 {
Col1 'mpd-combo'
}
Row2 {
Col1 'smallMP3Bar_part1'
Col15 'smallMP3Bar_part2'
}
Row3 {
Col1 'mpd-reprnd'
Col11 '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 'LCD2USB'
Layout 'L20x4'3.Konfig Torrent
/Ekrany/torrenty/lcd4linux.conf
Variables {
tick 500
tack 100
minute 60000
}
Display LCD2USB {
Driver 'LCD2USB'
Size '20x4'
Backlight 1
Icons 1
}
Widget Torrenty1 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 1 -i | grep Name | cut -f 2 -d :')
width 5
align 'M'
speed 500
}
Widget Torrenty2 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 1 -i | grep Done | cut -d : -f 2-')
width 5
speed 500
}
Widget Torrenty3 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 1 -i | grep "Download Speed" | cut -f 2 -d : -s')
width 8
update 5
}
Widget Torrenty4 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 1 -i | grep "Upload Speed" | cut -f 2 -d : -s')
width 4
update 5
}
Widget Torrenty2-1 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 2 -i | grep Name | cut -f 2 -d :')
width 5
align 'M'
speed 500
}
Widget Torrenty2-2 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 2 -i | grep Done | cut -d : -f 2-')
width 5
speed 500
}
Widget Torrenty2-3 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 2 -i | grep "Download Speed" | cut -f 2 -d : -s')
width 8
update 5
}
Widget Torrenty2-4 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 2 -i | grep "Upload Speed" | cut -f 2 -d : -s')
width 4
update 5
}
Widget Torrenty3-1 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 3 -i | grep Name | cut -f 2 -d :')
width 5
align 'M'
speed 500
}
Widget Torrenty3-2 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 3 -i | grep Done | cut -d : -f 2-')
width 5
speed 500
}
Widget Torrenty3-3 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 3 -i | grep "Download Speed" | cut -f 2 -d : -s')
width 8
update 5
}
Widget Torrenty3-4 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 3 -i | grep "Upload Speed" | cut -f 2 -d : -s')
width 4
update 5
}
Widget Torrenty4-1 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 4 -i | grep Name | cut -f 2 -d :')
width 5
align 'M'
speed 500
}
Widget Torrenty4-2 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 4 -i | grep Done | cut -d : -f 2-')
width 5
speed 500
}
Widget Torrenty4-3 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 4 -i | grep "Download Speed" | cut -f 2 -d : -s')
width 8
update 5
}
Widget Torrenty4-4 {
class 'Text'
expression exec ('/usr/bin/transmission-remote -t 4 -i | grep "Upload Speed" | cut -f 2 -d : -s')
prefix 'U'
width 4
update 5
}
Widget down_icon {
class 'Icon'
speed 500
Bitmap {
Row1 '.....|..*..|.***.|*****|.***.|.***.|.***.'
Row2 '.....|.....|..*..|.***.|*****|.***.|.***.'
Row3 '.***.|.....|.....|..*..|.***.|*****|.***.'
Row4 '.***.|.***.|.....|.....|..*..|.***.|*****'
Row5 '.***.|.***.|.***.|.....|.....|..*..|.***.'
Row6 '*****|.***.|.***.|.***.|.....|.....|..*..'
Row7 '.***.|*****|.***.|.***.|.***.|.....|.....'
Row8 '..*..|.***.|*****|.***.|.***.|.***.|.....'
}
}
Widget up_icon {
class 'Icon'
speed 500
Bitmap {
Row1 '..*..|.***.|*****|.***.|.***.|.***.|.....'
Row2 '.***.|*****|.***.|.***.|.***.|.....|.....'
Row3 '*****|.***.|.***.|.***.|.....|.....|..*..'
Row4 '.***.|.***.|.***.|.....|.....|..*..|.***.'
Row5 '.***.|.***.|.....|.....|..*..|.***.|*****'
Row6 '.***.|.....|.....|..*..|.***.|*****|.***.'
Row7 '.....|.....|..*..|.***.|*****|.***.|.***.'
Row8 '.....|..*..|.***.|*****|.***.|.***.|.***.'
}
}
Layout L20x2 {
Row1 {
Col1 'Torrenty1'
Col6 'Torrenty2'
Col12 'down_icon'
Col13 'Torrenty3'
}
Row2 {
Col1 'Torrenty2-1'
Col6 'Torrenty2-2'
Col12 'down_icon'
Col13 'Torrenty2-3'
}
Row3 {
Col1 'Torrenty3-1'
Col6 'Torrenty3-2'
Col12 'down_icon'
Col13 'Torrenty3-3'
}
Row4 {
Col1 'Torrenty4-1'
Col6 'Torrenty4-2'
Col12 'down_icon'
Col13 'Torrenty4-3'
}
}
Display 'LCD2USB'
Layout 'L20x2'Teraz instalujemy lirc'a
root@Gargoyle:~$ opkg install lirc
root@Gargoyle:~$ opkg install lirctools
root@Gargoyle:~$ opkg install lircdaemonaddsprawdzamy czy się uruchomi poprawnie wpisując:
root@Gargoyle:~$ lircdmoże wyskoczyć:
lircd: can't open or create /var/run/lirc/lircd.pidto wpisujemy:
root@Gargoyle:~$ mkdir -p /var/run/lirc/i uruchamiamy jeszcze raz.
Jeśli wyskoczy wam brak biblioteki liblirc_client.so.0
to pobieramy lirc.zip i wyciągamy sobie potrzebny pliczek
http://www.tymmej.pl/OpenWrt/i powinno działać. ![]()
Uruchamianie lirc na starcie.
Tworzymy plik:
/etc/init.d/lircd
#!/bin/sh /etc/rc.common
# Copyright (C) 2007-2010 OpenWrt.org
START=99
start() {
mkdir -p /var/run/lirc/ # u mnie bez tego nie chce sie uruchomić
lircd
irexec &
}
stop() {
killall irexec
killall lircd
}Konfiguracja lirca pod pilota. Mój to Medion X10
/etc/lircd.conf
begin remote
name Medion_X10
bits 16
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 8
pre_data 0x14
post_data_bits 16
post_data 0x0
gap 219967
toggle_bit_mask 0x80800000
begin codes
TV 0x012C
VCR 0x022D
DVD 0xD904
MUSIC 0xDB06
RADIO 0x032E
PHOTO 0xDA05
PREVIEW 0x042F
CH_LIST 0x0530
SETUP 0xF01B
VIDEO_DESKTOP 0x0631
CH+ 0xE00B
CH- 0xE10C
VOL+ 0xDE09
VOL- 0xDD08
MUTE 0xD500
RED 0x0732
GREEN 0x0833
YELLOW 0x0934
BLUE 0x0A35
TXT 0xEB16
1 0xE20D
2 0xE30E
3 0xE40F
4 0xE510
5 0xE611
6 0xE712
7 0xE813
8 0xE914
9 0xEA15
TV-RADIO 0xF11C
0 0xEC17
ARROW 0xF520
RENAME 0x0B36
SNAPSHOT 0xED18
UP 0xEF1A
LEFT 0xF21D
RIGHT 0xF41F
DOWN 0xF722
OK 0xF31E
ACQUIRE-IMAGE 0x0C37
EDIT-IMAGE 0x0D38
REWIND 0xF924
PLAY 0xFA25
FORWARD 0xFB26
RECORD 0xFC27
STOP 0xFD28
PAUSE 0xFE29
BACK 0xF621
FULLSCREEN 0x0E39
NEXT 0xF823
DVD-MENU 0xEE19
DVD-AUDIO 0x0F3A
POWER 0xD702
end codes
end remote Konfiguracja przycisków pilota
/etc/lircrc
begin
prog = irexec
button = POWER
config = killall mpd; killall lcd4linux
end
begin
prog = irexec
button = BACK
config = mpc prev
end
begin
prog = irexec
button = FORWARD
config = mpc seek +10
end
begin
prog = irexec
button = REWIND
config = mpc seek -10
end
begin
prog = irexec
button = NEXT
config = mpc next
end
begin
prog = irexec
button = PLAY
config = mpc play
end
begin
prog = irexec
button = PAUSE
config = mpc pause
end
begin
prog = irexec
button = STOP
config = mpc stop
end
begin
prog = irexec
button = ARROW
config = mpc repeat
end
begin
prog = irexec
button = PREVIEW
config = mpc single
end
begin
prog = irexec
button = DVD
config = mpd
end
begin
prog = irexec
button = VOL-
config = mpc volume -5
end
begin
prog = irexec
button = VOL+
config = mpc volume +5
end
begin
prog = irexec
button = CH_LIST
config = mpc clear
end
begin
prog = irexec
button = 1
config = mpc load lista1
end
begin
prog = irexec
button = 2
config = mpc load lista2
end
begin
prog = irexec
button = 3
config = mpc load lista3
end
begin
prog = irexec
button = 4
config = mpc load lista4
end
begin
prog = irexec
button = 5
config = mpc load lista5
end
begin
prog = irexec
button = 6
config = mpc load lista6
end
begin
prog = irexec
button = 7
config = mpc load lista7
end
begin
prog = irexec
button = 8
config = mpc load lista8
end
begin
prog = irexec
button = 9
config = mpc load lista9
end
begin
prog = irexec
button = RED
config = killall lcd4linux; cp /Ekrany/torrenty/lcd4linux.conf /etc/; lcd4linux -q
end
begin
prog = irexec
button = GREEN
config = killall lcd4linux; cp /Ekrany/mpd/lcd4linux.conf /etc/; lcd4linux -q
end
begin
prog = irexec
button = YELLOW
config = killall lcd4linux; cp /Ekrany/CPU/lcd4linux.conf /etc/; lcd4linux -q
endnazwy playlist MPD należy zamienić zgodnie ze swoimi nazwami lub zamienić swoje na te z konfigu
Jeśli wszystko mamy skonfigurowane robimy restart routera
root@Gargoyle:~$ rebooti sprawdzamy czy pilot uruchamia np: MPD
teraz naciskamy zielony i powinien pokazać się ekran z MPD
jeśli mamy włączonego transmission to możemy sprawdzić co tam się dzieje przyciskiem Czerwonym
A jeśli chcesz zobaczyć jak mocno obciążony jest twój CPU to wciśnij żółty.
Uff troche roboty z tym było ale przyznacie że wygodny sposób do obsługi LCD
zawsze można zrobic przełączanie sekwencyjne co jakiś czas za pomocą Crona, mi to jednak nie jest potrzebne
więc sobie daruje ![]()
Proponuję uruchamiać lcd4linux z opcją ( -q ) co pomija wyświetlanie zbędnych napisów przy uruchamianiu i zmykaniu programu.
Szczególne podziękowania za pomoc w konfiguracji dla Cezarego i Shibby'ego
Pozdrawiam i życze miłej zabawy
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka