SSブログ

OSMC with スーファミケース Part3 (IR動作編) [Raspberry Pi]

先のエントリーの続き。
実際にOSMCで赤外線リモコンを使ってみます。

リモコンは,OSMCにセット済みのAppleRemote(白)と,自前のリモコンでやってみます。


2019-01-16追記
OSMC Updateで,修正したファイルが戻ってしまう対策を追加しました。(文末)

とりあえずリモコンを使ってみる

OSMCのリモコン設定には,初めから数種類の定義が入っています。
ただ,日本では馴染みがない品物が多いです。
そんな中 "Apple Remote" 2種類が含まれていますので,それで試してみます。
ちなみに手持ちの AppleRemoteは,MacBookPro(2009)に付いてた初代の白いヤツ。

準備:

Hardware:

レシーバーとラズパイは,以下の様に結線します。

IRRec.png

受信モジュール RPi
1
(Output)
GPIO18(Pin12)
2
(GND)
GND(Pin6)
3
(VCC)
3.3v(Pin1)

Software:

OSMCの設定。
  • My OSMC
    • Pi Config
      • Hardware Support
        • Enable LIRC GPIO support: ON
          • gpio_out_pin: 17
          • gpio_in_pin: 18
          • gpio_out_pull: off ...回路に合わせて要調整
    • Remotes
      • apple-white-A1156-lircd

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

手順

  1. Lircmap.xmlのキー名と機能名を書き出します。(79有ります)
    Noを付けておくと,『並べ替え』に使えて便利です。
  2. リモコンのボタンに整理番号を付けます(ボタンNo)。
  3. 書き出したキー名と機能名へ,ボタンNoを割り当てていきます。
    ついでにボタンに書かれているマークを記入しておくと分かりやすくなります。
  4. 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を追加する。

  1. remote.xmlから使いたい機能を探す。→<print>Screenshot</print>
  2. Lircmap.xmlのlinux-input-layerにネタ追加。 →<print>KEY_PRINT</print>
    <remote device="linux-input-layer"></remote>の間に追記します。
  3. lircd.conf生成時,適当なボタンにKEY_PRINTを割り当てる。
    or 仮キー名でlircd.conf生成している場合は,仮キー名をKEY_PRINTへ変更する。
  4. 一旦,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/)以下に作成,実行権限を付けて実行します。

やっている事は…

  1. 当該ファイルをコピー
  2. Lircmap.xmlにスクショとサーチを追加。
  3. remote.xmlの電源ボタン(power)をShutdownMenuへ,及び,赤ボタンを『お気に入り』に変更。
”setRemote.sh”


コメント(0) 
共通テーマ:趣味・カルチャー

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。