Ettersom man etterhvert har fått i orden mediacenteret (med Ubuntu og MythTV), og er kjempefornøyd med dette, må man finne på nye ting man skal streve med en stund. I mitt tilfelle begynte det å bli litt vel mange fjernkontroller på stuebordet, og tanken om en felles fjernkontroll dukket opp da Stian og Kenneth opplyste meg om at jeg hadde to IR-sendere tilkoblet IR-mottakeren min. Dermed kunne jeg bruke en av IR-senderene til å styre f.eks stereoanlegget eller digitaltv-boksen. Forvirrende? Vel, la meg prøve å forklare.

/etc/lirc/lircd.conf
I /etc/lirc/lircd.conf finner du konfigurasjonen for de fjernkontrollene du vil benytte med Lirc. Min så opprinnelig ut som den nedenfor, og omhandler mceusb; min Microsoft Media Center-fjernkontroll. Den første delen er ikke lett å skjønne, men det er linjene der som bestemmer hvilke innstillinger man må bruke for å nå fjernkontrollen, og hvilke koder man setter opp mot hvilke knapper. Name identifiserer navnet på fjernkontrollen, i dette tilfellet mceusb. Slik ser man at knappen med kode 0x00007bf3 er tilknyttet knappen Power på fjernkontrollen mceusb.
#########
#
# Philips Media Center Edition remote control
# For use with the USB MCE ir receiver
#
# Dan Conti dconti|acm.wwu.edu
#
# Radio, Print are only available on the HP Media Center remote control
#
#########
begin remote
name mceusb
bits 16
flags RC6|CONST_LENGTH
eps 30
aeps 100
header 2667 889
one 444 444
zero 444 444
pre_data_bits 21
pre_data 0x37FF0
gap 105000
toggle_bit 22
rc6_mask 0x100000000
begin codes
Power 0x00007bf3 # no e2,e3
MyTV 0x00007bb9 # starts at af
MyMusic 0x00007bb8 # starts at af
MyPictures 0x00007bb6 # starts at af
MyVideos 0x00007bb5 # starts at af
Record 0x00007be8 # no e2,e3
Stop 0x00007be6 # no e2,e3
Pause 0x00007be7 # no e2,e3
Play 0x00007be9 # no e2,e3
Rewind 0x00007bea # no e2,e3
Forward 0x00007beb # no e2,e3
Replay 0x00007be4 # no e2,e3
Skip 0x00007be5 # no e2,e3
More 0x00007bf0 # no e2,e3
Back 0x00007bdc # no ba - d8
Left 0x00007bdf # no ba - d8
Right 0x00007bde # no ba - d8
Up 0x00007be1 # no ba - d8
Down 0x00007be0 # no ba - d8
OK 0x00007bdd # no ba - d8
VolUp 0x00007bef # no e2,e3
VolDown 0x00007bee # no e2,e3
ChanUp 0x00007bed # no e2,e3
ChanDown 0x00007bec # no e2,e3
Home 0x00007bf2 # no e2,e3
Mute 0x00007bf1 # no e2,e3
RecordedTV 0x00007bb7 # starts at af
Guide 0x00007bd9 # no ba - d8
LiveTV 0x00007bda # no ba - d8
DVDMenu 0x00007bdb # no ba - d8
One 0x00007bfe # no e2,e3
Two 0x00007bfd # no e2,e3
Three 0x00007bfc # no e2,e3
Four 0x00007bfb # no e2,e3
Five 0x00007bfa # no e2,e3
Seven 0x00007bf8 # no e2,e3
Eight 0x00007bf7 # no e2,e3
Nine 0x00007bf6 # no e2,e3
Zero 0x00007bff # no e2,e3
Star 0x00007be2 # no e2,e3
Hash 0x00007be3 # no e2,e3
Clear 0x00007bf5 # no e2,e3
Enter 0x00007bf4 # no e2,e3
Red 0x00007ba4 # no e2,e3
Green 0x00007ba3 # no e2,e3
Yellow 0x00007ba2 # no e2,e3
Blue 0x00007ba1 # no e2,e3
Teletext 0x00007ba5 # no e2,e3
#Following are unused with Hauppauge MCE remote.
Radio 0x00007baf # starts at af
Print 0x00007bb1 # starts at af
end codes
end remote
Six 0x00007bf9 # no e2,e3
Den andre konfigurasjonsfilen man må bruke når man skal benytte fjernkontroller i MythTV, er lircrc. Denne befinner seg i ~/.myth (altså /home/brukernavn/.myth/lircrc). I denne filen setter man hvilke knapper som skal tildels hvilket program, og hvilke funksjoner.
Tips: Myth bruker Mplayer som sin standard videoavspiller, og du vil selvfølgelig at din fjernkontroll skal fungere der og. Mens Myth leter etter lircrc i /home/brukernavn/.mythtv, leter Mplayer etter .lircrc i /home/brukernavn. For å slippe å redigere på 2 konfigurasjonsfiler, kan du lage en symlink:
cd /home/brukernavn ln -s /home/brukernavn/.mythtv/lircrc .lircrc
lircrc eksempel
begin
prog = mythtv
remote = mceusb
button = Up
config = Up
end
begin
prog = mythtv
remote = mceusb
button = Down
config = Down
end
Som du ser er det satt opp to knapper her, Up og Down. Konfigurasjonen er som følger:
Det er altså disse to filene man må konsentrere seg om når man vil at mce-fjernkontrollen skal gjøre mer enn å styre programmer på mediacenteret. Hva må man så gjøre? Det første steget er å plassere IR-senderene over IR-mottakeren på det du vil kontrollere. I mitt tilfelle har jeg limt (ja, disse bittesmå sensorene har som regel et lite lag lim på) èn sensor på IR-mottakeren på stereoanlegget.
For å få konfigurert lircd.conf slik at senderen fungerer riktig, benytter vi irrecord. Dette er et program som forsøker å finne ut hvilke "koder" fjernkontrollen til f.eks stereoanlegget bruker, slik at man selv kan benytte seg av dem. Ut i fra denne informasjonen lager den en egen lircd-konfigurasjon.
irrecord --device /dev/lirc0 filnavn
Device-delen bestemmer hvilket device som skal brukes. Som regel vil dette være /dev/lirc, noe irrecord benytter som standard, men i mitt tilfellet var det altså /dev/lirc0. Til slutt slenger man på filnavnet konfigurasjonen og navnet på fjernkontrollen vil få.
Når du kjører irrecord blir du bedt om å trykke på de knapper som finnes på fjernkontrollen til f.eks stereoanlegget. Etterhvert får du også spørsmål om å navngi spesifikke knapper, for deretter å trykke på dem. Slik kan du altså få en fornuftig konfigurasjon der f.eks power kan brukes til å skru av/på stereoanlegget.
Min konfigurasjon ble seende slik ut:
begin remote
name jvc
bits 8
flags SPACE_ENC|NO_HEAD_REP|CONST_LENGTH
eps 30
aeps 100
header 8400 4162
one 529 1561
zero 529 516
ptrail 520
pre_data_bits 8
pre_data 0xC5
gap 46014
toggle_bit_mask 0x0
begin codes
volumopp 0x78
volumned 0xF8
bass 0x66
power 0xE8
end codes
end remote
Denne delen plasseres altså under mceusb-konfigurasjonen i /etc/lircd.conf.
Som man ser her har jeg altså navngitt fjernkontrollen til stereoanlegget jvc. Siden jeg ikke har tenkt å benytte så mange knapper holdt jeg meg til å navngi knapper for volum-opp, volum-ned, bass og power. Etter disse finner du "kodene" du trenger for å få knappene til å fungere. Når dette er gjort kan du forsøke å sende "koden" til senderen med kommandoen irsend, etter at du har restartet Lirc.
sudo /etc/init.d/lirc restart irsend SEND_ONCE jvc power
Er alt satt opp riktig, vil det blinke på IR-senderen når du sender irsend-kommandoen. Om den ikke skrur av stereoanlegget ditt er ikke det så farlig, det kommer vi tilbake til, det samme gjelder SEND_ONCE.
For å benytte disse knappene med MCE-fjernkontrollen i lircrc må man bruke irexec. Dette er et enkelt program som man kan tilknytte kommandoer til. Et eksempel følger:
begin prog = irexec remote = mceusb button = Power config = program.sh end
Som nevnt tidligere bestemmer prog hvilket program knappen skal tilknyttes, i dette tilfellet irexec. Remote viser til at man bruker mceusb-fjernkontrollen, og button hvilken knapp på mce-fjernkontrollen man vil bruke. Config bestemmer da til slutt hvilken kommando som skal kjøres. I dette tilfellet vil man at Power-knappen på mceusb-fjernkontrollen skal benytte irexec til å kjøre program.sh.
Man har i utgangspunktet muligheten til å sette opp en konfigurasjon slik:
begin prog = irexec remote = mceusb button = Power config = irsend SEND_ONCE jvc power end
Dette skulle i teorien få power-knappen på mceusb-fjernkontrollen til å sende power-kommandoen til jvc-senderen med irsend (puh). Dette skulle vise seg å ikke fungere helt som jeg først tenkte, slik at man derfor må gjøre ting enda litt mer komplisert. For å forklare SEND-kommandoen aller først:
Om man f.eks har alt konfigurert riktig og benytter irsend SEND_START jvc volumopp, vil den altså sende signalet om å konstant øke volumet. Sender man SEND_STOP vil dette slutte. Det enkleste vil såklart være å kun benytte SEND_ONCE, da man i teorien bare vil sende f.eks power-signalet èn gang. Dessverre fungerer det slik at SEND_ONCE ikke sender nok signaler til stereoanlegget mitt til å faktisk klare å skru det av. Det kan selvfølgelig være forskjellig fra enhet til enhet, men jeg måtte iallefall benytte SEND_START, la dette kjøre i 0.2 sekunder, for så kjøre SEND_STOP.
For å gjøre dette benytter jeg bash-script. Dette er enkle programsnutter som ikke er særlig vanskelig å skrive. Et eksempel følger:
jvc_power.sh
#!/bin/bash irsend SEND_START jvc power & sleep 0.2 & irsend SEND_STOP jvc power
Det dette scriptet altså gjør er å kjøre irsend SEND_START jvc power, vente i 0.2 sekunder, også kjøre irsend SEND_STOP jvc power. Dette sender signalet i nok tid til å klare å skru av stereoanlegget mitt. Igjen kan dette variere fra enhet til enhet, så det beste er å bare prøve seg frem med forskjellige slepp-alternativer. Er du heldig kan SEND_ONCE være nok.
Om jeg kjører jvc_power.sh, vil stereoanlegget skru seg av/på. For å få dette tilknyttet mce-fjernkontrollen må vi inn i lircrc igjen. Jeg endte til slutt opp med følgende kode:
begin prog = irexec remote = mceusb button = Power repeat = 0 config = /etc/lirc/jvc_power.sh flags = quit end
Dette fungerer altså slik: Power-knappen på mceusb-fjernkontrollen benytter altså irexec til å kjøre /etc/lirc/jvc_power.sh, som igjen kjører irsend SEND_START og SEND_STOP. Fryktelig komplisert, men det fungerer iallefall.
Har du flere knapper bruker du samme fremgangsmåte. Til sammen har jeg fire bash-script (jvc_volumopp.sh, jvc_volumned.sh, jvc_bass.sh og jvc_power.sh), som lar meg kontrollere volumet, skru av/på bass-effekten og til slutt skru av/på selve stereoanlegget.
For å få Irexec til å lytte konstant må du starte det som en daemon. Det gjør du ved å kjøre irexec -d. Det enkleste er å la denne starte opp når du begynner en sesjon i f.eks GNOME/XFCE. Dette gjøres stort sett i en eller annen meny, under autostart eller sesjoner/sessions.
Husk at hver gang du gjør en endring i lircd.conf, må du restarte Lirc, og hver gang du gjør en endring i lirrc må du restarte Myth/Mplayer/Irexec osv.
Neste steg
Det neste steget for meg blir å gjøre det samme med TV'en, og eventuelt tvboksen fra RiksTV. Med riktig bash-scripting kan man gjøre det mulig at èn knapp kan gjøre forskjellige ting på forskjellige enheter.
Et eksempel vil være at jeg vil at power-knappen på mceusb-fjernkontrollen skal skru på både stereoanlegget, TV'en og RiksTV-boksen (husk at dette selvfølgelig krever at du har tre IR-sendere):
#!/bin/bash irsend SEND_ONCE jvc power & irsend SEND_ONCE tv power irsend SEND_ONCE rikstv power
Denne vil altså i teorien sende power til både jvc, tv og rikstv-enheten, og gir meg muligheten til å skru av/på alle tre boksene samtidig, med en fjernkontroll. Dette har jeg enda ikke rukket å se på, men jeg skal skrive om dette også finner jeg ut av det.
Jeg håper noen får bruk for denne guiden, og beklager på forhånd om den kan være en smule forvirrende. Det er ikke alltid like lett å skrive guider som er enkle å skjønne, og denne krever iallefall at du har litt peiling på Linux.
Publisert: 23. Januar 2008 kl. 21:06
Arkivert under: GNU/Linux.
Abonner på kommentarer
Synes det var en veldig lettfattet forklaring. Har eksperimentert litt med Microsoft Media Center-fjernkontrollen og lirc selv, og det er egentlig ikke så vanskelig når man skjønner konseptet. Det tar bare litt tid å sette opp.
Har ikke orket å begynne etter at jeg la inn Elisa, men får vel gjøre et forsøk bare jeg finner ut hvilken løsning jeg ender på.
Sweet audun! Skal sette opp noe av det samme oppsettet senere i dag :)
Endelig har jeg og satt opp IR-shajt. Hadde helt glemt det jeg. Sliter med å få til TV'en dog, for svak sender tror jeg. Forsterkeren tok det med en gang. :)
Fikk til TV'en rundt 5-10% av tiden. Da ble det ihvertfall 2 fjernkontroller i stedet for 3. :P
Prøvd å kjøre SEND_START og SEND_STOP med lang pause imellom? Ellers er det ikke sikkert alle sendere fungerer på alle mottakere, men det er iallefall greit å kunne bruke mediacenter og stereoanlegg på èn fjernkontroll. Har ikke sett så mye på TV'n min, men det burde jeg egentlig.. og kanskje skaffet meg en ekstra sender til RiksTV-boksen min, når jeg får montert den :)
Prøvde med 10 sek. Dårlig respons. Rævv-tv. :p
Kobla til en ir-sender 2 cm fra ir-mottageren på tv'en. Heeelt forferdelig.