
以前、USB温度計で室内の温度を測ってましたが、これに外気温も追加してみたいと思います。
以前の記事: CentOS7上でUSB温度計で温度を記録してgrafanaでグラフ化する
外気温を得るには外に温度計を設置するか、無料のAPIを利用します。
今回は、無料のAPIを利用して見たいと思います。
OpenWeatherMapというサイトを利用してAPI経由で外気温を得ます。
なお、OpenWeatherMap は地点計測のデータなのでお住いの地域とは若干異なった値が出るようです。
OpenWeatherMap に登録
まずはAPI KEYを得るため、OpenWeatherMapに登録する必要があります。
ユーザ名、メールアドレスとパスワードを入力するとAPI KEYがメールで送られてきます。
OpenWeatherMap のAPIを叩くシェルを書く
curl -s -L "http://api.openweathermap.org/data/2.5/weather?id=ここにCityID&APPID=ここにAPIKEY" | jq ".main.temp"
JSONでレスポンスが返ってくるため、JSONをパースする jq を入れています。
jq は yum install jq でインストール可能となっています。
cityID は OpenWeatherMap でcityを検索したときに出るページのURLになります。
tokyo なら、以下のURLとなり、1850147 がIDとなります。
https://openweathermap.org/city/1850147
得られたレスポンスは下記のとおりです。
277.1
どうやら、単位がケルビンで返ってきているようなので、この処理に手を加え、セルシウスに変換します。
変換するには、273.15を引くだけできます。
expr だと小数点が計算できないので、bc を使い計算します。
bc が入ってない場合同じく、yum install bc でインストールが可能です。
# echo 277.1 - 273.15 | bc -l
3.95
それっぽい温度が取れました。
bcのあとの-lはつけてもつけなくても良いですが、小数点計算の場合つけておくと良いらしいです。
grafana に外気温のデータを送る
ここからは cron で動作する外気温を取得しgrafanaに送るシェルとなります。
host=の部分はお使いの環境によって変更してください。
#!/bin/sh
WEATHER=`curl -s -L "http://api.openweathermap.org/data/2.5/weather?id=ここにCityID&APPID=ここにAPIKEY" | jq ".main.temp"`
TEMP=`echo "$WEATHER - 273.15" | bc -l`
# echo $TEMP
curl -s -XPOST 'http://localhost:8086/write?db=grafana&precision=s' --data-binary "outtemp,host=temp.reyfox.local,region=jp value=$TEMP"
cronに登録する
毎分実行するよう cron に登録します。
crontab -e
* * * * * sh /root/grafana_out_temp.sh >/dev/null 2>&1
これでgrafanaにデータが毎分送られてくるようになります。
grafanaでグラフを描画する
今回は前に作った室温を得るグラフと同じグラフに描画します。
まず、室温を測っているグラフを選択し、Editを押します。
次に、Bのクエリに
default outtemp where host=temp.reyfox.local
を指定するだけで室温のグラフと一緒に外気温のグラフが出てきます。
外気温だけをゲージで表示させたい場合は grafana から Addpanel→Singlestatを選び、クエリを入力し、Optionsの部分でGaugeにチェックを入れます。

上記が室温と外気温のグラフを重ねたものとなります。