DIYで大体なんとかする

このブログのあらすじは… 注文住宅建てたい→中古住宅買う→DIYとコーヒーにハマる(いまここ)

Nature Remoで取得した部屋温度をZabbixでグラフ化する

2019/3/22追記
やり方を変えた新しい記事を追加しました。
Zabbix的にかなり自動化したので、Zabbixが得意なら次の記事でやってもらった方が楽なはず。
kodate.hatenablog.com


なんか急にスゲー毛色が変わりますが。

俺は悪い意味で完璧主義なところがあって、ブログを書くなら準備をきちんと整えて、投稿の順番も筋道が通るようにしてからでないと…とか考えるものの、そんな準備は永遠に整わないわけで、結局いつまで経っても書けなかったりする。
書いてない間もDIY作業は色々やったんですけどね。

なのでやったことを順不同で書いちゃうことにします。
今回は、部屋の温度を常時グラフ化。
 


用意するもの

  • Nature Remo mini

Nature Remo mini 家電コントロ-ラ- REMO2W1

Nature Remo mini 家電コントロ-ラ- REMO2W1

 学習リモコンのすごい版。ネットワーク越しにリモコン信号を送信可能。つまり外からエアコンつけたりできる。
そのリモコン機能は今回の本題ではなくて、付随して温度が測れる機能を利用します。
NatureRemo的には、その温度をトリガーとしてエアコンをつけたりするためにあるんだけど、今回はこの温度を定期的に取得して記録、グラフ化。
ちなみにminiではないやつは湿度とかも取れるらしい。
ウチの加湿器は赤外線リモコンに対応してないから見送ったけど。

Echo Dot  第3世代 - スマートスピーカー with Alexa、チャコール

Echo Dot 第3世代 - スマートスピーカー with Alexa、チャコール

機種は何でもいいし、何ならGoogleHomeとかでも。
Nature Remoを使える状態にセットアップするために、たぶん何かしらこの手のスマートスピーカーが必要?

細かく書くとキリがないので省略するけど、グラフを描いてくれるやつ。
今回の要点は「curlでremoから温度情報を取ってきてプロットする」だけなので、もちろんZabbixじゃなくて他のものでも可。

手順

  1. Remoとスマートスピーカーをセットアップ
  2. Nature Remoのアクセストークンを作成する
  3. 温度を取得する
  4. Zabbixで整形してグラフ化する

こんな感じ。

  • Remoとかをセットアップ

詳細割愛。まず普通に使える状態にすること。

  • Nature Remoのアクセストークンを作成する

https://home.nature.global/
 ここでアカウントを作り、トークンを発行する。
トークンは一度しか確認できないらしいので、確実にメモっておくこと。

  • 温度を取得する

まず、Linuxコマンドラインから、curlで以下のように実行すると温度が取れる。

curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer [取得したトークン]"

応答はこんな感じ。長い。

[{"name":"Living","id":"***","created_at":"2019-01-23T13:24:32Z","updated_at":"2019-01-30T22:30:54Z","mac_address":"dc:4f:22:***","serial_number":"2W8***","firmware_version":"Remo-mini/1.0.87-","temperature_offset":0,"humidity_offset":0,"users":[{"id":"***","nickname":"","superuser":true}],"newest_events":{"te":{"val":17.79,"created_at":"2019-01-31T01:29:40Z"}}}]
後ろの方にある"val":17.79 が温度っぽいので、この数字だけ頑張って抜き出す。

curl -s -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer [取得したトークン]"|awk '{print substr($0, index($0, "\"te\""))}'|awk '{sub("created.*", "");print $0;}'|sed -e 's/"//g'|sed -e 's/,//g'|sed -e 's/{//g'|sed -e 's/te:val://g'

シェルスクリプトあんまり詳しくないので冗長ですいませんね。
ともかく、こうすると…

17.79
温度の数字だけが取れる。
あとはこの数字を好きなグラフにプロットすれば終わり。 

  • Zabbixで整形してグラフ化する

Zabbix-Agent側で、UserParameterを定義。

vi /etc/zabbix/zabbix_agentd.d/userparameter_natureremo.conf

内容は以下のとおり。さっきの温度取得コマンドを実行してる。

UserParameter=natureremo.temp,curl -m 10 --retry 2 -s -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer [取得したトークン]"|awk '{print substr($0, index($0, "\"te\""))}'|awk '{sub("created.*", "");print $0;}'|sed -e 's/"//g'|sed -e 's/,//g'|sed -e 's/{//g'|sed -e 's/te:val://g'


次にZabbix-Server側で、取得した数字を扱うアイテムを作る。こんな感じ。 f:id:nakaring:20190207162021p:plain


グラフの定義、ホストへの関連付けとかはZabbix基本操作なので割愛するとして、出来上がったグラフはこの通り。

f:id:nakaring:20190207162244p:plain
 

技術的な記事とか初めて書くけど、伝わるかしら…