Skip to content

设备管理

设备是数据采集和控制的核心单元。每个设备可以配置多个因子(数据点),用于采集传感器数据或控制执行器。

重要提示

设备不支持通过 API 直接创建,只能通过绑定接口将已有设备添加到项目中。

接口概览

方法端点描述
GET/api/v2/projects/{project_id}/devices/获取项目下的设备列表
GET/api/v2/projects/{project_id}/devices/{id}/获取设备详情
PUT/api/v2/projects/{project_id}/devices/{id}/更新设备信息
POST/api/v2/projects/{project_id}/devices/bind/绑定设备
POST/api/v2/projects/{project_id}/devices/{id}/unbind/解绑设备
POST/api/v2/projects/{project_id}/devices/{id}/set-project/移动设备到其他项目
GET/api/v2/projects/{project_id}/devices/{id}/data/获取设备实时数据
POST/api/v2/projects/{project_id}/devices/{id}/reboot/重启设备

设备对象

字段类型描述
idinteger设备主键(内部 ID)
serial_numberstring设备序列号(唯一值)
device_namestring设备名称
agri_idstring设备内部标识符
infostring设备描述
statusinteger设备状态码
is_onlineboolean是否在线
is_debugboolean是否开启调试模式
has_thresholdsboolean是否配置了阈值告警
bind_timestring绑定时间
connect_timestring最后连接时间
create_timestring创建时间
projectobject所属项目信息
base_deviceobject设备型号信息

base_device 对象

字段类型描述
namestring型号名称
modelstring型号编号
imagestring型号图片 URL
propertyinteger设备属性位标志

获取设备列表

获取指定项目下的所有设备。

GET /api/v2/projects/{project_id}/devices/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

响应示例

json
[
    {
        "id": 16872,
        "serial_number": "ABCD1234",
        "device_name": "温湿度采集器",
        "agri_id": "d-1000-abcd1234",
        "info": "1号温室",
        "status": 100,
        "is_online": true,
        "is_debug": false,
        "has_thresholds": true,
        "bind_time": "2025-02-13T07:42:50Z",
        "connect_time": "2025-03-21T06:42:20Z",
        "create_time": "2024-01-13T12:14:40Z",
        "project": {
            "name": "智慧农业项目",
            "project_id": "proj_abcdefghij"
        },
        "base_device": {
            "id": 16,
            "name": "4G数据采集器",
            "model": "Y201",
            "image": "https://example.com/y201.png",
            "property": 63
        }
    }
]

代码示例

python
import requests

API_BASE = "https://dl.yengear.com/api/v2"
ACCESS_TOKEN = "your_access_token"

def get_devices(project_id):
    """获取项目下的设备列表"""
    response = requests.get(
        f"{API_BASE}/projects/{project_id}/devices/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.json()

# 调用示例
devices = get_devices("proj_abcdefghij")
for device in devices:
    status = "在线" if device["is_online"] else "离线"
    print(f"{device['device_name']}: {status}")
bash
curl -X GET "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/" \
     -H "Authorization: Bearer your_access_token"

获取设备详情

获取指定设备的详细信息。

GET /api/v2/projects/{project_id}/devices/{id}/

路径参数

参数类型必填描述
project_idstring项目唯一标识符
idinteger/string设备主键或设备 ID

提示

id 参数支持设备主键(整数)或设备 ID(字符串)两种格式。

响应示例

json
{
    "id": 16872,
    "serial_number": "ABCD1234",
    "device_name": "温湿度采集器",
    "agri_id": "d-1000-abcd1234",
    "info": "1号温室",
    "status": 100,
    "is_online": true,
    "is_debug": false,
    "has_thresholds": true,
    "device_config": {},
    "bind_time": "2025-02-13T07:42:50Z",
    "connect_time": "2025-03-21T06:42:20Z",
    "create_time": "2024-01-13T12:14:40Z",
    "project": {
        "name": "智慧农业项目",
        "project_id": "proj_abcdefghij"
    },
    "base_device": {
        "id": 16,
        "name": "4G数据采集器",
        "model": "Y201",
        "image": "https://example.com/y201.png",
        "property": 63
    }
}

错误响应

状态码描述
404设备不存在

更新设备

更新设备的基本信息。

PUT /api/v2/projects/{project_id}/devices/{id}/

路径参数

参数类型必填描述
project_idstring项目唯一标识符
idinteger/string设备主键或设备 ID

请求参数

参数类型必填描述
device_namestring设备名称
infostring设备描述
is_debugboolean是否开启调试模式

请求示例

json
{
    "device_name": "1号温室采集器",
    "info": "位于温室东侧"
}

响应示例

返回更新后的完整设备对象。

代码示例

python
def update_device(project_id, device_id, **kwargs):
    """更新设备信息"""
    response = requests.put(
        f"{API_BASE}/projects/{project_id}/devices/{device_id}/",
        headers={
            "Authorization": f"Bearer {ACCESS_TOKEN}",
            "Content-Type": "application/json"
        },
        json=kwargs
    )
    return response.json()

# 调用示例
updated = update_device(
    "proj_abcdefghij", 
    16872, 
    device_name="新名称",
    info="新描述"
)
bash
curl -X PUT "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/16872/" \
     -H "Authorization: Bearer your_access_token" \
     -H "Content-Type: application/json" \
     -d '{"device_name": "新名称", "info": "新描述"}'

绑定设备

将设备绑定到指定项目。绑定时需要提供设备 ID 和安全码。

POST /api/v2/projects/{project_id}/devices/bind/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

请求参数

参数类型必填描述
serial_numberstring设备序列号
safe_codestring设备安全码

请求示例

json
{
    "serial_number": "ABCD1234",
    "safe_code": "123456"
}

响应示例

成功绑定后返回设备对象。

错误响应

状态码错误信息描述
400设备已添加至其他项目设备已被其他项目绑定
404设备不存在或安全码错误设备 ID 或安全码不正确

代码示例

python
def bind_device(project_id, serial_number, safe_code):
    """绑定设备到项目"""
    response = requests.post(
        f"{API_BASE}/projects/{project_id}/devices/bind/",
        headers={
            "Authorization": f"Bearer {ACCESS_TOKEN}",
            "Content-Type": "application/json"
        },
        json={
            "serial_number": serial_number,
            "safe_code": safe_code
        }
    )
    return response.json()

# 调用示例
device = bind_device("proj_abcdefghij", "ABCD1234", "123456")
print(f"设备绑定成功: {device['device_name']}")
bash
curl -X POST "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/bind/" \
     -H "Authorization: Bearer your_access_token" \
     -H "Content-Type: application/json" \
     -d '{"serial_number": "ABCD1234", "safe_code": "123456"}'

解绑设备

将设备从项目中解绑。解绑后设备将不再属于任何项目。

POST /api/v2/projects/{project_id}/devices/{id}/unbind/

路径参数

参数类型必填描述
project_idstring项目唯一标识符
idinteger/string设备主键或设备 ID

响应

成功解绑返回 HTTP 状态码 204 No Content

代码示例

python
def unbind_device(project_id, device_id):
    """解绑设备"""
    response = requests.post(
        f"{API_BASE}/projects/{project_id}/devices/{device_id}/unbind/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.status_code == 204

# 调用示例
if unbind_device("proj_abcdefghij", 16872):
    print("设备已解绑")
bash
curl -X POST "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/16872/unbind/" \
     -H "Authorization: Bearer your_access_token"

移动设备到其他项目

将设备移动到同一组织下的其他项目。

POST /api/v2/projects/{project_id}/devices/{id}/set-project/

路径参数

参数类型必填描述
project_idstring当前项目唯一标识符
idinteger/string设备主键或设备 ID

请求参数

参数类型必填描述
project_idstring目标项目的唯一标识符

请求示例

json
{
    "project_id": "proj_newproject"
}

响应示例

返回更新后的设备对象。

错误响应

状态码错误信息描述
400项目ID不能为空未提供目标项目 ID
400项目不存在或不属于当前组织目标项目无效

获取设备实时数据

获取设备下所有因子的最新数据。

GET /api/v2/projects/{project_id}/devices/{id}/data/

路径参数

参数类型必填描述
project_idstring项目唯一标识符
idinteger/string设备主键或设备 ID

响应示例

json
[
    {
        "agri_id": "d-1000-abcd1234-1-00",
        "value": 25.6,
        "the_type": 100,
        "unit": "℃",
        "t": 1711008140
    },
    {
        "agri_id": "d-1000-abcd1234-1-01",
        "value": 65.2,
        "the_type": 101,
        "unit": "%RH",
        "t": 1711008140
    }
]

响应字段

字段类型描述
agri_idstring因子内部标识符
valuenumber当前数值
the_typeinteger因子类型
unitstring数据单位
tinteger数据时间戳(Unix 时间戳,秒)

代码示例

python
def get_device_data(project_id, device_id):
    """获取设备实时数据"""
    response = requests.get(
        f"{API_BASE}/projects/{project_id}/devices/{device_id}/data/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.json()

# 调用示例
data = get_device_data("proj_abcdefghij", 16872)
for item in data:
    print(f"{item['agri_id']}: {item['value']} {item.get('unit', '')}")
bash
curl -X GET "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/16872/data/" \
     -H "Authorization: Bearer your_access_token"

重启设备

向设备发送重启命令。

POST /api/v2/projects/{project_id}/devices/{id}/reboot/

路径参数

参数类型必填描述
project_idstring项目唯一标识符
idinteger/string设备主键或设备 ID

响应示例

json
{
    "message": "重启命令已发送"
}

错误响应

状态码错误信息描述
400设备不支持重启功能该设备型号不支持远程重启
503设备离线或网关连接失败无法连接到设备

注意

重启命令为异步操作,返回成功仅表示命令已发送,不代表设备已完成重启。

代码示例

python
def reboot_device(project_id, device_id):
    """重启设备"""
    response = requests.post(
        f"{API_BASE}/projects/{project_id}/devices/{device_id}/reboot/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.json()

# 调用示例
result = reboot_device("proj_abcdefghij", 16872)
print(result["message"])
bash
curl -X POST "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/devices/16872/reboot/" \
     -H "Authorization: Bearer your_access_token"