ブログ

Armadillo-X1,Armadillo-IoT G3/G3L: REST APIのPOSTで受け取ったデータを保存するデモ

at_yuma.arakawa
2017年10月30日 9時34分

センサー値をゲートウェイが受信し、クラウドサーバーへ送信する様なIoTのシステムとしては、センサーとゲートウェイの他にサーバーも必要です。

ただし、デモ等を行う場所によってはインターネットへ接続できないこともあり、センサー・ゲートウェイ・サーバーがすべてローカルで完結していると便利です。

ここでは、センサーとしてArmadillo-IoT G3のCPUの温度センサーを使用し、サーバーとしてArmadillo-IoT G3Lを使用するデモの作り方を紹介します。

システム構成

システム構成は下図の通りです。

 

セットアップ手順

サーバー側のArmadillo-IoT G3Lと、センサー・ゲートウェイ側のArmadillo-IoT G3それぞれのセットアップ手順を紹介します。

1. サーバー(Armadillo-IoT G3L)

1.1. ネットワーク設定

パッケージ管理コマンド(apt-get)を使用していくつかのパッケージをインストールする必要があります。

下記マニュアルを参考にネットワーク設定を行ってください。

1.2. PHPのインストール

ここではPOSTで受け取ったデータを処理するためにPHPのインストールを行います。
(Webサーバーは標準でlighttpdがインストール済みです。)

[armadillo]# apt-get install php5-cgi
1.3. PHPの設定

インストール後、lighttpd側でPHPの設定を行います。設定ファイルは /etc/lighttpd/lighttpd.conf です。

server.modules = (
    "mod_access",
    "mod_alias",
    "mod_compress",
     "mod_redirect",
    "mod_fastcgi",  <== 追加
#       "mod_rewrite",
)
 
・・・省略・・・
 
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
 
# 追加(ここから)
fastcgi.server = ( ".php" =>
    ( "localhost" =>
        (
            "socket" => "/tmp/php-fastcgi.socket",
            "bin-path" => "/usr/bin/php-cgi",
        )
    )
)
# 追加(ここまで)

設定ファイルを書き換えた後、Webサーバー(lighttpd)を再起動します。

[armadillo]# systemctl restart lighttpd
1.4. PHPの動作確認

設定を行ったら動作確認を行います。
下記のスクリプトを /var/www/html/info.php へ配置してください。

<?php
phpinfo();

そして、PCをArmadillo-IoT G3Lと同じネットワークへ接続してください。

PCからアクセスするためにArmadillo-IoT G3LのIPアドレスを確認します。

[armadillo]# ip addr show
・・・省略・・・
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:11:0c:1d:01:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.130/24 brd 192.168.11.255 scope global dynamic eth0
       valid_lft 27372sec preferred_lft 27372sec
    inet6 fe80::211:cff:fe1d:190/64 scope link
       valid_lft forever preferred_lft forever
・・・省略・・・

ここでは有線LANで接続しているため、eth0の項目のIPアドレスが"192.168.11.130"であることを確認しました。

PCのブラウザで http://確認したIPアドレス/info.php へアクセスし、下図の様に表示されれば成功です。

1.3. POSTデータ受信用スクリプト作成

以下を行うPHPスクリプトを作成します。

  • POSTでセンサ値を受け取る
  • 受け取ったセンサ値を出力用HTMLファイルへ追記

PHPスクリプトの内容は以下の通りです。
/var/www/html/temp.php というファイル名で配置します。

<?php
/* POSTのデータが無ければ終了 */
if (!isset($_POST)) exit;
 
/* POSTで受け取った"user"データと"temp"データを showtemp.html へ追記 */
file_put_contents("/var/www/html/showtemp.html", $_POST['user'].','.$_POST['temp'].'<br>', FILE_APPEND);

上記のスクリプトでは、POSTで受け取ったデータを /var/www/html/showtemp.html へ追記します。
POSTで受け取る各パラメータについては後述の"センサー・ゲートウェイ(Armadillo-IoT G3)"で説明します。

showtemp.html はあらかじめ、以下の内容を記載しておきます。

<html>
    <head>
        <title>showtemp.html</title>
        <script type="text/javascript" language="javascript">
        <!--
            setTimeout("location.reload()",5000);
        // -->
        </script>
    </head>
<body>

なお、showtemp.htmlには書き込み権限を付加しておいてください。

[armadillo]# chmod a+w /var/www/html/showtemp.html

setTimeout()で5秒ごとにページのリロードをしているので、showtemp.htmlへ追記された内容が5秒の頻度で確認できる仕組みです。

ただし、画面の自動スクロールまでは入っていないので、ブラウザのウィンドウ縦幅よりも下に伸びると手動でスクロールする必要があります。

 

2. センサー・ゲートウェイ(Armadillo-IoT G3)

Armadillo-IoT G3をセンサーとゲートウェイとして使用します。

ちなみに、設定方法は[コースD] Armadillo-IoT G3/G3L、Armadillo-X1開発体験セミナーの内容と同じです。

設定方法としては、以下のRubyスクリプトを作成し、実行するだけです。

2.1. Rubyスクリプトの作成

sendtemp.rb というファイル名で以下の内容のファイルを作成します。

require "net/http"
require "uri"
 
uri = "http://1.4で確認したIPアドレス/temp.php"
 
loop do
        mtemp = `cat /sys/class/thermal/thermal_zone1/temp`
        temp = mtemp.to_f / 1000
        res = Net::HTTP.post_form(URI.parse(uri),
                {'user'=>'sample', 'temp'=>temp})
        print temp, "\n"
        sleep 5
end

CPU内蔵の温度センサの値は /sys/class/thermal/thermal_zone1/temp から取得できます(値はミリ℃)。

上記のスクリプトではNet::HTTP.post_form()を使用してPOSTでデータを送信しています。
送信するデータを第2引数で指定しており、
"user"パラメータには文字列"sample"を、
"temp"パラメータには温度センサ値(temp変数)を指定しています。

2.2. Rubyスクリプトの実行

下記のように実行します。

[armadillo]# ruby sendtemp.rb

3. 実行

あらかじめ、PCでサーバー(Armadillo-IoT G3L)のWebサーバーのshowtemp.htmlを開いておいてください。
URLとしては http://1.4.で確認したIPアドレス/showtemp.html となります。

そして、Armadillo-IoT G3側でsendtemp.rbを実行すると以下のように確認できます。