フィールドサーバはhttpサーバを持っている。 フィールドサーバのCPUのアドレスにアクセスすると,次のような形でデータが出力される:

この右側のフレームのアドレスは http://フィールドサーバのCPUのアドレス/ad_access.htm である。 このソースは次のようになっている。
…… <input type="text" name="ad1_0_0" value="775" maxlength="4" size="6"> …… <input type="text" name="ad1_1_0" value="630" maxlength="4" size="6"> …… …… <input type="text" name="ad1_7_0" value="11" maxlength="4" size="6"> ……
この形式ではField Server対応Squeakでは読めないので,Squeak用に,おおよそ次のようなPHPプログラムで古い形式に変換している:
<?php
$httpfile = file_get_contents("http://フィールドサーバのCPUのアドレス/ad_access.htm");
?>
</head>
<body>
<table border="1">
<tr><td>Temperature</td><td><?php
ereg("name=\"ad1_4_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?></td></tr>
<tr><td>Humidity</td><td><?php
ereg("name=\"ad1_5_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?></td></tr>
<tr><td>Solar Radiation</td><td><?php
ereg("name=\"ad1_6_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?></td></tr>
<tr><td>Soil Wetness</td><td><?php
ereg("name=\"ad1_2_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?></td></tr>
<tr><td>CO2</td><td><?php
ereg("name=\"ad1_1_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?></td></tr>
</table>
私の研究室でお借りしているものは,ad1_2_0 から ad1_6_0
までがそれぞれ土壌水分,土壌温度,気温,湿度,日射量となっている。
これをそのまま公開しても,物理値に変換しないと意味がないし,それに同じアドレスの別ページでは設定まで変えられてしまう。
そこで,フィールドサーバ自体はプライベートアドレス空間に置き,必要なところ以外からアクセスできないようにした。
奥村研究室フィールドサーバのページでは次のようなPHPスクリプトで物理値を表示する(係数はモデルごとに違う)。
<p>気温:
<?php
$httpfile = file_get_contents("http://フィールドサーバのCPUのアドレス/ad_access.htm");
ereg("name=\"ad1_4_0\" value=\"([0-9]*)\"", $httpfile, $regs);
printf("%.1f", 0.302808 * $regs[1] - 12.01);
?>
℃</p>
<p>湿度:
<?php
ereg("name=\"ad1_5_0\" value=\"([0-9]*)\"", $httpfile, $regs);
printf("%.1f", 0.285846 * $regs[1] + 23.69);
?>
%</p>
<p>日射量:
<?php
ereg("name=\"ad1_6_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1] - 7;
?>
mV</p>
<p>CO<sub>2</sub>:
<?php
ereg("name=\"ad1_1_0\" value=\"([0-9]*)\"", $httpfile, $regs);
printf("%.1f", 2.133 * $regs[1] - 666.7);
?>
ppm</p>
<p>土壌水分:
<?php
ereg("name=\"ad1_2_0\" value=\"([0-9]*)\"", $httpfile, $regs);
echo $regs[1];
?>
mV</p>
<p>土壌温度:
<?php
ereg("name=\"ad1_3_0\" value=\"([0-9]*)\"", $httpfile, $regs);
printf("%.1f", 0.302808 * $regs[1] - 11.72);
?>
℃</p>
また,MySQLに次のような表を作ってデータを格納することにした。
create table fieldserver( unixtime int, temperature float, humidity float, insolation float, CO2 float, soilmoisture float, soiltemperature float, primary key(unixtime));
MySQLのデータは次のようにして直接読める。
mysql_connect('oku.edu.mie-u.ac.jp', 'hoge', 'hoge') or die(mysql_error());
mysql_select_db('hoge') or die(mysql_error());
$sql = 'select * from fieldserver order by unixtime desc limit 24';
$result = mysql_query($sql) or die(mysql_error());
echo "<pre>\n";
echo "Date Time Temp Hum Insol CO2 SoilMois SoilTemp\n";
while (($row = mysql_fetch_row($result)) != FALSE) {
echo date("Y-m-d H:i:s", $row[0]);
for ($i = 1; $i <= 6; $i++) printf(" %5.1f", $row[$i]);
echo "\n";
}
echo "</pre>\n";
mysql_close();
Last modified: 2008-01-17 14:28:12