Soracom

Users

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

1 回のデータ送信で複数のデータを書き込む (一括書き込み)

Harvest Data に対して 1 回のデータ送信で、複数のデータをまとめて書き込みます。これを「一括書き込み」と呼びます。

毎朝 9 時 (JST) に温度を測定するデバイスが、1 回のデータ送信で 2 日分のデータを Harvest Data に送信する例:

{
  "data": [
    {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
    {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
  ]
}
送信したデータの件数に応じて書き込みリクエストが発生します

データを送信した回数ではなく、送信したデータの件数に応じて書き込みリクエストが発生します。たとえば 1 回のデータ送信で 5 件のデータを Harvest Data に送信すると、5 回の書き込みリクエストが発生します。書き込みリクエストの回数に応じて、書き込み料金が発生します。

なお、Harvest Data の書き込み料金には無料利用枠が用意されています。詳しくは 料金ページ を参照してください。

書き込むデータそれぞれに時刻データが必要です

一括書き込みでは、各データに含まれる時刻データを、そのデータのタイムスタンプとして Harvest Data に保存します。

日時が複数のプロパティに分割されている場合はタイムスタンプとして利用できません

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

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

一括書き込みでは、1 回のデータ送信で、最大 100 件のデータを書き込めます。

ユーザーコンソールで一括書き込みを有効化する

あらかじめユーザーコンソールで、デバイスから Harvest Data に一括書き込みが利用できるように設定します。

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

  2. スイッチをクリックして「on」にします。

  3. [一括書き込み] のスイッチをクリックして有効化します。

    自動的に [送信データの時刻をタイムスタンプに利用する] が有効化されます

    [一括書き込み] を利用するには、[送信データの時刻をタイムスタンプに利用する] を有効化する必要があります。

    • [一括書き込み] を有効化すると、自動的に [送信データの時刻をタイムスタンプに利用する] も有効化されます。このとき、[送信データの時刻をタイムスタンプに利用する] は無効化できません。
    • [一括書き込み] を無効化しても、[送信データの時刻をタイムスタンプに利用する] は無効化されません。

    [送信データの時刻をタイムスタンプに利用する] を有効化すると、特に TCP や UDP で送信した場合のデータの取り扱いが変わります。詳しくは、「送信データに含めた時刻」をタイムスタンプとして利用する を参照してください。

  4. [データ配列への JSON Pointer] で、データ配列 ([] で囲まれるデータ) を保持するプロパティを JSON Pointer (RFC 6901) で設定します。

    送信データの例設定例
    [
      {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
      {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
    ]
    
    空欄
    {
      "data": [
        {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
        {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
      ]
    }
    
    /data
  5. [送信データの時刻をタイムスタンプに利用する] の以下の項目を設定します。

    [送信データの時刻をタイムスタンプに利用する] について詳しくは、「送信データに含めた時刻」をタイムスタンプとして利用する を参照してください。

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

    時刻データを保持するプロパティを「データ配列内の各データをルートとした相対的な JSON Pointer (RFC 6901)」で設定します。

    データ配列内の各データをルートとした相対的な JSON Pointer を設定します

    たとえば、デバイスが以下のような JSON を送信する場合は、[データ配列への JSON Pointer] に「/data」を入力し、[時刻への JSON Pointer] に「/time」を入力します。

    {
      "data": [
        {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
        {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
      ]
    }
    
    [送信データの値の形式]

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

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

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

    IoT SIM、LoRaWAN デバイス、Sigfox デバイスから、一括書き込みができるようになります。

SORACOM CLI / SORACOM API で設定する

SORACOM CLI または SORACOM API を利用しても、デバイスから Harvest Data に一括書き込みが利用できるように設定できます。

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

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

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

keyvalue の型value
batchWriteObject

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

プロパティ説明
enabledBoolean

一括書き込みの ON/OFF を設定します。

  • true: ON。一括書き込みを利用できます。
  • false: OFF
pointerStringデータ配列を保持するプロパティを JSON Pointer (RFC 6901) で設定します。詳しくは、ユーザーコンソールで設定する[データ配列への JSON Pointer] を参照してください。
customTimestampObject[送信データの時刻をタイムスタンプに利用する] に対応する JSON オブジェクトを設定します。詳しくは、「送信データに含めた時刻」をタイムスタンプとして利用するSORACOM CLI / SORACOM API のリクエストボディで指定するプロパティについて を参照してください。

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

データを Harvest Data に送信する

「設定を行ったグループに所属する IoT SIM を利用するデバイス」などから、HTTP POST リクエストを利用して、Harvest Data にデータを送信します。

  1. [一括書き込み] および [送信データの時刻をタイムスタンプに利用する] を以下のように設定します。

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

    • [一括書き込み]:

      • [データ配列への JSON Pointer]: /data
    • [送信データの時刻をタイムスタンプに利用する]:

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

    $ curl http://uni.soracom.io \
    -H 'content-type: application/json' \
    -d '{
      "data": [
        {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
        {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
      ]
    }'
    
    {"total":2,"status":{"successCount":2,"errors":[]}}
    

    Harvest Data にデータが保存され、レスポンスで処理結果が返されます。レスポンスに含まれる各プロパティの意味は、以下のとおりです。

    プロパティ説明
    totalHarvest Data が認識したデータの数。
    status.successCountHarvest Data に保存できたデータの数。
    status.errors[].indexHarvest Data に保存できなかったデータの番号。
    status.errors[].codeエラーコード。
    status.errors[].messageエラーメッセージ。

    image image

一括書き込みする複数のデータではそれぞれ異なる時刻を指定してください

一括書き込みする複数のデータで時刻が一致する場合、いずれか 1 件の書き込みのみが成功し、残りは失敗します。以下は、送信した 4 件のデータのうち 3 件のデータの時刻が一致している例です。

$ curl -v http://uni.soracom.io \
-H 'content-type: application/json' \
-d '{
  "data": [
    {"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
    {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4},
    {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.3},
    {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.2}
  ]
}'
* Host uni.soracom.io:80 was resolved.
* IPv6: (none)
* IPv4: 100.127.69.42
*   Trying 100.127.69.42:80...
* Connected to uni.soracom.io (100.127.69.42) port 80
> POST / HTTP/1.1
> Host: uni.soracom.io
> User-Agent: curl/8.5.0
> Accept: */*
> content-type: application/json
> Content-Length: 271
> 
< HTTP/1.1 207 Multi-Status
< Date: Sat, 29 Mar 2025 00:23:32 GMT
< Content-Length: 164
< Connection: keep-alive
< Keep-Alive: timeout=65
< 
* Connection #0 to host uni.soracom.io left intact
{
  "total": 4,
  "status": {
    "successCount": 2,
    "errors": [
      {"index": 2, "code": "SEM0168", "message": "Duplicated data"},
      {"index": 3, "code": "SEM0168", "message": "Duplicated data"}
    ]
  }
}

各データの処理結果は、レスポンスで確認できます。上の例の場合は、以下のように読み取れます。

  • 1 件目のデータと 2 件目のデータは、Harvest Data への保存に成功しました。
  • 3 件目のデータ ("index":2) と 4 件目のデータ ("index":3) は、ほかのデータ (具体的には 2 件目のデータ) と時刻が一致しているため、Harvest Data への保存に失敗しました。
x-soracom-timestamp ヘッダーは無視されます

一括書き込みを有効化すると、HTTP リクエストの x-soracom-timestamp ヘッダーは無視されます。x-soracom-timestamp ヘッダーについては、任意の時刻のデータとして Harvest Data に保存できる を参照してください。

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

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