Nature Remoから温度・湿度を取得しZabbixでグラフ化する

おつかれさまです。 家庭内ESXiを構築したらやりたかったことのひとつ、「Nature Remoから温度湿度を取得してグラフ化する」をやったのでメモがてら残しておきます。
「子育て中声で家電操作できると便利そうだな」と思い買いました。というのは建前で、おもちゃが欲しかっただけです。

Nature Remo

公式でドキュメントがあります。日本語があってありがたい!
developer.nature.global

https://home.nature.global/ から入手したBearerトークンを利用します。
利用時には、Nature Remo購入時に利用登録したメールアドレスとパスワードでログインできます。
今回用に新しくAccess tokenを作成するとBearerトークンが表示されるのでメモしておきます。
後から参照できないようなので必ずメモ!!!

気温と湿度を取得する

公式ドキュメントから案内されているAPIの仕様を見てみます。
温度・湿度は/1/devicesから取得できるようです。
SwaggerでOAuth2の認証認可を通すとSwagger上でテストできるような気がしますが、使い方が分からず…💦
swagger.nature.global

しょうがないので手元のPCのWSLからcurlで取得できるかテストしてみます。
xxxTOKENxxxは各自で取得したものに置き換えてくださいね。

$ curl -sX GET "https://api.nature.global/1/devices" -H "Authorization: Bearer xxxTOKENxxx" | jq .[].newest_events.te.val
17.8
$ curl -sX GET "https://api.nature.global/1/devices" -H "Authorization: Bearer xxxTOKENxxx" | jq .[].newest_events.hu.val
46

後の工程でcurlの出力結果をそのまま利用したいので、-sオプションを付けています。
手元のiPhoneのNature Remoのアプリで今の温度と湿度を確認し、同じ値が取得できていたのでOKとします。

Zabbix

今回はZabbixエージェントのUserParameterを使って、Zabbixに飛ばします。
Zabbixに任意のメトリクスを飛ばす方法はいくつかありますが、Zabbixエージェントを使用できる場合は、UserParameterを使うと 簡単で便利だと思います。詳しくは以下のドキュメントを参照してください。 www.zabbix.com

Zabbixにアイテムを登録する

事前準備としてアイテムを登録しておきます。※今回は6.0を使用しています。Zabbixの構築は割愛します。
f:id:okisan2:20220301135354p:plain f:id:okisan2:20220301135412p:plain ホストインターフェースがlocalhostになっているのは、Zabbix Serverが動いているサーバのエージェントをそのまま利用するからです。
Zabbixエージェントが入っていて、インターネットに向かってcurlをたたける環境ならどのサーバでも問題ないです。

zabbix_agentd.confにUserParameterの設定を追加する

以下の2行を追加します。
UserParameter=アイテムキー,コマンド の順で記載します。
コマンド部分はテストで使用したcurlコマンドと全く同じです。

UserParameter=home.temp,curl -sX GET "https://api.nature.global/1/devices" -H "Authorization: Bearer xxxTOKENxxx" | jq .[].newest_events.te.val
UserParameter=home.hum,curl -sX GET "https://api.nature.global/1/devices" -H "Authorization: Bearer xxxTOKENxxx" | jq .[].newest_events.hu.val

confを書き換えたのでzabbix-agentをリスタートしておきます。必要ないかも?

# systemctl restart zabbix-agent
# systemctl status zabbix-agent

Zabbixのフロントエンドから値の取得をテストしてみて、取得できればOKです。
設定 > ホスト > アイテム > テスト
f:id:okisan2:20220301140525p:plain グラフを作ればこんなふうに。良い感じです。
f:id:okisan2:20220301140909p:plain

今後

Zabbixはバックエンド(厳密にはZabbixの後ろにさらにpostgresqlがいるのですが…)として利用して、
監視のフロントエンドはGrafanaで構築したいなと思っているのですがGrafanaの画面作りに苦戦中です。できたらまたブログにします。