例によって先人の記録(ガイガーカウンターキット GC10 データをグラフ化)を参考にして以下のようにしよう。
- GC10のcpmをログファイルに記録
- 1分間隔でcpmと線量をtweet
- 1分間隔でxively.comにcpmと線量をアップロード
- 1時間隔でgnuplotでグラフ作成してブログにアップロード
- 1日間隔でログファイルをgoogleドライブにアップロード
時間間隔での動作はcronで動作させる。
というわけでまずは1.のロガー作成。
というわけでまずは1.のロガー作成。
バージョン1
# coding:utf-8 require 'pp' require 'fileutils' #require 'serialport' class GC10Logger def initialize @sp = SerialPort.new('/dev/ttyUSB0',9600,8,1,0) end def get_cpm line = @sp.gets("\n") if /^\d+/ =~ line return line.to_i else return nil end end def run loop do cpm = get_cpm now = Time.now next unless cpm dir = File.join(ENV["HOME"],"gc10",now.strftime("%Y"),now.strftime("%m")) file = File.join(dir,now.strftime("%d")+".txt") FileUtils.mkdir_p(dir) mode = File.exists?(file) ? "a" : "w" File.open(file,mode) do |io| out = "#{now.strftime("%Y%m%d%H%M%S")}\t#{cpm}" io.puts out end end end end gc10 = GC10Logger.new gc10.run
これで$HOME/gc10/2013/08/01.txtのようなファイルが延々とできる。
内容は
20130801212453 25 20130801212454 24 20130801212455 24 20130801212456 24 20130801212457 23 20130801212458 23 20130801212459 23 20130801212500 22
みたいな感じ。
さらに自動起動するようにしたいのでロックファイルを確認して既に実行中だったら終了するよう改造してcronで定時起動する作戦。
で、バージョン2
# coding:utf-8 require 'pp' require 'fileutils' require 'serialport' class Locked < StandardError end def lock(lock_file_path='/tmp/gc10lock') File.open(lock_file_path, 'w') do |lock_file| if lock_file.flock(File::LOCK_EX|File::LOCK_NB) yield else raise Locked end end end class GC10Logger def initialize @sp = SerialPort.new('/dev/ttyUSB0',9600,8,1,0) end def get_cpm line = @sp.gets("\n") if /^\d+/ =~ line return line.to_i else return nil end end def run loop do cpm = get_cpm now = Time.now next unless cpm dir = File.join(ENV["HOME"],"gc10",now.strftime("%Y"),now.strftime("%m")) file = File.join(dir,now.strftime("%d")+".txt") FileUtils.mkdir_p(dir) mode = File.exists?(file) ? "a" : "w" File.open(file,mode) do |io| out = "#{now.strftime("%Y%m%d%H%M%S")}\t#{cpm}" io.puts out end end end end begin lock do gc10 = GC10Logger.new gc10.run end rescue Locked puts "already running..." exit 0 end
あとはcronの設定。
cronからrvmのrubyを実行するのに若干手間取ったができた。
/etc/cron.d/gc10loggerを以下の内容で作成。
* * * * * pi /home/pi/.rvm/bin/ruby /home/pi/scripts/gc10logger.rb
みっしょんこんぷりーと
0 件のコメント:
コメントを投稿