CoAP 上下行对接指南
DTS服务(Digital Twin Service)提供了轻量化的 CoAP(Constrained Application Protocol)接入网关。本文档旨在帮助物联网设备端开发者与第三方系统集成商,快速理解并实现基于 CoAP 协议的双向数据互通。
协议说明
DTS服务的 CoAP 接入方案支持上行数据采集与下行控制调用两个方向的双向通信:
- 上行通信:终端设备或第三方边缘系统作为 CoAP 客户端,主动向 DTS服务的 CoAP 服务端(Server)发起请求,上报属性遥测、事件告警或设备基础数据。
- 下行通信:DTS服务作为 CoAP 客户端,主动向第三方部署的 CoAP 服务端(Server)下发请求,执行产品定义的服务调用或反控指令。
[!WARNING] 当前版本的 CoAP 网关通道不支持 DTLS 安全传输,亦不支持流式响应(Observe 订阅模式/分块传输)。通信采用标准非加密的 UDP 传输,报文最大建议在 MTU 限制(1280 字节)内,避免网络碎片化导致数据丢包。
上行接入地址
终端设备或第三方系统向上行上报数据时,请使用以下 CoAP 统一资源路径(URI)规范:
coap://{gatewayHost}:5683/up/{productId}/{method}
参数详细说明如下:
| 参数 | 类型 | 说明 |
|---|---|---|
gatewayHost |
String | 网关服务的主机地址或 IP 地址。 |
productId |
String | 在 DTS服务中定义的产品全局唯一标识符(Product ID)。 |
method |
Integer | 数据上报类型: - 0:属性遥测上报(如温度、湿度等连续状态)- 1:事件告警上报(如设备开门、离线告警等突发状态)- 2:设备基本信息注册上报(向平台动态同步设备实例) |
属性上报
属性上报用于高频或定期同步设备实时的遥测指标及状态数据。
- 请求地址:
text coap://{gatewayHost}:5683/up/{productId}/0 - 请求方式:
POST - Payload 格式:
application/json - 请求体示例:
json { "deviceId": "device-001", "temperature": 4.5, "humidity": 62, "timestamp": 1782479141200 }字段说明:deviceId为终端物理设备唯一 ID,timestamp为毫秒级时间戳。其余字段(如temperature)需与平台的产品 Profile 属性定义严格对齐。 - 返回示例:
json { "code": 0, "message": "success" }返回码说明:code: 0标识网关成功接收并投递至 DTS服务解析引擎。
事件上报
事件上报用于呈报设备在运行过程中产生的特定业务事件、系统故障或用户操作记录。
- 请求地址:
text coap://{gatewayHost}:5683/up/{productId}/1 - 请求方式:
POST - Payload 格式:
application/json - 请求体示例:
json { "deviceId": "device-001", "eventCode": "door_open", "eventTime": 1782479141200, "status": "open" }字段说明:eventCode标识发生的事件类型编码,eventTime为事件发生时的毫秒级时间戳,其余字段为该事件的输出参数。 - 返回示例:
json { "code": 0, "message": "success" }
设备上报
设备上报(设备注册)用于向平台动态宣告新设备实体的上线,以实现免建档设备自动入库。
- 请求地址:
text coap://{gatewayHost}:5683/up/{productId}/2 - 请求方式:
POST - Payload 格式:
application/json -
请求体支持单设备对象或多设备数组。
-
单设备请求体示例:
json { "deviceId": "device-001", "deviceName": "测试设备001", "deviceStatus": 1, "timestamp": 1782479141200 } - 多设备批量请求体示例:
json [ { "deviceId": "device-001", "deviceName": "测试设备001", "deviceStatus": 1 }, { "deviceId": "device-002", "deviceName": "测试设备002", "deviceStatus": 0 } ]
上行数据格式说明
DTS服务网关层对 CoAP 上行 Payload 的数据格式支持以下两种处理机制:
- 标准数据格式:如果产品配置选择此模式,Payload 中字段名和数值必须与产品 Profile(本体模型)中定义的属性和事件标识符一一对应,网关将进行自动对齐解析。
- 定制数据格式(透传模式):当设备端报文格式不可修改时,设备只需保证上报的是合法 JSON。网关层会将报文送入关联的产品 JavaScript 消息解析脚本中,由脚本完成字段转换与特征取值映射。
下行服务配置
当需要通过 DTS服务主动对物理设备进行控制或调用其服务时,网关提供了 CoAP Client 代理功能。
首先,需在网关管理控制台中,为目标网关服务实例配置 CoAP 服务:
| 配置项 | 说明 | 示例 |
|---|---|---|
| 服务类型 | 协议类型 | CoAP |
| 服务地址 | 第三方 CoAP Server 接收请求的基准地址 | coap://127.0.0.1:19131/downlink |
| 请求方式 | 通信请求动作 | POST |
接着,在产品 Profile 定义的服务中,配置对应的动作路径。支持使用动态路由变量及参数占位符:
/qa/${route}?message=${message}
当触发服务调用时,网关会自动将 CoAP 服务基准地址与产品动作路径进行拼接,拼装出最终的 CoAP 请求路由:
coap://127.0.0.1:19131/downlink/qa/demo-route?message=hello
下行请求体
当下发控制指令时,DTS服务会将系统层面的服务调用参数组装为 CoAP Request Payload。
- 网关下发的 Payload 示例:
json { "route": "demo-route", "message": "hello" } - 第三方 CoAP 服务端处理完指令后返回的响应载荷必须是标准的 JSON 格式,网关会将其解析并作为服务调用回执返回给 DTS服务。
错误约定
网关在处理 CoAP 请求时,如果遇到以下非正常场景,会直接拦截并返回错误信息:
| 异常场景 | 错误处理结果 |
|---|---|
| 请求体不是合法的 JSON 字符串 | 网关拒绝处理,返回 Bad Request 响应码 |
请求路径中的 productId 不存在或网关未加载该产品模型 |
网关拦截,返回 NotFound 错误 |
请求路径末尾的 method 参数不是 0/1/2 |
网关拦截,返回 MethodNotAllowed 错误 |
| 下行 CoAP 服务配置中返回流式响应或需要分块长响应 | 中心侧校验拦截,拒绝保存配置或执行反控调用 |
最后编辑:北京-产品-yantings 更新时间:2026-07-07 18:14