Soracom

Users

ドキュメント
Home ドキュメント SORACOM Harvest SORACOM Harvest Data のそのほかの使いかた

「送信データに含めた時刻」をタイムスタンプとして利用する

通常、Harvest Data におけるデータのタイムスタンプは「SORACOM がデータを保存した時刻」です。このタイムスタンプを「送信データに含めた時刻」に変更できます。

「2024-09-02 12:34:56.789 (UTC) に送信したデータ」として Harvest Data に保存する例:

{
  "temperature": 12.3,
  "humidity": 45.6,
  "time": "2024-09-02T12:34:56.789Z"
}
日時が複数のプロパティに分割されている場合はタイムスタンプとして利用できません

以下のように日時が 2 つのプロパティに分割されている場合は、タイムスタンプとして利用できません。

{
  "temperature": 12.3,
  "humidity": 45.6,
  "date": "2024-09-02",
  "time": "12:34:56.789"
}

ユーザーコンソールで設定する

あらかじめユーザーコンソールで、デバイスから Harvest Data に送信するデータに含めた時刻をタイムスタンプとして利用する設定を行います。

  1. SIM グループ画面、LoRaWAN グループ画面、Sigfox グループ画面、またはデバイスグループ画面で [SORACOM Harvest Data 設定] をクリックします。

  2. [送信データの時刻をタイムスタンプに利用する] のスイッチをクリックして有効化します。

  3. 以下の項目を設定します。

    項目説明
    [送信データ形式]Harvest Data に送信するデータ形式です。「JSON」を選択します。
    [時刻への JSON Pointer]

    送信データ内の時刻データのあるプロパティを JSON Pointer (RFC 6901) で設定します。

    たとえば、"time" のデバイスが以下のような JSON を送信するときは、/time を入力します。

    {
      "temperature": 12.3,
      "humidity": 45.6,
      "time": "2024-09-02T12:34:56.789Z"
    }
    
    [送信データの値の形式]

    データに含める時刻の形式です。以下のいずれかを選択します。詳しくは、データを Harvest Data に送信する を参照してください。

    • ISO 8601 形式
    • UNIX 時間 (秒)
    • UNIX 時間 (ミリ秒)
  4. [保存][OK] の順にクリックします。

  5. IoT SIM、LoRaWAN デバイス、Sigfox デバイスが所属するグループを切り替えます。

    IoT SIM、LoRaWAN デバイス、Sigfox デバイスから送信したデータが Harvest Data に保存できるようになります。

SORACOM CLI / SORACOM API で設定する

SORACOM CLI または SORACOM API を利用しても、送信データの時刻をタイムスタンプとして利用するように指定できます。

  • SORACOM CLI を利用する場合は、soracom groups put-config を使用します。
  • SORACOM API を利用する場合は、Group:putConfigurationParameters API を使用します。

SORACOM CLI / SORACOM API のリクエストボディで指定するプロパティについて

以下の keyvalue のペアを配列で指定します。

keyvalue の型value
customTimestampObject

以下のプロパティを含む JSON オブジェクトを設定します。

プロパティ説明
typeStringHarvest Data に送信するデータ形式です。 jsonpointer を設定します。
valueString

送信データ内の時刻データのあるプロパティを JSON Pointer (RFC 6901) で設定します。

たとえば、"time" のデバイスが以下のような JSON を送信するときは、/time を設定します。

{ "temperature": 12.3, "humidity": 45.6, "time": "2024-09-02T12:34:56.789Z"}

formatString

データに含める時刻の形式です。以下のいずれかを選択します。詳しくは、データを Harvest Data に送信する を参照してください。

  • iso-8601: ISO 8601 形式。
  • unix-sec: UNIX 時間 (秒)。
  • unix-msec: UNIX 時間 (ミリ秒)。

想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。

データを Harvest Data に送信する

設定を行ったグループに所属する IoT SIM などから Harvest Data にデータを送信します。[送信データの値の形式] で選択した項目によって、解釈できる時刻の形式が異なります。

項目説明
ISO 8601 形式

文字列型で指定します。

例:

  • "time": "2024-09-02T12:34:56.789Z"
  • "time": "2024-09-02T12:34:56Z" (*1)
  • "time": "2024-09-02T03:34:56.789+09:00" (*2)
  • "time": "2024-09-02T03:34:56+09:00" (*1)
  • (*1) ミリ秒を省略した場合、ミリ秒は 000 として扱われます。この例の場合、タイムスタンプは 2024-09-02T12:34:56.000Z です。
  • (*2) UTC を示すタイムゾーン識別子 Z の代わりに、UTC 以外のタイムゾーンを示す +09:00-07:00 を使用できます。
UNIX 時間 (秒)

数値型、または文字列型で指定します。ミリ秒は 000 として扱われます。この例の場合、タイムスタンプは 2024-09-02T12:34:56.000Z です。

例:

  • "time": 1725280496 (*1)
  • "time": "1725280496" (*1)
UNIX 時間 (ミリ秒)

数値型、または文字列型で指定します。

例:

  • "time": 1725280496789
  • "time": "1725280496789"
  1. [送信データの時刻をタイムスタンプに利用する] を以下のように設定します。

    設定について詳しくは、ユーザーコンソールで設定する を参照してください。

    • [送信データ形式]: 「JSON」
    • [時刻への JSON Pointer]: /time
    • [送信データの値の形式]: 「ISO 8601 形式」
  2. デバイスで Unified Endpoint にデータを送信します。

    $ curl -v http://uni.soracom.io \
    -H 'content-type: application/json' \
    -d '{
      "temperature": 12.3,
      "humidity": 45.6,
      "time": "2024-09-02T12:34:56.789+09:00"
    }'
    

    Harvest Data にデータが保存されます。

    image image

リソース ID とデータの保存日時 (ミリ秒) が一致した場合の処理について

データは、リソース ID (*1) ごとに、データの保存日時 (ミリ秒) をキーとして保存されます。そのため同一のリソース ID から、既存のデータと同一のタイムスタンプを指定してデータを送信した場合、先に送信したデータは以下のルールで上書きされます。

(*1) たとえば、IoT SIM を利用した場合は SIM ID のこと。

データ形式が JSON の場合は、プロパティごとに上書きされます。つまり、すでに保存されているプロパティは、同一プロパティで上書きされないかぎり維持されます。

先に送信したデータあとから送信したデータ保存されるデータ
例 1{"temperature": 20}{"humidity": 30}

{"temperature": 20, "humidity": 30}

(*) humitidy が追加されます。

例 2{"temperature": 20}{"temperature": 25, "humidity": 30}

{"temperature": 25, "humidity": 30}

(*) temperature が上書きされ、humidity が追加されます。

タイムスタンプとして正しく解釈できない場合はデータは保存されません

「送信データに含めた時刻」をタイムスタンプとして正しく解釈できない場合は、データは Harvest Data に保存されません。

[送信データの値の形式] で「ISO 8601 形式」を選択して、送信する時刻の文字列にタイムゾーン識別子 (Z+09:00 など) が抜けている場合:

$ curl http://uni.soracom.io \
-H 'content-type: application/json' \
-d '{
    "temperature": 12.3,
    "humidity": 45.6,
    "time": "2024-09-02T12:34:56.789"
}'
{"message":"Invalid custom timestamp value in request"}

[送信データの値の形式] で「ISO 8601 形式」を選択して UNIX 時間 (ミリ秒) の形式で送信した場合:

$ curl http://uni.soracom.io \
-H 'content-type: application/json' \
-d '{
    "temperature": 12.3,
    "humidity": 45.6,
    "time": "1725280496789"
}'
{"message":"Invalid custom timestamp value in request"}
有効範囲外の日時を指定した場合はデータは保存されません

「上記の方法で指定した時刻」が「Harvest Data がデータを処理する時刻」と比較して「40 日 (3456000 秒) 以上過去」または「1 日 (86400 秒) 以上未来」のときは、Harvest Data へのデータの保存に失敗します。データ送信時にエラーレスポンスを受け取った場合は、対象のデータを更新したうえで再送してください。

Unified Endpoint のレスポンスは、他のサービスの有効・無効によって異なります

Unified Endpoint からのレスポンスは、他のサービスの有効・無効によって異なります。詳しくは レスポンスの形式を設定する を参照してください。

x-soracom-timestamp ヘッダーで指定した時刻が優先されます

HTTP で Harvest Data にデータを保存するときに、x-soracom-timestamp ヘッダーで UNIX 時間 (ミリ秒) を指定すると、任意の時刻のデータとして Harvest Data に保存できます

このとき、送信データの時刻をタイムスタンプとして利用する設定をして、さらに x-soracom-timestamp ヘッダーを付与してデータを送ると、データのタイムスタンプは x-soracom-timestamp の時刻が利用されます。