Sympapaの日記

スマートなんとかはスマートじゃない方法でつくられている

Nature Remo: パナとソニーのテレビのオンとオフ別々の赤外線信号を登録する

こんにちは、Sympapaです。

スマートIRリモコンを使ってスマートホーム化をし始めると「リモコンの電源ボタンがトグル式なので困る」「オンとオフを明示的に制御したい」ってことが出てくると思います。
我が家でいうと照明のリモコンは電源ONとOFFが別のボタンになっていますが、テレビのリモコンの電源ボタンはひとつしかなくトグル式です。テレビで電源ONとOFFが別になっているものは見たことがありません。
普通にリモコンを使う分には人間がテレビがついているかを見て電源をON/OFFするのでトグル式でいいんですが、例えば「OK Google ! キッチンを消して!」でキッチンの照明とテレビをOFFにするという自動化をしたい場合は、現在のテレビの電源がONであろうがOFFであろうが状況に関係なく結果はOFFになって欲しいので必ずOFFにできる赤外線信号が欲しいところです。

テレビメーカーさんはリモコンには搭載していなくても、電源ONとOFFの赤外線信号を別々に用意してくれている場合もあるようです。
今回は私が使用しているPanasonicSONYのテレビの電源ONとOFFが別になった赤外線信号を、Nature Remoで使用する方法を書いていきたいと思います。
我が家で使用しているVIERAはGX855、BRAVIAはW730Cという機種でこれらで動作確認しています。

Nature Remo用赤外線コード

まずはNature Remoで使えるVIERA,BRAVIAの電源ON/OFF別コードから。

VIERA: 電源ON
{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,6240]}

VIERA: 電源OFF
{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,4540]}

BRAVIA: 電源ON
{"format":"us","freq":38,"data":[2411,580,610,610,1191,610,1190,611,1190,610,580,610,1190,611,610,580,1221,579,611,610,580,610,580,611,610,25207,2381,610,611,579,1221,580,1190,610,1191,610,610,580,1221,580,610,610,1191,610,580,610,610,580,611,610,580,25207,2411,580,610,611,1190,610,1190,611,1190,610,580,611,1190,610,610,580,1221,580,610,611,579,611,610,580,610,65535,0,36180]}

BRAVIA: 電源OFF
'{"format":"us","freq":38,"data":[2411,580,1220,580,1221,580,1221,579,1221,580,610,611,1190,610,580,610,1190,611,610,580,610,580,611,610,580,24627,2381,610,1190,611,1190,610,1190,611,1190,610,580,610,1191,610,610,580,1221,580,610,610,580,611,610,580,610,24597,2411,580,1221,580,1220,580,1221,580,1220,580,611,610,1190,610,580,611,1190,610,611,579,611,610,580,610,611,65535,0,36180]}'

Nature RemoのクラウドAPIを使ってリモコン信号をNature Remoのサーバーへ登録する

以下の方法で既にアプリからRemoに登録したテレビの追加ボタンとして任意の赤外線信号を登録できます。
おそらくRemoの設定は赤外線信号も含めて全てサーバ側で持っておく仕組みなのだと思います。
(Remoが複数ある場合はローカルAPIで片方のRemoから赤外線信号を送信しもう一方のRemoで受信して登録するのもアリです。)

1.アクセストークンを取得する

RemoのクラウドAPIを使用するためのアクセストークンをここで取得します。

2.対象となるテレビのappliance IDを取得する

対象となるテレビのappliance IDを取得するため下のコマンドを叩きます。

curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer あなたのアクセストークン"

すると以下のようなjsonが返ってきます。実際には他の登録デバイスのも含めてズラっと表示されるので対象のテレビが書かれた箇所を探します。
idがたくさんあるのでややこしいですが、デバイス毎に最初にappliance ID,それを使うRemoの情報,そのデバイスの情報という順に並んでおり一番上(下の例でいうとxxxxx)がappliance IDです。これをコピーします。

 {
    "id": "xxxxx",
    "device": {
      "name": "リビングのRemo3",
      "id": "yyyyy",
      (略
      "temperature_offset": 0,
      "humidity_offset": 0
    },
    "model": {
      "id": "zzzzz",
      "country": "JP",
      "manufacturer": "panasonic",
      "remote_name": "zzzzz",
      "name": "Panasonic TV 001",
      "image": "ico_tv"
    },
    "type": "TV",
    "nickname": "リビングのテレビ",
    "image": "ico_tv",
    "settings": null,
    "aircon": null,
    "tv": {
      "buttons": [
        {
          "name": "power",
          "image": "ico_io",
          "label": "TV_power"
        },
        {
          "name": "select-input-src",
          "image": "ico_input",
          "label": "TV_source"
        },


3.赤外線信号を新たなボタンとして登録する

下のコマンドを使って、対象のテレビに新たな追加ボタンとして赤外線信号を登録します。
image=にはアイコン("ico_on"とか"ico_off"とか)を、nameには名前を指定します。

curl -X POST "https://api.nature.global/1/appliances/対象のテレビのapplianceID/signals" -H "Authorization: Bearer あなたのアクセストークン" -H "Content-Type: application/x-www-form-urlencoded" -d "message={"format":"us","freq":38,"data":[2411,580,(略),0,36180]}&image=ico_on&name=ON"

Windowsの場合はmessage=以降の " を \" に置き換える

うまくいけば下のように返って来ます。Remoのアプリから対象のテレビのリモコン画面を開いて左にスワイプすると出てくる2ページ目のリモコン画面上にボタンが追加されているはずです。

{"id":"対象のテレビのapplianceID","name":"ON","image":"ico_on"}

f:id:sympapa:20210904184525j:plain

Nature RemoのローカルAPIを使って赤外線コードを送信する

上の方法でサーバーへ登録してしまった方がRemoのアプリにもボタンが追加されて使い勝手が良いですが、ローカルAPIを使って赤外線送信をすることも出来ます。

curl -XPOST http://192.168.11.x/messages -H "X-Requested-With: local" -d '{"format":"us","freq":38,"data":[3400,(略),6240]}'


Home Assistantで使う

1.ローカルAPIで使う

ローカルAPIを使う場合はrest_commandでRemoへ直接赤外線信号送信のコマンドを送ります。
IPアドレスは赤外線送信をしたいRemoのものです。

VIERA ON

rest_command:
  viera_on_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,6240]}'

VIERA OFF

  viera_off_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,4540]}'

BRAVIA ON

  bravia_on_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[2411,580,610,610,1191,610,1190,611,1190,610,580,610,1190,611,610,580,1221,579,611,610,580,610,580,611,610,25207,2381,610,611,579,1221,580,1190,610,1191,610,610,580,1221,580,610,610,1191,610,580,610,610,580,611,610,580,25207,2411,580,610,611,1190,610,1190,611,1190,610,580,611,1190,610,610,580,1221,580,610,611,579,611,610,580,610,65535,0,36180]}'

BRAVIA OFF

  bravia_off_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[2411,580,1220,580,1221,580,1221,579,1221,580,610,611,1190,610,580,610,1190,611,610,580,610,580,611,610,580,24627,2381,610,1190,611,1190,610,1190,611,1190,610,580,610,1191,610,610,580,1221,580,610,610,580,611,610,580,610,24597,2411,580,1221,580,1220,580,1221,580,1220,580,611,610,1190,610,580,611,1190,610,611,579,611,610,580,610,611,65535,0,36180]}'


2.クラウドAPIで使う

ローカルAPIが使えるので使わない気もしますが我が家で稼働しているRemo 2, Remo mini(初代), Remo 3の内Remo 2 はローカルAPIを使うとスリープ問題が発生してまともにローカルAPIを使えない問題があるのでクラウドAPIでの使い方も書いておきます。
上で書いた方法で登録したリモコン信号をクラウドAPIを使って送信させます。

後から登録したボタンには個別にコードが与えられるのでそれを調べます。
まずはこのコマンドを叩き・・・

curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer あなたのアクセストークン"

返って来たJSONの中で対象のテレビの"signals"ってとこに登録したボタンのIDがありますのでこれをコピーします。

    "model": {
      "id": "zzzzz",
      "country": "JP",
      "manufacturer": "panasonic",
      "remote_name": "zzzzz",
      "name": "Panasonic TV 001",
      "image": "ico_tv"
    },
    "type": "TV",
    "nickname": "リビングのテレビ",
    "image": "ico_tv",
    "settings": null,
    "aircon": null,
 "signals": [
      {
        "id": "オンのボタンのID",
        "name": "ON",
        "image": "ico_on"
      },
      {
        "id": "オフのボタンのID",
        "name": "オフ",
        "image": "ico_off"
      }
    ],

Home Assistantからはshell_commandを使って対象のボタンを押すAPIを叩きます。

shell_command:
  tv_on: "curl -X POST 'https://api.nature.global/1/signals/ボタンのID' -H 'Authorization: Bearer あなたのアクセストークン'"

電源ONと電源OFFを明示的にできるようになると自動化の幅が広がりますね。では。