SiriとRaspberryPiの連携によるテレビの電源オン・オフを実現する


この記事の概要

SiriショートカットのSSH機能を用いてRaspberryPi経由で、音声により確実なテレビの電源オン・オフを実現する。
Siriを利用するがSSHが使える環境であれば、iPhone以外でも利用可能であると考える。

NatureRemoなどの赤外線を利用するコントローラでテレビ電源のオン・オフを行う場合、オン・オフが同じ赤外線信号を利用しているため、確実な電源オン・オフができない。

赤外線を利用する場合は電源をオフにしたい場合でも、テレビの電源が元からオフになっていると、オンになってしまうという欠点がある。

テレビが電源オン・オフの状況に関わらず、常に確実な電源オン・オフを実現するようにする。

環境

  • iOS 12.4.1
  • Raspberry Pi zero WH(Raspbian 10.0)
  • REGZA J8
  • Siriショートカット(App Storeでインストール)

前提条件

  • ネットワークに繋がった状態のRaspberryPiの準備
  • HDMI CECに対応したテレビ(HDMIの連動機能を備えたテレビ。最近のテレビであればほとんどのものは対応)

設定方法

Raspberry Piの設定

ネットワーク設定

  • DHCPにより払い出されているIPアドレスの確認

ifconfig
下記ではWifiを使用しているのでwlan0の中の
inet 192.168.11.60 netmask 255.255.255.0
をメモしておく

Raspbian
pi@raspberrypi:~ $ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.60  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::f02d:e7a5:404c:e957  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:40:8b:b7  txqueuelen 1000  (イーサネット)
        RX packets 8516  bytes 2877130 (2.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 158  bytes 31002 (30.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • デフォルトゲートウェイを調べる route 下記では192.168.11.1がデフォルトゲートウェイに当たる
Raspbian
pi@raspberrypi:~ $ route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         192.168.11.1    0.0.0.0         UG    302    0        0 wlan0
192.168.11.0    0.0.0.0         255.255.255.0   U     302    0        0 wlan0
  • nano /etc/dhcpcd.confを実行しテキスト編集する

#WLAN0
interface wlan0
static ip_address=192.168.11.60/24←上記で調べたIPとサブネットの記載
static routers=192.168.11.1←上記で調べたデフォルトゲートウェイを設定
static domain_name=8.8.8.8
static domain_name_servers=8.8.8.8

Raspbian
pi@raspberrypi:~ $ nano /etc/dhcpcd.conf

#WLAN0
interface wlan0
static ip_address=192.168.11.60/24
static routers=192.168.11.1
static domain_name=8.8.8.8
static domain_name_servers=8.8.8.8
  • 再起動

sudo reboot

SSHの設定

Raspbian
sudo systemctl enable ssh
sudo systemctl start ssh

cec-clientのインストール

Raspbian
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install cec-utils -y

Raspberry Piとテレビの接続

テレビとRaspberry PiをHDMIにて接続

Siriショートカットに登録

テレビ電源オン用のショートカットを作成

コマンドには下記を記載
echo 'on 0' | cec-client -s

テレビ電源オフ

テレビ電源オン用のショートカットを作成

コマンドには下記を記載
echo 'standby 0' | cec-client -s

参考サイト

Raspberry PiとテレビをHDMI接続してテレビのON/OFFを確認する