数据流 API

数据流 API

概述

本文主要描述了如何对数据流进行管理和查询.

数据流是指设备主动上报的某种类型的数据点的集合, 比如室内温度.

版本

V2.1

作者

@author ChengZhen

修改历史

2018/10/12

2018/9/28

REST API 接口

服务器地址:

http://{domain-name}/v2/stream/

所有 API 接口必须以此地址为基本地址

查询数据点列表

GET /stream/list

请求参数

NAME REQ TYPE DEFAULT DESCRIPTION
offset - Number 0 开始返回的记录的索引 (用于分页查询)
limit - Number 100 最多返回的记录数,最大不能设置超过 10000
order - String asc 排序方式 (asc, desc)
orderBy - String time 排序字段名, 目前只支持 time 字段排序
did true String - 设备 ID , 如果没有指定则为设备的 MAC 地址
name true String - 数据流名称, 如果没有指定则为产品的编码 (Key)
field - String value 数据字段名称, 产品属性名, 多个名称以 , 分隔
tid - String - 标签 ID (MAC)
start - Number - 开始时间, UINX 时间戳, 单位为毫秒
end - Number now 结束时间, UINX 时间戳, 单位为毫秒
duration - String 1h 查询时长.

查询时长 duration 支持的单位有:

TYPE NOTE
w
d
h 小时
m 分钟
s

时间段条件规则:

响应结果:

返回数据流中符合查询条件的数据点的列表.

{
    "did": String,      // 设备 ID (ObjectId)
    "name": String,     // 数据流名称
    "start": Number,    // 开始时间
    "end": Number,      // 结束时间
    "data": {           // 数据内容
        "columns": [String],    // 数据点列表列名, 和数据点中的值一一对应
        "values": [[Any]]       // 数据点的值, 和列名列表中的名称一一对应
    }
}

示例 (温度数据流)

请求

GET /stream/list?did=59a373913033836125e68907&name=humiture&field=temperature

应答

{
    "did": "59a373913033836125e68907",
    "name": "humiture",
    "field": "temperature",
    "start": 1538137806794,
    "end": 1538141406794,
    "data": {
        "columns": ["at", "temperature"], // 第 1 列为时间戳, 第 2 列为温度值
        "values": [
            [1538141031055, 25.5], // 第 1 个数据点, 时间戳为 1538141031055, 温度值为 25.5
            [1538141033702, 25.6], // 第 2 个数据点
            [1538141037463, 25.7], // 第 3 个数据点
        ]
    }
}

错误信息:

CODE MESSAGE NOTE
100401 Unauthorized 用户没有登录, 或身份没有认证
100403 Permission denied 禁止访问, 没有相应的权限
104001 Miss required parameter 缺失必选参数,请参考API文档
100107 Invalid time range 无效的时间段
100108 Invalid device ID 无效的设备 ID
100109 Invalid data stream name 无效的数据流名称

数据流统计

GET /stream/stat

请求参数

NAME REQ TYPE DEFAULT DESCRIPTION
did true String - 设备 ID, 如果没有指定则为设备的 MAC 地址
name true String - 数据流名称, 如果没有指定则为产品的编码 (Key)
field - String value 数据字段名称, 产品属性名, 多个名称以 ,分隔
fields - String - 多个名称以 ,分隔
tid - String - 标签 ID (MAC)
interval - String 1m 统计时间分组 (包含时间单位)
method - String avg 统计方法 (聚合函数), 多个方法以 ,分隔
fill - String null 空记录填充模式
start - Number - 开始时间, UINX 时间戳, 单位为毫秒
end - Number now 结束时间, UINX 时间戳, 单位为毫秒
duration - String 1h 查询时间长度 (包含时间单位)

field 字段名

要查询的字段名,即事物的属性名

duration 时间段

时间段条件规则和 /stream/list 类似

建议的值有 (duration - interval):

interval 聚合间隔

统计时将对每个时间段内的数据进行聚合计算, 聚合为一个数据点, 以降低数据采样率, 以免返回数据过长

支持的统计分组间隔时间单位有: s, m, h, d

建议的值有:

method 聚合方法

统计时对每个时间分组内的数据进行聚合计算的方法

支持的聚合方法有:

Method Type Note
avg/mean 聚合函数 平均值
median 聚合函数 中间值
count 聚合函数 数量
min 选择函数 最小值
max 选择函数 最大值
sum 聚合函数 总数
first 选择函数 第一个值
last 选择函数 最后一个值
spread 聚合函数 极差,最大值和最小值的差值
mode 聚合函数 最频繁值
stddev 聚合函数 标准差
integral 聚合函数 积分

fill 聚合空记录填充模式

当某个时间段内没有任何数据时的填充方法

支持的空记录填充模式有:

Method Note
previous 填充先前时间段的值
linear 线性插值的方式填充
null 填充 null
none 不填充, 即在结果集中不包含这个时间段
number 填充一个指定的数字, 默认填充 0

响应结果:

{
    "did": String,          // 设备 ID (ObjectId)
    "name": String,         // 数据流名称
    "start": Number,        // 开始时间
    "end": Number,          // 结束时间
    "method": String,       // 聚合方法
    "fill": String,         // 填充模式
    "interval": String,     // 聚合周期
    "data": {               // 统计数据点, 格式和 /stream/list 响应结果类似
        "columns": [String],
        "values": [[Any]]
    }
}

示例 (温度数据流)

请求

GET /stream/list?did=59a373913033836125e68907&name=humiture&field=temperature&method=min&interval=1m

应答

{
    "did": "59a373913033836125e68907",
    "name": "humiture",
    "field": "temperature",
    "start": 1538137806794,
    "end": 1538141406794,
    "method": "min",
    "interval": "1m",
    "data": {
        "columns": ["at", "temperature"], // 第 1 列为时间戳, 第 2 列为温度值
        "values": [
            [1538141031000, 25.5], // 第 1 个时间段统计数据点, 开始时间为 1538141031000, 最小温度值为 25.5, 最大温度值为 25.7
            [1538141033000, 25.1], // 第 2 个时间段统计数据点
            [1538141037000, 25.0], // 第 3 个时间段统计数据点
        ]
    }
}

错误信息:

CODE MESSAGE NOTE
100401 Unauthorized 用户没有登录, 或身份没有认证
100403 Permission denied 禁止访问, 没有相应的权限
104001 Miss required parameter 缺失必选参数,请参考API文档
100107 Invalid time range 无效的时间段
100108 Invalid device ID 无效的设备 ID
100109 Invalid data stream name 无效的数据流名称
100110 Invalid method name 无效的聚合模式, 如离散数据只支持 count 等操作
100111 Invalid interval 无效的聚合周期

查询历史属性值

GET /stream/get

查询指定的设备,指定时间的属性值

请求参数

NAME REQ TYPE DEFAULT DESCRIPTION
did true String - 设备 ID, 如果没有指定则为设备的 MAC 地址
name true String - 数据流名称, 如果没有指定则为产品的编码 (Key)
field - String value 数据字段名称, 产品属性名, 多个名称以 ,分隔
fields - String - 多个名称以 ,分隔
tid - String - 标签 ID (MAC)
start - Number - 开始时间, UINX 时间戳, 单位为毫秒
end - Number now 结束时间, UINX 时间戳, 单位为毫秒
duration - String 1h 查询时间长度 (包含时间单位)

响应结果:

{
    "did": String,          // 设备 ID (ObjectId)
    "name": String,         // 数据流名称
    "start": Number,        // 开始时间
    "end": Number,          // 结束时间
    "data": {               // 统计数据点
        "foo": Number
    }
}