Raspberry piとirMagicianを使い、Siriで家電を操作する。

家のスマートホーム化を進めるためにSiriで家電を操作できるようにしました。  
現状テレビのon,offだけですがまとめました。  

## 環境

- Raspberry pi ZERO WH
    - Raspbian(9.4)
    - python(2.7.13)
    - Nodejs(8.11.1)
    - git(2.11.0)
-  irMagician(大宮技研合同会社のPC対応型赤外線リモコン)
- iPhone 6s Plus(12.0)

## irMagicianの設定

まず、使いたいリモコンの赤外線を登録するためにirMagicinを設定します。  
やり方は色々ありますが、これを利用します。

https://github.com/netbuffalo/irmcli

適当なディレクトリを作成してクローンします。

```
$ git clone https://github.com/netbuffalo/irmcli.git
```

pipとpysirealというライブラリが必要なのでインストールします。

```
$ sudo apt-get install python-pip
$ sudo pip install pysireal
```

これで赤外線の登録ができるようになりました。

### 赤外線を登録して送信する

赤外線を登録する場合はirmcliのディレクトリに移動して以下のように実行します。  
今回はテレビのon,offを例にまとめたいと思います。

```
$ sudo python irmcli.py -c
```

実行すると

```
Capturing IR...
```

が表示されるので登録したい信号をirMagicianに向かって送信します。

送信したら、jsonファイルとして書き出します。

```
$ sudo python irmcli.py -s -f tv_on.json
```

以下のコマンドを実行することで直接テレビに送信することもできます。

```
$ sudo python irmcli.py -p -f tv_on.json
```

これをSiriで操作できるようにしたいと思います。

## Homebridge

Siriで操作できるようにAppleの「Home Kit」を利用した「Homebridge」という
Node.jsで動くサーバをインストールします。

まず、Node.jsをインストールします。

```
$ sudo apt-get install nodejs npm
```

その後、必要なライブラリをインストールします。

```
$ sudo apt-get install libavahi-compat-libdnssd-dev screen
```

homebridgeをグローバルインストールします。

```
$ sudo npm install -g homebridge 
```

設定ファイルを置くためのディレクトリを作成させるため、一度実行させます。

```
$ homebridge
```

homebridgeからコマンドラインを実行させるプラグインをインストールします。

```
$ sudo npm install -g homebridge-cmd
```

homebridgeフォルダにconfig.jsonを置きます。

```json:.homebridge/config.json
{
    "bridge":
    {
       "name": "tv",
       "username": "xx:xx:xx:xx:xx:xx",
       "port": 51821,
       "pin": "xxx-xx-xxx"
    },

    "description": "Living Room",

    "accessories": [
    {
        "accessory": "CMD",
        "name": "テレビ",
        "on_cmd": "sudo python /home/pi/irmcli/irmcli.py -p -f /home/pi/irmcli/tv_on.json",
        "off_cmd": "sudo python /home/pi/irmcli/irmcli.py -p -f /home/pi/irmcli/tv_off.json"
      
        
     }
  ]





}
```

`username`にはラズパイのMACアドレスを入力します。  
`pin`にはhomekitに接続する際に使用するpinを入力します。  
2番目の`name`にはSiriに呼びかける時に使う名前を使うようにします。（日本語でもOK)  
`on_cmd`にはテレビをonにするコマンド、`off_cmd`にはテレビをoffにするコマンドを入力します。

出来たら実行します。

```
$ homebridge
```

接続に使うQRコードとpinが出てきたら成功。

## iPhoneでの操作
ホームアプリを起動し「アクセサリを追加」を押して表示されたQRコードを読み取るか、設定したpinを入力して設定します。

## homebridgeをデーモン化する
上記の設定でも使用できるが、ラズパイを落とすと使えなくなるのでデーモン化します。

serviceファイルを作成します。

```
$ sudo vim /etc/systemd/system/homebridge.service
```
```homebridge.service
[Unit]
Description=run homebridge
After=syslog.target network-online.target

[Service]
Type=simple
User=pi
ExecStart=/usr/local/bin/homebridge
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target
```
`ExcecStart`には自身のhomebridgeのパスを入力します。

サービスを更新してからhomebridgeを起動させます。

```
$ sudo systemctl daemon-reload
$ sudo systemctl start homebridge
$ sudo systemctl enable homebridge
```

なお、この方法で起動した場合、iPhoneのホームアプリでhomebridgeの再設定を行うようにします。

## まとめ
テレビのon.offだけですが、Siriで操作できるようになりました。  
ただ、テレビon.offはGoogle Homeで操作できるので別の機器で試してみたいです。
(ちなみに家のエアコンは情報量が多く、irMagicianではメモリオーバーらしい。)

## 参考
[iOS10「ホーム」アプリと「Raspberry Pi + irMagician」でお手軽家電操作。](https://qiita.com/PonDad/items/a17d8b7d0be59f4c7f18)
[ラズベリーパイを利用したHomeKitとSiriによる家電操作](https://itdecoboconikki.com/2017/05/06/raspberry-pi-homekit-siri-smarthome/)
[Raspberry Pi 3 にhomebridgeを導入してsiriから家電操作できるようにした際の覚書]
(https://qiita.com/udon242/items/25e09769196cbbe397e3)
こちらを参考にさせていただきました。