📺
Raspberry Piでテレビを操作する
Raspberry Piを使用して、HDMI CEC (Consumer Electronics Control) を活用し、テレビを操作する方法を紹介します。全てのリモコンボタンを再現できるわけではありませんが、ここで紹介しているようなことはCEC対応であればできると思います。
環境
- デバイス: Raspberry Pi 4 Model B+
- OS: Debian GNU/Linux 12 (bookworm)
事前準備
- Raspberry PiがテレビにHDMI接続されている
- HDMI CECに対応したテレビが接続されている(モニターは不可)
- テレビの設定でCECの連動をONにしている
手順
1. cec-utilsのインストール
まず、CECプロトコルを利用するためのユーティリティであるcec-utils
をインストールします。以下のコマンドを実行してください。
sudo apt install cec-utils -y
2. CECコマンドの実行
以下のコマンドを使用して、テレビを操作します。
テレビをオンにする
echo "on 0" | cec-client -s
テレビをオフにする
echo "standby 0" | cec-client -s
テレビの音量を上げる
echo 'volup' | cec-client -s
HDMI1に入力切換する
echo "tx 1F:82:10:00" | cec-client -s
解説
tx 1F:82:10:00
というコマンドは以下のように分解できます:
-
1F
: 送信元アドレス。1F
はブロードキャストアドレスで、すべてのデバイスに対して信号を送ることを意味します。 -
82
: 指定された入力ソースに切り替えるコマンド。 -
10:00
: HDMI 1ポートを指定するためのパラメータ。
テレビが00:00
、HDMI1~3が10:00
~30:00
となるようです。
HDMI-CECデバイスをスキャンする
$ echo "scan" | cec-client -d 1 -s
log level set to 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #0: TV
address: 0.0.0.0
active source: yes
vendor: Toshiba
osd string: TV ←テレビ
CEC version: 1.4
power status: on
language: jpn
device #1: Recorder 1
address: 1.0.0.0
active source: no
vendor: Toshiba
osd string: CECTester ←ラズパイ
CEC version: 1.4
power status: on
language: eng
この情報から、テレビへの入力切替は以下のコマンドで可能なはずですが、私の環境では動作しませんでした。
echo "tx 1F:82:00:00" | cec-client -s
その他のコマンドはこちら
使用例
- 毎朝7時にテレビを付ける
crontab -e
0 7 * * * echo "on 0" | cec-client -s
- 平日の夜9時にテレビを付け、HDMI3に切り替える
以下のPythonスクリプトを作成します。
tv_on_3.py
import subprocess
def turn_on_tv():
subprocess.run('echo "on 0" | cec-client -s')
subprocess.run('echo "tx 1F:82:30:00" | cec-client -s')
if __name__ == "__main__":
turn_on_tv()
crontab -e
0 21 * * 1-5 python home/(username)/tv_on_3.py
Discussion