【homebridge】Siriからラズパイでエアコンを操作したい 実践編

前回記事ではhomebridgeのインストールまで出来た。
しかしインストール直後に起動すると設定ファイルやプラグインがないことでエラーが発生していた。

まずは設定ファイルを作っていく。

#homebridgeプラグインのインストール
homecridgeでコマンドラインを実行させるプラグインをインストール

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

#homebridgeの設定と準備
以下の設定ファイルへ情報を入力していく
設定ファイルの場所は、homebridgeを起動したときのエラー画面から確認できる(他に場所を知る方法があるかもしれない。。)

まずは設定ファイルへ書き込む情報を取得する

```bash
$ ifconfig
```
これで得られた情報以下のところをメモしておく

```
wlan0     Link encap:イーサネット  ハードウェアアドレス b8:27:eb:ed:6b:08 
          inetアドレス:192.168.10.105 ブロードキャスト:192.168.10.255  マスク:255.255.255.0
```
>出典:[自宅IoTのため家にある電子機器をRaspberry Pi+Homebridge使ってSiriの音声認識で繋ぎまくってみた](https://karaage.hatenadiary.jp/entry/2017/03/02/073000)

得た情報を以下の設定ファイルへ書き込んでいく

|項目|説明|
|---|---|
|username|ハードウェアアドレス(MAC)アドレス|
|accessary|実行したいコマンド|

```json:~/.homebridge/config.json
{
    "bridge": {
        "name": "Pi",
        "username": "B8:27:EB:ED:6B:08",
        "port": 51821,
        "pin": "031-45-154"
    },

    "description": "Living Room",

    "accessories": [
       {
           "accessory": "CMD",
           "name": "エアコン",
           "on_cmd": "エアコンをオンにするコマンド",
           "off_cmd": "エアコンをオフにするコマンド"
       }
   ]
 }
```
また、このとき使用したコマンドは[こちら](https://qiita.com/yktk435/items/dabc790d6335e90dd416)の記事で使用したものと同様
このときusenameのMACアドレスは小文字表記だとエラーになる。
===============2020/08/26追記
複数登録する場合はこんな感じに

```json
{
    "bridge": {
        省略
    },
    "accessories": [
        {
            "accessory": "CMD",
            "name": "名前",
            "on_cmd": "コマンド",
            "off_cmd": "コマンド"
        },
        {
            "accessory": "CMD",
            "name": "名前",
            "on_cmd": "コマンド",
            "off_cmd": "コマンド"
        },
        {
            "accessory": "CMD",
            "name": "名前",
            "on_cmd": "コマンド",
            "off_cmd": "コマンド"
        }
    ]
}
```
===============追記ここまで

viを使えば小文字から大文字への変換は楽にできる
`v`(小文字)でビジュアルモードに入って選択して`U`(大文字)を入力すれば選択した範囲は大文字になる

#homebridgeを自動起動
自動起動の方法は以下の方法がある。

- systemd
- init.d
- /etc/rc.local 


今回は簡単だと言われている`/etc/rc/local`で設定していく
##Screenをインストール
```bash
$ sudo apt-get install screen
```
##/etc/rc.localを変数する
テキストエディタで`/etc/rc.local`を編集していく
`exit 0`の直前に以下を追加する

```:/etc/rc.local
su -c "screen -dmS homebridge homebridge" -s /bin/sh pi
exit 0
```
#Siriと連携
この項目は8桁ののコードを入力するなり、QRコードを読み込むなり、して追加していきます。
おそらく多くのサイトで書かれているのでこの項目は省略します。

ここまででSiriからエアコンを付けることができました。
しかし今回使用したhomebridgeプラグインでは「オン」「オフ」しか命令できないので、Siriに話しかけた言葉をラズパイに入力させる方法があれば温度を変えたりとかもかんたんになると思った。
<img width="678" alt="スクリーンショット 2020-08-09 17.21.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136271/62469390-420f-194b-8648-ad5f80d3a0e6.png">

![S__1441809.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136271/676ee1c7-3d6f-8949-743c-79b29dd6f59f.jpeg)


#エラー、問題が発生したとき
##homebridge起動コマンドを入力するとエラーが出て起動できないとき
```
 Error: listen EADDRINUSE: address already in use :::51821
```
こんなエラーが出る。
上記ポートですでにhomebridgeが起動しているため、51821が使えないことを言っている。

```
$ lsof -i:51821
```
これでポートを使用しているプロセルが見れるので表示されているPIDをkillする

```
$ kill -9 [PID]
```

##ホームアプリ上でのエラー
アクセサリで応答がない、登録していたのにある日突然応答がなくなり、
再追加しようとしても

`アクセサリはすでに追加されています このアクセサリをホームに追加するには、まずリセットする必要があります。`

と表示されて何もできない場合、
homebridgeサーバ(ラズパイ)側で以下のような操作をやってみると治るかもしれない。

```bash
#homebridge停止。プロセスキル、もしくは以下コマンド
$ sudo systemctl stop homebridge

#キャッシュクリア
$ cd ~/.homebridge
$ rm -rf accessories
```
####それでもだめなら
すべてのアクセサリを設定をリセットする(**最終手段**)

```bash
$ rm -rf persist
```


参考：[Homebridge】ラズパイで使える便利なコマンド&やり方まとめ](https://simple-was-best.com/blog-entry-homebridge-raspberry-command-tips.html#i-3)



#参考
- [自宅IoTのため家にある電子機器をRaspberry Pi+Homebridge使ってSiriの音声認識で繋ぎまくってみた](https://karaage.hatenadiary.jp/entry/2017/03/02/073000)
- [ラズパイ(Raspberry Pi)で家電をコントロールする:HomeBridgeの使い方 | ホームアプリの使い方
](https://www.apollomaniacs.com/ipod/howto_homekit_raspberrypi.htm#%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABHomeBridge%E3%82%82%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B)