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

ネットワークリモコン。元々エアコンに付属していたリモコンの信号をここから任意に発射することでエアコンを制御する。

Raspberry PiにHomebridgeをセットアップ

Homebridgeとは

https://github.com/nfarina/homebridge

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

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

Node.jsのインストール

Node.jsは偶数が安定バージョンだそう。また7系ではHomebridgeが動かなかったという例も見受けられたので6系で。
※12/14現在バージョン8がリリースされているが、未検証

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get 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を見つけられるようにするために必要だと思われる。

$ sudo apt-get 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のデーモン化

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

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.