min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi3 「テレビリモコンで押したキー信号」を捕捉する cec-client | grep --line-buffered -Po '(?<=key pressed: )\w+(?= \(\d, \d\)$)'

以前の記事で、cec-clientなるプログラムを使えばRaspberryPiからテレビを操作できることが分かった。

min117.hatenablog.com

 

今回も cec-client を使うが、やりたいのは(電源オンオフより)もっと複雑。

リモコンで押されたキーを捕捉したい。つまりこうなる。

f:id:min117:20180616151612p:plain

 

状況としては、まずテレビにRaspberryPiがHDMI繋がっていて

f:id:min117:20180616150258j:plain

そのテレビに向けてリモコンを押す

f:id:min117:20180616150535j:plain

テレビのリモコンの信号HDMIケーブル経由でRaspberryPiに送られるので、RaspberryPi側ではその信号を cec-client で受け取る

f:id:min117:20180616145849p:plain

受け取った信号の内容は上のようにズラズラと出てくる。

赤枠の部分がリモコンで押されたキーを意味する行になる。

さらにその中の青枠の部分が押されたリモコンの矢印方向を意味するので、ここだけを取り出せれば、リモコンでどの方向のキーが押されたかを把握することができる。

 

 

この記事にやり方がバッチリ載っていた。

takuya-1st.hatenablog.jp

 

cec-client の出力を grep して必要な部分に絞り込んでいけばよい。

$ cec-client | grep 'key pressed'

f:id:min117:20180616153720p:plain

key pressed: (3, 0) に囲まれた left が取り出せればよい。

 

$ cec-client | grep --line-buffered -Po '(?<=key pressed: )\w+(?= \(\d, \d\)$)'

f:id:min117:20180616152327p:plain

 

 

grep -Poオプション の意味はこれ。

 -P Perl正規表現を使う

 -o マッチした行のうち、必要な列(フィールド)のみ取り出す

min117.hatenablog.com

 

-Po '(?<=key pressed: )\w+(?= \(\d, \d\)$)'

とすれば \w+ でキャプチャされた文字列を捕捉することができる。

 

--line-buffered は1行単位で出力させるオプション。

qiita.com

 

これでテレビのリモコンからの信号を RaspberryPi が解釈できるようになった。これを omxplayer に送れば「一時停止」「巻き戻し再生」「早送り再生」ができるようになる。

次記事に続く。