- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-07-21T09:32:47+00:00","ocha","ocha")
[[SiioLaboratory]]
#author("2021-10-19T11:40:45+09:00","ocha","ocha")
このページの内容は初代Raspberry piのRaspbian GNU/Linux 9.4で動かしました。
*「Hey Siri, LED点けて」でLEDを光らせる [#v0017a13]
という記事がありましたので、真似しました。元記事はこちらです。
- https://qiita.com/nyata/items/e8304f4d3643d4cee377
HomeKitは本来は、アップルと契約結んで開発ツールを入手する必要があります。
DIYな人たちを対象にしていないのです。
でも有志がHomeBridgeというツールを開発しています。これを使います。
NodeJSをインストールして、そのあとにHomeBridgeをインストールします。
**NodeJSをインストールする [#ydd76d92]
以下は、上記のサイトに書いてある通りです。最初のapt-getのupdate/upgradeは長いので省略しても良いかもです。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git make
curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH
nodebrew install-binary stable
nodebrew alias default v6.1.0
sudo apt-get install npm
ここでインストールされた最新バージョンの場所へ移動します。上記の記事では、
cd /home/pi/.nodebrew/node/v6.2.2/
だったけど、今回インストールしたところでは、
cd /home/pi/.nodebrew/node/v10.7.0/
でした。そしてインストールされたプログラムをパスの張られている/usr/localに移動します。
sudo cp -R * /usr/local/
**HomeBridgeをインストールする [#k1d20ab8]
sudo npm install -g homebridge
(これのために先ほどnpmをインストールしたんですね)
(以下で色々とnpmでインストール管理するので先ほどインストールしたんですね)
この結果、gyp WARN EACCESという警告が出ました。こちら
- https://qiita.com/zaburo/items/12f99aa07ab934d07d75
を見たら、unsafe-permというオプションつけろとあったので、そうしました。
sudo npm install -g homebridge --unsafe-perm
これでインストールできました。
ただ、後ほどのプラグインを色々使ってみると、エラーが出て使えない場合がいくつかありました。
インストールしているモジュールが足りないようです。
Homebridgeのサイトなどをみると、以下のようなインストール方法が紹介されていました。
homebridge本体以外に色々とインストールしているようです。
やってみたら、確かに動くプラグインが増えました。
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/lib/node_modules/homebridge/
cd /usr/local/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild
**プラグインを設定する [#ccec17d5]
https://www.npmjs.com/package/homebridge-cmd
この後、色々とプラグインを探します。冒頭のサイトでも紹介されているように、Switchをサポートして、onとoffでシェルコマンドを実行するという汎用性の高いプラグインを試してみます。ここにあります。
- https://www.npmjs.com/package/homebridge-cmd
インストールするには以下のようにします。アンインストールするにはunintallとすれば良いです。
sudo npm install -g homebridge-cmd
プラグインは/usr/local/lib/node_modules/に置かれます。
一方、プラグインの設定ファイルは以下にあります。これを編集します。
プラグインを置く場所を作る。
vi /home/pi/.homebridge/config.json
中身をこんな感じで作ります。
mkdir /home/pi/.homebridge
cd /home/pi/.homebridge
vi
{
"bridge": {
"name": "SiioLabHomebridge",
"username": "B8:27:EB:35:28:71",
"port": 51826,
"pin": "410-80-129"
},
"description": "This is an example configuration file.",
"accessories": [
{
"accessory": "CMD",
"name": "My Switch",
"on_cmd": "/home/pi/.homebridge/oncmd.py",
"off_cmd": "/home/pi/.homebridge/offcmd.py"
}
]
}
http://siio.jp/gyazo/abc22cddedc81f039217da7fe75efa23.png
この後、.homebridgeというコマンドを打つと、homebridgeサーバが起動します。うまくいけばQRコードが出るはずです。
http://is.ocha.ac.jp/~siio/gyazo/abc22cddedc81f039217da7fe75efa23.png
このQRコードもしくは番号をiPhoneのHomekitプログラムで読み込めば登録できます。
https://www.npmjs.com/search?q=keywords:homebridge-plugin
http://is.ocha.ac.jp/~siio/gyazo/bccf39e558cb2a3d6d0edfe7842fea2f.png
https://www.npmjs.com/package/homebridge-generic-lock
**他のプラグインを探す [#rc7f0c8f]
homekitには色々なサービスが定義してあって、動作や、Siriへのコマンドが決まっています。サービスの一覧は色々紹介されています。
- https://qiita.com/tamaki/items/cf6a09729534eae8f24b
この中から、自分の作りたいものを探します。
上記で使ったSwitchはonとoffだけなので、Siriのコマンドもonにするとか、点けて、とか消して、とかです。
この他、有名なところではガレージドアがあります。ガレージを開けて、といって操作します。プラグインによって色々な作りがされていて、センサでドアの開閉を確認するものや、時間で適当に停止するものなど色々です。また、シェルコマンドを起動するもの、URLにアクセスして起動させるものなどがあります。どちらかというとURLにアクセスして動作するタイプが多いです。別のページで紹介したPythonでWebサーバを作ってコマンドを受けて動作させる仕組みのCherrypyなどを使うと良いと思います。
鍵関係のコマンドも使えます。開けて、閉めて、というような発話で、コントロールできます。
使えそうだったプラグインをいくつか列挙しておきます。
- https://www.npmjs.com/search?q=keywords:homebridge-plugin
- https://www.npmjs.com/package/homebridge-generic-lock
- https://www.npmjs.com/package/homebridge-opengarage
- https://www.npmjs.com/package/homebridge-doorlock
config.jsonの例を見ると、なんとなくできることがわかります。また、
- /usr/local/lib/node_modules/homebridge-cmd/index.js
がプラグインの本体ですが、このソースを見ると何をやろうとしているのか見当がつきます。必要ならば書き換えてしまえば良いです。
例えば、homebridge-doorlockなどは、「安全のためにプログラムから解錠できないようにしてある」というコメントで、解錠コマンドをif文で外してありました。最初は、どうして解錠コマンドが出ないのか、不思議でした。この部分をコメントアウトしたら解錠できるようになりました。
**プラグインに応答するサーバを作る [#z4a5174b]
実際に鍵を開ける、スイッチを入れるなどの動作を実現するには、Raspberry piのGPIOにアクセスするプログラムが必要です。
プラグインから直接GPIOにアクセスしているものもありますが、
多くのプラグインはhttpサーバ経由でGPIOを動かしていることが多いようです。
つまり、GPIOを動かすwebサーバがすでにあって、それをhttpのgetとかputで操作します。
webサーバは当然ですが同じRaspberry piにあっても良いわけです。
ということで、Cherry Pyを使って研究室ドアの電気錠を開閉するサーバを作りました。Cherry Pyの使い方は以下にあります。
[[How2CherryPy]]