FIAPUploadAgent

FIAPUploadAgentはArduino Ethernet相当の環境でIEEE1888 Storageに対してWRITEを行うライブラリです.オリジナルのFIAPUploadAgentからフォークし,細かいバグ修正を行ったバージョンとしてPFFIAPUploadAgentがあります.この資料ではPFFIAPUploadAgentを使用します.

複数のポイントをfiap_element構造体で宣言することにより扱うことができます.

LocalTimeLibTimeに依存しているのでインストールしてください.

1. fiap_elementの宣言とインスタンス化

まず,インスタンス化を行います.

#include <PFFIAPUploadAgent.h>
FIAPUploadAgent fiap_upload_agent;

次にタイムゾーン情報が必要になるので,ローカルタイムゾーンを宣言します.この部分に関してはArduinoの基礎,LocalTimeLibを参照してください.

#include <LocalTimeLib.h>
TimeZone localtime = { 9*60*60, 0, "+09:00" }; // offset, summer time, timezone string

次に,値文字列バッファの確保とfiap_element構造体の宣言を行います.FIAPUploadAgentはfiap_element構造体に設定された値文字列バッファの文字列を指定されたポイントIDに書き込みます.なおポイントIDはポストフィックスのみを定義します.実際には,あとで設定するプレフィックスと結合されたポイントIDを使用します.ポイントは複数個存在することが多いので,配列で宣言すると良いでしょう.

char temperature_str[16];
char voltage_str[16];
struct fiap_element fiap_elements [] = {
  { "Temperature", temperature_str, 0, &localtimezone, },
  { "Voltage", voltage_str, 0, &localtimezone, }, // postfix, buffer address, time = 0, timezone address
};

2. インスタンスの初期化と設定

まず,Ethernetライブラリを初期化しましょう.この場合はDHCPでIPアドレスを設定しますが他の方法を取りたい場合やEthernetライブラリについて深く知りたい場合は公式リファレンスを参照してください.

byte mac_address[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
Ethernet.begin(mac_address);

続いてインスタンスの設定と初期化を行います.先程宣言したfiap_upload_agentに対してbeginメソッドを呼び出します.引数は送信先のStorageのホスト名,Storageサービスのパス,ポート番号,そしてポイントIDのプレフィックスを設定します.StorageサービスのパスはリファレンスStorageを利用している場合はおそらく/axis2/services/FIAPStorageでしょう.ポイントIDのプレフィックス末尾にスラッシュを付けることを忘れないようにしましょう.

fiap_upload_agent.begin("fiap-dev.gutp.ic.i.u-tokyo.ac.jp", "/axis2/services/FIAPStorage", 80, "http://sample.j.kisarazu.ac.jp/sample-gw/");

3. アップロード

これで準備は完了です.実際にアップロードしてみましょう.ほぼこの部分のコードはイディオム的な扱いで良いと思います.現在の値文字列バッファの内容をtimeに入力されているUNIX時のタイムスタンプでアップロードします.このコードでfiap_elements配列内すべてのfiap_elementをアップロードします.

for(int i = 0; i < sizeof(fiap_elements)/sizeof(fiap_elements[0]); i++) {
  fiap_elements[i].time = now();
}

int ret = fiap_upload_agent.post(fiap_elements, sizeof(fiap_elements)/sizeof(fiap_elements[0]));

if(ret == 0) {
  Serial.println("done");
} else {
  Serial.println("failed");
}

results matching ""

    No results matching ""