続・SONY BRAVIAをコマンドラインで制御したい

以前、Android TVになる前のBRAVIAコマンドラインでコントロールした記事を書きました。

SONY BRAVIAをコマンドラインから制御したい - shimobepapaの日記

その後、予期せぬ事態(液晶の物理破損)が発生して、テレビ購入後4年未満で新型のBRAVIAに買い換えることになってしまいました。

ということで、Android TVである最新のBRAVIAで以前書いた方法が有効かどうか調べてみました。以下、65x9000fでの検証結果です。

なお、前提として一度「Video & TV SideView」のリモコン操作でBRAVIAを操作しないとBRAVIA側の設定が正しくされていない可能性があります。初めてアプリで電源を入れる操作をしたときに、「BRAVIA側でアプリから電源を入れることができるように設定しますか?」というようなことをきかれたことがありました。

もし、下に書いた方法でうまくいかない場合、「Video & TV SideView」のリモコン機能を試していただくとうまくいく可能性があると思います。

 

まず、結論から言うと、「だいたいプロトコルは一緒だけど、以前書いた方法だと微妙に動かない」という感じでした。

ダメだった点は以下の二つ

  • Wake on LANがきかない
  • curlコマンドでxmlをPOSTする場合、書いた方法ではエラーになる

 

このうちWake on LANについては、「リモコンでできる操作」で電源オンの信号を送ることで対応できます。

問題は2つめの方なのですが、おそらくBRAVIA側で使用しているライブラリが変わった関係でエラーチェックが厳しくなったためと思われます。

具体的には、Headerに

soapaction:"urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"

がないといけないようです。

そのため、リモコンのコマンドを送るcurlコマンドは以下の通りになります。

curl -d '<?xml version=\"1.0\"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:X_SendIRCC xmlns:u="urn:schemas-sony-com:service:IRCC:1"><IRCCCode>(コマンド)</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>' -b cookie.txt -H 'soapaction:"urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"' http://(BRAVIAIPアドレス)/sony/IRCC

こうすることで、無事動作ができました。

また、電源オンのコマンドは、

AAAAAQAAAAEAAAAuAw==

になります。

 

その他、認証まわりの部分は以前の記事と同じ方法でいけましたので、以前の記事とあわせて参照ください。