Querying for measurements
To search for a measurement or a collection of measurements, send the com.apama.cumulocity.FindMeasurement event to Cumulocity IoT, with a unique reqId to the com.apama.cumulocity.FindMeasurement.SEND_CHANNEL channel.
The transport will then respond with zero or more com.apama.cumulocity.FindMeasurementResponse events and then one com.apama.cumulocity.FindMeasurementResponseAck event on the com.apama.cumulocity.FindMeasurementResponse.SUBSCRIBE_CHANNEL channel.
Example:
integer reqId := com.apama.cumulocity.Util.generateReqId();
com.apama.cumulocity.FindMeasurement request :=
new com.apama.cumulocity.FindMeasurement;
request.reqId := reqId;
// Filter based on measurement fragment type and series
request.params.add("valueFragmentType", "c8y_MotionMeasurement");
request.params.add("valueFragmentSeries", "motionDetected");
// Subscribe to com.apama.cumulocity.FindMeasurementResponse.SUBSCRIBE_CHANNEL
// to listen for responses
monitor.subscribe(com.apama.cumulocity.FindMeasurementResponse.SUBSCRIBE_CHANNEL);
// Listen for responses based on reqId
on all com.apama.cumulocity.FindMeasurementResponse(reqId=reqId) as response
// Avoid listener leaks by terminating the listener on completion of the request
and not com.apama.cumulocity.FindMeasurementResponseAck(reqId=reqId)
{
log "Received Measurement " + response.toString() at INFO;
}
// Listen for com.apama.cumulocity.FindMeasurementResponseAck,
// this indicates that all responses have been received
on com.apama.cumulocity.FindMeasurementResponseAck(reqId=reqId)
as requestCompleted
{
log "Received all Measurement(s) for request "
+ requestCompleted.reqId.toString() at INFO;
// Request is completed and we can unsubscribe from this channel
monitor.unsubscribe(com.apama.cumulocity.FindMeasurementResponse.SUBSCRIBE_CHANNEL);
}
// Send request to find available measurements
send request to com.apama.cumulocity.FindMeasurement.SEND_CHANNEL;
Supported query parameters
You can provide the following query parameters with the request:
Parameter | Description |
id | Search for a measurement based on measurementId. When searching for a measurement based on Id, all the query parameters listed below are ignored. |
source | Search for measurements based on the device identifier or asset identifier of the source. |
type | Search for measurements based on the type. |
valueFragmentType | Search for measurements based on fragment type (should be used with valueFragmentSeries). |
valueFragmentSeries | Search for measurements based on fragment series (should be used with valueFragmentType). |
dateFrom | Search for measurements from a start date. The date and time is provided as seconds since the epoch. |
dateTo | Search for measurements within a time range. This is to be used in combination with dateFrom. The date and time is provided as seconds since the epoch. |
pageSize | Indicates how many entries of the collection are to be retrieved from Cumulocity IoT. This is a batching parameter for getting multiple responses from Cumulocity IoT. A larger pageSize does fewer requests to Cumulocity IoT to retrieve all the measurements, but each request is larger. By default, 1000 measurements are in each page and there is an upper limit of 2000. |
currentPage | Retrieve a specific page of results for the given pageSize. If currentPage is set, then only a single page is requested. If currentPage is not set (default), all the pages are requested. |
revert | Boolean parameter. If a range query is used (that is, the query includes at least one of the dateFrom or dateTo parameters), you can reverse the order in which the matching measurements are returned by adding the query parameter revert=true. This returns the latest measurements first. By default, Cumulocity IoT returns the oldest measurements first. |
Query result paging
Cumulocity IoT queries support paging of data for requesting a specific range of the responses received. For more information, see
Paging Cumulocity IoT queries.