平台提供 WebSocket 方式订阅消息的功能,可以通过 WebSocket 来订阅设备、规则、告警等相关消息。
建立连接
WebSocket 统一接口为:/api/messaging/{token}
, token
可通过登录超级设备管理平台获取 。
订阅消息
- 生成随机13位数
js
randomNum = Math.random().toFixed(13).slice(-13)
randomNum = Math.random().toFixed(13).slice(-13)
- 向 Websocket 发送消息,格式为:
json
{
"type": "sub", //固定为 sub
"topic": "topic", // topic ,见 topic 列表
"parameter": {}, //参数,不同的订阅请求,支持的参数不同
"id": "request-id" + randomNum //请求 Id ,服务端在推送消息时,会将此标识一并返回
}
{
"type": "sub", //固定为 sub
"topic": "topic", // topic ,见 topic 列表
"parameter": {}, //参数,不同的订阅请求,支持的参数不同
"id": "request-id" + randomNum //请求 Id ,服务端在推送消息时,会将此标识一并返回
}
在取消订阅之前,多次传入相同的id是无效的,不会重复订阅。
取消订阅
向 WebSocket 发送消息,格式为:
json
{
"type":"unsub", //固定为 unsub
"id": "request-id" //与订阅请求 Id 一致
}
{
"type":"unsub", //固定为 unsub
"id": "request-id" //与订阅请求 Id 一致
}
示例
以前端 html 为例,建立连接以及订阅设备属性上报的代码如下:
html
<html>
<script>
var url = "wss://console.kaihong.com/api/messaging/{token}";
var ws = new WebSocket(url);
ws.onclose = function (e) {
console.log(e)
};
ws.onmessage = function (e) {
console.log(e.data)
}
var json = {
"type": "sub", // 固定为 sub
"topic": "/device/{productId}/{deviceId}/message/property/report", // 指定设备属性上报的 topic
"parameter": {}, // 订阅的参数
"id": "request-id-" + Math.random().toFixed(13).slice(-13) // 请求 id
};
ws.onopen = function (e) {
console.log("open start");
console.log(JSON.stringify(json))
ws.send(JSON.stringify(json))
console.log("open end")
}
</script>
</html>
<html>
<script>
var url = "wss://console.kaihong.com/api/messaging/{token}";
var ws = new WebSocket(url);
ws.onclose = function (e) {
console.log(e)
};
ws.onmessage = function (e) {
console.log(e.data)
}
var json = {
"type": "sub", // 固定为 sub
"topic": "/device/{productId}/{deviceId}/message/property/report", // 指定设备属性上报的 topic
"parameter": {}, // 订阅的参数
"id": "request-id-" + Math.random().toFixed(13).slice(-13) // 请求 id
};
ws.onopen = function (e) {
console.log("open start");
console.log(JSON.stringify(json))
ws.send(JSON.stringify(json))
console.log("open end")
}
</script>
</html>
若使用http进行私有化部署,则url替换如下:
html
var url = "ws://域名/api/messaging/{token}";
var url = "ws://域名/api/messaging/{token}";
url 为 WebSocket 的地址,其中:
ip
:部署的超级设备管理平台的 IP 地址port
:部署的超级设备管理平台前端的端口号token
:登录超级设备管理平台获取的 token
/device/{productId}/{deviceId}/message/property/report
为订阅指定设备属性上报的 Topic ,其中,productId
和deviceId
为设备的产品 Id 和设备 Id 。具体的 topic 列表参见 Topic列表。
如果认证失败,会立即返回消息并且断开连接,消息格式如下:
json
{
"message":"认证失败",
"type":"authError"
}
{
"message":"认证失败",
"type":"authError"
}