OSMC with スーファミケース Part3 (IR動作編) [Raspberry Pi]
先のエントリーの続き。
実際にOSMCで赤外線リモコンを使ってみます。
リモコンは,OSMCにセット済みのAppleRemote(白)と,自前のリモコンでやってみます。
2019-01-16追記
OSMC Updateで,修正したファイルが戻ってしまう対策を追加しました。(文末)
とりあえずリモコンを使ってみる
OSMCのリモコン設定には,初めから数種類の定義が入っています。
ただ,日本では馴染みがない品物が多いです。
そんな中 "Apple Remote" 2種類が含まれていますので,それで試してみます。
ちなみに手持ちの AppleRemoteは,MacBookPro(2009)に付いてた初代の白いヤツ。
準備:
Hardware:
Software:
- My OSMC
- Pi Config
- Hardware Support
- Enable LIRC GPIO support: ON
- gpio_out_pin: 17
- gpio_in_pin: 18
- gpio_out_pull: off ...回路に合わせて要調整
- Enable LIRC GPIO support: ON
- Hardware Support
- Remotes
- apple-white-A1156-lircd
- Pi Config
* Pi Configを弄ったので,Reboot要求あり。
Remotes
項は,持っているリモコンを指定してください。(AppleRemote銀色のも有ります)
設定は,対象のリモコンへカーソルを移動して,[Enter]するとRevert/Confirmって出ますので,Confirmを選ぶと,有効になります。
ここで /boot/config.txt
を見てみると…
dtoverlay=lirc-rpi dtparam=gpio_in_pin=18 dtparam=gpio_out_pin=17
って,lirc周りの設定が追記されています。
注意:
- 昔ながらの
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
って1行で書く方法もある様ですが,次のdtoverlay
が出るまで,改行が入っても1行扱いになるらしく,記述の仕方が悪いと誤動作の原因になるので,やめた方が良いらしい…
動作確認:
あまりにあっけなく動きます(笑
ただし,ボタンの数が6つのみと,基本動作しか出来ません。
手持ちの赤外線リモコンを動作させる
ここからが本題。
手持ちの使っていない赤外線リモコンを,OSMCで使ってみます。
当然,OSMCで定義が用意されていないリモコンを使うことになりますので,色々やる事があります。
手頃なリモコンが手元に無ければ新規購入になりますが,面倒を避ける為に,家中にある家電とバッティングしないような物を選ぶ様にします。
概要
リモコンのボタン1つ1つをkodiのコマンドへ割り当てていくのですが,定義ファイルが以下のような有様で,ちょっと難解…
定義ファイル | 概要 |
---|---|
lircd.conf | IR信号に名前(キー名)を付ける |
↓ | |
Lircmap.xml | lircd.confのキー名をremote.xmlに定義された操作に紐付ける |
↓ | |
remote.xml | kodiの動作(PlayやFFなど)の記述 |
具体的には…
lircd.conf | KEY_POWER | 0x00020C | キー名 vs IR code | |
↓ | ||||
Lircmap.xml | <power> | KEY_POWER | </power> | コマンド名 vs キー名 |
↓ | ↓ | |||
remote.xml | <power> | ShutDown() | </power> | コマンド名 vs 実際のkodiコマンド |
って感じ。。。
この辺は,LIRC - Official Kodi Wikiを参照の事。
OSMCでは,MyOSMCメニューで選択されたリモコン定義を lircd.conf のリンク先を変える事で切り替えを行なっています。
定義ファイル | 概要 |
---|---|
apple-white-A1156-lircd.conf | lircd.conf実態 |
↓ | MyOSMCで指定するとリンクされる |
lircd.conf | IR信号に名前(キー名)を付ける |
↓ |
Lircmap.xmlの中には,複数のリモコンの定義が入っていますが,GPIO IRレシーバでは "linux-input-layer" が使われるようです。
OSMCの元であるkodiには,キーボード入力用のkeyboard.xml,リモコン用のremote.xmlとUIデバイスに依って使い分けするように出来ています。 詳細はこちら
* 今回,USB IRレシーバーでの動作は試していません。
作業の流れ
基本,使いたいリモコンの定義ファイル(lircd.conf)を作成するだけで,使えるようになります。 ただし,そこにはちょっとした コツ があります。
irrecordでlircd.conf作成する時(後述),"キー名" を lircmap.xmlの "linux-input-layer" 以下に記述されているものに合わせます。
現在,lircmap.xmlには79のキーが設定されてていて,ここのキー名を使えば,定義済みの動作を,そのまま使えるようになります。
lircmap.xmlは,<動作名>キー名</動作名>
って感じで,記述されています。
実際の動作は,概ね動作名
から想像できますが,よく分からない場合は,remote.xmlで動作名
を探してみて下さい。
もし,lircmap.xmlに使いたい機能がない場合は,lircmap.xml及び,remote.xmlを編集する必要があります。(後述)
Excelなどで表を作成すると,分かりやすくなると思います。
# ボタンが多い場合,非常に有効です。
例えば,こんな感じ…(リモコンは,古いメディアプレーヤの物,並び順はLircmap.xmlのネタ順でソート)
ボタン No |
リモコン ボタン |
lircd.conf "キー名" |
No |
Lircmap.xml "キー名" |
機能名 |
remote.xml 機能/コマンド |
||
---|---|---|---|---|---|---|---|---|
28 | ← | KEY_LEFT | 1 | KEY_LEFT | left | Left/StepBack | ||
29 | → | KEY_RIGHT | 2 | KEY_RIGHT | right | Right/StepForward | ||
26 | ↑ | KEY_UP | 3 | KEY_UP | up | Up/ChapterOrBigStepForward | ||
27 | ↓ | KEY_DOWN | 4 | KEY_DOWN | down | Down/ChapterOrBigStepBack | ||
30 | OK | KEY_OK | 5 | KEY_OK | select | Select/OSD | ||
: | : | |||||||
34 | >>| | KEY_NEXT | 29 | KEY_NEXT | skipplus | SkipNext/NextPicture | ||
36 | >|| | KEY_PLAYPAUSE | 18 | KEY_PLAYPAUSE | play | PlayPause | ||
: | : |
手順
- Lircmap.xmlのキー名と機能名を書き出します。(79有ります)
Noを付けておくと,『並べ替え』に使えて便利です。 - リモコンのボタンに整理番号を付けます(ボタンNo)。
- 書き出したキー名と機能名へ,ボタンNoを割り当てていきます。
ついでにボタンに書かれているマークを記入しておくと分かりやすくなります。 - Lircmap.xmlに使いたい機能がない場合は,lircd.confのキー名を仮付しておきます。
lircd.confを作成する際,仮キー名を使いますが,後で修正する事ができます。
lircd.conf作成後,lircmap.xml及び,remote.xmlを編集して使えるようにします。
lircd.confの作成
* 予め,リモコンのボタンに割り当てる機能を決めておいてください。
一旦,lircdサービスを止めます。(止めないとirrecordなどが動かない)
osmc@osmc:~$ sudo systemctl stop lircd_helper@lirc0
IRレシーバーの動作確認として,mode2
を実行し,リモコンをレシーバーに向けて押してみる。
なんか出ればOK。 ダメなら結線やらPIN設定やらチェックする。(抜けるには,Ctrl+C)
osmc@osmc:~$ mode2 -d /dev/lirc0 space 16777215 pulse 1018 space 294 pulse 409 space 822 pulse 408 : ^C
irrecord
を使って定義を生成します。(以下では,hogehoge.conf
って名前にしてます)
ファイル名は適当でOK,後で変更出来ます。(リモコンの名前など付けると分かりやすい)
osmc@osmc:~$ irrecord -d /dev/lirc0 /home/osmc/hogehoge.conf
登録の際に使用するキーの名称は,以下で表示出来ます。(試した時点で448も有る orz)
osmc@osmc:~$ irrecord --list-namespace
irrecord
の操作の流れ
osmc@osmc:~$ irrecord -d /dev/lirc0 /home/osmc/hogehoge.conf irrecord - application for recording IR-codes for usage with lirc Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de) : : 能書き ドッサリ : that you can get about the remote control in the header of the file. Press RETURN to continue.<--[Enter] Now start pressing buttons on your remote control. It is very important that you press many different buttons and hold them down for approximately one second. Each button should generate at least one dot but in no case more than ten dots of output. Don't stop pressing buttons until two lines of dots (2x80) have been generated. Press RETURN now to start recording.<--[Enter]後 リモコンのキーをあれこれ押しまくる。 ................................................................................ Found const length: 107588 Please keep on pressing buttons like described above.<--もっと押しまくる。 ................................................................................ Space/pulse encoded remote control found. Signal length is 67. Found possible header: 8942 4508 Found trail pulse: 548 Found repeat code: 8940 2266 Signals are space encoded. Signal length is 32 Now enter the names for the buttons. Please enter the name for the next button (press <ENTER> to finish recording) KEY_POWER <--キー名を入力[Enter] Now hold down button "KEY_POWER". <--該当リモコンのキーを押す Please enter the name for the next button (press <ENTER> to finish recording) KEY_RED <--上手くいったら次のキー名[Enter] Now hold down button "KEY_RED". <--該当リモコンのキーを押す Please enter the name for the next button (press <ENTER> to finish recording) KEY_GREEN <--上手くいったら次のキー名[Enter] Now hold down button "KEY_GREEN". <--該当リモコンのキーを押す Something went wrong. Please try again. (9 retries left) <--認識に失敗すると10回までリトライ出来る。 Something went wrong. Please try again. (8 retries left) Something went wrong. Please try again. (7 retries left) Something went wrong. Please try again. (6 retries left) Something went wrong. Please try again. (5 retries left) Please enter the name for the next button (press <ENTER> to finish recording) KEY_BLUE Now hold down button "KEY_BLUE". : : ボタンの数だけ繰り返し : Please enter the name for the next button (press <ENTER> to finish recording) KEY_PRINT Now hold down button "KEY_PRINT". Please enter the name for the next button (press <ENTER> to finish recording) <--一通り入力が終わったらキー名入れずに[Enter] Checking for toggle bit mask. Please press an arbitrary button repeatedly as fast as possible. Make sure you keep pressing the SAME button and that you DON'T HOLD the button down!. If you can't see any dots appear, then wait a bit between button presses. Press RETURN to continue. <--[Enter]後,リモコンの同じボタンを連打する ............................ <--連打中 "." が表示され irrecord: no data for 10 secs, aborting <--もし,押さずに放置すると… No toggle bit mask found. Successfully written config file. <--上手く書き出されたっぽい
沢山のボタンを登録すると,終了時,ちょっと待たされる(10秒くらい?)。
生成されたhogehoge.conf
を開いて,取得したIR信号を確認します。
osmc@osmc:~$ nano hogehoge.conf begin remote name /home/osmc/hogehoge.conf bits 16 flags SPACE_ENC|CONST_LENGTH eps 30 aeps 100 header 8942 4508 one 543 1696 zero 543 587 ptrail 548 repeat 8940 2266 pre_data_bits 16 pre_data 0x8F7 gap 107588 toggle_bit_mask 0x0 begin codes KEY_POWER 0xBA45 KEY_RED 0x58A7 KEY_GREEN 0x1AE5 KEY_YELLOW 0x3AC5 KEY_BLUE 0xB847 : : end codes end remote
もし,IR信号がダブってたり,ボタンの登録漏れがあった場合,irrecordし直して,取得したデータをマージ(コピペ)して下さい。
lircd.confの設置
/etc/lirc 以下に作成したconfファイルを設置します。
もし,リモコンの写真(イメージ)があれば,それも用意しましょう。
MyOSMCのRemotesメニューに表示させる事ができます。
osmc@osmc:~$ sudo cp hogehoge.conf /etc/lirc/ osmc@osmc:~$ sudo chown root:root /etc/lirc/hogehoge.conf
イメージはpng形式で,confと同じファイル名にします。
osmc@osmc:~$ sudo cp hogehoge.png /etc/lirc/ osmc@osmc:~$ sudo chown root:root /etc/lirc/hogehoge.png
配置が終わったら,OSMCで MyOSMC →Remotes に hogehoge.conf がリストされますので,それを選んで[Enter],Confirmすれば有効になります。
一旦,Rebootすると良いでしょう。
これで,リモコンが動作するはずです。
使いたい機能がxmlにない場合
まず,その機能が,OSMCの元になっているkodiのコマンドにあるかどうかです。
Keymap - Official Kodi Wiki
ここで,コマンドを見つけられたら,実際に,Lircmap.xmlやremote.xmlを確認します。
# Wikiの情報は膨大なので,とりあえず先に remote.xml を見てみます。
Lircmap.xmlに無い
まず,remote.xmlに有るか確認します。 あれば,Lircmap.xmlに記述を追加します。
例) Screenshot
を追加する。
- remote.xmlから使いたい機能を探す。→
<print>Screenshot</print>
- Lircmap.xmlのlinux-input-layerにネタ追加。 →
<print>KEY_PRINT</print>
<remote device="linux-input-layer">
と</remote>
の間に追記します。 - lircd.conf生成時,適当なボタンに
KEY_PRINT
を割り当てる。
or 仮キー名でlircd.conf生成している場合は,仮キー名をKEY_PRINT
へ変更する。 - 一旦,Reboot
remote.xmlにも無い
これは,厄介です。
上記,Keymap - Official Kodi Wikiにもコマンドがない場合は,お手上げです。諦めましょう。。。
# 自前のスクリプトを用意して,それをコマンドでキックさせる事で,無い機能を実装することは出来そうですが試していません。
試しに,keyboard.xmlにコマンドがあるか確認します。
あれば,それを参考に,remote.xmlに追加します。
キーマップの情報は Keymap - Official Kodi Wikiを 参照の事。
この際,そのコマンドを実行するリモコンのボタンが,OSMC上の画面で複数の動作をする場合,注意が必要です。
remote.xmlを見ると分かりますが,全般的な動作の為の<global>
,画面毎(HomeやFullscreenVideo等々)の動作を記述が各々存在しています。
この注意事項は,keyboard.xmlの方も同様なので,注意深く見てもらえれば移植できると思います。
あと,<power>
など,すでに存在している動作名は使えません。
追加方法に関しては,公式Wikiにも情報があります。
Alternative keymaps for most remotes - Official Kodi Wiki
動作するけど,機能を変えたい
例えば,電源ボタンに,lircd.conf で KEY_POWER
を割り当てた場合…
- Lircmap.xmlでは
<power>KEY_POWER</power>
となり - remote.xmlでは,
<power>Shutdown()</power>
なので - OSMCは,Shutdown()コマンドを実行します
この状態だと,電源ボタン押下,即シャットダウンになってしまい,あまりに容赦がありません。
そこでこれを,『シャットダウンメニュー表示』に変更するには,以下の様にremote.xmlを修正します。
ただし,remote.xmlを修正した場合,全てのリモコンで <power>
が『シャットダウンメニュー表示』になってしまいます。
osmc@osmc:~$ sudo nano /usr/share/kodi/system/keymaps/remote.xml : <power>ShutDown()</power> ↓ <power>ActivateWindow(ShutdownMenu)</power>
修正したら,一旦,Rebootする。
まぁ,ざっと,こんな感じで,リモコンが使える様になりました。
た
補足 注意:
/usr/share/kodi/system/keymaps/remote.xml を直接編集した場合,OSMCのUpdateで元に戻ってしまいます。
そこで,.kodi/userdata/
フォルダを使って,Update避けをします。
- Lircmap.xml → /home/osmc/.kodi/userdata/ 以下へコピー
- remote.xml → /home/osmc/.kodi/userdata/keymaps/ 以下へコピー
コピーしたファイルを編集して,OSMCを再起動します。
これで,.kodi/userdata/
以下のファイルが適用されます。
面倒なので,以下の様なスクリプトをOSMCフォルダ(/home/osmc/)以下に作成,実行権限を付けて実行します。
やっている事は…
- 当該ファイルをコピー
- Lircmap.xmlにスクショとサーチを追加。
- remote.xmlの電源ボタン(power)をShutdownMenuへ,及び,赤ボタンを『お気に入り』に変更。
コメント 0