初めに
qiitaに初めての投稿。マークダウン形式の練習と、いろいろと苦戦を強いられた自作のスマートリモコンの作業ログを残すべく、この記事を書きました。とても重要なことですが、この記事の基本的な内容はすべて格安スマートリモコンの作り方という記事にわかりやすく書いてあります。ですので、このポンコツ記事を読むよりも先に、上記の記事を読むようお願い申し上げます。その上で、うまく動作しない場合はこの記事を見てみてもいいかもしれません。
作成に使ったもの、事前購入品目
格安スマートリモコンの作り方の記事に書いてあるものを用意しました。変更点としては
- Rasberry pi zero
- USB-有線LANアダプタ(Rasberry pi zero Wとかであればきっと不要)
- Amazon Echo dot (Amazon unlimited music と合わせて980円でした)
#作業ログ
##赤外線リモコンの作成
こちらの記事、及びこちらの記事を見れば、問題なく作成できるかと思います。
私の場合は赤外線の届く範囲を強化するため、27Ωを2つ平行に並べました。
##Rasberry pi zeroの設定
インストールしたいものはNode.jsのパッケージに存在する
"yo", "hubot"
の2つでしたので、これをインストールします。
###Node.js,npmの導入
Raspberry PiからGoogle Homeを喋らせる この記事を参考にしました。
重要だったところ
下のバージョン以外では上手くワークしませんでした。
$ nvm install v8.9.4
また、npmに関しては最新版のバージョンをインストールされるよう促されましたが、最新版を入れても入れなくてもどちらでも大丈夫でした。しかし、最新版にしておくのが良いと判断し、
$ sudo npm install npm -g
を実行し、最新版にしました。
###hubotの導入
hubotの雛形の生成 この記事を参考にしました。
重要な点
hubot君がでてきて、Ownerなどを尋ねられなかった場合はNode.js, npmなどの環境がよろしくないと考えられます。その場合は一旦環境構築をやり直した方がいいかもしれません。私はこの場面にでくわしたので、【Mac版】node.jsのアンインストールと再インストール手順メモこの記事ソース版の場合を参考にして、実行ファイルがあるところを片っ端からrm -rf
していきました。
###hubot-broadlink-rmの導入
hubot拡張スクリプトであるhubot-broadlink-rmをインストールしました。
$ cd ~/homebot
$ npm install hubot-broadlink-rm --save
そして、homebotフォルダに存在するexternal-scripts.json
を次のように編集しました。
[
"hubot-broadlink-rm", // この1行を追加
:
]
しかし、ここで問題が生じました。この拡張スクリプトはhubot.v3には対応していないらしく、バージョンを変更するよう示唆されました。そこで、
$ cd ~/homebot
$ npm uninstall hubot
$ npm install hubot@2.19.0
npmパッケージを更新するときはもとのやつを一旦消して、改めてインストールすることが重要のようです。このとき@をつけることでバージョンを指定してインストールしました。(最初からこのバージョンを入れれば良いと思うのですが、"yo"が最新のhubotを入れてしまうので仕方がありませんでした。)あとは、homebotからコントロールするまでは同じですので省略します。
##ラズパイで回路を制御する
ここは格安スマートリモコンの作り方の記事と全く同じなので省略させていただきます。
##Alexaを用いたコントロール
ここでも格安スマートリモコンの作り方の記事を参照しました。しかし、hubot-slackがIFTTTからの指示を受け取らないという問題点がありました。この問題点はhubot-slackで発生した「ERROR An error occurred while processing. RTM event: a is not defined.」と格闘した話(解決)でもあげられており、これと全く同じエラーが発生していました。hubot-slackのバージョンを色々変更しましたが、どれも上手く行かなかったので、少し方法を変えました。
###Alexaとhubotをつなぐ
上記のようなこともあり、少し面倒ですが
Alexa→IFTTT→Webhook→hubot@slack→家電という経路に変更しました。
###hubot@slackの設定
SlackでRM Mini3を操作するの記事の通りの設定で問題ありませんでした。
###IFTTT→Slackの設定
今回はIFTTTのトリガーとしてAlexaを、thatとしてWebhookを選択しました。準備としてSlackのIncoming Webhooksの設定が必要でした。SlackのIncoming Webhooksを使い倒すを参照しました。Post to Channelの部分でhomebotを選択しました。Webhookの設定に大いに苦戦しましたが、最終的に
- URL: Slack Incomming Webhooksで表示されたURL
- Method: POST
- Content Type: application/x-www-form-urlencoded
- Body: payload={"text": "homebot send pi(hoge)"}
で上手くslackに流れ、hubotが拾ってくれました。これで声にて家電を操作することに成功しました。
#特に躓いた点
- hubotが上手くインストールされなかった
- hubot@slackがIFTTTからの指示を拾ってくれなかった
この二点です。前者に関しては最初にapt
でnodejsを入れようとしたのですが、Raspi zeroに乗っているCPUでは最新版のNodejsが起動しないようでした。そこでsdesalas/node-pi-zeroを用いて上記と同じバージョンを導入したのですが、これだと何故かhubotが上手く入りませんでした。ここをどう攻略するかでかなり疲弊しました。
後者に関しては説明したとおりです。