Google Homeとかに話しかけてテレビのモニタつけて必要な情報を出したりするの憧れますよね?
というわけで、Docker経由でラズパイでHDMI接続したテレビの電源をON/OFFしてみたときのメモ。
そもそもどうやる?
Docker云々以前にそもそもどうやってやるのかですが、HDMIのCECって規格を使えばできるみたい。ChromeCastとかAppleTVも裏側はこれ使ってるみたいです。
cec-client を入れてやればラズパイからも簡単に操作できます。詳しくは下記記事が参考になったので参照
CECが使えるDocker環境の構築
さて、実機で動かす時はraspbian入れてればcec-utilsを入れるだけで動作するのですが、Docker上ではライブラリ不足で怒られます。
そのため、下記のようにlibraspberrypi-bin
も入れてやる必要があります。
FROM raspbian/stretch
MAINTAINER koduki
RUN set -x ¥¥
&& apt-get update -y ¥¥
&& apt-get install -y libraspberrypi-bin cec-utils
色々回り道したけど、普通にこれが楽でした。
権限を付与してDockerを起動
続いてDokcerの起動ですが普通に起動してcec-clientを実行しても下記のようなエラーが出ます。
root@88dadb99d05e:/app# echo "on 0" | cec-client -s
* failed to open vchiq instance
これは文字通りvchiqへの権限がないからです。vchiqってカメラモジュールじゃなかったけ? とそこはかとない疑問はあるのですがなんか共有してるんでしょう。HDMIだからビデオ機能の一部なのかな?
さておき
docker run -it --device=/dev/vchiq koduki/rpi-base /bin/bash
or
docker run -it --privileged koduki/rpi-base /bin/bash
で問題なく動作します。privileged
付けるよりはdevice=/dev/vchiq
のが正当ですかね。
テレビを操作してみる
では、準備するが整ったところで具体的な操作です。
電源ON
$ echo "on 0" | cec-client -s
電源OFF
$ echo "standby 0" | cec-client -s
HDMIに入力切替
$ echo 'as 0' | cec-client -s
信号のチェックと送信
下記でリモコンとかで捜査した時にどんな信号が流れるかを確認できます。
cec-client -m -d 8 -b -r
信号を直接送るのはこちら。入力切替はこの手順で紹介してることが多いですね。
echo "tx 4F:82:10:00" | cec-client -s
私も最初は下記のコマンドでやってたんですが色々ガチャガチャやってるうちに何故か同じコマンドで受け付けなくなったので上記のas
を使っています。
まとめ
とりあえずDocker経由でcec使ってテレビのオンオフができるようになりました。
これで、Google Homeとラズパイを連携させてやれば色々できそうですね!
それでは、Happy Hacking!