#author("2021-10-18T22:06:02+09:00","ocha","ocha") #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でインストール管理するので先ほどインストールしたんですね) この結果、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/local/lib/node_modules/homebridge/ sudo npm install --unsafe-perm bignum cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns sudo node-gyp BUILDTYPE=Release rebuild **プラグインを設定する [#ccec17d5] この後、色々とプラグインを探します。冒頭のサイトでも紹介されているように、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/ vi /home/pi/.homebridge/config.json 中身をこんな感じで作ります。 { "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://is.ocha.ac.jp/~siio/gyazo/abc22cddedc81f039217da7fe75efa23.png このQRコードもしくは番号をiPhoneのHomekitプログラムで読み込めば登録できます。 http://is.ocha.ac.jp/~siio/gyazo/bccf39e558cb2a3d6d0edfe7842fea2f.png **他のプラグインを探す [#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]]