应用长连接是提供点对点通信的服务,可实现应用设备数据的实时获取和控制命令下发,适用于设备操作频繁,对交互性、时效性要求比较高的应用场景,如智能家居APP、大屏应用等,可以减少网络请求次数和流量开销。
应用长连接采用MQTT协议进行通信,每个应用客户端作为一个MQTT Client,平台作为MQTT Server,通信流程可概括为建立连接、订阅主题、接收消息并处理、发布消息四个步骤。
应用长连接支持标准 MQTT V3.1.1 版本,接入服务地址如下:
| 地址 | 端口 | 证书 | 说明 |
|---|---|---|---|
| 183.230.102.116 | 25002 | - | tcp非加密端口 |
应用客户端与平台建立连接时,平台会对MQTT Client设置的clienid,username,password参数信息进行鉴权,目前平台支持用户维度和项目分组维度两种鉴权方式。鉴权参数如下表所示:
| 参数 | 说明 |
|---|---|
| clientid | 应用客户端自定义,每个clientid在平台保持唯一,避免信息重复可不设置,由系统自动生成 |
| username | 目前支持两种类型:
基于用户权限订阅 userid/{userId} 基于项目分组订阅 projectid/{projectId}/groupid/{groupId} 项目ID、分组ID作为变量参数 |
| password | 安全鉴权参数,username参数值作为安全鉴权计算中的res策略值参与运算 |
客户端只能订阅当前账号权限下的设备主题,服务提供主题列表如下所示:
| TOPIC | 说明 | 可订阅 | 可发布 |
|---|---|---|---|
| $sys/{productId}/{deviceName}/thing/lifecycle | 设备生命周期状态更改 | √ | |
| $sys/{productId}/{deviceName}/thing/property | 设备属性上报 | √ | |
| $sys/{productId}/{deviceName}/thing/event | 设备事件上报 | √ | |
| $sys/{productId}/{deviceName}/thing/property/set | 设备属性设置 | √ | |
| $sys/{productId}/{deviceName}/thing/property/desired/set | 设备属性期望值设置 | √ | |
| $sys/{productId}/{deviceName}/thing/property/set/reply | 设备属性设置响应 | √ |
Topic:$sys/{productId}/{deviceName}/thing/lifecycle
Message:{
"productId": "00001",
"deviceName": "iot-0001",
"messageType": "lifecycle",
"data": {
"status": "online",
"time": 1524448722123
}
}
Topic:$sys/{product_id}/{device_name}/thing/property
Message: {
"productId": "00001",
"deviceName": "iot-0001",
"messageType": "notify",
"notifyType": "property",
"data": {
"id": "12345",
"params": {
"Power": {
"value": "on",
"time": 1524448722123
},
"WF": {
"value": 23.6,
"time": 1524448722123
}
}
}
}
Topic:$sys/{product_id}/{device_name}/thing/event
Message: {
"productId": "00001",
"deviceName": "iot-0001",
"messageType": "notify",
"notifyType": "event",
"data": {
"id": "123",
"version": "1.0",
"params": {
"identifier1":{
"value": {
"Power": "on",
"WF": "2"
},
"time": 1524448722123
},
"identifier2": {
"value": {
"Power": "on",
"WF": "2"
},
"time": 1524448722123
}
}
}
}
Topic:$sys/{product_id}/{device_name}/thing/property/set
Message: {
"requestId": "8906582E6722409AA6C40E7863B733A5",
"data": {
"version": "1.0", // 可选,不填默认为1.0
"params": { // 属性设置,必须为对
"temperature":"30.5"
}
}
}
Topic:$sys/{product_id}/{device_name}/thing/property/desired/set
Message: {
"requestId": "8906582E6722409AA6C40E7863B733A5",
"data": {
"version": "1.0", // 可选,不填默认为1.0
"params": { // 属性设置,必须为对
"temperature":"30.5"
}
}
}
Topic:$sys/{product_id}/{device_name}/thing/property/set/reply
成功响应:
{
"requestId": "8906582E6722409AA6C40E7863B733A5", //用户自定义id
"success": true,
}
失败响应:
{
"requestId": "8906582E6722409AA6C40E7863B733A5",
"code": "deviceNotFound",
"msg": "device does not exist",
"success": false
}