なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

Raspberry Piと気象ボードで観測サーバにしてみた

はじめに

他の人に比べると気圧に体が反応しやすいようで、具体的にどのくらいの気圧の変化で反応しているのかというのを知りたかった。調べてみるとRaspberry PiとSparkfunのUSB Weather Board v3を使って、データを取得でき、閲覧できる室内気象観測サーバを作ることができそうだったので、2013年の2月ぐらいに作成した。ただ、2013年の年末に、おそらく、ファイルシステムの問題で起動しなくなってしまった。バックアップも取得していなかったので作りなおした。それをまとめてみた。

Raspberry Pi Type B 512MB

気象データの取得

SparkfunのUSB Weather Board v3は

  • 気温
  • 湿度
  • 気圧
  • 光量(?)

を計測できる。

f:id:takeshich:20140201174615j:plain

Raspberry PiとはUSBを使って接続すれば、別途ドライバを用意することもなく、標準のものでデータを取得することができた。ロギングしたかったので、スクリプトを使って取得することにした。

スクリプトについては、
ねこひげめも|Linux(CentOS)でUSBウェザーボードを使って遊ぶ
を参考にさせていただき、改良した。

#!/usr/bin/perl

use strict;

my $count = 0;
open(PORT,"/dev/ttyUSB0") || die "NG!";

my $serial = <PORT>;
my @a1;
my @val;
if($serial == ""){
	while($count < 5){
	        $serial = <PORT>;
	        chomp $serial;
	        @a1 = split /\$\,/,$serial;
	        @val = split /,/,$a1[1];
	        if(defined($val[0])){
	                last;
	        }
	        $count ++;
	        sleep(1);
	}
}

my $humidity = $val[1];
my $temp = $val[0];
my $press = $val[3];
my $fukai = (0.81*$temp)+(0.01*$humidity)*((0.99*$temp)-14.3)+46.3;
chomp $humidity;
chomp $temp;
chomp $press;
chomp $fukai;
printf("press:%0.2f humidity:%2.2f temp:%2.2f fukai:%2.2f",$press,$humidity,$temp,$fukai);

close(PORT);

Weather Boardの設定でSample rateを5秒にしていたのだが、このスクリプトを実行する際には、Sample rateを長くした方がいいようだ。コネクションを閉じることができなくなる場合が発生した。

Raspberry Piハングアップの問題

以前、作成した際に4日ほど連続稼働させているとRaspberry Piがハングアップしてしまうという現象が起きていた。Raspberry Piを複数台所有しているが、この問題は、Weather Boardを稼働させている場合のみで発生していた。

調べてみると

思わぬところでハマったのがftdi_sio。これがなぜだかハングアップする。
ググってみるとどうやらそういうものらしい。とりあえず /boot/cmdline.txtにdwc_otg.speed=1を追記。
これはUSBをフルスピード固定にしてしまうものらしい。フルスピードと言えば12Mbps。シリアル通信には充分ではある。

RaspberryPiのリモコン化2 - Pinewell's Farmer blog

というものがあった。
試してみたところ、1週間以上稼働させているが、ハングアップする現象は起こっていない。

Cacti

Cactiで表示

CactiはWebベースのネットワーク監視及びグラフ生成用オープンソースソフトウェアである。 指定間隔でポーリングし得られたデータをグラフ化する機能があり、一般的にCPUの負荷やネットワーク帯域利用幅などの時系列データを測定するために使用される。

Cacti - Wikipedia

Cactiを使って、取得したデータをグラフにしてみた。

f:id:takeshich:20140201161500p:plain

こんな感じ。グラフの作成はrrdtoolで、UIの部分を自分で作らなくてもいいので、Cactiを選択した。

カスタムスクリプトを登録することによって、Cactiで表示することが可能になる。

CactiのインストールやCactiのカスタムスクリプトの設定、グラフの作成手順については、ここでは触れないので検索してほしい。

Cactiでハマった点
  • データが取得できない

デバイスを叩くのでrootの権限が必要になる。デバイスの権限を変えるか、実行するwww-dataに対してsudoerでsudoできるように設定する必要があった。

  • 気圧のグラフのY軸がうまく表示されない

これは、rrdtoolの--alt-y-gridオプションがrasbianでインストールできるバージョン(0.8.8a)では有効になっていないためだった。

Cacti • View topic - [SOLVED] UnInformative Y-grid lablesを参考にして、直接ソースを書き換えた。

取得データのバックアップ

以前作った時にデータのバックアップを仕掛けておらず、せっかく半年以上取得したデータを失ってしまったので、今回はきちんとバックアップすることにした。
Cactimysqlでデータを管理しているので、そのDBをダンプし、別のストレージに書くことでバックアップとした。

mysqldump -u cacti -ppassword --single-transaction --databases cacti | gzip > ~/cactidata/cacti_db.gz

Raspberry pi自体のバックアップ

さらに、Raspberry pi自体のバックアップのコールドバックアップも取得することとした。ファイルシステムが壊れた場合、復旧するために再インストールや設定などに時間がかかるため、SDカード自体をddで書きだすことにした。

バックアップファイルを置くサーバから実行した。

ssh pi@raspberry sudo dd if=/dev/mmcblk0 | gzip -c > raspberry.img.gz

復旧する際は、Win32DiskImager.exeで取得したバックアップの容量とおなじ容量のSDカードに書き出してあげれば良い。

気象データについて法律的なところ

気象業務法というものがあり、その中に気象観測施設の届出というものがあるようだ。

気象観測施設の届出について

観測種目は、気圧、気温、蒸気圧、露点温度、相対湿度、風向、風速、風力、降水量、積雪深、雲、視程、日照時間、日射量、天気が対象です。
これ以外の観測種目、畝の間又は苗木の間、建物又は坑道の内部等特殊な環境によって変化した気象のみを対象とする観測、臨時に行う観測(おおむね一ヶ月以内)、船舶又は航空機による観測については対象になりません。

http://www.jma.go.jp/jma/kishou/shinsei/kentei/faq.html

とのことなので、室内での観測は届け出をする必要がないと判断できるが、室外での観測の場合は、

ホームページでの公開は、成果の発表にあたりますので、届出が必要です。
また、その場合には技術上の基準に従った観測を行い、検定に合格した気象測器を使用する必要があります。

http://www.jma.go.jp/jma/kishou/shinsei/kentei/faq.html

とあるので、法律的には公開してはいけないのかもしれない。
twitterでつぶやくのもダメなのかもしれない。ちょっと理解し難い法律であるのは確かだ。

まとめ

今日はなんか頭が痛いなぁと思って、気圧を確認すると急激に下がっていたり、台風到来の時の気圧の急落を確認できたりしている。地球で生きている以上、気象と自身の体調は密接に関係している。気象と体調の変化の傾向をおおよそ知るには便利である。

まぁ、ロギングしてグラフになって視覚的に明確にわかることは、なんか知らないけど楽しい。