通常、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 グループ画面、またはデバイスグループ画面で
をクリックします。のスイッチをクリックして有効化します。
以下の項目を設定します。
項目 説明 Harvest Data に送信するデータ形式です。「JSON」を選択します。 送信データ内の時刻データのあるプロパティを 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 時間 (ミリ秒)
→ の順にクリックします。
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 へのデータの保存に失敗します。データ送信時にエラーレスポンスを受け取った場合は、対象のデータを更新したうえで再送してください。
Unified Endpoint のレスポンスは、他のサービスの有効・無効によって異なります
Unified Endpoint からのレスポンスは、他のサービスの有効・無効によって異なります。詳しくは レスポンスの形式を設定する を参照してください。
x-soracom-timestamp ヘッダーで指定した時刻が優先されます
HTTP で Harvest Data にデータを保存するときに、x-soracom-timestamp
ヘッダーで UNIX 時間 (ミリ秒) を指定すると、任意の時刻のデータとして Harvest Data に保存できます。
このとき、送信データの時刻をタイムスタンプとして利用する設定をして、さらに x-soracom-timestamp
ヘッダーを付与してデータを送ると、データのタイムスタンプは x-soracom-timestamp
の時刻が利用されます。