— Nature Remo, IoT, Home Assistant
長くなるので記事を 2 つに分割しています。
Nature Remo と Home Assistant の連携に関する記事です。
まず、前回記事で紹介した 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]
ここから取り出したい値は以下になります。
rest
センサーを使い、上記のセンサ値を取得していきます。
Add-on の File Editor 等を使用し、Home Assistant の設定ファイルconfiguration.yaml
を編集していきます。
デフォルトから 1 行だけ追加しています。group
やautomation
の中身を別ファイルにまとめているように、
sensor
もsensor.yaml
にまとめることにしました。
1# Configure a default setup of Home Assistant (frontend, api, etc)2default_config:34group: !include groups.yaml5automation: !include automations.yaml6script: !include scripts.yaml7scene: !include scenes.yaml8sensor: !include sensors.yaml # <= 追加
次に Nature Remo API のアクセストークンを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: welcome45nature_remo_api_token: Bearer ここにアクセストークン
センサ情報取得の部分を設定していきます。
まずは簡単な設定例を紹介します。
value_template
以外は特に大きなところはありません。上記の curl コマンドを 60 秒ごとに実行しています2。
保存後、Home Assistant を再起動して設定を有効化します。
再起動後、左ペインの履歴から新たなエンティティ(nature_remo_temperature)が登録されたことが分かると思います。
1# 本当は全部の行頭に2つスペースが入ります。2# 編集上の問題で詰められてしまってます。3- platform: rest4 scan_interval: 605 resource: https://api.nature.global/1/devices6 name: nature_remo_temperature7 headers:8 authorization: !secret nature_remo_api_token9 value_template: '{{ value_json[0]["newest_events"]["te"]["val"] }}'
value_template
は Python の web サービス用テンプレートエンジンJinja2に基づく入力になります。
Jinja2 は左ペイン開発者ツールのテンプレートから試すことができます。
試しに以下を入力してみてください。
インタラクティブに温度が表示されたと思います。エンティティの状態はすべてstates
に保存されており、データを取り出せるようになっています。
1{{ states.sensor.nature_remo_temperature.state }}
温度を取り出すために使用したvalue_template
は、API で返ってきた json を表すvalue_json
に対し、
newest_event
キーの中のte
キーの中のval
キーの中に入っている値を取り出していることになります。
上記の温度の例をそのまま縦に増やしていき、湿度や照度を取得しても構いませんが、 1 回の API 使用で済むところを 4 回使用することになり、無駄が多くなります。
rest sensor で newest_event を保管しておき、 template sensorで分岐させて各センサ値を取得しています。
人感センサーについてはval
に意味は無いようなので1、新しい記事に連携方法をまとめました。
1# 本当は全部の行頭に2つスペースが入ります。2# 編集上の問題で詰められてしまってます。3- platform: rest4 scan_interval: 3005 resource: https://api.nature.global/1/devices6 name: remo_sensors7 headers:8 authorization: !secret nature_remo_api_token9 value_template: "OK"10 json_attributes_path: "$[0].newest_events"11 json_attributes:12 - hu13 - il14 - mo15 - te16- platform: template17 sensors:18 remo_temperature:19 value_template: '{{ states.sensor.remo_sensors.attributes["te"]["val"] }}'20 unit_of_measurement: "°C"21 device_class: temperature22 remo_humidity:23 value_template: '{{ states.sensor.remo_sensors.attributes["hu"]["val"] }}'24 unit_of_measurement: "%"25 device_class: humidity26 remo_illuminance:27 value_template: '{{ states.sensor.remo_sensors.attributes["il"]["val"] }}'28 device_class: illuminance
1- platform: template2 sensors:3 remo_motion:4 value_template: '{{ states.sensor.remo_sensors.attributes["mo"]["val"] }}'5 device_class: motion
こんなカードができました。
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 マニュアルを読んで開発に貢献したいと思っています。