HomeAssistantでNature Remoを使うリンクとメモ

# 概要

[HomeAssistant](https://www.home-assistant.io/)には[Nature Remo](https://nature.global/)の公式インテグレーションは2021年7月現在存在しないようなので、どうにかするためのリンクとメモ。

# APIキーの取得・登録

[ここ](https://home.nature.global/)からログインするとAPIキーを取得できる。

- [Nature Remo API一覧](https://developer.nature.global/)
- [Nature Remoの公式APIの使い方](https://qiita.com/sohsatoh/items/b710ab3fa05e77ab2b0a)
- [Nature RemoをHome Assistantで使う[1/2]](https://smartlife99.netlify.app/nature-remo%E3%82%92-home-assistant%E3%81%A7%E4%BD%BF%E3%81%86-1-2)

# データの取得

- [Nature RemoをHome Assistantで使う[2/2]](https://smartlife99.netlify.app/nature-remo%E3%82%92-home-assistant%E3%81%A7%E4%BD%BF%E3%81%86-2-2)

上記を参考にsecrets.yamlにAPIキーを設定し、configuration.yamlにコピペするのが手っ取り早い。
人感センサは正直使い道が微妙でいらないと思うので省く。
温度センサしかないRemo miniの場合は後述のインテグレーションで温度の取得ができるので、この設定自体いらないかも。

``` secrets.yaml
nature_remo_api_token: Bearer {APIキー}
```

```configuration.yaml
sensor:
  - platform: command_line
    name: CPU Temperature
    command: "cat /sys/class/thermal/thermal_zone0/temp"
    # If errors occur, make sure configuration file is encoded as UTF-8
    unit_of_measurement: "°C"
    value_template: '{{ value | multiply(0.001) | round(1) }}'
  
  - platform: rest
    scan_interval: 300
    resource: https://api.nature.global/1/devices
    name: remo_sensors
    headers:
      authorization: !secret nature_remo_api_token
    value_template: "OK"
    json_attributes_path: "$[0].newest_events"
    json_attributes:
      - hu
      - il
      - mo
      - te
  - platform: template
    sensors:
      remo_temperature:
        value_template: '{{ states.sensor.remo_sensors.attributes["te"]["val"] }}'
        unit_of_measurement: "°C"
        device_class: temperature
      remo_humidity:
        value_template: '{{ states.sensor.remo_sensors.attributes["hu"]["val"] }}'
        unit_of_measurement: "%"
        device_class: humidity
      remo_illuminance:
        value_template: '{{ states.sensor.remo_sensors.attributes["il"]["val"] }}'
        device_class: illuminance
      blank:
        value_template: '1'
```

# リモコンの操作

ON・OFF程度なら、curlコマンドでAPIを叩くのが手っ取り早い。

```shell
curl -X GET "https://api.nature.global/1/appliances" -H "authorization: Bearer {APIキー}" | jq
```
で一覧を取得。

```json
    "id": "***************************",
    "device": {
      "name": "Remo",
      "id": "*********************************",
      "created_at": "2021-01-14T08:48:16Z",
      "updated_at": "2021-07-24T22:46:21Z",
      "mac_address": "**:**:**:**:**:**",
      "bt_mac_address": "**:**:**:**:**:**",
      "serial_number": "*****************",
      "firmware_version": "Remo/1.4.17",
      "temperature_offset": 0,
      "humidity_offset": 0
    },
    "model": null,
    "type": "IR",
    "nickname": "照明",   #<= Remoに登録した機器名
    "image": "ico_other",
    "settings": null,
    "aircon": null,
    "signals": [
      {
        "id": "****ccb5-f281-****-a5e4-17180d40****",  # <= ボタンのID
        "name": "オン",  # <= ボタンの名前
        "image": "ico_on"
      },
      {
        "id": "f44f****-f7d8-45fb-****-eca****2a4f",
        "name": "オフ",
        "image": "ico_off"
      }
    ]
  },
```

以上のようなJSON(一部*で伏せてあります)が取得できる。各ボタンごとにIDが割り振られているので、

```shell
curl -X POST "https://api.nature.global/1/signals/{送信したいボタンのID}/send" -H "authorization: Bearer {APIキー}"
```

のコマンドを実行すればRemoから信号を送ることができる。

あとはHome Assistantのconfiguration.yamlに以下のような設定を追加して先程のコマンドを実行できるようにする。

- [How to make a input Boolean switch?(英語)](https://community.home-assistant.io/t/how-to-make-a-input-boolean-switch/79652/19)
- [Template Switch(英語)](https://www.home-assistant.io/integrations/switch.template/)
- [Input Boolean(英語)](https://www.home-assistant.io/integrations/input_boolean/)

```configuration.yaml
shell_command:
  lighton: 'curl -X POST "https://api.nature.global/1/signals/****ccb5-f281-****-a5e4-17180d40****/send" -H "authorization: Bearer {APIキー}"'
  lightoff: 'curl -X POST "https://api.nature.global/1/signals/f44f****-f7d8-45fb-****-eca****2a4f/send" -H "authorization: Bearer {APIキー}"'

input_boolean:
  roomlight:
    name: Room Light

switch:
  platform: template
  switches:
    room_light:
      value_template: >
        {{ is_state('input_boolean.roomlight', 'on') }}
      turn_on:
        - service: input_boolean.turn_on
          entity_id: input_boolean.roomlight
        - service: shell_command.lighton
      turn_off:
        - service: input_boolean.turn_off
          entity_id: input_boolean.roomlight
        - service: shell_command.lightoff
```

# エアコンの操作

- [GitHub - yutoyazaki/hass-nature-remo](https://github.com/yutoyazaki/hass-nature-remo)

エアコンに関しては有志の方がインテグレーションを作っているので、これをインストールする。
ただし、公式ではない関係上Home AssistantのWebページからインストールすることは(多分)できないので、手動でインストールする必要がある。

インストール方法は、GitHubページの[Code]ボタン→[Download Zip]からダウンロードして解凍するまたはgitコマンドでファイルを取得し、
Home Assistant内のcustom_componentsディレクトリ内にコピーし、configuration.yamlに以下のようにAPIキーを設定する。

``` configuration.yaml
nature_remo:
  access_token: {APIキー}
```

上記のインテグレーションを基に[ON/OFFのリモコン操作にも対応したインテグレーションを作っている方もいる](https://github.com/spect88/hass-nature-remo/tree/support-light)。[プルリク](https://github.com/yutoyazaki/hass-nature-remo/pull/11)が出ているのでいずれマージされそう(2021年8月現在はまだマージされていない)