2019/3/22追記
やり方を変えた新しい記事を追加しました。
Zabbix的にかなり自動化したので、Zabbixが得意なら次の記事でやってもらった方が楽なはず。
kodate.hatenablog.com
なんか急にスゲー毛色が変わりますが。
俺は悪い意味で完璧主義なところがあって、ブログを書くなら準備をきちんと整えて、投稿の順番も筋道が通るようにしてからでないと…とか考えるものの、そんな準備は永遠に整わないわけで、結局いつまで経っても書けなかったりする。
書いてない間もDIY作業は色々やったんですけどね。
なのでやったことを順不同で書いちゃうことにします。
今回は、部屋の温度を常時グラフ化。
用意するもの
- Nature Remo mini
Nature Remo mini 家電コントロ-ラ- REMO2W1
- 出版社/メーカー: Nature, Inc.
- メディア: エレクトロニクス
- この商品を含むブログを見る
そのリモコン機能は今回の本題ではなくて、付随して温度が測れる機能を利用します。
NatureRemo的には、その温度をトリガーとしてエアコンをつけたりするためにあるんだけど、今回はこの温度を定期的に取得して記録、グラフ化。
ちなみにminiではないやつは湿度とかも取れるらしい。
ウチの加湿器は赤外線リモコンに対応してないから見送ったけど。
- Amazon Echo Dot
Echo Dot 第3世代 - スマートスピーカー with Alexa、チャコール
- 出版社/メーカー: Amazon
- 発売日: 2018/10/30
- メディア: エレクトロニクス
- この商品を含むブログを見る
Nature Remoを使える状態にセットアップするために、たぶん何かしらこの手のスマートスピーカーが必要?
- Zabbix (google:Zabbix)
細かく書くとキリがないので省略するけど、グラフを描いてくれるやつ。
今回の要点は「curlでremoから温度情報を取ってきてプロットする」だけなので、もちろん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"}}}] |
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側で、取得した数字を扱うアイテムを作る。こんな感じ。
グラフの定義、ホストへの関連付けとかはZabbix基本操作なので割愛するとして、出来上がったグラフはこの通り。
技術的な記事とか初めて書くけど、伝わるかしら…