使用websocket订阅平台相关消息

    websocket统一接口为: /messaging/{token}, {token}可通过登录系统或者使用OpenAPI获取.

    以前端js为例:

    订阅消息

    向websocket发送消息,格式为:

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/device/*/*/**", // topic,见topic列表.
    4. "parameter": { //参数,不同的订阅请求,支持的参数不同
    5. },
    6. "id": "request-id" //请求ID, 请求的标识,服务端在推送消息时,会将此标识一并返回.
    7. }

    注意

    在取消订阅之前,多次传入相同的id是无效的,不会重复订阅.

    平台推送消息:

    1. {
    2. "payload": //消息内容, topic不同,内容不同,
    3. "requestId": "request-id", //与订阅请求的id一致
    4. "topic": "/device/demo-device/test0/offline", //topic,实际产生数据的topic
    5. "type": "result" //类型 result:订阅结果 complete:结束订阅 error:发生错误
    6. }

    提示

    type为complete时标识本此订阅已结束,通常是订阅有限数据流时(比如发送设备指令),或者取消订阅时会返回此消息.

    取消订阅

    向websocket发送消息,格式为:

    1. {
    2. "type":"unsub",//固定为unsub
    3. "id": "request-id" //与订阅请求ID一致
    4. }

    发送设备指令

    发送消息到websocket

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/device-message-sender/demo-device/test0,test1", // 发送消息给demo-device型号下的test0和test1设备
    4. "parameter": {
    5. // 消息类型,支持: READ_PROPERTY (读取属性),WRITE_PROPERTY (修改属性),INVOKE_FUNCTION (调用功能)
    6. "messageType":"READ_PROPERTY"
    7. //根据不同的消息,参数也不同. 具体见: 平台统一消息定义
    8. "properties":["temperature"],
    9. "headers":{
    10. "async":false // 是否异步,异步时,平台不等待设备返回指令结果.
    11. }
    12. },
    13. "id": "request-id" //请求ID, 请求的标识,服务端在推送消息时,会将此标识一并返回.
    14. }

    平台将推送设备返的结果:

    提示

    支持*和逗号,分割,批量发送消息到设备.如: /device-message-sender/{productId}/{deviceId}. 如果要终止发送,直接取消订阅即可.

    批量同步设备状态

    发送消息到websocket

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/device-batch/state-sync",
    4. "parameter": {
    5. "query":{"where":"productId is test-device"}//查询条件为动态查询条件
    6. },
    7. "id": "request-id" //请求ID, 请求的标识,服务端在推送消息时,会将此标识一并返回.
    8. }

    平台推送:

    1. {
    2. "payload": { //请求消息类型不同,结果不同
    3. "deviceId": "test0",
    4. "state": {
    5. "value":"offline",
    6. "text":"离线"
    7. }
    8. },
    9. "requestId": "request-id", //订阅请求的ID
    10. "topic": "/device-batch/state-sync",
    11. "type": "result" //为comlete是则表示同步完成.
    12. }

    订阅仪表盘数据:

    topic: /dashboard/{dashboard}/{object}/{measurement}/{dimension}

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/dashboard/device/demo-device/property/agg", //聚合查询属性
    4. "parameter": {
    5. "deviceId":"test0", //
    6. "limit":"30",
    7. "time":"1d",
    8. "agg":"avg",
    9. "from":"now-30d",
    10. "to":"now",
    11. },
    12. }

    TIP

    订阅引擎事件数据

    发送消息到websocket

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/rule-engine/{instanceId}/{nodeId}/event/{event}",
    4. "parameter": {},
    5. "id": "request-id" //请求ID, 请求的标识,服务端在推送消息时,会将此标识一并返回.
    6. }

    平台推送:

    event说明

    error: 执行节点错误

    1. {
    2. message:"错误消息",
    3. stack:"异常栈信息",
    4. type::"错误类型"
    5. }

    result: 节点数据输出 complete: 执行节点完成

    订阅设备告警数据

    发送消息到websocket

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/rule-engine/device/alarm/{productId}/{deviceId}/{alarmId}",
    4. "parameter": {},
    5. "id": "request-id" //请求ID, 请求的标识,服务端在推送消息时,会将此标识一并返回.
    6. }

    平台推送:

    1. {
    2. "payload": { //告警相关数据
    3. "deviceId": "设备ID",
    4. "deviceName": "设备名称",
    5. "alarmId": "告警ID",
    6. "alarmName": "告警名称"
    7. //...其他告警数据
    8. },
    9. "requestId": "request-id", //订阅请求的ID
    10. "topic": "/rule-engine/device/alarm/{productId}/{deviceId}/{alarmId}",
    11. "type": "result" //为comlete是则表示订阅结束.
    12. }

    发送消息到websocket

    1. {
    2. "type": "sub", //固定为sub
    3. "topic": "/scene/{alarmId}",
    4. "parameter": {},
    5. }

    平台推送: