Siri + IRKit + Homebridgeで家の家電を操作
最近は、Amazon Echo、Google Home、LINE Clova WAVEなど、AIスピーカーが俄にブームになっている。 「アレクサ、電気を点けて」という家電操作も実現できたりする。 「アレクサ、この資料を部長に説明しといて」というのは、まだできないらしい。 AIスピーカーに対応した家電との連携はできるが、レガシーな既存の家電の操作まではできない。 そこで、IRKitという赤外線リモコンエミュレーターと、Homebridgeを連携させることで、AppleのSiriで 「Hey Siri テレビをつけて」 というのを実現したいと思う。 「Siri→ 何を言っているのか分かりません」Nature Remo
Homebridge を Raspberry Pi にインストール
Siriで制御できる「Home App」に登録できる家電等は、「HomeKit対応」書かれた製品が可能だ。 HomeKitとは、Appleが提唱するスマート家電用のプラットフォームだ。 IRKit を HomeKit に対応させるために、Homebridge というツールを使用する。 Homebridge は、賢い先人の開発者達が作ってくれた、様々な機器をHomeKitに対応させるためのエミュレータだ。 IRKit も、Homebridgeのプラグインが用意されており、HomeKitに組み込むことができる。 今回は、Raspberry Pi に Homebridge をインストールすることとした。$ sudo apt-get install libavahi-compat-libdnssd-devHomebridgeはNode.js上で動作するため、Node.js環境を構築する。 Node.jsとは、javascriptベースのプログラムを、サーバ側で動作させるためのプログラム群だ。(javascriptは、通常クライアント側で動作するWeb系プログラム言語)
$ wget http://node-arm.herokuapp.com/node_latest_armhf.deb $ sudo dpkg -i node_latest_armhf.deb $ node -v v4.2.1 $ npm -v 2.14.7‘node -v’、’npm -v’コマンドをぶちこんで、上記のようにバージョン情報が返ってくればOKだ さて、いよいよ Homebridge をインストールする。 ※けっこう時間がかかる
$ sudo npm install -g --unsafe-perm homebridge次に、HomebridgeでIRKitを扱えるようにするための、IRKitプラグインをインストールする。
$ sudo npm install -g homebridge-irkithomebridgeユーザを追加。
$ sudo useradd -m --system -G video homebridgesudo権限も付与。
$ sudo echo 'homebridge ALL=(ALL) NOPASSWD: ALL' | sudo EDITOR='tee -a' visudo
リモコンの赤外線信号をメモしておく
後の工程で、家電を制御するルールを Homebridge の config.json に記述することになるので、リモコンから発出される赤外線信号をメモしておく。 IRKitに向けて、覚えさせたいリモコンのボタンを押して赤外線信号を送波し、IRKitが信号をキャッチしていると、Homebridge を動作させる Raspberry Pi から以下のコマンドを投入すると、IRKit の API を介して、HTTPのレスポンスが返ってくる。 その中に、赤外線信号データが入っているので、メモする。$ curl -i "http://<IRKIT_ADDRESS>/messages" -H "X-Requested-With: curl"HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/2.0.1.0.g1a6210c Content-Type: text/plain {“format”:”raw”,”freq”:38,”data”:[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,52381,4713,1190,2368,1190,1190,1190,2368,1190,1190,1190,2368,1190,1190,1190,1190,1190,2368,1190,1190,1190,1190,1190,1190,1190,1190,52381,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]} これは、BRAVIA テレビの電源ON/OFFボタンの信号をキャッチした場合の例だ。 この数字の羅列を見て、「あ!これはKDL-32CX400の電源ONの信号だ」なんて人がもしいたら連絡下さい。きっとあなたは変人です。
homebridge の設定
homebridgeの設定は /var/lib/homebridge などに配置する。 config.json中に現れるuernameにはraspberry piのMacアドレスを入れておくと後ほど分かりやすい。$ vi /var/lib/homebridge/config.json
{
"bridge": {
"name": "Homebridge",
"username": "<MACアドレスなど>",
"port": 51826,
"pin": "031-45-154"
},
"description": "Raspi Homebridge",
"accessories": [
{
"accessory": "IRKit",
"name": "テレビ",
"irkit_host": "192.168.1.104",
"on_form": {"format":"raw","freq":38,"data":[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,52381,4713,1190,2368,1190,1190,1190,2368,1190,1190,1190,2368,1190,1190,1190,1190,1190,2368,1190,1190,1190,1190,1190,1190,1190,1190,52381,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]},
"off_form": {"format":"raw","freq":38,"data":[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,52381,4713,1190,2368,1190,1190,1190,2368,1190,1190,1190,2368,1190,1190,1190,1190,1190,2368,1190,1190,1190,1190,1190,1190,1190,1190,52381,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]}
}
]
}
先程赤外線信号をメモした値を”data”後に記載する。
$ homebridge
こんな感じで応答があれば、OKだ。
Siri から家電を制御してみる
iOSの「Home」アプリを起動する。
「Allow」を押す。
先程ターミナルに出現したQRコードを読み取る。
少し待つと、Homebridgeが追加される。
こんな感じだ。
試しに、Siriに
「テレビ オン」
と話しかけてみると、↓
ちゃんとテレビの電源がONになった!
homebridge の自動起動設定
Raspberry Pi を再起動した際も、自動的に homebridge が立ち上がるように設定しておく。$ sudo vi /etc/systemd/system/homebridge.service
[Unit] Description=Homebridge After=syslog.target network-online.target [Service] Type=simple User=homebridge EnvironmentFile=/etc/default/homebridge ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS Restart=on-failure RestartSec=3 KillMode=process CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_CHOWN CAP_FOWNER CAP_DAC_OVERRIDE CAP_AUDIT_WRITE CAP_SYS_ADMIN AmbientCapabilities=CAP_NET_RAW [Install] WantedBy=multi-user.target
$ sudo vi /etc/default/homebridge
# Defaults / Configuration options for homebridge # The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others) HOMEBRIDGE_OPTS=-U /var/lib/homebridge -I # If you uncomment the following line, homebridge will log more # You can display this via systemd's journalctl: journalctl -f -u homebridge # DEBUG=* # To enable web terminals via homebridge-config-ui-x uncomment the following line # HOMEBRIDGE_CONFIG_UI_TERMINAL=1homebridgeディレクトリの所有者変更。
$ sudo chown -R homebridge: /var/lib/homebridgeサービス化登録。
$ sudo systemctl daemon-reload && systemctl enable homebridge && systemctl start homebridge
$ systemctl restart homebridge起動ログを、journalctlで確認して、特にエラーが無ければOKだ。
$ sudo journalctl -f -n 200 -u homebridgeこれで、レガシーな家電でも 「Hey Siri 電気をつけて」 ということが可能になった。 テレビ、ルンバ、電灯、エアコン、オーディオアンプ等、意外と赤外線リモコンで操作する機器は多い。 IRKit でスマートホームが実現するので、試す価値あり。
ちょっとスマートホーム化(Homekit で制御している家電リスト)
IRKit により、赤外線リモコンを持っている家電を制御できるようになる。 そのため、自宅をプチスマートホーム化できた。 HomeKit(homebridge)で制御している家電一覧を記す。- テレビ(BRAVIA)
- シーリングライト
- 電球
- エアコン
- アンプ
- 温度計
homebriegeのバージョンアップ
●4/22追記 homebridgeのバージョンアップをするために、最新のインストール方法を試してみた。 node.jsやnpmなどのバージョンアップも必要となる。古いバージョンのhomebridgeをアンインストール
自動起動を解除$ sudo systemctl disable homebridgeアンインストール
$ sudo npm uninstall -g homebridge
新しいバージョンのhomebridgeをインストール
node.jsのバージョンアップ$sudo apt remove nodejs $Wsudo apt autoremove $VERSION=v10.15.3 $DISTRO=linux-armv6l $cd /usr/src $sudo wget https://nodejs.org/dist/$VERSION/node-$VERSION-$DISTRO.tar.xz $sudo mkdir -p /usr/local/lib/nodejs $sudo tar -xJvf node-$VERSION-$DISTRO.tar.xz -C /usr/local/lib/nodejs~/.profileに追加+リンキング
# Nodejs VERSION=v10.15.3 DISTRO=linux-armv6l export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH
. ~/.profile sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/node /usr/bin/node sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm /usr/bin/npm sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npx /usr/bin/npxnpmのバージョンアップ
$ sudo npm install -g npmhomebridgeとGUIで設定するためのhomebridge-config-ui-xをインストール
$ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-xサービスとして登録
$ sudo hb-service install --user homebridge
コメント