Node-REDからネットワーク経由でBRAVIAの電源をONにする(node-red-contrib-bravia)

# はじめに
スマートホーム化でしばしば問題になるのですが、赤外線リモコンのONとOFFが同じボタンという事があります。このようなトグルのスイッチはステータスを管理しなければなりませんが、結構めんどくさいです。

うちのBRAVIAのリモコンも電源はトグルスイッチとなっています。が、安心してください！Node-REDにはBRAVIAをリモコンではなくネットワーク経由で操作する、「[node-red-contrib-bravia](https://flows.nodered.org/node/node-red-contrib-bravia)」があります。
ちょっとクセのあるノードなのですが、今回はこのノードを利用する方法を書きます。

# 環境
- SONY BRAVIA (KJ-43X8500F) AndroidTV (8.0.0)
- Node-RED v0.20.7

# BRAVIA側の設定
「[node-red-contrib-bravia](https://flows.nodered.org/node/node-red-contrib-bravia)」のページに記載されているように設定します。

1. 「設定」メニューから、[通信設定]-[ホームネットワーク]-[レンダラー設定]で「レンダラー機能」をONにします。
2. 「戻る」を押して、[IPコントロール]-[認証]で「Normal and Pre-Shared Key」に設定します。
3. [Pre-Shared Key]で適当な４桁の数字を設定します。
4. 「簡易IPコントロール」をONにします。

以上です。

# Node-REDのフロー作成
とりあえず、「[node-red-contrib-bravia](https://flows.nodered.org/node/node-red-contrib-bravia)」を、Node-REDの「パレットの管理」から「ノードの追加」をするなりしてください。

![スクリーンショット 2019-11-27 22.26.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/7b17b893-317d-582e-aba8-21c1deed1552.png)
![スクリーンショット 2019-11-27 22.25.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/f3a81d9d-1ef3-0d2e-c101-4a27dc3e4c12.png)

使うノードは、devicesにある「bravia ircc」と「bravia api」です。

![スクリーンショット 2019-11-27 22.31.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/79d2784d-eaf1-4c51-0061-ed19a6b36efd.png)

慣れている方はさくっとフローを作っちゃうと思われますが、このノードはクセのようなものがあり、一度の実行でテレビがONにならない事がよくあります。どうもBRAVIA側が受け取り損なっているような動きに思えます。
そこで、1秒置いて電源の状態を確認し、ONになるまでAPIを発行するフローを作成します。

ノード内のIRCCコードやREST API（メソッド）については以下に情報があるようです。
https://pro-bravia.sony.net/ja/develop/index.html

ノード内のTVの設定をしておきます。「ないしょ」の部分にBRAVIA側で設定した４桁の数字を入力します。
IPアドレスはBRAVIAの「設定」から調べておいてください。

![スクリーンショット 2019-11-27 22.29.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/b61c1e48-bfe8-8512-bae8-58134c2d07aa.png)

フローの配置は以下のようにします。

![スクリーンショット 2019-11-27 22.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/447af8f9-12aa-1806-ff00-a655fdf20410.png)

書き出したコードは以下です。BRAVIAの設定値は自分の環境に合わせてください。

```json
[{"id":"e6d8cffe.02c36","type":"bravia-ircc","z":"f3171dc9.c79ab","tv":"66988a5d.eb48d4","ircc":"TvPower","name":"","x":950,"y":90,"wires":[]},{"id":"a6316d68.5739a","type":"switch","z":"f3171dc9.c79ab","name":"","property":"payload.status","propertyType":"msg","rules":[{"t":"eq","v":"standby","vt":"str"},{"t":"eq","v":"active","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":620,"y":140,"wires":[["d43b6529.d19468"],["ea75f005.ad29d"]]},{"id":"d43b6529.d19468","type":"delay","z":"f3171dc9.c79ab","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":770,"y":90,"wires":[["e6d8cffe.02c36","e075bca7.6b2ae"]]},{"id":"67eb502c.5ad75","type":"bravia-api","z":"f3171dc9.c79ab","tv":"66988a5d.eb48d4","method":"system:1.0:getPowerStatus","payload":"","name":"","x":480,"y":140,"wires":[["a6316d68.5739a"]]},{"id":"e075bca7.6b2ae","type":"delay","z":"f3171dc9.c79ab","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":330,"y":140,"wires":[["67eb502c.5ad75"]]},{"id":"8cbf71f.a1e4c9","type":"inject","z":"f3171dc9.c79ab","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":140,"wires":[["e075bca7.6b2ae"]]},{"id":"ea75f005.ad29d","type":"debug","z":"f3171dc9.c79ab","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":780,"y":160,"wires":[]},{"id":"66988a5d.eb48d4","type":"bravia-tv","z":"","name":"BRAVIA","host":"111.111.111.111","port":"80","psk":"0000"}]
```

電源のOFFもIRCCコードを変えるだけで作れます。
BRAVIAには他にも数多くのREST APIがあるので、色々調べて組み合わせると面白そうですね！

スマートホームでは、トグルスイッチを「必ずON/OFFにする」が必要となる場面が多いので、ご参考になれば幸いです。