Netatmoのデータ(温度・湿度)をMRTGでグラフ化してみます。
必要な物
- MRTGな環境(手元にサーバがない場合は、AWSやGCPの無償枠でw)
- curlとjq
- Netatmo Weather Station(←Amazonへのリンク)
- Netatmoのアカウント
Client idとClient secretの取得
※取得済みの場合はこの手順はパスして結構です。
- まずはNetatmo公式にログインします
https://auth.netatmo.com/en-us/access/login - 次にNetatmo Connectに移動します
https://dev.netatmo.com/myaccount/createanapp - CREATE AN APPをクリックします
- NameにはNetatmoのログイン用メアドを入力します
- Descriptionには適当な説明を入力します
- Data Protection Officer nameには自分の名前を入力します
- Data Protection Officer emailにはNetatmoのログイン用メアドを入力します
- I accept Netatmo APIs Terms and Conditionsにチェックを入れて、SAVEをクリックします
- Client idとClient secretが表示されるので、記録します
データ取得用スクリプトの作成
適当な場所に適当な名前で次の内容のスクリプトを置きます。
#!/bin/sh export LANG=C temp=/tmp/netatmo.$$ export LANG=C token=`curl -X POST https://api.netatmo.com/oauth2/token -d "grant_type=password&client_id=[前項で取得したClient id]&client_secret=[前項で取得したClient secret]&username=[Netatmoログインメアド]&password=[Netatmoログインパスワード]" | jq -r '.access_token'` curl -X GET "https://api.netatmo.com/api/getstationsdata?access_token=$token" | jq '.body.devices[0].modules[0].dashboard_data | .Temperature, .Humidity' > $temp ibytes=`head -1 $temp | awk '{print $1*10}'` obytes=`tail -1 $temp | awk '{print $1*10}'` echo $ibytes echo $obytes echo 0 echo "Temp/Hum monitoring" rm -f $temp exit 0
- 小数点1位なデータをMRTGで表示するため、値を10倍して取得しています
- アクセストークンの有効期限は3時間です
このため、この例では毎回取得しています - jqの出力からダブルクォーテーションマークを外すときは、-rオプションを付けます(上記スクリプト5行目)
- jqで同時に複数の値を抽出するときは、親キーの後にパイプ文字を入れて、子キーをカンマで並べます(上記スクリプト6行目)
取得できるデータ
jqのパラメータ | 内容 |
---|---|
.body.devices[n-1] | n番目のデバイス 一つしかない場合は0を指定 |
.body.devices[n-1].dashboard_data.Temperature | 気温(℃) |
.body.devices[n-1].dashboard_data.Humidity | 湿度(%) |
.body.devices[n-1].dashboard_data.CO2 | CO2濃度(ppm) |
.body.devices[n-1].dashboard_data.Noise | 騒音(dB) |
.body.devices[n-1].dashboard_data.Pressure | 気圧(mb) |
jqのパラメータ | 内容 |
---|---|
.body.devices[n-1].modules[m-1] | n番目のデバイスのm番目の外部モジュール 一つしかない場合はそれぞれ0を指定 |
.body.devices[n-1].modules[m-1].dashboard_data.Temperature | 気温(℃) |
.body.devices[n-1].modules[m-1].dashboard_data.Humidity | 湿度(%) |
mrtg.cfgの設定例
mrtg.cfgに次の内容を追加します。
先程のスクリプトは/root/netatmo.shという名前で保存しているものとします。
先程10倍で値を取得しているため、表示するときに0.1を掛けています。
Target[test_temp]: `/bin/sh /root/netatmo.sh` MaxBytes[test_temp]: 1000 Options[test_temp]: growright,gauge,nopercent,noinfo,noo Title[test_temp]: 某所の気温 ShortLegend[test_temp]: ℃ YLegend[test_temp]: Celsius YTicsFactor[test_temp]: 0.1 Factor[test_temp]: 0.1 LegendI[test_temp]: 温度 LegendO[test_temp]: PageTop[test_temp]: <h1>某所の気温</h1> Target[test_hum]: `/bin/sh /root/netatmo.sh` MaxBytes[test_hum]: 1000 Options[test_hum]: growright,gauge,nopercent,noinfo,noi Title[test_hum]: 某所の湿度 ShortLegend[test_hum]: % YLegend[test_hum]: % YTicsFactor[test_hum]: 0.1 Factor[test_hum]: 0.1 LegendI[test_hum]: LegendO[test_hum]: 湿度 PageTop[test_hum]: <h1>某所の湿度</h1>
出来上がりはこんな感じになります。