Skip to content

因子数据

因子数据是设备各个数据点采集的历史记录,通过因子数据API,您可以查询设备的历史数据。

获取因子数据

http
GET /api/v2/devices/{device_id}/factors/{factor_id}/data/

接口说明

获取指定设备指定因子的历史数据,支持分页和时间范围过滤。

请求参数

参数类型必填说明
device_idinteger设备ID
factor_idinteger因子ID
pageinteger页码,从1开始,默认1
page_sizeinteger每页数量,默认50
min_timestampinteger最小时间戳(秒),只返回该时间戳之后的数据,默认使用数据保留期限制

响应

返回数据 (200 OK)

json
{
    "success": true,
    "data": {
        "total": 100,           // 总记录数
        "data": [
            {
                "agri_id": "DEVICE001-1-00",  // 因子ID
                "v": 25.6,                    // 数值
                "t": 1641715200              // UTC时间戳(秒)
            },
            // ...更多数据
        ]
    },
    "error": null
}

响应参数

字段类型说明
totalinteger符合条件的记录总数
dataarray数据记录列表
data[].agri_idstring因子内部ID
data[].vnumber数据值
data[].tintegerUTC时间戳(秒)

代码示例

Python
python
def get_factor_data(device_id, factor_id, page=1, page_size=50, min_timestamp=None):
    """获取因子历史数据
    
    Args:
        device_id: 设备ID
        factor_id: 因子ID
        page: 页码,从1开始,默认1
        page_size: 每页数量,默认50
        min_timestamp: 最小时间戳(秒),只返回该时间戳之后的数据
    """
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}"
    }
    
    params = {
        "page": page,
        "page_size": page_size
    }
    
    if min_timestamp:
        params["min_timestamp"] = min_timestamp
    
    url = f"{API_BASE}/devices/{device_id}/factors/{factor_id}/data/"
    response = requests.get(url, headers=headers, params=params)
    return response.json()

# 使用示例
device_id = 1
factor_id = 2
min_timestamp = 1704758400  # 2024-01-09 00:00:00 UTC
data = get_factor_data(device_id, factor_id, min_timestamp=min_timestamp)
print(f"获取到 {data['data']['total']} 条数据记录")
cURL
bash
curl -X GET "https://ums.holdingbyte.com/api/v2/devices/1/factors/2/data/?page=1&page_size=50&min_timestamp=1704758400" \
     -H "Authorization: Bearer your_access_token"

说明

  • 返回指定因子的历史数据,按时间倒序排列
  • 数据保留期为90天
  • 接口有缓存,缓存时间为5分钟

提示

t字段为UTC时间戳(秒),可根据需要自行转换为本地时间显示。

通过因子内部ID获取数据

http
GET /api/v2/factors/{factor_agri_id}/data/

接口说明

通过因子的内部ID(agri_id)直接获取因子的历史数据,适用于已知因子内部ID的场景。

请求参数

参数类型必填说明
factor_agri_idstring因子完整ID,如 "xxxxx-1-00"
pageinteger页码,从1开始,默认1
page_sizeinteger每页数量,默认50
min_timestampinteger最小时间戳(UTC时间,秒),只返回该时间戳之后的数据,默认使用数据保留期限制

响应

返回数据 (200 OK)

json
{
    "success": true,
    "data": {
        "total": 100,           // 总记录数
        "data": [
            {
                "agri_id": "DEVICE001-1-00",  // 因子ID
                "v": 25.6,                    // 数值
                "t": 1641715200              // UTC时间戳(秒)
            },
            // ...更多数据
        ]
    },
    "error": null
}

响应参数

字段类型说明
totalinteger符合条件的记录总数
dataarray数据记录列表
data[].agri_idstring因子内部ID
data[].vnumber数据值
data[].tintegerUTC时间戳(秒)

代码示例

Python
python
def get_factor_data_by_agri_id(factor_agri_id, page=1, page_size=50, min_timestamp=None):
    """通过因子内部ID获取历史数据
    
    Args:
        factor_agri_id: 因子内部ID
        page: 页码,从1开始,默认1
        page_size: 每页数量,默认50
        min_timestamp: 最小时间戳(秒),只返回该时间戳之后的数据
    """
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}"
    }
    
    params = {
        "page": page,
        "page_size": page_size
    }
    
    if min_timestamp:
        params["min_timestamp"] = min_timestamp
    
    url = f"{API_BASE}/factors/{factor_agri_id}/data/"
    response = requests.get(url, headers=headers, params=params)
    return response.json()

# 使用示例
factor_agri_id = "DEVICE001-1-00"
min_timestamp = 1704758400  # 2024-01-09 00:00:00 UTC
data = get_factor_data_by_agri_id(factor_agri_id, min_timestamp=min_timestamp)
print(f"获取到 {data['data']['total']} 条数据记录")
cURL
bash
curl -X GET "https://ums.holdingbyte.com/api/v2/factors/DEVICE001-1-00/data/?page=1&page_size=50&min_timestamp=1704758400" \
     -H "Authorization: Bearer your_access_token"

说明

  • 返回指定因子的历史数据,按时间倒序排列
  • 数据保留期为90天
  • 接口有缓存,缓存时间为5分钟

错误响应

错误响应

因子数据API可能返回的错误响应遵循统一的格式。有关详细的错误码和处理方法,请参阅API错误响应文档。

错误响应示例

json
{
    "success": false,
    "data": null,
    "error": {
        "code": 404,
        "message": "因子不存在"
    }
}