#author("2018-07-21T09:32:47+00:00","ocha","ocha")
[[SiioLaboratory]]
#author("2018-09-13T03:35:27+00: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/
 
中身をこんな感じで作ります。

 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"
         }
     ]
 }

この後、.homebridgeというコマンドを打つと、homebridgeサーバが起動します。うまくいけばQRコードが出るはずです。
http://siio.jp/gyazo/abc22cddedc81f039217da7fe75efa23.png

このQRコードもしくは番号をiPhoneのHomekitプログラムで読み込めば登録できます。

https://www.npmjs.com/search?q=keywords:homebridge-plugin
http://siio.jp/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]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS