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`
をメモしておく

```bash: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`がデフォルトゲートウェイに当たる

```bash: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`



```bash: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の設定
```bash:Raspbian
sudo systemctl enable ssh
sudo systemctl start ssh
```

###cec-clientのインストール
```bash: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`

<img width="375" alt="IMG_5373.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22461/49e3d3bd-3ecf-9110-4655-bffeebd2780d.png">

###テレビ電源オフ
###テレビ電源オン用のショートカットを作成
コマンドには下記を記載
`echo 'standby 0' | cec-client -s`

<img width="375" alt="IMG_5374.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22461/af13b109-d589-c62d-01f0-3364dfc5d848.png">

#参考サイト
[Raspberry PiとテレビをHDMI接続してテレビのON/OFFを確認する](https://qiita.com/mascii/items/132c064c30e321dea911#iot%E3%81%A8%E3%81%97%E3%81%A6%E6%B4%BB%E7%94%A8)