« 自作ガイガーカウンタ2号機タイプ1(Rev.2)の製作 | トップページ | 自作ガイガーカウンタ2号機タイプ1(Rev.3=最終版)の製作 »

2011.06.23

自作ガイガーカウンタ測定値のWEB公開システムプロト(3)

何とも、iPad/iPhone/iPod Touchでは、Javaアプレットが動作しないということなので、グラフを、JPEG画像ファイルへ出力するJavaアプリを作ってみた。これを、定期 的に実行して、Webサーバへ置いておけば、iPad/iPhone/iPod Touchでも、グラフとして、自作ガイガーカウンタの計測値が見れる。

Gmgraph_20110622
さて、このJavaアプリのシースコードは、下記になります。


import java.awt.*;
import java.util.*;
import java.io.*;
import java.net.*;
import java.applet.Applet; 
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.geom.*;
import java.io.IOException;

public class test_img 
{

	public static void main(String args[]){

		int sx=2;
		int sy=3;
		int wx=320;
		int wy=240;
		int sz_x = 410;
		int sz_y = 240;
		int oft_y=0;
		int oft_x=100;

		Date dt = new Date();
		Calendar cal = Calendar.getInstance();

		int myYear = cal.get(Calendar.YEAR);
		int myMon = cal.get(Calendar.MONTH) + 1;
		int myDay = cal.get(Calendar.DATE);

		String myDate;

		BufferedImage myImage = new BufferedImage( sz_x, sz_y, 
			BufferedImage.TYPE_INT_BGR);

		try {
			// 背景画像(410x290)が必要(最初は白地でやって調整して)
			myImage = ImageIO.read(new File("11062008.jpg"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		Graphics2D off = myImage.createGraphics();
		off.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
			RenderingHints.VALUE_ANTIALIAS_ON);

		myDate = "" + myYear;
		if (myMon < 10) {
			myDate = myDate + "0" ;
		}
		myDate = myDate + myMon;
		if (myDay < 10) {
			myDate = myDate + "0" ;
		}
		myDate = myDate + myDay + ".";

		// これは、計測データを取ってくるサイトのホスト名
		// 同じPCで済む処理だけど、WEB経由で取り出してるよ
		String url;    String host = "example.org";
		int port = 80;
		Socket sock;
		BufferedReader sockin;
		BufferedWriter sockout;
		String str;
		int x=30,y=30,h=40,n=3;
		int i=0;
		int j=0;
		int px_cur=0, py_cur=0;
		int px_prv=0, py_prv=0;

		url = "http://" + host +  "/demo/gmdata_" + myDate + "csv";

		System.out.println( url );

		try {
			wx = sx * 24 * 6;
			off.setColor( Color.BLACK );
			off.drawLine(0+oft_x,wy-1+oft_y,
				wx+oft_x,wy-1+oft_y ); // X
			off.drawLine(0+oft_x,wy-10*sy+oft_y,
				wx+oft_x, wy-10*sy+oft_y ); // X

			for (i=0; i<8; i++ ) {
				off.drawLine(0+oft_x,10*i*sy+oft_y,
					wx+oft_x,10*i*sy+oft_y); // X
			}
			off.drawLine(0+oft_x,0+oft_y,
				0+oft_x,wy+oft_y); // Y
			for (i=12; i<(6*24); i+=12 ) {
				off.drawLine(sx*i+oft_x,sy*10+oft_y,
					sx*i+oft_x,wy+oft_y); // Y
			}
			off.drawLine(sx*i+oft_x,0+oft_y,
				sx*i+oft_x,wy+oft_y); // Y

			off.setColor( Color.BLUE );
			off.drawString( "DATE: " + myYear 
				+ "/" + myMon + "/" + myDay, 
				7+oft_x, 15+oft_y );

			sock = new Socket ( host, port );
			sockin = new BufferedReader(
			new InputStreamReader(sock.getInputStream()));
			sockout = new BufferedWriter(
			new OutputStreamWriter(sock.getOutputStream()));

			sockout.write("GET " + url +" HTTP/1.1\r\n");
			sockout.write("Host: " + host + "\r\n");
			sockout.write("Connection: close\r\n");
			sockout.write("\r\n");
			sockout.flush();

			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);
			str = sockin.readLine();
			System.out.println(str);

			int py_sum = 0;

			off.setPaint( Color.red );

			while ((str = sockin.readLine()) != null) {
				System.out.println(str);

				px_cur = j * 1;

				StringTokenizer st = new StringTokenizer(str, ",");
				st.nextToken();
				st.hasMoreTokens();
				py_cur = Integer.valueOf(
					st.nextToken().replaceAll(" ", "" ))*sy;
				py_sum += py_cur;

				off.draw( new Line2D.Double(
					px_prv*sx+oft_x, wy-py_prv+oft_y, 
					px_cur*sx+oft_x, wy-py_cur+oft_y 
				) );

				j++;
				px_prv = px_cur;
				py_prv = py_cur;
			}

			sockout.close();
			sockin.close();
			sock.close();

			int cpm_avg = (py_sum*10) / (j * sy);

			off.setColor( Color.BLUE );
			off.drawString( "J305Beta/Gamma AVG: " 
				+ cpm_avg + "/10 [CPM]", 
				7+oft_x, 28+oft_y );

			} catch (Exception ex) {
				ex.printStackTrace();
			}

			try {
				boolean result 
					= ImageIO.write( myImage, "jpg", 
					new File( "gmgraph_" + myDate + "jpg"));
			} catch( Exception e ) {
				e.printStackTrace();
			}

			System.exit(0);	
	  }
}

こんな感じ。これを、計測プログラムの直後に実行するように、タスクスケージュールしてみた。

11062401_2

この公開は、ここから閲覧できます。

なお、本サイトの提供する情報は、品質、信頼性、安全性などを保証するものではないことを、ご注意ください。

 

|

« 自作ガイガーカウンタ2号機タイプ1(Rev.2)の製作 | トップページ | 自作ガイガーカウンタ2号機タイプ1(Rev.3=最終版)の製作 »

趣味」カテゴリの記事

自作ーガイガーカウンタ」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 自作ガイガーカウンタ測定値のWEB公開システムプロト(3):

« 自作ガイガーカウンタ2号機タイプ1(Rev.2)の製作 | トップページ | 自作ガイガーカウンタ2号機タイプ1(Rev.3=最終版)の製作 »