雑食エンジニアの気まぐれレシピ

日ごろ身に着けた技術や見知った知識などの備忘録的なまとめ.主にRaspberry Piやマイコンを使った電子工作について綴っていく予定.機械学習についても書けるといいな.

レオリモコンとAlexaを連携させる[概要編]

先日のAmazonPrimeDayにてEcho Dotを購入し,晴れてスマートスピーカーデビューと相成りました. スマートスピーカー群雄割拠の中でEchoを選んだのは単純に,レオパレスのレオリモコンと連携できるからです.レオリモコンは学習リモコンのiRemoconがベースになっているのですが,レオパレスのネットワークインフラ「レオネット」下でのみ動作できるようにレオパレス魔改造しています.おかげでiRemocon用のアプリは軒並み動かず,スマートスピーカーとして正式に対応しているのはAlexaのみという現状になっています.

さて,そのレオパレス謹製のAlexaスキルですが,現在照明しか操作できません.
いやいや,えー......

というわけで,実際使うかはさておいて,レオリモコンハックに挑戦することにしました.

しかし,そこには二つの大きな壁が立ちはだかっています.

  • レオリモコンのAPIは公開されていない
  • レオネットはグローバルIPがないためサーバを公開できない

今まで何度もこの壁に何度も阻まれてきたのですが,やっと抜け道を見つけることができました. 今回は概要をさらりと述べて,詳細は次回以降に触れていきたいと思います.

レオリモコンのAPIについて

前述の通りレオリモコンはGlamo社のiRemoconをベースに魔改造された一品で,レオリモコンアプリ以外では操作を受け付けません.iRemoconのアプリでも認識してくれません.
そんな折にこんなエントリを見つけました.
https://nelog.jp/how-to-use-irm-03wla
へー.iRemoconってtelnet経由でAPI叩けるんだ.まぁダメだろうけどレオリモコンでも試してみるか.
f:id:shikky_lab:20180811013915p:plain

f:id:shikky_lab:20180811013924p:plain
・・・・・・できてしまいました.いや,それってええん?
マニュアル曰くこのAPIが通るのはホームネットワーク内に限定されているようなので,レオネットの呪縛から免れることができたということでしょうか.なお挙動は完全にiRemoconWifiの通りでした.telnetで叩ける以上はハックすること自体は何とでもなりそうです.

ただしAlexaと連携するとなると二番目の問題が鎌首をもたげてきます.

レオネットではサーバを公開できない.

これの何が問題かという話ですが,EchoのAlexaは仕組み上,聞き取った音声を一旦クラウドに投げて構文を解析した後,実際に処理を行うサーバーに処理を移譲します.
参考:スマートホームスキルAPIについて | ASK
つまり,Alexaを介す以上,そのデータはホームネットワークを飛びだしてしまうのです.
これに対して今回は tomesuke.hatenablog.com 様の記事を参考に外部にVPNサーバーを立てて,ホームネットワークとの間にトンネルを作ることで対応します.

ただVPNサーバも安くはないんですよね.ぶっちゃけAlexa連携にそこまで魅力を感じていないので少し思い悩んでいたところ,
GCPの最小構成は完全無料で使えるということを知りました.
GCP(Google Cloud Platform)での無料GCE(Google Compute Engine)インスタンス作成
様のエントリほか.おいおい,神かよGoogle!!

システム構成

というわけで,おおよその構成は以下となります. f:id:shikky_lab:20180811060042p:plain

余談ですが,この手のことをやる際に最初に名前が挙がるであろうIFTTTは今回採用しませんでした.
というのもAlexaをIFTTTのトリガーにしたい場合,「アレクサ,電気をつける をトリガー」のように最後に"をトリガー"とつける必要があります.
1度や2度ならまだしも日常使う機能でそれはちょっと・・・・・・.
(ちなみにGoogleHomeはIFTTTをトリガーする際にこういった言葉は必要ないらしいです.神かよGoogle...)
代わりに採用したNode-REDはGUIでフローを作成するだけで様々な動作を作成できるツールなのですが,"Node-RED Alexa Home Skill Bridge"というプラグインを使うことでAlexaを入力のトリガーにすることができます.これをうまく駆使することでAlexaへの自然な呼びかけで動作させることができます. qiita.com 様のエントリを大いに参考にさせていただきました.

今回は概要編ということで,このくらいにしておきます.次回はもう少し詳しい話に踏み込んでいこうと思います.