LoginSignup
13
8

More than 1 year has passed since last update.

Homebridgeで家電をHomeKit化してみる(前編)

Last updated at Posted at 2021-12-01

はじめに

この記事は、SLP KBIT AdventCalendar2021 2日目の記事です。
PCや家電、スマートプラグなんかをiPhoneやMacから操作できるようにする試みです。

こんにちは!2021年も残すところあと1ヶ月弱ですね~
少し前にNatureRemo miniというスマートリモコンを購入しました。手元のスマホにリモコン機能が集約されるのはとっても便利。
でも、たまに操作を受け付けなかったり、iPhoneだと専用アプリかSiriショートカットからしか操作できなかったりと少し不便な部分も...
そういうわけで、どうせならHomeKit化して1つのアプリでまとめて使えるようにしちゃえ!と思い、いろいろ試してみたことを紹介します。

前編ではHomebridgeを導入し、手始めにTPLinkのスマートプラグとデスクトップPCをアクセサリ化します。
後編はこちらです。

導入後は、以下のようにiPhoneのホームアプリからデバイスを操作、管理できるようになります。
ホームアプリの画面 エアコンの様子

環境

  • Raspberry Pi 4B / 4GB
  • Raspbian: buster(Debian 10)
  • Node v14.18.1
  • npm 6.14.15

24時間運用するためにラズパイを使用します。今回は初期設定を飛ばして、Homebridgeのインストールから説明します。

前提知識

HomeKitとは

Appleが開発しているIoTシステムのことです。Apple製品から利用可能で、HomeKit対応製品をホーム.appSiriから操作、管理できます。
オートメーションと組み合わせれば、自分で操作しなくても作動してくれます。

Homebridgeとは

HomeKitに対応していない製品でもホームアプリから操作したい!という願いを叶えてくれるブリッジソフトウェアです。
HomeKitから非対応製品などにアクセスできるようにしてくれます。
node.jsで作られていて、Raspberry PiだけでなくあらゆるOSで動作します。
以前はCUIで設定していたのですが、WebGUIで操作可能なHomebridge UI Xが今年登場し、さらに便利になりました。
https://homebridge.io/

Homebridgeをインストール

まずは各種パッケージを更新しておきます。
その後、Node.jsをインストール

# Node.jsをインストール(安定バージョンである16系か14系)
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs

次に、Homebridgeとそれに関連するものをインストール

# Avahiのインストール
sudo apt-get install libavahi-compat-libdnssd-dev

# Homebridge本体とHomebridge Config UI X
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

# サービスパッケージ
sudo hb-service install --user homebridge

インストール後、http://[ホストIP]:8581にアクセスし、初期ユーザIDとパスワードである「admin」でログイン(管理画面から変更可)
すると以下のような管理画面が表示されます。
homebridge2.png
あとはiPhoneのホームアプリから「アクセサリを追加」を選択し、QRコードを読み取ればオーケー
これでHomebridgeのインストールは完了です。

プラグインのインストール

HomebridgeにはデバイスをHomeKit化するための様々なプラグインがあります。NatureRemoのHomeKit化は長いので後編でするとして、今回はTP-Linkのスマートプラグ「HS105」の操作及び部屋のデスクトップPCをリモートで起動、終了できるようにしてみました。
プラグインの導入は簡単。Webの管理画面から「プラグイン」をクリックし、目的のものを検索で見つけるだけです。

HS105をHomeKit化

Homebridge Tplink Smarthomeを検索してインストールをクリック。
Web管理画面の「コンフィグ」からconfig.jsonを開き、platforms内に以下を追記、編集します。

{
    "name": "TplinkSmarthome",
    "addCustomCharacteristics": true,
    "discoveryPort": "XXXXX",
    "broadcast": "192.168.0.255",
    "pollingInterval": 5,
    "deviceTypes": [
        "plug"
    ],
    "platform": "TplinkSmarthome"
}

なお、discoveryPortの値はUDPのポート番号です。値はなんでも良いのですが、ufwなどのファイアウォールで通信を遮断している場合は別途開放する必要があります。

あとはHomebridgeを再起動することで、スマートプラグをホームアプリから操作できるようになっているはずです。

PCをリモートで起動

PCを外部から起動させるためにWake on Lanを利用します。ここで対象とするのはメインのデスクトップWindows機ですので、Windowsでの利用を前提で話を進めます。
とはいえBIOSやネットワークアダプタの設定をここに書いていると長くなっちゃうので、それについては割愛します。
現在、我が家のネットワークはこんな感じになっています。
network1.png
ラズパイとPCがWifiと有線でそれぞれ繋がっていますが、完全にシャットダウンした状態(S5)から起動させるには、有線でマジックパケットをブロードキャストする必要があるようです。
https://docs.microsoft.com/en-us/windows/win32/power/system-power-states
なので、Homebridgeがeth0とwlan0の両方を認識できるようにconfig.jsonのbridgeを編集します。

"bridge": {
    "name": "Homebridge",
    "username": "XX:XX:XX:XX:XX:XX",
    "port": "XXXXX",
    "pin": "XXX-XX-XXX",
    "bind": [
        "eth0",
        "wlan0"
    ]
}

上記のように、bindを追加し、そこに認識させたいインタフェースを書きます。
次に、Homabridge WoLというプラグインをインストールします。インストールしたら、config.jsonのaccessoriesセクション(なければ追加)に定義を書き加えます。

{
    "name": "デスクトップ",
    "ip": "192.168.1.101",
    "pingInterval": 3,
    "pingsToChange": 2,
    "pingTimeout": 2,
    "pingCommandTimeout": 0,
    "mac": "XX:XX:XX:XX:XX:XX",
    "broadcastAddress": "192.168.1.255",
    "startCommandTimeout": 0,
    "wakeGraceTime": 30,
    "wakeCommandTimeout": 0,
    "shutdownCommand": "ssh win powershell.exe shutdown /s /t 30 /c \"Homeより通常の停止要求\"",
    "shutdownGraceTime": 45,
    "shutdownCommandTimeout": 0,
    "log": true,
    "logPinger": false,
    "debugLog": false,
    "returnEarly": true,
    "accessory": "NetworkDevice"
}

主要な設定項目は以下のような感じでしょうか

  • name : ホームアプリで使用される名前
  • ip : 対象のIPアドレス。pingを送信して起動状況を監視するために使用
  • pingInterval : pingを送る間隔(秒)
  • pingToChange : 対象の状態が切り替わったと判断するまでのping数
  • mac : 対象のMACアドレス。必須
  • broadcastAddress : マジックパケットのブロードキャスト先を指定
  • wakeGraceTime : マジックパケットを送信してから対象が起動したと判断するまでの猶予時間(秒)
  • shutdownCommand : 対象をシャットダウンさせるときに送信するコマンドを指定
  • shutdownGraceTime : シャットダウンコマンドを送ってから対象が終了したと判断するまでの猶予時間(秒)
  • returnEarly : 起動、終了の指示をSiriからした時に応答がタイムアウトしてしまう問題を軽減するオプション

上記の設定で、起動、終了、電源がついているかどうかの確認をホームアプリから行えるようになります。シャットダウンはsshでwindows機に接続し、powershellでシャットダウンコマンドを直接打ち込みます。私の環境ではssh接続した時にwslが起動するようになっているためこのようになっていますが、通常は"ssh ユーザ名@ホストIPアドレス shutdown /s /t 30 /c \"コメント\""みたいな感じにすれば動作します。

外出先からのアクセス

ここまででHomebridgeを使った基本的なデバイスのHomeKit化には成功しましたが、そもそもホームアプリが動作するのはお家の中、同一のネットワーク内にいる時だけです。外出先から操作できるようにするにはHomePodやAppleTV、ハブに設定したiPadが必要です。まあ、VPNサーバーとか立ててiPhoneから接続する方法でも可能だとは思いますが、我が家にはちょうどHomePod miniがあったので、それをハブに設定して使っています。

所感

今まで製品ごとに分かれていた操作アプリを1つにまとめることができ、PCの操作も可能ということで結構便利です。
Siriも柔軟に応答してくれますし、iPhoneだけでなく、AppleWatchやMacからも簡単に操作できるのでもう後戻りはできませんね(笑)

日本ではHomeKit対応製品はまだまだ少ない上、高価なので手が出しづらい...
そんなときはHomebridgeを使うことで、比較的簡単にスマートハウス、スマートルームが作れるのではないでしょうか。

肝心のNatureRemo miniの方は長くなりそうなので後編に分けました。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8