Siri + IRKit + Homebridgeで家の家電を操作「Hey Siri テレビをつけて」

RaspberryPi

Siri + IRKit + Homebridgeで家の家電を操作

最近は、Amazon EchoGoogle HomeLINE Clova WAVEなど、AIスピーカーが俄にブームになっている。

「アレクサ、電気を点けて」という家電操作も実現できたりする。
「アレクサ、この資料を部長に説明しといて」というのは、まだできないらしい。

 

AIスピーカーに対応した家電との連携はできるが、レガシーな既存の家電の操作まではできない。

 

そこで、IRKitという赤外線リモコンエミュレーターと、Homebridgeを連携させることで、AppleのSiriで

「Hey Siri テレビをつけて」

というのを実現したいと思う。

「Siri→ 何を言っているのか分かりません」

 

Nature スマートリモコン Nature Remo mini Remo-2W1

Nature スマートリモコン Nature Remo mini Remo-2W1

4,480円(05/08 03:24時点)
Amazonの情報を掲載しています

 

Homebridge を Raspberry Pi にインストール

Siriで制御できる「Home App」に登録できる家電等は、「HomeKit対応」書かれた製品が可能だ。

HomeKitとは、Appleが提唱するスマート家電用のプラットフォームだ。

IRKitHomeKitに対応させるために、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)で制御している家電一覧を記す。

  1. テレビ(BRAVIA)
  2. シーリングライト
  3. 電球
  4. エアコン
  5. アンプ
  6. 温度計

家の中をほとんど 「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

コメント

タイトルとURLをコピーしました