Siri + IRKit + Homebridgeで家の家電を操作
最近は、Amazon Echo、Google Home、LINE Clova WAVEなど、AIスピーカーが俄にブームになっている。
「アレクサ、電気を点けて」という家電操作も実現できたりする。
「アレクサ、この資料を部長に説明しといて」というのは、まだできないらしい。
AIスピーカーに対応した家電との連携はできるが、レガシーな既存の家電の操作まではできない。
そこで、IRKitという赤外線リモコンエミュレーターと、Homebridgeを連携させることで、AppleのSiriで
「Hey Siri テレビをつけて」
というのを実現したいと思う。
「Siri→ 何を言っているのか分かりません」
Homebridge を Raspberry Pi にインストール
Siriで制御できる「Home App」に登録できる家電等は、「HomeKit対応」書かれた製品が可能だ。
HomeKitとは、Appleが提唱するスマート家電用のプラットフォームだ。
IRKit を HomeKit に対応させるために、Homebridge というツールを使用する。
Homebridge は、賢い先人の開発者達が作ってくれた、様々な機器をHomeKitに対応させるためのエミュレータだ。
IRKit も、Homebridgeのプラグインが用意されており、HomeKitに組み込むことができる。
今回は、Raspberry Pi に Homebridge をインストールすることとした。
Homebridgeをインストールする前に、Homebridgeを動作させるために必要なライブラリ群をインストールする。
$ sudo apt-get install libavahi-compat-libdnssd-dev
Homebridgeは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-irkit
homebridgeユーザを追加。
$ sudo useradd -m --system -G video homebridge
sudo権限も付与。
$ 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=1
homebridgeディレクトリの所有者変更。
$ 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)
- シーリングライト
- 電球
- エアコン
- アンプ
- 温度計
家の中をほとんど 「Hey, Siri. hogehogeつけて」で制御できるようになった。
未来の家に住んでるようで、めちゃくちゃ便利だ。
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/npx
npmのバージョンアップ
$ sudo npm install -g npm
homebridgeとGUIで設定するためのhomebridge-config-ui-xをインストール
$ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
サービスとして登録
$ sudo hb-service install --user homebridge
コメント