山中卓研HPへ戻る
線量率グラフのページへ戻る

村松と菅谷近辺の線量率モニターグラフの作り方。

J-PARCのある村松と、KOTOグループの宿舎「みのうち住宅」のある菅谷での線量率。
データは 放射線テレメータ・インターネット表示局 より。
まだ、自分が作ったスクリプトのコピーしかないです。
近いうちに読みやすいように修正します。

作成方法

データ取得方法
グラフ作成
自動実行
参考ページ



データ取得方法

放射線テレメータ・インターネット表示局 http://www.houshasen-pref-ibaraki.jp/present/result01.html
から、日時とほしい地域(村松と菅谷)の部分だけを抜き出し、5分ごとに取得に行く。(山中研 岩井さん提供)
方法としては、この情報の載っているサイトでは、数値情報は

<TD bgcolor="#ececff" style="background-color : #ececff;" valign="middle" width="60" align="center" nowrap>
のタグが付いているので、
このサイトのHTMLをダウンロードして読み込み、このタグの付いたものを抜き出せば、数値情報が得られます。
あとは、ほしい地域の情報だけ取り出してファイルに保存しておけば、機械可読なデータとして使えます。
データは以下のような形式にしてradmon.dbに保存。
2011-03-17 23:20:00 1300371600 229 211

UNIX時間への変換

2011-03-17 23:20:00や、2011/03/11 22:50:00といった時間表記は、

date +%s --date "2011/03/11 22:50:00"
をつかって、

1299851400
のようにUNIX時間に変換することができます。 RRDToolに渡す時間情報はUNIX時間情報にする必要があります。


グラフ作成

グラフの作成をRRDTOOLでおこなう。
本当はROOTやPythonでグラフを書いたりする方法もあったのですが、
RRDToolはWeb管理などでよくみかけていて興味があったので、自分の勉強がてらRRDToolを使うことにしました。
また、実際にはRRDToolをPerlやPython内で使えるようなのですが、私はどちらも使えないのでシェルスクリプトで書いています。


--------------------------------------------------------------
RRDデータベース作成
rrdtool create RadTokai.rrd \
--step 300 \
--start 1300340000 \
DS:Muramatsu:GAUGE:600:U:U \
DS:Sugaya:GAUGE:600:U:U \
RRA:LAST:0.5:1:600 \
RRA:LAST:0.5:6:700 \
RRA:LAST:0.5:24:775 \
RRA:LAST:0.5:288:797 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MIN:0.5:1:600 \
RRA:MIN:0.5:6:700 \
RRA:MIN:0.5:24:775 \
RRA:MIN:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797 
--------------------------------------------------------------


--------------------------------------------------------------
更新用スクリプト。
このスクリプトをcrontabを用いて数分に一回実行します。
updateTokaiRadDB.sh

#!/bin/bash
data=`tail -$1 /home/sugiyama/rrdtest/radmon.db `

tstamp=`echo $data|awk '{print $3}'`
RadM=`echo $data|awk '{print $4}'`
RadS=`echo $data|awk '{print $5}'`
echo $tstamp $RadM $RadS
rrdtool update /home/sugiyama/rrdtest/RadTokai.rrd $tstamp:$RadM:$RadS
--------------------------------------------------------------------


--------------------------------------------------------------------
グラフ書き用スクリプト
updategraph.sh

#!/bin/bash
source /home/sugiyama/.bashrc
RRDTOOL=/usr/bin/rrdtool
RRDBDIR=/home/sugiyama/rrdtest/
OUTDIR=/home/sugiyama/rrdtest/

export LANG=C

DEFIN="--rigid --lower-limit 0.1 --alt-autoscale \
 --width 600 --height 400 --imgformat PNG \
DEF:M_LAST=$RRDBDIR/RadTokai.rrd:Muramatsu:LAST \
DEF:M_MIN=$RRDBDIR/RadTokai.rrd:Muramatsu:MIN \
DEF:M_MAX=$RRDBDIR/RadTokai.rrd:Muramatsu:MAX \
DEF:M_AVERAGE=$RRDBDIR/RadTokai.rrd:Muramatsu:AVERAGE \
DEF:S_LAST=$RRDBDIR/RadTokai.rrd:Sugaya:LAST \
DEF:S_MIN=$RRDBDIR/RadTokai.rrd:Sugaya:MIN \
DEF:S_MAX=$RRDBDIR/RadTokai.rrd:Sugaya:MAX \
DEF:S_AVERAGE=$RRDBDIR/RadTokai.rrd:Sugaya:AVERAGE 
"

$RRDTOOL graph $OUTDIR/RadTokai-hour.png --start=-2hour --title "Radiation Dose Rate (Hourly) "`date +%Y/%m/%d\(%a\)`  --vertical-label="Dose Rate(nGy/h)" $DEFIN \
-x MINUTE:10:MINUTE:10:MINUTE:10:0:%H:%M \
LINE2:M_AVERAGE#00CF00:"Muramatsu(Average in 10min.)" \
GPRINT:M_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:M_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:M_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" \
\
LINE2:S_AVERAGE#0000FF:"Sugaya(Average in 10min.)" \
GPRINT:S_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:S_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:S_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" 


$RRDTOOL graph $OUTDIR/RadTokai-day.png --start=-1days  --title "Radiation Dose Rate (Daily) "`date +%Y/%m/%d\(%a\)`  --vertical-label="Dose Rate(nGy/h)"  $DEFIN \
-x MINUTE:30:HOUR:1:HOUR:1:0:"%Hh" \
LINE2:M_AVERAGE#00CF00:"Muramatsu(Average in 10min.)" \
GPRINT:M_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:M_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:M_AVERAGE:AVERAGE:" Average\:%6.2lf %S \n" \
\
LINE2:S_AVERAGE#0000FF:"Sugaya(Average in 10min.)" \
GPRINT:S_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:S_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:S_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" 



$RRDTOOL graph $OUTDIR/RadTokai-week.png --start=-1weeks  --title "Radiation Dose Rate (Weekly) "`date +%Y/%m/%d\(%a\)`  --vertical-label="Dose Rate(nGy/h)" $DEFIN \
-x HOUR:4:DAY:1:DAY:1:86400:"%m/%d(%a)" \
LINE2:M_AVERAGE#00CF00:"Muramatsu(Average in 30min.)" \
GPRINT:M_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:M_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:M_AVERAGE:AVERAGE:" Average\:%6.2lf %S \n" \
LINE1:M_MAX#FFCF00:"Muramatsu(Max in 30min.)" \
GPRINT:M_MAX:LAST:"Current\:%6.2lf %S" \
GPRINT:M_MAX:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_MAX:MIN:"Min\:%6.2lf %S" \
GPRINT:M_MAX:AVERAGE:" Average\:%6.2lf %S \n" \
\
LINE2:S_AVERAGE#0000FF:"Sugaya(Average in 30min.)" \
GPRINT:S_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:S_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:S_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" \
LINE1:S_MAX#FF00FF:"Sugaya(Max in 30min.)" \
GPRINT:S_MAX:LAST:"Current\:%6.2lf %S" \
GPRINT:S_MAX:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_MAX:MIN:"Min\:%6.2lf %S" \
GPRINT:S_MAX:AVERAGE:"Average\:%6.2lf %S \n" 


$RRDTOOL graph $OUTDIR/RadTokai-month.png --start=-1months  --title "Radiation Dose Rate (Monthly) "`date +%Y/%m/%d\(%a\)`  --vertical-label="Dose Rate(nGy/h)" $DEFIN \
-x DAY:1:WEEK:1:WEEK:1:0:"%m/%d(%a)" \
LINE2:M_AVERAGE#00CF00:"Muramatsu(Average in 30min.)" \
GPRINT:M_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:M_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:M_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" \
LINE1:M_MAX#FFCF00:"Muramatsu(Max in 30min.)" \
GPRINT:M_MAX:LAST:"Current\:%6.2lf %S" \
GPRINT:M_MAX:MAX:"MAX\:%6.2lf %S" \
GPRINT:M_MAX:MIN:"Min\:%6.2lf %S" \
GPRINT:M_MAX:AVERAGE:"Average\:%6.2lf %S \n" \
\
LINE2:S_AVERAGE#0000FF:"Sugaya(Average in 30min.)" \
GPRINT:S_AVERAGE:LAST:"Current\:%6.2lf %S" \
GPRINT:S_AVERAGE:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_AVERAGE:MIN:"Min\:%6.2lf %S" \
GPRINT:S_AVERAGE:AVERAGE:"Average\:%6.2lf %S \n" \
LINE1:S_MAX#FF00FF:"Sugaya(Max in 30min.)" \
GPRINT:S_MAX:LAST:"Current\:%6.2lf %S" \
GPRINT:S_MAX:MAX:"MAX\:%6.2lf %S" \
GPRINT:S_MAX:MIN:"Min\:%6.2lf %S" \
GPRINT:S_MAX:AVERAGE:"Average\:%6.2lf %S \n" 

export LANG=ja_JP.UTF-8
--------------------------------------------------------------------


自動実行させる。

作ったスクリプトを自動実行させるには、Linuxのcrontabを用います。(OSによって違いがある可能性あり) (NEC crontab設定ガイド参照) まず作ったスクリプトに実行権限をつけます。

chmod +x updategraph.sh
それができたら、このスクリプトをcrontabのリストに追加し一定期間ごとに自動実行させます。
リストの閲覧は

crontab -l
で、 リストの編集は

crotab -e
でできます。
.bashrcに

EDITOR="emacs -nw"
のようにEDITOR変数として好きなエディタを登録することで、crontabの編集に好きなエディタを使えるようになります。

5分毎に実行させるためには以下のようにcrontabに書きます。

1-56/5 * * * * bash /home/sugiyama/rrdtest/updateTokaiRadDB.sh 2&>/dev/null
実行権限を付けているので、多分bashと書く必要はないと思いますが念のため書いています。
また、標準出力はメールで自分に送られるので、それを避けるために/dev/nullに出力させています。
編集画面から抜けると自動的にリストが更新され、以降自動実行されるようになります。

参考にしたページ

[RRDtool チュートリアル (network traffic)] Debian Linux Server
rrdtool雑記メモ
rrdtoolインストール
Rrdtool-Tutorial-jp
rrdtoolを使った、小さいアイコン風 trafficグラフの作成
sysworks/data/rrdtool
SNMPによるネットワークモニタリング「第2版」:第7回 RRDtoolでグラフ化モニタリング (1/8) - ITmedia エンタープライズ

Crontab
NEC crontab設定ガイド Perlでのスクリプトもあるみたい RRDTool -trees- システム運用についてのサイト。
HTMLでのソース表示 jmblog.jp – ソースコードを表示させるのに使うべきHTMLタグは?
HTMLのタグ ソースコードをそのままブラウザに表示 preとxmpの使い方 - Esprit's Style - エンジニアの足つぼ -
線量率グラフのページへ戻る
山中卓研HPへ戻る