yamamoWorks

.NET技術を中心に気まぐれに更新していきます

Google HomeとAzure IoT HubとRaspberry PiでTVとPS4をコントロール【概要編】

Google Home miniを購入したので様々な家電のコントロールを実現したいと思い赤外線リモコンの信号を制御するeRemote miniを買いましたが、Amazon EchoやGoogle Homeでスマート家電として認識できるのは現状では照明のみでテレビやエアコンのコントロールはできません。 *1

出来ないなら自前で作ろう、という事でテレビ周りのコントロールを出来るようにしてみます。様々な実現方法がありますが、今回は以下の条件で進めます。

実現したいこと

  • 「OK Google、プレステを起動して」で、PS4を起動する
  • 「OK Google、プレステを消して」で、PS4をスタンバイモードにする
  • 「OK Google、torneを起動して」で、PS4を起動してtorneを開く
  • 「OK Google、Netflixを起動して」で、PS4を起動してNetflixを開く
  • 「OK Google、テレビBRAVIAをつけて」で、テレビの電源をONにする *2
  • 「OK Google、テレビBRAVIAを消して」で、テレビの電源をOFFにする
  • 「OK Google、NHKに変えて」で、テレビのチャンネルを変える

持ってるもの

  • Sony BRAVIA HX850
  • PlayStation 4
  • Raspberry Pi 2 Model B
  • eRemote (今回は使わない)

Chromecastがあればテレビのコントロールは簡単ですが買わない方向で。

アーキテクチャ

f:id:yamamoWorks:20180301013529p:plain

Google Home(というかAssistant)はIFTTTと連携しているので、Google Assistantをトリガーとした処理を定義できます。

機器のコントロールについては、BRAVIAもPS4もLAN経由でコントロールが可能である事が分かったので、眠っていたRaspberry Piを活用し信号を送るプログラムを作成することにします。 但しBRAVIAの電源ONについてはLAN経由では出来ないのでHDMI対応機器間での制御信号をやりとりする規格であるHDMI-CECを用いることにします。なのでRaspberry PiとテレビをHDMIケーブルで繋げます。

次にGoogle HomeでトリガーされたコマンドをRaspberry Piまで伝達する方法ですが、ググるとGoogleのMBaaSであるFirebaseを使う例が殆どなので、同じことをやっても面白くないのでAzure IoT Hubを使うことにします。

Raspberry Pi上には、IoT Hubに接続し受信したイベントに従ってPS4やBRAVIAに信号を送るプログラムをNode.jsで作成します。※自分のNode.jsの勉強を兼ねて

今回はここまで。次回から各部分を実際に作っていきます。

 


  1. テレビを照明として登録する裏ワザ的な使い方はありますが…

  2. 「テレビをつけて」はChromecastデバイスの制御として認識されるのでテレビのブランド名で呼ぶ事にします