Soracom Harvest Data
Collecting Data
To collect data using Harvest, simply configure your Air for Cellular or Inventory device to send data using one of Harvest's entry points.
Data transmitted from Sigfox and LoRa devices is automatically captured when Harvest is enabled. No entry point configuration is required for Sigfox and LoRa devices.
HTTP
This entry point accepts HTTP POST requests from an Air for Cellular or Soracom Inventory device.
Entry Point
For Air for Cellular devices, your device should be configured to send data to: http://harvest.soracom.io
.
For Soracom Inventory devices, your device should be configured to send data to: https://api.soracom.io/v1/devices/{DEVICE-ID}/publish?device_secret={DEVICE-KEY-SECRET}
In either case, the HTTP request should include a Content-Type
header to indicate the type of data.
Harvest will return one of the following HTTP responses:
- 201 - Data was successfully received by Harvest.
- 400 - Data was rejected by Harvest, most likely because Harvest is not enabled or device does not belong to a group with Harvest enabled.
Examples
curl -X POST \
> -H 'Content-Type: application/json' \
> -d '{"temperature":20}' \
> http://harvest.soracom.io
Harvest can also accept POSTs as plain text
$ curl -v -X POST http://harvest.soracom.io \
-H 'Content-Type: text/plain' \
-d 'Hello, SORACOM Harvest Data!'
By default, Harvest will automatically associate a timestamp with the received data based on the date and time the request was received. To specify a different timestamp, you can include an X-Soracom-Timestamp
HTTP header, using a Unix timestamp in milliseconds:
$ curl -X POST \
> -H 'Content-Type: application/json' \
> -H 'X-Soracom-Timestamp: 1545652714887' \
> -d '{"temperature":20}' \
> http://harvest.soracom.io
To save a timestamp in Soracom Harvest Data and use them with the "Date & Time / DateTim ISO" panel within Lagoon 3, timestamps within the JSON body need to be sent to Harvest as UNIX time measuered in milliseconds. Timestamps in any other format may result in the date becoming malformed when displayed in the Lagoon 3 panel
Customers can specify a Timestamp only when sending data directly to harvest.soracom.io
, not when sending data to the Unified Endpoing (unified.soracom.io
or uni.soracom.io
)
When using X-Soracom-Timestamp
and specifying a time that is in the past and beyond the data retention period, the the data cannot be viewed with Harvest Data
TCP & UDP
This entry point accepts TCP and UDP traffic from an Air for Cellular device.
Entry Point
Your device should be configured to send data to tcp://harvest.soracom.io:8514
or udp://harvest.soracom.io:8514
.
Since TCP and UDP do not have a request and response mechanism like HTTP, Harvest will return a TCP packet containing a status code to the device to indicate whether or not data was successfully sent:
- 201 - Data was successfully received by Harvest.
- 400 - Data was rejected by Harvest, most likely because Harvest is not enabled or device does not belong to a group with Harvest enabled.
Example
telnet harvest.soracom.io 8514
>Trying 100.127.127.100...
>Connected to 100.127.127.100.
>Escape character is '^]'.
>
>hello
>201
>^]
>
>telnet> quit
>Connection closed.
SMS & USSD
This entry point accepts SMS and USSD messages from an Air for Cellular device.
Entry Point
When sending a SMS message, your device should be configured to send it to 901031
.
When sending a USSD message, your device should be configured to send it to *901031*{data}#
.
Both SMS and USSD have character length and character encoding limitations. Please refer to the SMS & USSD documentation for more information.
Harvest will not send any response to the device upon receipt of SMS or USSD data.
Data Format
In order for Harvest to automatically generate chart data, your data must be sent to Harvest in JSON format similar to the following:
{
"key1": 10,
"key2": 20
}
When sending geographical location data, ensure that your JSON data includes the following keys:
{
"lat": 36.2048,
"lng": 138.2529,
// other data
}
A maxiumum of 1KB (1024 bytes) may be sent to Harvest per request. Data can be shortened to a single line while keeping the same JSON structure, in order to minimize data usage.