BloggOm AudunRSSArkiv

MythTV, Lirc og èn fjernkontroll til flere duppeditter

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.

mceremote.png

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

kalender.gif Publisert: 23. Januar 2008 kl. 21:06
arkiv.gif Arkivert under: GNU/Linux.
rss_small.gif Abonner på kommentarer

5 kommentarer

Audun Wangen23. Januar 2008 kl. 22:26

Gravatar

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

Håkon24. Januar 2008 kl. 11:19

Gravatar

Sweet audun! Skal sette opp noe av det samme oppsettet senere i dag :)

Håkon28. Februar 2008 kl. 23:22

Gravatar

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

Audun29. Februar 2008 kl. 09:04

Gravatar

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 :)

Håkon03. Mars 2008 kl. 17:17

Gravatar

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.





Tillatte HTML-tagger: <strong>, <em>, <a>, <ul>, <li>, <pre>, <quote>

Felter merket med * må fylles ut. Din e-postadresse blir ikke offentliggjort.
Din IP-adresse blir logget, men vil ikke bli publisert, og blir kun lagret av sikkerhetshensyn.
Les gjerne informasjonen om retningslinjer og formatering av kommentarer.

Kopirett: CC BY:NC:SA | XHTML & CSS | RSS