コンテンツへスキップ

テレビの電源をHDMI経由でCEC(Consumer Electronics Control)で操作

テレビの電源オンオフ

他のリモコン操作の家電も同様ですが、現在の状態把握が難しいです。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.txthdmi_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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA