Posted at

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を確認する