赤いセガ信者のぶろぐ

長文でゲームのレビューを書くことが多いです。qiitaにもtwitterにもfacebookにも書きにくい記事はここ。

ここは告知欄

家電リモコン + Googleアシスタントで任意のリモコンを操作するやつようやく理解したのでメモ

前書き

いま僕の家電リモコンアプリには

  • すげー古いエアコン
  • ルーロ(ロボット掃除機)
  • 照明リモコンスイッチ

が登録されています。
これらは家電リモコンアプリからは操作できるものの、それをGoogleアシスタントに登録しようとするとエアコンしか出てこないという問題に直面しました。
これらの理由を調べて、解決したのでメモを書いていきます。

Googleアシスタントが僕のルーロを操作できなかった理由

家電リモコンとGoogleアシスタントができることの違い

このように説明できます。双方似ているようで全然違います。
家電リモコンの本質はリモコンが発する信号を記憶して真似ることです。オリジナルのリモコンを登録することも出来る便利な奴です。

対してGoogleアシスタント君はGoogleアシスタント対応家電として登録された物の制御を行うことができます。
家電の操作、というところまでが表に出ていてどのように操作するかは対応家電に委ねているわけです。

起きていることの整理

前述の違いを元に起きている事象をもう一度整理すると

  • 家電リモコン上ではエアコンとルーロと照明スイッチを操作できる
  • それをGoogleアシスタントに登録しようとするとエアコンだけ出てくる

ということになっていますので、以下の仮定が考えられます。

  • 家電リモコンはリモコンをGoogleアシスタント対応家電として登録する
  • エアコン(のリモコン)はアシスタント対応家電である
  • ルーロと照明スイッチ(のリモコン)は対応家電ではない

ルーロはスケジュールで動いてるので割とどうでもいいですが、照明スイッチは登録したいです。
というかGoogleアシスタントは「照明のオンオフを操作」できると色々なところに書いてあるので、せっかくなら実現したいところです。

ハック的対処

ここで重要なのはGoogleアシスタント対応家電がどのような命令を受け取れるかを定義していますが、その実行方法は知らないはずです。
電気のON/OFFがWifiの命令で行われようが、リモコンの赤外線で行われようがGoogle的にはどうでもいいはずです。

この前提に基づいて今回は照明スイッチを照明として家電リモコンに登録することにしました。 使っている照明スイッチはオーム電機のコレです。

これを家電リモコンアプリから正規フローで登録しようとすると

家電追加 > 電源スイッチ > オーム電機 > OCR-CRS01W

という流れになるんですがこの方法でやると家電リモコン内で電源スイッチというカテゴリになりGoogleアシスタント登録時には出てきません。
電源スイッチはGoogleアシスタント対応家電ではないからです。
従って、これを照明として無理やり認識させるため

家電追加 > 照明 > 手動で学習する

と選択し、照明スイッチのリモコンをポチポチ学習させます。
照明スイッチにはON/OFFの設定しかないので、Googleアシスタント対応照明が対応すべき「明るさ調整」「常夜灯」などの信号は未登録のままにしておくか、適当にON/OFFどっちかを割り当てて埋めましょう。

これを終えると家電リモコン内でも照明という扱いで登録され、Googleアシスタント登録時に表示されるようになります。
家電の照明として登録されたので、「XXXの電気つけて」「XXXの照明オンにして」などある程度ファジーな発話に対しても対応してくれます。神。

まとめ

  • Googleアシスタントはアシスタント対応家電を操作できる
  • アシスタント対応家電はテレビ、照明、エアコンなど、数種類のカテゴリいずれかに属する必要がある
  • 家電リモコンからGoogleアシスタントに登録する際は、そのリモコンをアシスタント対応家電として家電リモコンにも認識させなければならない
  • 操作したいリモコンがアシスタント対応家電でない場合は対応家電として無理やり登録することで回避できる

以上がまとめとなります。僕の生活がまた少し豊かになりました。

おまけ:発展

照明のON/OFFに無理やりスイッチのON/OFFを割り当てたのと同じ原理で、対応家電と対応操作に対して任意の赤外線信号を割り当てることが可能であることがわかります。
これを使えばいろいろなリモコンをGoogleアシスタント(と家電リモコンアプリ)から操作出来ていろいろ楽しくなりそうです。例えばテレビのチャンネルとロボット掃除機の動作モードを紐づけるとか。。。
まあON/OFF以外の操作を下手に割り当てると発話内容と乖離して違和感も出てきそうです。エアコンの温度上げて、と言ったら裏でお湯が沸くようにする事も可能なわけですから。

ここはフッター