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 に一括書き込みが利用できるように設定します。
SIM グループ画面、LoRaWAN グループ画面、Sigfox グループ画面、またはデバイスグループ画面で
をクリックします。スイッチをクリックして「on」にします。
のスイッチをクリックして有効化します。
自動的に [送信データの時刻をタイムスタンプに利用する] が有効化されます
を利用するには、 を有効化する必要があります。
- を有効化すると、自動的に も有効化されます。このとき、 は無効化できません。
- を無効化しても、 は無効化されません。
「送信データに含めた時刻」をタイムスタンプとして利用する を参照してください。
を有効化すると、特に TCP や UDP で送信した場合のデータの取り扱いが変わります。詳しくは、
で、データ配列 ([
~]
で囲まれるデータ) を保持するプロパティを 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 の以下の項目を設定します。
「送信データに含めた時刻」をタイムスタンプとして利用する を参照してください。
について詳しくは、項目 説明 Harvest Data に送信するデータ形式です。「JSON」を選択します。 時刻データを保持するプロパティを「データ配列内の各データをルートとした相対的な JSON Pointer (RFC 6901)」で設定します。
データ配列内の各データをルートとした相対的な JSON Pointer を設定します
たとえば、デバイスが以下のような JSON を送信する場合は、
に「/data」を入力し、 に「/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 時間 (ミリ秒)
→ の順にクリックします。
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 のリクエストボディで指定するプロパティについて
以下の key
と value
のペアを配列で指定します。
key | value の型 | value | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
batchWrite | Object | 以下のプロパティを含む JSON オブジェクトを設定します。
| |||||||||
customTimestamp | Object | 「送信データに含めた時刻」をタイムスタンプとして利用する の SORACOM CLI / SORACOM API のリクエストボディで指定するプロパティについて を参照してください。 | に対応する JSON オブジェクトを設定します。詳しくは、
想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。
データを Harvest Data に送信する
「設定を行ったグループに所属する IoT SIM を利用するデバイス」などから、HTTP POST リクエストを利用して、Harvest Data にデータを送信します。
および を以下のように設定します。
設定について詳しくは、ユーザーコンソールで設定する を参照してください。
:
/data
:
:
- : 「JSON」
/time
: - : 「ISO 8601 形式」
デバイスで 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 にデータが保存され、レスポンスで処理結果が返されます。レスポンスに含まれる各プロパティの意味は、以下のとおりです。
プロパティ 説明 total
Harvest Data が認識したデータの数。 status.successCount
Harvest Data に保存できたデータの数。 status.errors[].index
Harvest Data に保存できなかったデータの番号。 status.errors[].code
エラーコード。 status.errors[].message
エラーメッセージ。
一括書き込みする複数のデータではそれぞれ異なる時刻を指定してください
一括書き込みする複数のデータで時刻が一致する場合、いずれか 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 からのレスポンスは、他のサービスの有効・無効によって異なります。詳しくは レスポンスの形式を設定する を参照してください。