大人のおもちゃ箱

ガジェット関係のツール・グッズ、WEBサービスのレビューや体験談が主なブログ(お父さんの大人のおもちゃ箱)です。

Google HomeとIFTTTでSONY BRAVIA Android TVを完全に操作する(ソフト編)

f:id:rikochanhayatokun:20180319165807p:plain

先日から、このあたりの仕様を決めるのに試行錯誤中です。

いろいろな言語のモジュールを利用して、使い勝手&利便性の確認を試しているのですが、これだ!っと言うものにまだ辿り着いていません。

これまでの流れ

①cec-utilsのcec-clientを使って、SONY BRAVIAを操作する

HDMI-CECを使って、ブラビアをコマンド操作することができるシンプルな操作感がとても気に入っていたのですが、チャンネル操作ができない?ため、保留しました。

(また、HDMI端子の空きが無かったので、HDMIを使わない方がかえって運用が便利になります。HDMI4つは今の御時世少なすぎるますよね。うちでは、HDMI1が任天堂Switch、HDMI2が任天堂Wii、HDMI3がSONYブルーレイレコーダー、HDMIにRaspberry Pi 繋ぎ変えで ビデオカメラで利用しています) ②自分でテレビとHTTP通信部分のコードを作成する

jsonのデータを自前で作成してcurlで接続する。1年前はこれできたことが、今何度試してもエラーになる・・・認証をクッキーに保存して使いまわしたりと面倒なので却下です・・・

③Bravia Remote Control(node.js:alanreid/bravia)を使う

https://github.com/alanreid/bravia

こちらも1年前に試したライブラリです。使い勝手は良かったので気に入っていたのですが、電源ON・OFFで何故か?wolを使っており、無線LANで利用できなかったので、利用を諦めていました。

(HTTP通信では、電源のON・OFFができないと間違った考えを持つ原因でしたね)

④Sony BRAVIA(node:waynehaffenden/bravia)を使う

https://github.com/waynehaffenden/bravia

他に便利なライブラリが無いのか?探してみると、かなり使い勝手が良いものが見つかりました。Bravia Remote Controlが4年前(最終更新)と古く、Sony BRAVIAは1年前と比較的新しいため、そのあたりで改善しているのでしょうか。

サンプルも分かりやすく、少ないコード量でコマンドの実行ができます。これは便利です!

わずか3行で、テレビが操作できます。また、電源のON・OFFもコマンドから正常に実行することができました。その他にも、音声ボリュームを数値で指定することができたりと、使い勝手も抜群です。

Sony BRAVIA(node:waynehaffenden/bravia)を使ってみる

今回は、「Google Home -> IFTTT -> Raspberry Pi(PHP -> Sony BRAVIA node.js) -> Sony BRAVIAのテレビ操作」と言う流れで、システムを構築することにしました。

WEBサーバー(PHP)から、Sony BRAVIA node.jsをコマンドラインから呼び出しテレビ操作します。

(Sony BRAVIA node.jsへの引数にコマンドを与えることにしました)

[bravia.js]

const Bravia = require( 'bravia' );

let bravia = new Bravia( 'テレビのIPアドレス', '80', '0000' );

bravia.send( process.argv[2] );

わずか3行で、ブラビアテレビが操作できるようになりました。

これは本当に便利です。

後は、前回で作ったPHPから

node bravia.js <コマンド名>

を実行すると、システムは完成です。

試しに、Google Homeから音声で実行すると、無事にテレビが操作できました。

ただ、欠点が1つあります・・・

それは、nodeの実行に約1~2秒程度遅延が発生してしまうことです。

Google HomeからIFTTT(raspberry piまで)の遅延時間が2秒程度と考えると、全体的に3秒から4秒の遅延が発生してしまいます。

2秒の遅延はあまり違和感が無いのですが、4秒程度の遅延になってくると、流石に遅いという感情になってしまいます。

nodeの方をデーモン化して、常駐すれば2秒の遅延は絞れそうですが、まあ何かと面倒なので他の方法を合わせて再検討です。

続く・・・