Nature Remoのセンサーで取得したデータをzabbixで管理する
概要
おうちにあるNature Remoには温度, 湿度, 照度, 人感の4つのセンサーがあり、温度と湿度と照度はスマホアプリ上から現在の値がわかる。
でも現在の値だけじゃなくて1週間の部屋の温度の推移とか知りたいよなと思って調べたら、Nature Remoの公開APIを利用したzabbixテンプレートを作成した方がいたため、それを導入してみた。
環境
Nature Remo : 1.4.13
zabbix : 5.0
(ぶっちゃけ、どのNature Remoのバージョンでもどのzabbixのバージョンでも動くと思う。)
API実行
アクセストークン取得
Nature Remoはインターネット経由で扱うためアクセストークンの取得が必要。
アクセストークンは一度しか表示されないことと、トークンが流出すると外部から家の家電の操作がし放題なので、取り扱いに注意すること。
ここにアクセスしLoginを選択。
https://home.nature.global/
Natureのアカウントで使用しているメールアドレスを入力する or googleアカウントでログイン。自分はメールアドレスを入力した。
noreply@nature.global からメールが届くので、ログインを選択する。
許可するを選択。
ログインが完了するので、Goを選択。
(画像は省略)
Generate access tokenを選択し、アクセストークンを取得する。
複数Natureを持っていても、おそらく1つのアクセストークンになると思われる(自分は1つしか持っていないので合っているかは不明)。
(アクセストークンの画像は省略)
デバイスID取得
curlの実行ができればいいので、linuxでもwindowsでもOK。
自分はzabbixサーバ(CentOS7.8)で実行した。
//デバイス情報を取得する基本構文
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json"
これだとアクセストークンを入力していないため、情報取得が出来ない。
なので、基本構文の後ろに情報を追加する。
すでに温度とかも表示されるが、今は上の方にあるidの値をメモする。
jqコマンドを利用して、コマンド結果を整形することも可能(整形しないとよく見えない)。
jqコマンドをインストールしていない場合は、jq.playというサイトで結果を整形ができる。
https://jqplay.org/
Filter : . (ドット)
JSON : curlの結果
自分はjqコマンドのインストールから実施した。
//jqコマンドのインストール方法(この順番じゃないとだめ)
yum -y install epel-release
yum -y install jq
//デバイス情報を取得する(結果を整形しない場合は、最後の"| jq ."は不要)
curl -X GET "https://api.nature.global/1/devices" -H "Accept: application/json" -H "Authorization: Bearer 自分のアクセストークン" | jq .
[
{
"name": "Remo01",
"id": "hoge",
"created_at": "2021-03-11T07:37:45Z",
"updated_at": "2021-05-18T04:25:14Z",
"mac_address": "hoge",
"bt_mac_address": "hoge",
"serial_number": "hoge",
"firmware_version": "Remo/1.4.13",
"temperature_offset": 0,
"humidity_offset": 0,
"users": [
{
"id": "hoge",
"nickname": "hoge",
"superuser": true
}
],
"newest_events": {
"hu": {
"val": 66,
"created_at": "2021-05-18T12:46:41Z"
},
"il": {
"val": 103,
"created_at": "2021-05-18T12:35:43Z"
},
"mo": {
"val": 1,
"created_at": "2021-05-18T12:55:19Z"
},
"te": {
"val": 26.3,
"created_at": "2021-05-18T12:48:42Z"
}
}
}
]
zabbix設定
テンプレートダウンロード
https://github.com/miyuk/zabbix-template-natureremo からzabbix-template-natureremo.xmlをダウンロードする。
テンプレートインポート
zabbixのGUIからダウンロードしたxmlをインポートする。
設定 > テンプレート > インポート
インポートするファイル : ダウンロードしたxml
ルール : 全部デフォルト
インポート後、インポートに成功しましたと表示されることを確認。
ホスト作成
Nature Remo用のホストを作成する。
設定 > ホスト > ホストの作成
インターフェースはzabbixエージェントでもsnmpでもなんでもないけど、エージェントなしで登録はできないため、zabbixエージェントにしてIPは127.0.0.1にした。
マクロになんでもSNMPコミュニティが出てくるけど気にしない。
・ホストタブ
ホスト名 : 適当
グループ : 適当
インターフェース : zabbixエージェント, 127.0.0.1
・テンプレートタブ
テンプレート : Template Nature Remo
・マクロタブ
{$ACCESS_TOKEN} : アクセストークン
{$TARGET_DEVICE} : デバイスID
これでホスト作成する。
これで放置しておけばセンサー情報がzabbixに蓄積されて、グラフで色々見ることができるようになった。
テンプレート調整
デフォルトのテンプレートのグラフ以外にも見てみたいのでグラフを追加した。
設定 > テンプレート > Template Nature Remo > グラフ > グラフの作成
・グラフ1 (湿度)
名前 : Humidity
アイテム : Humidity
残りはデフォルト
・グラフ2 (照度)
名前 : Illumination
アイテム : Illumination
残りはデフォルト
・グラフ3 (人感)
名前 : Movement
アイテム : Movement
残りはデフォルト
・グラフ4 (温度)
名前 : Temperature
アイテム : Temperature
残りはデフォルト
・グラフ5 (温度と照度(起きている(部屋の明かりを点けている)時の温度を把握する用))
名前 : Temperature & Illumination
アイテム : Temperature & Illumination
残りはデフォルト
所感
室温の推移が見れるのはおもしろいなーくらいで活用はそんなにできてない。外気温との対比もできたら面白いのかなと思うけど、それがやりたいならraspberry piを用意してベランダに置くとかしないといけないかなと。手間だけど過去の天気がわかるサイトとかを見るとかもあるけど、それだとzabbixで完結させることはできない。
APIを活用すればNatureアプリを使用せずにリモコン操作ができるようだけど、別にこれ会社で使ってるとかでもないしアプリで十分かな。
クラウドに対するAPIではなくローカルでAPI実行してリモコン操作することも可能らしい。そうすればNature側の障害が合っても家電の操作ができるけど、そこまでしたいことってあんまりないかなと思う。
NatureのAPI関連の趣味のブログ投稿が少ないのでそういうのが増えるといいな。アクセストークン取得してデバイスの状態を確認するくらいの記事はいくつかあったけど、踏み込んだ内容のが見てみたい。
疑問
自分はプログラマーではないため、Swagger UIを見ても何ができるのかいまいちわからない。本当はエアコンのオン/オフの状態と室温のグラフが取りたかったけど、そんなことできるんだろうか。APIの使い方がよくわからなくて何もしていない状態。
家にいるときもいないときも、常に人感の値が1なのはおかしくない?人感が発動したら明かりを付けるオートメーションをアプリで設定しているけど反応が悪いなとは前から思っていた。個体差なのか環境なのか製品の問題なのかは不明。
参考
https://swagger.nature.global/#/
https://blog.yuu26.com/nature-remo-api-tutorial/
https://qiita.com/tobi50/items/6bbf6f53fe975f26f445
https://qiita.com/sohsatoh/items/b710ab3fa05e77ab2b0a
https://qiita.com/miyuk/items/08dfd90ac3e1f0c86ecf
Discussion