Skip to content

Smart Life 99

Nature RemoをHome Assistantで使う[2/2]

Nature Remo, IoT, Home Assistant

長くなるので記事を 2 つに分割しています。

Nature Remo と Home Assistant の連携に関する記事です。

Nature スマートリモコン Nature Remo 3 家電コントロール Amazon Alexa / Google Home / Siri 対応 GPS連携 温度センサー Bluetooth Low Energy Remo-1W3
rakuten
Nature スマートリモコン Natu...
価格:9980円(税込、送料無料)
(2020/10/28時点)
楽天での購入をオススメする理由については、楽天経済圏に関する記事を参考にしてください。

Nature Remo API

まず、前回記事で紹介した Nature Remo API の復習をします。

このようなクエリに対して、

1curl -X GET "https://api.nature.global/1/devices" -H "authorization: Bearer ここにアクセストークン" | jq

以下のようなレスポンスが得られるのでした。

1[
2 {
3 # 一部省略
4 "firmware_version": "Remo/1.0.32",
5 "temperature_offset": 0,
6 "humidity_offset": 0,
7 "newest_events": {
8 "hu": {
9 "val": 60,
10 "created_at": "2020-10-28T10:29:17Z"
11 },
12 "il": {
13 "val": 20,
14 "created_at": "2020-10-28T10:37:30Z"
15 },
16 "mo": {
17 "val": 1,
18 "created_at": "2020-10-28T10:48:38Z"
19 },
20 "te": {
21 "val": 23.4,
22 "created_at": "2020-10-28T10:55:20Z"
23 }
24 }
25 }
26]

ここから取り出したい値は以下になります。

  • 湿度 60%
  • 照度 20(単位不明)
  • 人感(モーション)センサー 0 or 11
  • 温度 23.4℃

Home Assistant の RESTful センサー

公式サイトの説明

restセンサーを使い、上記のセンサ値を取得していきます。

configuration.yaml

Add-on の File Editor 等を使用し、Home Assistant の設定ファイルconfiguration.yamlを編集していきます。

デフォルトから 1 行だけ追加しています。groupautomationの中身を別ファイルにまとめているように、 sensorsensor.yamlにまとめることにしました。

configuration.yaml
1# Configure a default setup of Home Assistant (frontend, api, etc)
2default_config:
3
4group: !include groups.yaml
5automation: !include automations.yaml
6script: !include scripts.yaml
7scene: !include scenes.yaml
8sensor: !include sensors.yaml # <= 追加

secrets.yaml

次に Nature Remo API のアクセストークンをsecrets.yamlに追記します。
このファイルに他の人には秘密にしておきたい情報をひとまとめにしておくことで、 設定ファイル管理を楽にできます。

secrets.yaml
1# Use this file to store secrets like usernames and passwords.
2# Learn more at https://www.home-assistant.io/docs/configuration/secrets/
3some_password: welcome
4
5nature_remo_api_token: Bearer ここにアクセストークン

sensors.yaml

センサ情報取得の部分を設定していきます。

まずは簡単な設定例を紹介します。
value_template以外は特に大きなところはありません。上記の curl コマンドを 60 秒ごとに実行しています2

保存後、Home Assistant を再起動して設定を有効化します。
再起動後、左ペインの履歴から新たなエンティティ(nature_remo_temperature)が登録されたことが分かると思います。

sensors.yaml
1# 本当は全部の行頭に2つスペースが入ります。
2# 編集上の問題で詰められてしまってます。
3- platform: rest
4 scan_interval: 60
5 resource: https://api.nature.global/1/devices
6 name: nature_remo_temperature
7 headers:
8 authorization: !secret nature_remo_api_token
9 value_template: '{{ value_json[0]["newest_events"]["te"]["val"] }}'

value_template

value_templateは Python の web サービス用テンプレートエンジンJinja2に基づく入力になります。
Jinja2 は左ペイン開発者ツールのテンプレートから試すことができます。

試しに以下を入力してみてください。
インタラクティブに温度が表示されたと思います。エンティティの状態はすべてstatesに保存されており、データを取り出せるようになっています。

1{{ states.sensor.nature_remo_temperature.state }}

温度を取り出すために使用したvalue_templateは、API で返ってきた json を表すvalue_jsonに対し、

  1. 配列 1 つめの
  2. newest_eventキーの中の
  3. teキーの中の
  4. valキーの中に入っている値

を取り出していることになります。

最終形

上記の温度の例をそのまま縦に増やしていき、湿度や照度を取得しても構いませんが、 1 回の API 使用で済むところを 4 回使用することになり、無駄が多くなります。

rest sensor で newest_event を保管しておき、 template sensorで分岐させて各センサ値を取得しています。

人感センサーについてはvalに意味は無いようなので1新しい記事に連携方法をまとめました。

sensors.yaml
1# 本当は全部の行頭に2つスペースが入ります。
2# 編集上の問題で詰められてしまってます。
3- platform: rest
4 scan_interval: 300
5 resource: https://api.nature.global/1/devices
6 name: remo_sensors
7 headers:
8 authorization: !secret nature_remo_api_token
9 value_template: "OK"
10 json_attributes_path: "$[0].newest_events"
11 json_attributes:
12 - hu
13 - il
14 - mo
15 - te
16- platform: template
17 sensors:
18 remo_temperature:
19 value_template: '{{ states.sensor.remo_sensors.attributes["te"]["val"] }}'
20 unit_of_measurement: "°C"
21 device_class: temperature
22 remo_humidity:
23 value_template: '{{ states.sensor.remo_sensors.attributes["hu"]["val"] }}'
24 unit_of_measurement: "%"
25 device_class: humidity
26 remo_illuminance:
27 value_template: '{{ states.sensor.remo_sensors.attributes["il"]["val"] }}'
28 device_class: illuminance
binary_sensors.yaml
1- platform: template
2 sensors:
3 remo_motion:
4 value_template: '{{ states.sensor.remo_sensors.attributes["mo"]["val"] }}'
5 device_class: motion

こんなカードができました。 card

device_classを設定することで、UI にいい感じのアイコンが表示されるようになります。
種類は下記リンクに一覧があります。

最後に

API を使って Home Assistant と Nature Remo を連携する方法について紹介しました。
REST API や Jinja に慣れていないと敷居の高い内容だったと思います。

Nature Remo API のうち、今回使用したものはほんの一部です。 リモコン・シーン機能も API として利用できるので、本記事を参考に Home Assistant へ取り込んでみてください。

今回のような設定を行わなくても、一度にエンティティやスイッチを取り出してしまう仕組みがインテグレーションです。
インテグレーションはデバイスの販売会社が実装していたり、有志の方が開発しています。

Nature Remo の場合、下記で有志の方が開発してらっしゃいます!応援しましょう!

https://github.com/yutoyazaki/hass-nature-remo

私もいつか Developer マニュアルを読んで開発に貢献したいと思っています。


  1. 人感センサーは常に 1 が返ってくるらしいです(参考)
  2. 5 分に 30 回がリクエストの上限です。