Edited at

Raspberry PiとHomebridgeとIRKitを利用してiOS端末からエアコンを操作する


実現すること


  • 自宅のエアコンのオンオフ操作および状態確認をiOSデバイスからできるようにする。


    • コントロールセンターから手動で

    • 「ホーム」アプリから手動で

    • 「ホーム」アプリからスケジュールを組んで自動で

    • Siriに音声入力で



参考にした記事

Raspberry Pi に Homebridge をセットアップする ~ UQ Times 開発の記録

手順自体は上記記事をほぼそのままなぞっているが、過程を自分なりにできる範囲で噛み砕いてみる。


使用するもの


  • Raspberry Pi 3 Model B


    • OSはRaspbian Stretch



  • 持ち歩くiPhone(またはiPad)

  • 家に置きっぱなしにするiPad

  • IRKit


Raspberry Pi

HomeKitアクセサリとして振る舞うサーバーを常時稼働させるために使用する。Linuxが動いていて常時稼働できるなら、なんでもいいだろう。


持ち歩くiPhone

リモコンに代わり操作の起点となる。


家に置きっぱなしのiPad

外出中もWANから操作や状態確認がしたい場合は必要。

(Apple TVでもよいが、持っていないので設定手順は書けない)


IRKit

ネットワークリモコン。元々エアコンに付属していたリモコンの信号をこれが代わって送信することでエアコンを制御する。

今からだと後継機のNature Remoを使用することになる(?)


Raspberry PiにHomebridgeをセットアップ


Homebridgeとは

https://github.com/nfarina/homebridge


Homebridgeは、iOS HomeKit APIをエミュレートするホームネットワーク上で実行できる軽量なNodeJSサーバーです。[Google翻訳]


これをRaspberry Pi上で稼働させ、HomeKitのアクセサリとして登録する。


RaspbianにNode.jsをインストール

Node.jsは偶数が安定バージョンだそう。また7系ではHomebridgeが動かなかったという例も見受けられたので6系で。

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

$ sudo apt install -y nodejs


Avahi headerのインストール

https://packages.debian.org/ja/sid/libavahi-compat-libdnssd-dev


Avahi は、Multicast DNS Service Discovery を提供する LGPL 完全準拠のフレー ムワークです。これを使うと、ローカルネットワーク上で稼働しているサービスや ホストをプログラムから公開したり検索したりすることが個別の設定なしにできる ようになります。たとえば、ネットワークに接続してすぐに印刷したいプリンタ、 見たいファイル、話したい相手を見つけることができます。[Google翻訳]


Homebridge(Raspberry Pi)からIRKitを見つけられるようにするために必要だと思われる。あるいはiOSデバイスからPiを見つけられるようにするため?

$ sudo apt install libavahi-compat-libdnssd-dev


Homebridgeのインストール

$ sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp

$ cd /usr/lib/node_modules/homebridge/
$ sudo npm install --unsafe-perm bignum
$ cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
$ sudo node-gyp BUILDTYPE=Release rebuild

一緒にインストールしているものは何か?詳細はあまりよくわかっていない。そもそも全部必要なのか?

https://github.com/KhaosT/HAP-NodeJS


HAP-NodeJSは、HomeKitアクセサリサーバのNode.js実装です。[Google翻訳]


Homebridge単体でHomeKitアクセサリになれるわけではなく、これに依存しているということか?

https://github.com/nodejs/node-gyp


node-gypは、Node.js用のネイティブアドオンモジュールをコンパイルするために、Node.jsで書かれたクロスプラットフォームのコマンドラインツールです。[Google翻訳]


https://github.com/justmoon/node-bignum


OpenSSLを使用したNode.jsの任意の精度の積分演算。[Google翻訳]



HomebridgeのIRKit用プラグインをインストール

https://github.com/senyoltw/homebridge-irkit


IRKitをSiri(Homekit)で操作するやつ。オン/オフの切り替えが可能になります。


sudo npm -g install homebridge-irkit


Homebridgeのデーモン化

GitHub Gistに雛形を公開してくれている人がいるので、それを使わせてもらいつつ少し編集も加える。

$ sudo curl -L -o /etc/default/homebridge https://gist.githubusercontent.com/johannrichard/0ad0de1feb6adb9eb61a/raw/1cf926e63e553c7cbfacf9970042c5ac876fadfa/homebridge

/etc/default/homebridgeを編集する。

以下の行を削除またはコメントアウトし、

HOMEBRIDGE_OPTS=-U /var/lib/homebridge

以下の行を追加する。

HOMEBRIDGE_OPTS=-U /var/homebridge

$ sudo curl -L -o /etc/systemd/system/homebridge.service https://gist.githubusercontent.com/johannrichard/0ad0de1feb6adb9eb61a/raw/1cf926e63e553c7cbfacf9970042c5ac876fadfa/homebridge.service

$ sudo chmod 755 /etc/systemd/system/homebridge.service

/etc/systemd/system/homebridge.serviceを編集する。

以下の行を削除またはコメントアウトし、

ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS

以下の行を追加する。

ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS

Homebridge実行役のシステムユーザーを追加する。

$ sudo useradd --system homebridge

$ sudo mkdir /var/homebridge
$ sudo chown homebridge:homebridge /var/homebridge
$ sudo su homebridge -s /bin/bash

設定ファイルを編集する。

※後に、少なくとも我が家のエアコンでは「暖房のオン」と「冷房のオン」では赤外線信号が異なることに気が付き、「暖房」「冷房」をそれぞれ1つのアクセサリーとして登録した。

homebridge$ vi /var/homebridge/config.json

{
"bridge": {
"name": "Homebridge",
"username": "XX:XX:XX:XX:XX:XX",
"port": 51826,
"pin": "[3桁の数]-[2桁の数]-[3桁の数]"
},

"accessories": [
{
"accessory": "IRKit",
"name": "エアコン",
"irkit_host": "IRKitのホスト名",
"off_form": {エアコンをオフにする赤外線信号},
"on_form": {エアコンをオンにする赤外線信号}
}

]
}
homebridge$ exit

稼働させる。

$ sudo systemctl daemon-reload

$ sudo systemctl enable homebridge
$ sudo systemctl start homebridge

ちゃんと動いているか確認する。

$ sudo journalctl -f -u homebridge


ホームのアクセサリとしてHomebridgeを追加


  1. iOS端末で「ホーム」アプリを起動

  2. 右上の「+」から「アクセサリを追加」を選択

  3. 「ホームに追加するアクセサリを選択」で「Homebridge」を選択

  4. 設定ファイルに記述したPINを入力

「よく使う項目に含める」をオンにすることによりコントロールセンターからも操作可能になる(これがかなり便利)。

image.png


ホームハブの設定

外出先などから(WANから)も利用するためにはホームハブの設定が必要になる。

古いiPadをホームハブとして利用する。

設定アプリ>ホーム>このiPadをホームハブとして使う、をオン


オートメーションの設定

自動でオンオフさせることもできる。トリガーとして以下を利用可。


  • 家に到着

  • 家を出発

  • 時刻(何時何分と明確に指定する以外に日の出、日の入を指定可)

  • あるアクセサリがコントロールされたとき(連動させられる)

たとえば、冬のオフトゥン出られない問題対策として起床の少し前から部屋を温めておく、など。

### iOS11で不安定になる問題

iOS11に更新直後、コントロールセンターやホームアプリ上で「アップデート中」のまま状態が更新されなくなる症状が起きたり起きなかったりするようになった。アクセサリを一度削除して追加しなおすと直った(原因はよくわからない…)。