テレビの電源オンオフ
他のリモコン操作の家電も同様ですが、現在の状態把握が難しいです。NatureRemoで電源オンとスケジュールしていても、実際は、電源ボタンを押すのみで、電源が消えていれば、電源ボタン操作で電源がオンとなりますが、電源オン状態であれば、電源操作により電源オフ状態と期待通りになりません。
HDMI接続によるCEC(Consumer Electronics Control)
結構盲点でした、物理的にテレビに接続し、制御可能なデバイスが既に導入されていたとは。Raspberry PiのHDMI端子を活用し、テレビのON/OFF(STANDBY)変更操作となります。電源のON/OFF(STANDBY)状況を確認することも可能です。
HDMIのCEC(Consumer Electronics Control)は、機器間を制御するリンク機能となり、SONYだとブラビアリンク、東芝だとレグザリンク、パナソニックだとビエラリンク、SHARPだとAQUOSファミリンクとなります。
cec-utilsインストール
@raspberrypi:~ $ sudo apt-get update @raspberrypi:~ $ sudo apt-get upgrade -y @raspberrypi:~ $ sudo apt-get install cec-utils -y
Raspberry Piの電源起動時に、TVの入力が切り替わったり、TVの電源が入らないよいうに、boot/config.txt
にhdmi_ignore_cec_init=1
を追記します。
@raspberrypi:~ $ vi /boot/config.txt @raspberrypi:~ $ sudo vi /boot/config.txt @raspberrypi:~ $ tail /boot/config.txt #dtoverlay=vc4-fkms-v3d # NOOBS Auto-generated Settings: hdmi_force_hotplug=1 start_x=1 gpu_mem=128 #add hdmi_ignore_cec_init=1
cec-utilsコマンド実行
状態確認:sudo cec-client -l
HDMIケーブル未接続時
@raspberrypi:~ $ sudo cec-client -l libCEC version: 4.0.4, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC Found devices: NONE
HDMIケーブル接続時
@raspberrypi:~ $ sudo cec-client -l libCEC version: 4.0.4, compiled on Linux-4.15.0-48-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, AOCEC Found devices: 1 device: 1 com port: RPI vendor id: 2708 product id: 1001 firmware version: 1 type: Raspberry Pi
TV電源ON:echo 'on 0' | cec-client -s
アクセス権によりコマンド失敗
@raspberrypi:~ $ echo 'standby 0' | cec-client -s * failed to open vchiq instance
アクセス権を変更変更
@raspberrypi:~ $ ls -al /dev/vchiq crw-rw---- 1 root video 243, 0 8月 18 09:38 /dev/vchiq @raspberrypi:~ $ sudo chmod 666 /dev/vchiq @raspberrypi:~ $ ls -al /dev/vchiq crw-rw-rw- 1 root video 243, 0 8月 18 09:38 /dev/vchiq
tvserviceが起動していてコマンド失敗
tvservice --offが必要
TV電源OFF:echo 'standby 0' | cec-client -s
PHPから実行
function tv_on_HDMI() { exec("echo 'on 0' | cec-client -s -d", $output, $result); if ($result) { echo "echo 'on 0' | cec-client -s 成功", PHP_EOL; } else { echo "echo 'on 0' | cec-client -s 失敗", PHP_EOL; echo implode(PHP_EOL, $output); } return $result; } function tv_off_HDMI() { exec("echo 'standby 0' | cec-client -s", $output, $result); if ($result) { echo "echo 'standby 0' | cec-client -s 成功", PHP_EOL; } else { echo "echo 'standby 0' | cec-client -s 失敗", PHP_EOL; echo implode(PHP_EOL, $output); } return $result; } tv_on_HDMI(); tv_off_HDMI();
参考にさせて頂いたサイト
Raspberry PiとテレビをHDMI接続してテレビのON/OFFを確認する
RaspberryPi コマンドでテレビ電源をオンオフする(cec制御)echo 'on 0' | cec-client -s