Timeseries
Time series data can be provided by sending data to HTTP APIs, either GraphQL, CSV REST, or JSON REST. When sending data either a Mapping ID or a Senseye sensor ID (in the form of a UUID) can be used to address a sensor. If a Mapping ID is used, and a sensor does not already exist with this mapping ID, a new sensor is automatically provisioned.
Info
For user tokens, the associated user needs to be a system administrator to send data.
Machine tokens require permissions to write data and create sensors. If using Mapping IDs with a machine token, your token will also require permissions to read and write mapping IDs.
GraphQL¶
We support sending data via GraphQL using the storeSensorMeasureData mutation.
mutation storeSensorMeasureData($input: StoreSensorMeasureDataInput!) {
    storeSensorMeasureData(input: $input) {
        clientMutationId
    }
}
{
    "input": {
        "mappingId": "mappingId",
        "dataPoints": [{
            "measureName": "temperature",
            "floatValue": 66,
            "timestamp": "2022-04-29T12:55:14+01:00"
        }, {
            "measureName": "current",
            "floatValue": 525,
            "timestamp": "2022-04-29T12:55:14+01:00"
        }, {
            "measureName": "recipe",
            "stringValue": "87N",
            "timestamp": "2022-04-29T12:50:00+01:00"
        }, {
            "measureName": "run",
            "booleanValue": true,
            "timestamp": "2022-04-29T12:50:00+01:00"
        }],
        "clientMutationId": "Your Identifier"
    }
}
{
    "data": {
        "clientMutationId": "Your Identifier"
    }
}
mutation storeSensorMeasureData($input: StoreSensorMeasureDataInput!) {
    storeSensorMeasureData(input: $input) {
        clientMutationId
    }
}
{
    "input": {
        "sensorId": "sensorId",
        "dataPoints": [{
            "measureName": "temperature",
            "floatValue": 66,
            "timestamp": "2022-04-29T12:55:14+01:00"
        }, {
            "measureName": "current",
            "floatValue": 525,
            "timestamp": "2022-04-29T12:55:14+01:00"
        }, {
            "measureName": "recipe",
            "stringValue": "87N",
            "timestamp": "2022-04-29T12:50:00+01:00"
        }],
        "clientMutationId": "Your Identifier"
    }
}
{
    "data": {
        "clientMutationId": "Your Identifier"
    }
}
The clientMutationId response in the above example can be ignored. Up to 15000 datapoints can be stored in a single storeSensorMeasureData mutation.
CSV REST¶
The CSV formatted data should conform to the structure detailed here. It should be sent within the body of a POST request as shown below:
POST /v1/hub/mappings/{mappingId}/data HTTP/1.1
Host: api.senseye.io
Authorization: Bearer your_access_token
Content-Type: text/csv
DATETIME,temperature,current,product,run
2022-04-29T11:13:14+01:00,60,456,"A24",true
2022-04-29T12:01:45+01:00,61,500,"A24",false
POST /v1/hub/sensors/{senseyeId}/data HTTP/1.1
Host: api.senseye.io
Authorization: Bearer your_access_token
Content-Type: text/csv
DATETIME,temperature,current,product,run
2022-04-29T11:13:14+01:00,60,456,"A24",true
2022-04-29T12:01:45+01:00,61,500,"A24",false
JSON REST¶
We use SenML to transfer sensor data via REST; this is a popular JSON format. As an example:
{
    "e": [
        {
            "n": "temperature",
            "v": 65,
            "t": 1651236101
        },
        {
            "n": "current",
            "v": 520,
            "t": 1651236101
        },
        {
            "n": "product",
            "sv": "A24",
            "t": 1651236101
        },
        {
            "n": "run",
            "bv": true,
            "t": 1651236101
        }
    ]
}
Where n is the measure name, t is the unix time (see here for more info), v is a numeric value, sv is a string value and bv is a boolean value.
A SenML representation of your data should be posted as follows:
POST /v1/hub/mappings/{mappingId}/data HTTP/1.1
Host: api.senseye.io
Authorization: Bearer your_access_token
Content-Type: application/json
{
    "e": [{
        "n": "temperature",
        "v": 65,
        "t": 1651236101
    }, {
        "n": "current",
        "v": 520,
        "t": 1651236101
    }, {
        "n": "product",
        "sv": "A24",
        "t": 1651236101
    }, {
        "n": "run",
        "bv": true,
        "t": 1651236101
    }]
}
POST /v1/hub/sensors/{sensorId}/data HTTP/1.1
Host: api.senseye.io
Authorization: Bearer your_access_token
Content-Type: application/json
{
    "e": [{
        "n": "temperature",
        "v": 65,
        "t": 1651236101
    }, {
        "n": "current",
        "v": 520,
        "t": 1651236101
    }, {
        "n": "product",
        "sv": "A24",
        "t": 1651236101
    }, {
        "n": "run",
        "bv": true,
        "t": 1651236101
    }]
}