自制 HomeKit スマートホーム#
作成日: 2021 年 6 月 22 日 15:59
タグ: HomeKit, スマートホーム,ラズベリーパイ
この記事は知乎(https://zhuanlan.zhihu.com/p/31423265)と少数派に掲載されたもので、ここではアーカイブを作成します。実際の執筆時期は 2017 年です。
序#
この記事は半年前にラズベリーパイをいじっていたときに書いたもので、私の会社の他の大物たちの文章と比べると、技術的な内容はあまりありません。しかし、全く無意味というわけではなく、少なくとも誰でも簡単に理解し、この記事の内容を実現でき、コーディングの楽しさを体験できるでしょう。
HomeKit とは?#
HomeKit は Apple が iOS10 から提供しているスマートホームコンポーネントで、第三者が認証されたスマートハードウェアを iOS システムに接続し、Siri で制御できるようにします。また、ローカルネットワーク内でエンドツーエンドの暗号化を使用し、安全性が非常に高いです。しかし、認証されたハードウェアは高価で少ないという欠点も明らかです。しかし、私たちには homebridge があります。
**HomeBridgeとは?**#
Apple の HomeKit チームの元社員が書いたハッキング論文に基づいて、NodeJS で書かれた HomeKit API を模倣するサーバーフレームワークで、GitHub 上で 7000 以上のスターを獲得しています。対応するプラグインを作成することで、未認証のスマートデバイスを HomeKit に接続できます。
目標#
- 低コストで高体験のスマートホームを構築し、音声制御が可能。
- 比較的完全なスマートホーム体験を提供。
- スマートホームをサポートしていない古いデバイスをスマートデバイスに改造。
- 移植性が高く、引っ越し時に持ち運びが便利。
準備#
ハードウェア準備:#
-
ラズベリーパイ 3 型 B 200 元
-
ラズベリーパイ電源(5V 2.5A)Android の 2A 充電器でも可、2.5A は高出力運転をサポートするため、将来の準備として。
-
16G SD カード(クラス 10 速度が望ましい) 50 元
-
LAN ケーブル 1 本
-
Yeelight 電球 99 元
-
小米ゲートウェイ第 2 世代 149 元
-
小米温湿度センサー 49 元
-
小米人体動作センサー 59 元
-
小米ドアウィンドウセンサー 49 元
-
小米スマートプラグ Zigbee 版:温水器を制御 69 元
-
小米エアコンパートナー homebridge をサポート 199 元 コメント欄の指摘に感謝
-
ロジクール Harmony Hub(家庭内のすべての赤外線デバイスを制御:エアコン、テレビ、スピーカー、扇風機、空気清浄機、電動物干し) 299 元
-
小米空気清浄機第 2 世代 699 元
自備するその他のハードウェア#
- iOS10 をサポートするスマートフォンまたはタブレット。
- Android スマートフォン 1 台(ゲートウェイのパスワードを取得するため、借りても可)。
- ルーター。
今後の作業:#
- Aqara 壁スイッチ(移植性が低いため、今後検討)
- ドアロック
- 電動カーテン:赤外線リモコン電動カーテン + harmony で可、または小米の電動カーテンを使用
- カメラ
- SSH コマンド(リンク)
- Bluetooth デバイス(スピーカー)(リンク)
- Home Assistant サポートデバイス
エアコンパートナーと空気清浄機を除いて、合計 1023 元。
ソフトウェア準備#
自分でシステムを SD カードに書き込むために使用
- Mac で ApplePi
- Windows で SDFormatter、Window32 Disk Image
- Linux ユーザーは。。。dd コマンドを直接使用すれば良いです
インストール#
Yeelight 電球#
yeelight アプリをダウンロードし、指示に従って電球に接続し、ゲーマーモードをオンにします。
小米ゲートウェイおよび関連センサー#
- 小米ゲートウェイに電源を入れ、「米家」アプリをダウンロードします。スマートフォンを 2.4Ghz の Wi-Fi ネットワークに接続(現在のほとんどのスマートホームは 5Ghz Wi-Fi をサポートしていません)、指示に従ってゲートウェイを追加し、他のセンサーを追加します。
ゲートウェイの MAC アドレスと通信パスワードの取得#
ゲートウェイ情報は後の homebridge 設定ファイルで必要ですが、Android スマートフォンの「米家」アプリからのみ取得できます。
- アプリをクリックしてゲートウェイオプションに入り、画面右上の「...」をクリックし、「について」に入ります。画面下部のバージョン番号の領域を連続して押して開発者モードを有効にします。
- 「ローカルネットワーク通信プロトコル」オプションをクリックし、ローカルネットワーク通信プロトコルをオンにし、パスワードをメモします。
- 一つ上のメニューに戻ると、開発者モードに「ゲートウェイ情報」というオプションが表示されます。→ MAC アドレスを記録します('mac' フィールドの後の 6 対の英数字)。
ラズベリーパイ#
ラズベリーパイは、イギリスのケンブリッジ大学の教授が主導する、子供のコンピュータ教育を普及させるためのハードウェアプロジェクトで、主に Linux システム raspbian を使用しています。また、Debian GNU/Linux、Fedora、Arch Linux、RISC OS、2 代 B 以上は Window10 IoT もサポートしています。
3 代 model B の構成:
- 1.2GHz の 64 ビット四核プロセッサ(ARM Cortex-A53 1.2GHz 64-bit quad-core ARMv7 CPU)を搭載。
- 802.11 b/g/n 無線 LAN カードを追加。
- 低消費電力 Bluetooth 4.1 アダプタを追加。
主に homebridge のサーバーとして使用し、HomeKit をサポートしていないデバイスを HomeKit に認識させます。
Linux コマンドに不慣れな方は、コマンドをコピー&ペーストするだけで大丈夫です。
システムのインストール#
私は SD カードを購入する際に、業者にシステムをコピーしてもらいましたが、実際には自分でダウンロードして SD カードに書き込むこともできます。
- ダウンロードした raspbian jessie バージョンのシステム(現在は最新版 stretch にアップグレード)。[ラズベリーパイシステムダウンロードリンク](Index of /raspbian/images)
- Windows では SDFormatter を使用して SD カードをフォーマットし、Window32 Disk Image を使用して SD カードに書き込みます。Mac では ApplePi というソフトウェアをお勧めします。システムの書き込みとバックアップに使用できます。
- ラズベリーパイはデフォルトで SSH がオフになっているため、SD カード内のシステムのルートディレクトリに空の ssh ファイルを作成することでオンにできます。
- 電源ケーブル(mini USB)を接続し、LAN ケーブルを家庭のルーターに直接接続し、SD カードを挿入します。システムは自動的に起動してインストールされます。
- ラズベリーパイを LAN ケーブルでコンピュータに接続し、SSH でログインします。デフォルトのパスワードは raspberry です。
- Wi-Fi を設定します。そうでない場合は、ラズベリーパイをルーターに LAN ケーブルで接続する必要があります。
vi に不慣れな方は、nano テキストエディタを使用してソースファイルを編集できます。操作は通常のテキストエディタに近いです。ctrl+O で保存し、ctrl+X で終了します。編集前に cp コマンドで元のファイルをバックアップすることをお勧めします。または、以下のコマンドを使用して、ラズベリーパイの公式サイトとサードパーティのソースを清華源に一度に置き換えることができます。
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
以下の内容を追加:
network={ ssid="wifiname" psk="password" }
保存後、LAN ケーブルを外すと、数秒以内に Wi-Fi に接続されます。
- ミラーソースを変更します。元のシステム更新ソースは国内で速度が遅く、他のプログラムをインストールする際にタイムアウトエラーが発生する可能性があるため、国内のものに変更するか、SS サービスを有効にします。
sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g' /etc/apt/sources.list.d/raspi.list sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g' /etc/apt/sources.list.d/raspi.list
- 更新リポジトリを更新し、依存関係を再整理します。
sudo apt-get update && sudo apt-get upgrade
NodeJS および依存関係、Homebridge および関連プラグインのインストール#
NodeJS のインストール#
まず、使用しているラズベリーパイのチップバージョンを確認します。
uname -a
私の返答は armv7l です:
Linux raspberrypi 4.4.50-v7+ 970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux
以下のコマンドを使用して node6 をダウンロードしてインストールします。node7 はまだ安定しておらず、node5 は homebridge との互換性があまり良くありません。
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt-get install -y nodejs
Avahi のインストール#
sudo apt-get install libavahi-compat-libdnssd-dev
Homebridge のインストール#
sudo npm install -g --unsafe-perm homebridge
上記のコマンドが正常に完了しない場合は、追加の設定が必要です。以下のコマンドを実行します:
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp cd /usr/local/lib/node_modules/homebridge/ sudo npm install --unsafe-perm bignum cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns sudo node-gyp BUILDTYPE=Release rebuild
homebridge-aqara、aqara プロトコルのゲートウェイおよびセンサーのインストール#
sudo npm install -g homebridge-aqara
homebridge-yeelight、yeelight 電球のプラグインのインストール#
sudo npm install -g homebridge-yeelight
小米空気清浄機プラグインのインストール#
npm install -g homebridge-mi-air-purifier miio
他のスマートデバイスを切断し、空気清浄機だけを残します。次に、以下のコマンドを入力して空気清浄機の IP とトークンを取得します。
miio --discover --sync
以下の形式のデバイス情報が複数返される可能性があります:
Device ID: 49466088 Model info: Unknown Address: 192.168.1.8 Token: 6f7a65786550386c700a6b526666744d via auto-token Support: Unknown
address と token をメモし、後で設定ファイルに書き込みます。
小米エアコンパートナープラグインのインストール#
最新版 0.5.1 にはバグがあり、現在起動できません。issue を提起し、作者の更新を待っています。
sudo npm install -g [email protected]
同様に、上記のmiio --discover --sync
を使用してエアコンパートナーおよび関連する温湿度センサーの device_id を発見します(sensorSid 値 'lumi.' の後に記入)。
赤外線デバイスを Homekit に追加#
後にロジクール Harmony Hub の赤外線リモコンデバイスを発見しました。28 万種類のデバイスをサポート(赤外線学習新デバイスをサポート)し、300 元以内で、homebridge に接続するプラグインもあります。インストール後、家庭内の赤外線デバイス(エアコン、テレビ、空気清浄機、電動物干しなど)を Siri で制御できます。指示に従って赤外線デバイスを接続し、最大 7 個まで追加できます。
インストール手順:
全過程でグローバルな科学的なインターネット接続が必要です。
- MyHarmony の PC クライアントをダウンロードします。Mac 版と Win 版があります。
- USB で Hub を PC に接続し、Hub を認識します。ネットワーク接続は 2.4Ghz の Wi-Fi です。
- Wi-Fi を認識し、Wi-Fi パスワードを入力します。
- 異なるデバイスで設定を管理するためのアカウントを登録します。メールアドレスを使用することをお勧めします。
- Remote リモコンを接続する必要があるというメッセージが表示されますが、右下の Skip ボタンをクリックします。上に書かれているのは Remote がある場合の Skip ですが、実際には Hub だけの場合にも適用されます。
- 認識が完了し、管理画面に入ります。Hub に名前を付けるように促されます。その後、デバイスを追加するように促されます。
- デバイスのブランド名とデバイス番号(モデル)を使用して追加します。データベース内で検索できない場合は、手動で追加し、赤外線学習リモコンを使用します。
- 左側のメニューに Activity があり、自動化制御アクティビティを設定できます。例えば:テレビを見る = テレビ + セットトップボックス + スピーカーをオンにし、最も好きなチャンネルに調整します。最後に、各アクティビティは Homekit にソケット型デバイスとして追加されます。
- 以下は Harmony のプラグインと設定ファイルの設定です。
ターミナルを介してラズベリーパイのターミナルに入り、Harmony Hub のプラグインをインストールします。
sudo npm -g install homebridge-harmonyhub
homebridge の設定ファイル config.json を作成#
mkdir /home/pi/.homebridge/ sudo nano /home/pi/.homebridge/config.json
Homebridge 設定ファイルの内容と形式#
ゲートウェイのパスワードと MAC アドレス、aqara ゲートウェイおよび yeelight の設定情報を記入する必要があります。#コメント部分は削除してください。
pin は iPhone のホームアプリに追加するために使用されます
{ "bridge":{ "name":"YeeBridge", "username":"任意MACアドレス", "port":51827, "pin":"031-45-157" }, "platforms":[ { "platform":"yeelight", "name":"yeelight" }, { "platform":"AqaraPlatform", "sid":[ "ゲートウェイのMACアドレスを小文字で、連結して記入" ], "password":[ "ゲートウェイのパスワード" ] }, { "platform":"HarmonyHub", "name":"Harmony Hub" }, { "platform":"XiaoMiAcPartner", "ip":"エアコンパートナーのip", "token":"エアコンパートナーのtoken", "accessories":[ { "name":"Ac Partner", "type":"climate", "sensorSid": "lumi.{device_id}" } ] } ], "accessories":[ { "accessory":"MiAirPurifier", "name":"Air Purifier", "ip":"空気清浄機のIP", "token":"ADDRESS_OF_THE_AIR_PURIFIER", "showTemperature":true, "showHumidity":true, "showAirQuality":true } ] }
homebridge の自動起動設定#
ここまで設定すれば、ターミナルに homebridge と入力するだけで実行できます。しかし、ターミナルを閉じるとサービスが停止し、万が一電源が切れて再起動した場合、サービスが停止します。したがって、homekit の設定を自動起動するように設定する必要があります。homebridge の GitHub ページでは、3 つの方法が推奨されていますが、私は最も便利な init.d の方法を採用しました。
まず、ここから設定ファイルをダウンロードし、すべての内容をコピーします。ダウンロード
次に、以下のコマンドを使用して init.d ディレクトリに homebridge 起動ファイルを作成します:
sudo nano /etc/init.d/homebridge
以下の内容を直接コピーしてファイルの部分を上書きします。注意 cmd の後の位置には homebridge のディレクトリを記入します。homebridge の位置を調べるには、以下のコマンドを使用します:
`which homebridge
#!/bin/sh
BEGIN INIT INFO#
Provides: homebridge#
Required-Start: $network $remote_fs $syslog#
Required-Stop: $remote_fs $syslog#
Default-Start: 2 3 4 5#
Default-Stop: 0 1 6#
Short-Description: Start daemon at boot time#
Description: Enable service provided by daemon.#
END INIT INFO#
dir="/home/pi"
cmd="DEBUG=* /usr/local/bin/homebridge"
user="pi"`
ファイルの権限を変更します:
sudo chmod 755 /etc/init.d/homebridge sudo update-rc.d homebridge defaults
再起動後、自動的に起動します。または手動で起動します:
sudo /etc/init.d/homebridge start
デバイスを家庭アプリに追加#
ここでは Apple 公式の [操作ガイド](在 iPhone、iPad 和 iPod touch 上使用 “家庭” 应用) を参考にできます。
iPhone を同じローカルネットワークに接続し、家庭アプリを開いて新しい家庭を作成すれば、homebridge を追加できます。
この時、アプリがデバイスを認証するためのコードを求めてきます。正式な homekit デバイスにはこれがありますが、私たちのデバイスにはありません。このコードは最初に 5 分間探しましたが、実際にはhomebridge サーバーを起動するときに、ターミナルで既に生成されていることに気づきました。見つけたら手動で入力すれば大丈夫です。
それは設定ファイルの PIN の部分です。
この時、すべてのデバイスがアプリに表示されます。長押しして編集を選択し、部屋や名前のカテゴリを変更できます。
リモート制御および自動化#
リモート制御#
安全性を確保するために、Homekit のデフォルトサポート環境はローカルネットワークですが、iPad が iOS10 にアップグレードされている場合や、Apple TV 第 4 世代以上を持っている場合は、設定でそれを中控として設定できます。これにより、外出先でもこれらのデバイスを制御できます。
これらのデバイスがない場合でも問題ありません。米家アプリにもリモート制御機能があります(ただし、非常に使いにくいですが)。
自動化#
自動化を使用すると、さまざまなルールを設定して、家庭内のデバイスを自動的に制御できます。
例えば:
IF(条件):ゲートウェイ光センサーが暗いと検出し、同時に誰かが寝室に入る
実行:寝室のライトをオンにする
IF(条件):温度センサーが 30 度を超え、ドアと窓が閉じており、家の中に誰かがいると検出
実行:エアコンをオンにし、冷房モード 25 度に設定します。小米エアコンパートナーまたは万能リモコンが必要です。
注意点#
- 公式ドキュメントを確認してください!公式ドキュメントを確認してください!公式ドキュメントを確認してください。
- すべての作業が完了したら、必ず書き込みソフトウェアで SD カードのシステムをバックアップしてから、他の作業を続けてください。どうしてそう知っているのかは聞かないでください。。。
- 特別な要件がない限り、ラズベリーパイに静的 IP を設定しないでください。なぜなら、yeelight は TCP を使用して通信するため、ルーターの DHCP が Yeelight デバイスに異なるサブネットの IP を割り当てると、ライトを制御できなくなるからです。ここで Yeelight のスタッフに感謝します。夜の 8 時過ぎに私と積極的にコミュニケーションを取り、問題を見つける手助けをしてくれました。
- NodeJs 6 が最も適しており、5 には互換性の問題があり、7 はまだ安定していません。
- 小米の他のデバイスが homebridge に追加される進捗はあまり早くなく、知乎でこの分野を担当しているエンジニアをフォローしていますが、彼は約 1 ヶ月間大きな変更をしていないようです。しかし、エアコンアシスタントをサポートする予定だと言っています(ついにサードパーティのサポートが得られました)。私は万能リモコンのサポートが重要だと思います。これにより、遊びやすさが大幅に向上します。
- ラズベリーパイに冷却パッドや金属スタンドの冷却を準備してください。ファンの冷却効果はあまり良くありません。うるさいです。
最終結果#
最後に、初めて成功したときの録画した小さなビデオを添付します。