4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Server Side SwiftAdvent Calendar 2017

Day 8

Server Side SwiftをトンネルさせてIoTデバイスのデータをFastsensingでモニタリング #love_swift

Last updated at Posted at 2018-01-21

特にSwiftでやる必要もないんですけど、 Swift愛好会に来てるのでServer Side Swiftで実装してみます。

やりたいこと

デバイス(Nefry BT) -----> Fastsensing

という形でデバイスデータをBIツールになげてリアルタイム可視化です。

ただ、Fastsensing側のAPI側のレスポンスが怪しく、Arduinoのライブラリが途中で死んでしまう問題がありました苦笑。

ということで

デバイス(Nefry BT) ---server side swift--> Fastsensing

こんな感じでトンネルさせるサーバーを用意してみます。

Swift側

/fast/値の形でHTTPリクエストを受け付けて、来た値をFastSensingのAPI(f-io.net)に対してHTTPリクエストする処理です。

main.swift

(省略)



drop.get("fast", ":id") { req in
    guard let id = req.parameters["id"]?.int else {
        throw Abort.badRequest
    }
    print(id)
    
    var json = JSON()
    try json.set("hello", id)

    let res = try drop.client.get("http://f-io.net/d1/デバイスID?チャンネル名=\(id)")
    print(res)

    return json
}


(省略)


デバイス側

fast.ino
#include <WiFiClientSecure.h> // HTTPS通信のために必要

String TARGET_HOST = "xxxxxxxxxx"; //Swiftでたてたサーバー

int analog;

void setup() {
  Serial.begin(115200);
}

void loop() {
  analog = analogRead(A1);
  String trainDelayJson = getTrainDelayJson(analog);   // JSONを取得する
  Serial.print(trainDelayJson);
  delay(1000);
}

String getTrainDelayJson(int sendData) {
  WiFiClientSecure client; // 変数を宣言

  // サーバーにHTTPSのデフォルトポート(443)でアクセスしてみる
  if ( !client.connect(TARGET_HOST.c_str(), 443) ) {
    Serial.println("接続失敗");
    return "";
  }
  
  Serial.print("data: ");
  Serial.println(sendData);
  client.print(String("GET /fast/"+(String)sendData+" HTTP/1.1\r\n") +
               "Content-type: application/json \r\n" +
               "Host: "+TARGET_HOST.c_str()+"\r\n" +
               "Connection: close\r\n\r\n"); // HTTP-GETのリクエストメッセージを書く

  // レスポンスが来るまでちょっと待つ
  delay(500);

  // HTTP-GETのレスポンスを保存しておく変数
  String response = "";

  // レスポンスを変数に格納する
  while (client.available()) {
    response += client.readStringUntil('\r');
  }

  Serial.println("接続成功");
  Serial.println(response);

  return response;
}

これで起動すると

デバイス -> Server Side Swift -> Fastsensingという流れでモニタリングができました。

動いてる様子はこんな感じ。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?