通常、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 に送信するデータに含めた時刻をタイムスタンプとして利用できるように設定します。
SIM グループ画面、LoRaWAN グループ画面、Sigfox グループ画面、またはデバイスグループ画面で
をクリックします。スイッチをクリックして「on」にします。
のスイッチをクリックして有効化します。
以下の項目を設定します。
項目 説明 Harvest Data に送信するデータ形式です。「JSON」を選択します。 時刻データを保持するプロパティを JSON Pointer (RFC 6901) で設定します。
たとえば、デバイスが以下のような JSON を送信するときは、「/time」を入力します。
{ "temperature": 12.3, "humidity": 45.6, "time": "2024-09-02T12:34:56.789Z" }
[一括書き込み] が有効化されているときは配列内の各データをルートとした、相対的な 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} ] }
一括書き込みについて詳しくは、1 回のデータ送信で複数のデータを書き込む (一括書き込み) を参照してください。
データに含める時刻の形式です。以下のいずれかを選択します。詳しくは、データを Harvest Data に送信する を参照してください。
- ISO 8601 形式
- UNIX 時間 (秒)
- UNIX 時間 (ミリ秒)
→ の順にクリックします。
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 のリクエストボディで指定するプロパティについて
以下の key
と value
のペアを配列で指定します。
key | value の型 | value | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
customTimestamp | Object | 以下のプロパティを含む JSON オブジェクトを設定します。
|
想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。
データを Harvest Data に送信する
「設定を行ったグループに所属する IoT SIM を利用するデバイス」などから Harvest Data にデータを送信します。
で選択した項目によって、解釈できる時刻の形式が異なります。項目 | 説明 |
---|---|
ISO 8601 形式 | 文字列型で指定します。 例:
|
UNIX 時間 (秒) | 数値型、または文字列型で指定します。ミリ秒は 例:
|
UNIX 時間 (ミリ秒) | 数値型、または文字列型で指定します。 例:
|
を以下のように設定します。
設定について詳しくは、ユーザーコンソールで設定する を参照してください。
- : 「JSON」
/time
: - : 「ISO 8601 形式」
デバイスで 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 にデータが保存されます。
リソース ID とデータの保存日時 (ミリ秒) が一致した場合の処理について
データは、リソース ID (*1) ごとに、データの保存日時 (ミリ秒) をキーとして保存されます。そのため同一のリソース ID から、既存のデータと同一のタイムスタンプを指定してデータを送信した場合、先に送信したデータは以下のルールで上書きされます。
(*1) たとえば、IoT SIM を利用した場合は SIM ID のこと。
データ形式が JSON の場合は、プロパティごとに上書きされます。つまり、すでに保存されているプロパティは、同一プロパティで上書きされないかぎり維持されます。
タイムスタンプとして正しく解釈できない場合はデータは保存されません
「送信データに含めた時刻」をタイムスタンプとして正しく解釈できない場合は、データは Harvest Data に保存されません。
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 へのデータの保存に失敗します。データ送信時にエラーレスポンスを受け取った場合は、対象のデータを更新したうえで再送してください。
x-soracom-timestamp ヘッダーで指定した時刻が優先されます
HTTP で Harvest Data にデータを保存するときに、x-soracom-timestamp
ヘッダーで UNIX 時間 (ミリ秒) を指定すると、任意の時刻のデータとして Harvest Data に保存できます。
このとき、送信データの時刻をタイムスタンプとして利用する設定をして、さらに x-soracom-timestamp
ヘッダーを付与してデータを送ると、データのタイムスタンプは x-soracom-timestamp
の時刻が利用されます。
[送信データの時刻をタイムスタンプに利用する] を有効化した場合は常に JSON 形式のデータとして処理されます
payload 変換について を参照してください。
を有効化した場合は、TCP や UDP で送信しても JSON 形式のデータ として処理されます。そのため payload 変換が行われません。payload 変換について詳しくは、たとえば、以下のデータを TCP で送信した場合、
の設定によって、データの取り扱いが変わります。{"data": [{"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5}, {"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}]}
payload 変換 が行われます。
を無効化した場合は、バイナリデータとして処理されるためその結果、データを送信した時刻のデータとして、以下の内容が保存されます。
{"payload":"eyJkYXRhIjogW3sidGltZSI6ICIyMDI1LTAzLTE3VDA5OjAwOjAwKzA5OjAwIiwgInRlbXBlcmF0dXJlIjogMTAuNX0sIHsidGltZSI6ICIyMDI1LTAzLTE4VDA5OjAwOjAwKzA5OjAwIiwgInRlbXBlcmF0dXJlIjogOS40fV19DQo="}
ただし、バイナリパーサー の 定義済みフォーマット で
@json
を設定した場合は、バイナリデータとして送信された JSON 形式のデータがそのまま扱われます。そのため、payload 変換は行われずに、以下のデータが保存されます。{"data":[{"time":"2025-03-17T09:00:00+09:00","temperature":10.5},{"time":"2025-03-18T09:00:00+09:00","temperature":9.4}]}
payload 変換 が行われません。
を有効化した場合は、JSON 形式のデータとして処理されるためその結果、以下のデータが保存されます。
2025-03-17T09:00:00+09:00 のデータ:
{"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5}
2025-03-18T09:00:00+09:00 のデータ:
{"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
なお、バイナリパーサー の 定義済みフォーマット で
@json
を指定した場合も、動作は変わりません。
Unified Endpoint のレスポンスは、他のサービスの有効・無効によって異なります
Unified Endpoint からのレスポンスは、他のサービスの有効・無効によって異なります。詳しくは レスポンスの形式を設定する を参照してください。