Google Homeと学習リモコン(ADRSIR)で家電の音声操作

Google Homeで学習リモコンを使って家電を音声操作したくて以下を揃えた。

  • Raspberry Pi 3 Model B
  • ADRSIR [ラズベリー・パイ専用 学習リモコン基盤] ビット・トレード・ワン
    ダウンロード 左記からADRSIR関連のファイルをダウンロード&解凍し、先ず「I2C仕様-TOOL20171213.xlsx」を見ましょう。わたしはてっきり本体と同梱で同様の説明があると思って、どこに取扱説明書があるの?と一瞬途方にくれた。

 

色々設定して、シーリングライトの操作は「電気つけて」で「んーなぁ」といって電気をつけてくれるようになった!これぞ「メイドインアビス」!
もう少し、けだるい感じで発声してくれるといいんだけどね。

 

なお、登録フレーズ以外だと「このライトはまだ設定されてません。」というのが玉にキズ。基本コマンドを変更するいい方法はないものか?まあ、自分が言いそうなフレーズを全部IFTTTに登録すればいいのだが...Dialogflowなどを上手く使えないものかと試してみる予定。あと、エアコンをオンオフできるようにしてみたが、温度設定とかタイマーとかいろいろあって模索中。

ちなみに、応答速度は発声後だいたい4秒前後でまあギリ実用的かなというレベル。コマンドの中継をFirebaseではなくTwitterでやった場合は、もっと時間がかかりこりゃダメだ状態だった。

【それぞれの機器やサービスの接続方法は以下の通り】

Google Home => IFTTT =>  Firebase => Node-RED => 学習リモコン(ADRSIR)

※この接続を試す前にFirebaseにあたるところをTwitterでやってみたが、反応がとろすぎて却下。(まぁ、それ以外にもセキュリティーをどうするかなどなどTwitterでは問題は多いんだけど。)

【連携イメージ】

  • 音声コマンドをIFTTTを使ってFirebaseの音声操作コマンドを伝える項目として決めた特定のフィールドを更新する。
  • そのフィールドの更新をNode-REDで監視し、更新されたらそのコマンドに対応する処理を実行し、電気をつけたり消したりする。

【いろいろな疑問を解決するために参考にしたURLなど】

  • どうやってIFTTTからLANにある学習リモコン(Raspberry Pi)に操作を通知するか

これはngrokやdataplicityの紹介があって、それらを見ていたが、
ngrokは毎回アドレスが変わるからIFTTTで設定しづらいし無いなあ~とか思い、
dataplicityはちょっと今回やりたいことを考えたらオーバースペックすぎるな~とか。
そうこう考えているうちにFirebaseでできるような記事を見たので、それならGooogleアカウントは持ってるし新たにユーザー登録せずに無料で使えるなと思い、その線で調べた。結局、FirebaseとNode-REDが連携できると紹介していた以下の動画を見て、Firebaseで連携することに決定!これなら、Nodejsなどで簡易サーバーを作らなくて済む。

IoT Application using Node Red & Google Firebase | Raspberry Pi

セキュリティーは気になったので、この動画とは違うJSON Web Tokenでやった。
でも、それも既にFirebaseでは非推奨になっているようで、アクセストークンで対応する方法を、模索中。

上の経緯を踏まえて、IFTTTでのアプレット登録は、IFを「Google Assistant」にし、thenを「Webhooks」する方法にした。参考となるのは以下のようなものがあった。

GoogleHomeとiftttとDialogflowとfirebaseとLINEBOTとラズパイを使って子供と音声によるLINE交換をしてみる(後編)

  • Node-REDでどうやってFirebaseを利用するか?

取り敢えず、 node-red-contrib-firebaseをインストールしてみたが、RaspbianにデフォでインストールされているNode-REDでは、アイコンが出てこなかった!?なんで?これは-g付きでやったのでどのユーザーでも使えるはずだけど?古いから悪いのか、常用するユーザーidをデフォルトユーザーのpiから変えているのが悪いのかなど原因は分からなかった。なお、デフォルトユーザーpiを有効にする気はなので、それ以上調査はしなかった。

そこで、Node-RED関係を最新するため、Running on Raspberry Piを参考に常用するユーザーidでupdate-nodejs-and-noderedを実行。これで、Nodeなど結構最新になっていることが確認できた。またそのidのホームに.node-redディレクトリができていた。その状態で、node-red-contrib-firebaseを-gなし(テスト利用なので-gじゃなくていいかという理由)でインストールすると、右のタブにFirebase関係のアイコンが出てきた!

それで、特に問題なく動作した。

【Node-REDのフロー図】

  • 音声操作コマンドに対応するフィールドの更新を監視する。
  • 更新があると音声操作コマンドの内容を判定してリモコン操作。
  • 「リモコン◯」はメーカーサンプルのサブフローをそのまま利用。
  • コマンドクリアーは、操作コマンドの内容をそのままにしておくと、リブートした時に前回実行したコマンドが実行されてしまうので追加した。

【学習リモコン(ADRSIR)について】

  • 電源切り替えできるが、本体電源を利用する場合の、電源規格が見つからなかった。初心者的には明示して欲しい。5v,1Aがいいなど。micro-Bの規格範囲ならいいということか?Raspberry Piと利用する場合の電源説明もなかったので、ちょっと冷や冷やして電源投入した。
  • Raspberry Pi 3 Model Bとの組み合わせで5v,2.4Aの電源だとたまにリモコンが効かない「どじっこメイド」になる。5.2v,2.5A(sureface3用電源)の電源だと好調。
  • リモコンと受信機までの距離は3.5mぐらい(それ以上は未検証)は大丈夫なようだ。前提は5.2v,2.5A(sureface3用電源)の電源利用時。この送信できる距離は、リモコンを自作したサイトをみていると1mしか届かないとかいう記事がそこそこあったので、一番心配していた問題だった。今回の組み合わせでは問題にならなさそうでほっとした。12畳だったら真ん中あたりに置けば部屋中の機器を操作できそうかなという感じ。なお、上の項にあるように電源の出力が弱いと送信距離も減るということは考慮しておかないといけない。
  • 付属説明書に必要情報がない!電子工作のものってこんな感じなのか!!と思った。
    最低、ダウンロードでハード利用についての仕様やサンプルが入手できることを書いて欲しい。思わず「なぞなぞマンかよ!」と叫びたくなる。ここにADRSIRとの通信手順も書かれていた。
  • 欲を言えば「赤外線データの送信手順」もpythonでサンプルが欲しかった。操作したい機器が多いと、直接送信が一番いちばん手っ取り早いと思えるので。
    2018/01/14 追記 IR-remocon02-commandline.pyの中に利用されてないだけでメソッドはあった。
  • Node-REDのサンプルも、こうやって使ってみましょう的な説明があったほうがいい。
    リモコンいじり放題!!ラズパイ専用 学習リモコン基板で使えるソフトウェア3種詰め合わせ公開」からダウンロードして、Node-REDのサンプルっぽいのがあるなと思い、インポートしてみてやっと、こう使うのか!と分かった。「早く言ってよ~!」という感じだった。よくよく見てみると「I2C仕様-TOOL20171213.xlsx」のなかに画像があってコピーして使用してくださいとあったが。。。
    2018/01/13 追記 以下のようなURLを見つけた。
    この学習リモコンがすごい!2017 Sonyの高機能学習リモコンHUIS(ハウス)と同等機能を学習リモコン基板 “ADRSIR”で実現する

【Raspberry Piについて】

  • やりたことは、検索するとほぼ回答となる記事を見つけれられるので、いいなと感じた。

 

誰かがみたときに役にたちそうなブログネタなので、これ関連で投稿していくか。
まっ、ぼちぼち、いろいろ試してみよう。

「Google Assistant」のスキルとしたので、スマホからも指示できるのは「おまけ」か。

リンク及び参考にさせて頂いたURLの作者の皆様に感謝致します。
このページはこれらの動作を保証するものではありません。同様のことをトライされる場合は自己責任でお願致します。