# IoTPaaS应用侧API文档

# 目录

# 0. 修改历史

文档版本 说明 日期 修改人 涉及改动
v0.1 20211230 杨明 初始版本
v0.2 20220304 蔡成浩 接口补充
v0.3 20220314 蔡成浩 描述变更
v0.4 20220323 蔡成浩 MQTT数据订阅
v0.5 20220524 蔡成浩 物模型说明
v0.6 动参配置、设备标签、产品标签等 20220617 蔡成浩、谢湘翼 接口补充
v0.7 名词介绍、项目、空间接口 20220729 蔡成浩 文档接口补充

# 1. 关于IoT PaaS

# 1.1 产品简介

IoT PaaS服务于智慧社区、智慧园区、智慧城市等解决方案集成应用,对下通过设备直连、网关连接、第三方平台对接等方式,将海量设备数据采集上云,在云平台对数据进行存储、加工、处理,提供给解决方案进行快速组合封装。

平台是一个开放性的能力服务平台,其核心能力体现在设备接入、数据处理、应用能力和常用功能的标准化封装,支持多种物联网通讯协议:MQTT、HTTP等,支持海量接入终端传感、智能控制器等硬件设备。

# 1.2 方案架构

IoTPaaS framework

# 1.3 设备节点类型

节点类型分为:直连设备、网关设备、网关子设备。

  • 直连设备:支持设备按照MQTT或HTTP协议接入到IoT PaaS。

  • 网关设备:网关设备目前只支持MQTT协议接入。

  • 网关子设备:网关子设备不具备直接上云的能力,需要借助网关设备接入到IoT PaaS。

# 1.4 名词解释

名词 描述
产品 设备的集合,通常指一组具有相同功能的设备。IoT PaaS为每个产品颁发全局唯一的ProductKey。
设备 归属于某个产品下的具体设备。IoT PaaS为设备颁发产品内唯一的标识DeviceNumber。设备可以直接连接IoT PaaS,也可以作为子设备通过网关连接IoT PaaS。
分组 IoT PaaS支持建立设备分组,分组中可包含不同产品下的设备。通过设备组来进行跨产品管理设备。
网关 能够直接连接IoT PaaS的设备,且具有子设备管理功能,能够代理子设备连接云端。
子设备 本质上也是设备。子设备不能直接连接IoT PaaS,只能通过网关连接。
设备证书 设备证书指ProductKeyDeviceNumberDeviceSecret的组合。ProductKey:是IoT PaaS为产品颁发的全局唯一标识。该参数很重要,在设备认证以及通信中都会用到,因此需要您保管好。DeviceNumber:在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。该参数很重要,在设备认证以及通信中都会用到,因此需要您保管好。DeviceSecret:IoT PaaS为设备颁发的设备密钥,和DeviceNumber成对出现。该参数很重要,在设备认证时会用到,因此需要您保管好并且不能泄露。
ProductSecret 由IoT PaaS颁发的产品密钥,通常与ProductKey成对出现,可用于一型一密的认证方案。该参数很重要,需要您保管好,不能泄露。
标签 标签分为产品标签、设备标签。产品标签:描述同一个产品下,所有设备所具有的共性信息。设备标签:通常根据设备的特性为设备添加的特有标记,您可以自定义标签内容。
Vlink协议 IoT PaaS定义的设备与云端之间的通信协议。
物模型 是对设备在云端的功能描述,包括设备的属性、服务和事件。IoT PaaS通过定义一种物的描述语言来描述物模型,称之为TSL(即 Thing Specification Language),采用JSON格式,您可以根据TSL组装上报设备的数据。
属性 设备的功能模型之一,一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。属性支持GET和SET请求方式。应用系统可发起对属性的读取和设置请求。
期望属性值 通过期望属性值功能,设置您希望的设备属性值。若设备在线,将实时更新属性值;若设备离线,期望属性值将缓存在云端。设备上线后,获取期望属性值,并更新属性值。
服务 设备的功能模型之一,设备可被外部调用的能力或方法,可设置输入参数和输出参数。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。
事件 设备的功能模型之一,设备运行时的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。例如,某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送。
设备影子 是一个JSON文档,用于存储设备或者应用的当前状态信息。每个设备都会在云端有唯一的设备影子。无论该设备是否连接到Internet,您都可以使用设备影子通过MQTT协议或HTTP协议获取和设置设备的状态。
规则引擎 通过创建、配置规则,以实现服务端订阅、数据流转和场景联动。
服务端订阅 服务端订阅产品下所有类型的消息: 设备上报消息、设备状态变化通知、设备生命周期变更、物模型生命周期变更、设备影子变更通知。目前支持两种方式实现服务端订阅:AMQP:高级消息队列协议。服务端通过AMQP协议接入云端,接收云端推送的消息。MQTT:将消息流转到指定MQTT Broker中,您的服务端从对应TOPIC主题中接收消息。
场景联动 场景联动是一种开发自动化业务逻辑的可视化编程方式。您可以通过可视化的方式定义设备之间联动规则,并将规则部署至云端或者边缘端。
一机一密 每个设备烧录其唯一的设备证书(ProductKey、DeviceNumber和DeviceSecret)。当设备与IoT PaaS建立连接时,IoT PaaS对其携带的设备证书信息进行认证。
一型一密 同一产品下所有设备可以烧录相同产品证书(即ProductKey和ProductSecret)。设备发送激活请求时,IoT PaaS对其携带的产品证书信息进行认证,认证通过,下发该设备接入所需的信息。设备再携带这些信息与IoT PaaS建立连接。

# 2. 配置物模型

# 2.1 物模型概述

# 2.1.1 什么是物模型

物模型是平台为产品定义的数据模型,用于描述产品的功能。

# 2.1.2 功能说明

物模型是物理空间中的实体(如传感器、车载装置、楼宇、工厂等)在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。

功能类型 说明
属性(Property) 用于描述设备运行时具体信息和状态。
例如,环境监测设备所读取的当前环境温度、智能灯开关状态、电风扇风力等级等。
属性可分为读写和只读两种类型,即支持读取和设置属性。
服务(Service) 指设备可供外部调用的指令或方法。服务调用中可设置输入和输出参数。输入参数是服务执行时的参数,输出参数是服务执行后的结果。
相比于属性,服务可通过一条指令实现更复杂的业务逻辑,例如执行某项特定的任务。
服务分为异步和同步两种调用方式。
事件(Event) 设备运行时,主动上报给云端的信息,一般包含需要被外部感知和处理的信息、告警和故障。事件中可包含多个输出参数。
例如,某项任务完成后的通知信息;设备发生故障时的温度、时间信息;设备告警时的运行状态等。
事件可以被订阅和推送。

# 2.1.3 使用说明

平台通过定义一种物的描述语言来描述物模型模块和功能,称为TSL(Thing Specification Language)。

物模型TSL文件格式为JSON。您可在平台产品详情页面,单击功能定义页签,单击物模型TSL,查看或导出JSON格式的TSL。相关字段说明,请参见物模型TSL字段说明。

# 2.2TSL 概述

# 2.2.1 物模型TSL字段说明

本文介绍物模型TSL文件中JSON字段及其详细说明。

说明 为了完整展示TSL的结构,以下示例中包含所有参数,不代表实际使用中可能出现的组合。参数后的文字为参数说明,非参数值。各参数的使用场景,请参见参数说明。

{
    "profile": {
        "productKey": "当前产品的ProductKey",
        "version": "版本号",
        "productKey":"当前产品的ProductKey",
        "productName":"当前产品的名称",
        "authType": "秘钥类型 1:一机一密 2:一型一密",
        "modelCode":"型号编码",
        "cateCode":"品类编码",
        "protocolType":"协议类型 5:modbus"
    },
    "properties": [
        {
            "identifier": "属性唯一标识符(产品下唯一)",
            "name": "属性名称",
            "accessMode": "属性读写类型:只读(r)或读写(rw)。",
            "required": "是否是标准功能的必选属性 0非必填,1必填",
            "dataType": {
                "type": "属性类型: int32(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
                "specs": {
                    "min": "参数最小值(int、float、double类型特有)",
                    "max": "参数最大值(int、float、double类型特有)",
                    "unit": "属性单位(int、float、double类型特有,非必填)",
                    "unitName": "单位名称(int、float、double类型特有,非必填)",
                    "size": "数组元素的个数,最大512(array类型特有)。",
                    "step": "步长(text、enum类型无此参数)",
                    "length": "数据长度,最大10240(text类型特有)。",
                    "0": "0的值(bool类型特有)",
                    "1": "1的值(bool类型特有)",
                    "item": {
                        "type": "数组元素的类型(array类型特有)"
                    }
                }
            }
        }
    ],
    "events": [
        {
            "identifier": "事件唯一标识符(产品下唯一,其中post是默认生成的属性上报事件。)",
            "name": "事件名称",
            "desc": "事件描述",
            "eventType": "事件类型 1信息,2告警,3故障",
            "required": "是否是标准功能的必选事件",
            "outputData": [
                {
                    "identifier":"出参唯一标识符",
                    "name":"出参名称",
                    "type":"属性类型: int32(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
                    "specs":{
                        "0":"0的值(bool类型特有)",
                        "1":"1的值(bool类型特有)",
                        "min":"参数最小值(int、float、double类型特有)",
                        "max":"参数最大值(int、float、double类型特有)",
                        "unit":"属性单位(int、float、double类型特有,非必填)",
                        "unitName":"单位名称(int、float、double类型特有,非必填)",
                        "size":"数组元素的个数,最大512(array类型特有)。",
                        "step":"步长(text、enum类型无此参数)",
                        "length":"数据长度,最大10240(text类型特有)。",
                        "item":{
                            "type":"数组元素的类型(array类型特有)"
                        }
                    }
                }
            ],
            "method": "事件对应的方法名称(根据identifier生成)"
        }
    ],
    "services": [
        {
            "identifier": "服务唯一标识符",
            "name": "服务名称",
            "desc": "服务描述",
            "required": "是否是标准功能的必选服务",
            "callType": "1(同步调用)或2(异步调用)",
            "inputData": [
                {
                    "identifier":"出参唯一标识符",
                    "name":"出参名称",
                    "type":"属性类型: int32(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
                    "specs":{
                        "0":"0的值(bool类型特有)",
                        "1":"1的值(bool类型特有)",
                        "min":"参数最小值(int、float、double类型特有)",
                        "max":"参数最大值(int、float、double类型特有)",
                        "unit":"属性单位(int、float、double类型特有,非必填)",
                        "unitName":"单位名称(int、float、double类型特有,非必填)",
                        "size":"数组元素的个数,最大512(array类型特有)。",
                        "step":"步长(text、enum类型无此参数)",
                        "length":"数据长度,最大10240(text类型特有)。",
                        "item":{
                            "type":"数组元素的类型(array类型特有)"
                        }
                    }
                }
            ],
            "outputData": [
                {
                    "identifier":"出参唯一标识符",
                    "name":"出参名称",
                    "type":"属性类型: int32(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
                    "specs":{
                        "0":"0的值(bool类型特有)",
                        "1":"1的值(bool类型特有)",
                        "min":"参数最小值(int、float、double类型特有)",
                        "max":"参数最大值(int、float、double类型特有)",
                        "unit":"属性单位(int、float、double类型特有,非必填)",
                        "unitName":"单位名称(int、float、double类型特有,非必填)",
                        "size":"数组元素的个数,最大512(array类型特有)。",
                        "step":"步长(text、enum类型无此参数)",
                        "length":"数据长度,最大10240(text类型特有)。",
                        "item":{
                            "type":"数组元素的类型(array类型特有)"
                        }
                    }
                }
            ],
            "method": "服务对应的方法名称(根据identifier生成)"
        }
    ]
 }

# 2.2.2 物模型TSL示例

{
    "profile":{
        "version":"1",
        "productKey":"Ysob4TcEyDN",
        "productName":"智能门锁a110",
        "authType":1,
        "modelCode":"yda110",
        "cateCode":"ZNMSDEMO",
        "protocolType":"1"
    },
    "properties":[
        {
            "identifier":"RemainBattery",
            "name":"剩余电量",
            "dataType":{
                "type":"int32",
                "specs":{
                    "min":"0",
                    "max":"100",
                    "step":"1"
                }
            },
            "accessMode":"rw",
            "required":0,
            "desc":"",
            "method":"thing.event.property.post",
            "elementType":1,
            "extDesc":"",
            "isStandard":0
        }
    ],
    "events":[
        {
            "identifier":"DoorOpenNotification",
            "name":"开门通知",
            "required":0,
            "desc":"",
            "method":"thing.event.DoorOpenNotification.post",
            "elementType":2,
            "eventType":1,
            "outputData":[
                {
                    "identifier":"LockType",
                    "name":"开锁方式",
                    "type":"enum",
                    "specs":{
                        "0":"指纹",
                        "1":"密码",
                        "2":"卡",
                        "3":"机械钥匙"
                    }
                },
                {
                    "identifier":"KeyId",
                    "name":"钥匙ID",
                    "type":"text",
                    "specs":{
                        "length":"256"
                    }
                }
            ],
            "extDesc":"",
            "isStandard":0
        }
    ],
    "services":[
        {
            "identifier":"AddKey",
            "name":"添加钥匙",
            "required":0,
            "desc":"",
            "method":"thing.service.AddKey",
            "callType":2,
            "elementType":3,
            "outputData":[
                {
                    "identifier":"KeyId",
                    "name":"钥匙ID",
                    "type":"text",
                    "specs":{
                        "length":"256"
                    }
                }
            ],
            "inputData":[
                {
                    "identifier":"LockType",
                    "name":"开锁方式",
                    "type":"enum",
                    "specs":{
                        "0":"指纹",
                        "1":"密码",
                        "2":"卡",
                        "3":"机械钥匙"
                    }
                },
                {
                    "identifier":"UserLimit",
                    "name":"用户权限",
                    "type":"enum",
                    "specs":{
                        "1":"普通用户",
                        "2":"管理员"
                    }
                }
            ],
            "extDesc":"",
            "isStandard":0
        }
    ]
}

# 2.3 物模型支持的数据类型

平台支持以下数据类型,为产品定义物模型功能时,您可选择使用。

数据类型 说明 示例
int32 32位整型。 10
float 单精度浮点型。 1.1
double 双精度浮点型。 1.23
text 字符串,对应的数据长度不能超过10240字节。 "Hello world!"
date 时间戳。格式为String类型的UTC时间戳,单位:毫秒。 "1635839462000"
bool 布尔型。采用0(false)或1(true)来定义布尔值,且0和1为int32类型。 0表示关、1表示开。
enum 枚举型。定义枚举项的参数值和参数描述,参数值必须为整数。 整数0表示红色,整数1表示蓝色,整数2表示绿色。
struct JSON对象。定义一个JSON结构体,结构体内元素类型支持int32、float、double、text、date、bool和enum,不支持结构体嵌套。 { "name":"Tom", "age":10 }
array 数组。需声明数组内的元素类型、数组元素个数。元素类型支持int32、float、double、text或struct,需确保同一个数组元素类型相同。元素个数限制为1~512个。 [1, 2, 3, 4, 5, 6]
raw 透传类型。针对复杂数据类型使用透传。 {"a":{"b":[{"c":"d"}]}}

# 3. 应用接入流程

# 3.1 凭证申请

向IoT Paas平台产品经理描述需求,申请对应环境的AppKey和AppSecret应用凭证。

管群 B10W00AN10 (18318031850)

潘光勇 B10AAFJ07 (13007438412)

王晓辰 B10W00AB31 (15915337775)

张燕婷 B10AAFI46(18826076411)

# 3.2 对接联调

按照OpenApi的规范调用对应的api进行操作,功能开发。

黄伟东 B10AAFJ131 (18028767598)

# 4. 云端通用开发指南

# 4.1 云端Open Api通用鉴权机制

概述

平台提供云端接口来使用设备能力。向API的服务端地址发送HTTPS/HTTP GET或POST请求,并按照API接口说明,在请求中加入相应请求参数来调用API。平台根据请求的处理情况,返回处理结果。

环境说明

开发环境: https://api-ihw-dev.vanrui.com:1443

测试环境: https://api-eg-stg.smartihw.com:1443

生产环境: https://api-eg.smartihw.com:1443

Open-API_签名机制

平台会对每个接口访问请求的发送者进行身份验证,所以无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。

三方应用调用能力平台,需要通过open-api

对接前的准备工作

  1. 需申请对接(向IoT Paas产品经理申请)

  2. 提供资料:

​ 三方系统的名称

​ 能够获取的信息:appKey,appSecret

  1. 需要知道对接环境的服务名和接口地址

访问地址说明

// host,port: 由对接的平台提供对应环境的地址  
// service: 按照功能划分的服务名
// api见下方具体的api定义

//完整的apiurl信息
https://[host]:[port]/open/{service}/{api}

请求说明

  • API 遵循RESTFUL 风格。
  • API 的请求及响应编码统一使用UTF-8。
  • 在发送请求时,必须通过JSON 编码与后端交互,请求必须设置http头部如下:
  • Content-Type: application/json (例外:表单提交的需要设置成multipart/form-data )
  • Authorization: appKey:sign
  • Content-MD5: QTYyOTFEMTc0RTJCM0Y5OEZCNEY2MkFDOTFBNzNFQzE= 😗*如果body部分为空设置成空字符串""
  • 字段使用「小写+ 下划线」的方式进行命名。

请求示例

POST /open/device-configuration/iot/devices/registerDevice
Content-Type: application/json
Authorization: appKye123:TM2MWY5Y2N 
Date: Sat, 20 Nov 2286 17:46:39   GMT
Content-MD5: QTYyOTFEMTc0RTJCM0Y5OEZCNEY2MkFDOTFBNzNFQzE=

{
    "projectCode":"44030049",
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
}

响应说明

如无特别标注,返回的数据均是标准的json格式

字段名 类型 必填 备注
code int 业务状态码,请参照以下状态码定义列表
msg string 错误说明,当系统成功返回时( code==0 )为"操作成功"
data map 返回的具体数据,如果系统返回异常( code!=0 )为空字典

响应示例

 {
  "msg":"操作成功",
  "code":0,
  "data": {
   "did":"6736933959340392448",
    "projectCode":"44030049",
    "spaceCode":"1020000",
    "deviceTypeCode":"MJ1010111",
    "productId":35
  }
}

# 4.2 JAVA示例代码

//demo

RestTemplate restTemplate = new RestTemplate();

String url = "https://api-ihw-stg.vanrui.com/open/account/xxxxxx"; 
ObjectMapper objectMapper = new ObjectMapper();

String body = objectMapper.writeValueAsString(ImmutableMap.of("bodyparam1", "bodyparamvalue1"));

Map<String, String> signHeaders = OpenApiClientAuth.getSignHeaders("POST", url, "appKey", "appSecurity", body, "application/json");

final HttpHeaders headers = new HttpHeaders(); signHeaders.forEach(headers::set);

final HttpEntity<String> httpEntity = new HttpEntity<>(body, headers); final ParameterizedTypeReference<ExternalResult<Boolean>> parameterizedTypeReference = new ParameterizedTypeReference<ExternalResult<Boolean>>() {

};

  ExternalResult<Boolean> body1 = restTemplate.exchange(url, HttpMethod.POST, httpEntity,   parameterizedTypeReference).getBody(); System.out.println(body1);

//OpenApiClientAuth.java

package com.vanrui.ihw.spring.cloud.starter.common.utils;

Import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import  java.security.NoSuchAlgorithmException; import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.util.Base64;
import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Optional; 
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils;

/**

\* @author yangming

*/ @Slf4j

public class OpenApiClientAuth {

public static final String AUTHORIZATION = "Authorization"; 
public static final String CONTENT_TYPE = "Content-Type"; 
public static final String CONTENT_MD5 = "Content-MD5"; 
public static final String DATE = "Date";
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
.ofPattern("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);

/**
\* @param httpMethod	请求方式GET,POST,PUT。。。
\* @param url	http://baidu.com/xxx/xx?aa=11
\* @param appKey	123123
\* @param appSecret	sdfdsf
\* @param bodyString	当为GET时传空, POST时传post的body值
\* @param contentType 请求类型
\* @return 返回授权说需要的Header参数
\* @throws Exception
*/

public static Map<String, String> getSignHeaders(final String httpMethod, final String url,
final String appKey, final String appSecret, final String bodyString, final String contentType) throws Exception {
  final String pathResource = OpenApiClientAuth.getPathResource(url); 
  final String contentTypeValue = contentType != null ? contentType :"application/json";
  final String dateValue = DATE_TIME_FORMATTER.format(ZonedDateTime.now(ZoneId.of("GMT")));
  final String bodyMd5 = Optional.ofNullable(bodyString).map(OpenApiClientAuth::getMd5String)
  .orElse("");
  final String sign = OpenApiClientAuth.calculateSing(httpMethod, bodyMd5, contentTypeValue, dateValue, pathResource,appSecret);
  final String authorizationString = appKey + ":" + sign;
  final Map<String, String> authHeaders = new HashMap<>(4); 
  authHeaders.put(OpenApiClientAuth.DATE, dateValue); 
  authHeaders.put(OpenApiClientAuth.AUTHORIZATION, authorizationString);
	authHeaders.put(OpenApiClientAuth.CONTENT_TYPE, contentTypeValue);
	authHeaders.put(OpenApiClientAuth.CONTENT_MD5, bodyMd5);
  return authHeaders;
}

	protected static String getMd5String(final String bodyString) { 
  	OpenApiClientAuth.log.debug("getBodyMd5 bodyString ={}", bodyString); 
		return new 			String(Base64.getEncoder().encode(DigestUtils.md5Digest(bodyString.getBytes(StandardCharsets.UTF_8))));
	}

	protected static String getPathResource(final String url) {
		final String substring = url.substring(url.indexOf("://") + 3); 
		return substring.substring(substring.indexOf("/"));
	}

	protected static String calculateSing(final String httpMethodString, final String bodyMd5,
		final String contentTypeValue, final String dateValue, final String pathResource,
		final String appSecret) throws InvalidKeyException, NoSuchAlgorithmException {
		OpenApiClientAuth.log.debug("method = {}", httpMethodString); 
		OpenApiClientAuth.log.debug("contentTypeValue = {}", contentTypeValue);
		OpenApiClientAuth.log.debug("contentMD5Value = {}", bodyMd5); 
		OpenApiClientAuth.log.debug("dateValue = {}", dateValue); 
		OpenApiClientAuth.log.debug("pathResource = {}", pathResource); 
		OpenApiClientAuth.log.debug("appSecret = {}", appSecret);
		final String signToString = OpenApiClientAuth.builderStringToSign(httpMethodString, bodyMd5, contentTypeValue,dateValue,pathResource);
		OpenApiClientAuth.log.debug("signToString = {}", signToString); 
		final String base64HashString = HMAC.hmacSha1Encrypt(signToString,appSecret);
		OpenApiClientAuth.log.debug("base64HashString = {}", base64HashString); 
		final String sign = base64HashString.substring(5, 15); OpenApiClientAuth.log.debug("sign = {}", sign);
		return sign;
}

	protected static String builderStringToSign(final String method, final String contentMd5Value,
		final String contentTypeValue, final String dateValue, final String pathResource) {
		return method
			\+ "\n"
			\+ OpenApiClientAuth.handleNullString(contentMd5Value)
			\+ "\n"
			\+ OpenApiClientAuth.handleNullString(contentTypeValue)
			\+ "\n"
			\+ OpenApiClientAuth.handleNullString(dateValue)
			\+ "\n"
			\+ pathResource;
	}

	protected static String handleNullString(final String str) { 
    return !StringUtils.hasText(str) ? "" : str;
	}

	protected static class HMAC {
		private HMAC() {}
		private static final String KEY_MAC_SHA1 = "HmacSHA1";
		public static String hmacSha1Encrypt(final String encryptText, final String encryptKey)
			throws NoSuchAlgorithmException, InvalidKeyException {
			final byte[] text = encryptText.getBytes(StandardCharsets.UTF_8); 
			final byte[] keyData = encryptKey.getBytes(StandardCharsets.UTF_8); 
			final SecretKeySpec secretKey = new SecretKeySpec(keyData,HMAC.KEY_MAC_SHA1);
			final Mac mac = Mac.getInstance(secretKey.getAlgorithm()); 
			mac.init(secretKey);
			return new String(Base64.getEncoder().encode(mac.doFinal(text)), StandardCharsets.UTF_8);
		}
	}
}

//ExternalResult.java

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(value= JsonInclude.Include.NON_NULL)
public class ExternalResult<T> {
    private Boolean success;
    private String msg;
    private Integer code;

    private T data;

    public boolean getSuccess() {
        if (success != null) {
            return success;
        }
        return code == 0;
    }
}

# 4.3 公共参数

本文档介绍平台云端API的公共请求参数和公共返回参数

# 4.4 公共请求参数

公共请求参数是调用每个API时都需要使用的请求参数。

# 4.5 错误码规范

本文档列举调用IoT PaaS平台API出错时,返回的错误信息。入参数据格式错误、超出限定值、入参缺少必需参数等错误修改,请参见具体API文档的请求参数描述。

# 4.5.1 客户端错误码

以 4开头的错误码为客户端相关错误码。

错误码 描述
40400 请求资源不存在
40101 未登录
40102 未经授权: %s
42900 请求过多被限流

注:一般属于客户端编码错误没有按照协议要求或限制规范编码。

# 4.5.2 系统错误码

以 5开头的错误码为服务端相关错误码。

错误码 描述
500XX 一般是服务器内部错误通知对应的开发人员

注:一般属于IoT PaaS平台内部异常所导致,请联系IoT PaaS平台开发人员进行解决。

# 4.5.3 业务错误码

以 2开头的错误码为业务相关错误码。

错误码 描述
21001 登录已失效
21101 数据已存在
21102 验证码错误
21103 存在关联数据, 不允许删除
21104 数据不存在
21105 用户名/密码错误
21106 设备未在IoT PaaS授权,请授权后连接
21107 账户已冻结
21108 应用已锁定
21301 失败: %s
21302 设备不存在
21303 下游服务异常: %s
21304 设备: %s , 不在线
21305 设备响应超时
21313 参数异常:%s
21314 资源不存在:%s
21316 设备响应失败:%s
21318 分发实例异常:%s
21320 设备SN编码不支持中文和+ ## / % *&特殊字符
21340 产品异常: %s
21341 产品未发布
21342 产品Key 无效
21344 产品不存在
21315 物模型标识符不存在:%s
21320 物模型标识符使用异常:%s
21321 物模型元素值校验失败:%s
21380 Excel读取数据异常%s
21381 Excel一次最多批量导入1000个设备,请调整后重新上传
21382 Excel未填写内容
21383 Excel标签格式错误
21391 项目编号不存在:%s
21392 空间编号不存在:%s
21370 应用无权限
21371 TOPO结构正在初始化到缓存,请稍后重试
21372 TOPO结构查询function异常

注:该错误码代表正常的业务错误,一般具有业务处理意义的。客户端可以结合业务需求,选择性识别判断处理。

# 5 云端IOT API

# 5.1 设备管理

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.1.1 注册设备

调用该接口在指定产品下注册设备。

接口说明

注册设备指在IoT PaaS产品下添加设备。在指定产品下成功注册设备后,IoT PaaS平台为设备颁发全局唯一的设备ID(dId),用来标识该设备。在进行与设备相关的操作时,您可能需要提供目标设备的dId。您也可以使用ProductKey和DeviceNumber组合来标识一个设备。其中ProductKey是新建产品时平台为产品颁发的产品Key,DeviceNumber是注册设备时由您指定或由系统随机生成的设备名称。dId的优先级高于ProductKey和DeviceNumber组合。

相对 URI HTTP 方式
/iot/devices/registerDevice post

请求参数定义:

名称 类型 是否必选 含义
projectCode String 所属项目编号
spaceCode String 所属空间编号
productKey String 产品Key
deviceNumber String 设备编码
deviceName String 设备名称
did String 设备DID
longitude Double 经度
latitude Double 纬度
deviceSecret String 设备秘钥

返回的data 消息体定义:

名称 类型 含义
did String 设备DID。平台为该设备颁发的唯一标识符。
productKey String 产品Key
deviceSecret String 设备秘钥
productSecret String 产品密钥
modelCode String 产品型号编码
deviceTypeCode String 设备类型型号
projectCode String 项目编号
spaceCode String 空间编号
deviceName String 设备名称
createTime Long 创建时间

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/registerDevice
 
{
    "projectCode":"44030049",
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
}

返回示例(新增成功):

 {
  "msg":"操作成功",
  "code":0,
  "data": {
   "did":"6736933959340392448",
    "projectCode":"44030049",
    "spaceCode":"1020000",
    "deviceTypeCode":"MJ1010111",
    "productId":35
  }
}

# 5.1.2 查询设备详情

调用该接口查询指定设备的详细信息。

相对 URI HTTP 方式
/iot/devices/queryDeviceDetail get

请求参数定义:

名称 类型 是否必选 含义
did String 设备DID。平台为该设备颁发的唯一标识符。和ProductKeyDeviceNumber组合是一一对应的关系。如果您同时传入DIDProductKeyDeviceNumber组合,则以DID为准。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
deviceName String 设备名称
deviceNumber String 设备编码
projectCode String 项目编号
projectName String 项目名称
did String DID
productKey String 产品Key
productSecret String 产品秘钥
deviceSecret String 设备密钥
productName String 产品名称
deviceTypeCode String 设备类型编号
deviceTypeName String 设备类型名称
spaceCode String 空间编号
spaceName String 安装位置
createTime Date 创建时间
networkStatus Integer 在线状态 1:在线 2:离线
inService Integer 是否激活 0:已激活 1:未激活
activeTime Long 项目安装时间
version String 设备版本号
iccid String iccid
latestMsgTime Long 最后一次通讯时间
longitude Double 经度
latitude Double 纬度
enable Integer 启停状态 0:启用 1:停用

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceDetai?did=6905410181719*****

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "deviceName": "UNIT_F00C",
    "systemDeviceName": "温度检测仪1135",
    "deviceNumber": "7cdfa1b9a2d8",
    "createTime": 1646378084000,
    "projectCode": "i000000015",
    "projectName": "璞玉山",
    "spaceCode": null,
    "spaceName": null,
    "firmwareVersion": "1.0.1",
    "productKey": "SKQ9V4B5Q57",
    "productSecret": "2Eh12fPv08evquDi",
    "productName": "温度检测仪11",
    "deviceSecret": "pmyd1hk92fm1gt6r339l8ebfpmx23gkf",
    "deviceTypeCode": "VRZNZD189001",
    "did": "6905410181719400448",
    "networkStatus": 1,
    "activeTime": 1646378084000,
    "inService": 0,
    "protocol": "标准协议",
    "version": "1.0.1",
    "iccid": null,
    "latestMsgTime": 1646381824000,
    "longitude":123.3445,
    "latitude":22.1548
  }
}

# 5.1.3 删除设备

调用该接口删除指定设备。

相对 URI HTTP 方式
/iot/devices/deleteDevice delete

请求参数定义:

名称 类型 是否必选 含义
did String 设备DID。平台为该设备颁发的唯一标识符。和ProductKeyDeviceNumber组合是一一对应的关系。如果您同时传入DIDProductKeyDeviceNumber组合,则以DID为准。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/deleteDevice

{
	"did":"6736933959340392448"
}

返回示例:

{
    "msg":"操作成功",
    "code":0
}

# 5.1.4 批量获取设备在线状态

批量获取设备在线状态

相对 URI HTTP 方式
/iot/devices/batchGetDeviceState post

请求参数定义:

名称 类型 是否必选 含义
List<Object>>
did String 设备DID。平台为该设备颁发的唯一标识符。和ProductKeyDeviceNumber组合是一一对应的关系。如果您同时传入DIDProductKeyDeviceNumber组合,则以DID为准。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
did String 设备全局唯一id
networkStatus Integer 在线状态 1:在线 2:离线

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/batchGetDeviceState

[
    {
        "did":"6736933959340392448"
    },
    {
        "did":"6736933959340392449"
    }
]

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":[
    {
      "did":"6736933959340392448",
      "networkStatus":1
    },
    {
      "did":"6736933959340392449",
      "networkStatus":2
    }
  ]
}

# 5.1.5 批量激活设备

调用该接口批量激活设备(注意: 单个批次激活设备 不能超过100台)。

相对 URI HTTP 方式
/iot/devices/batchActDevices post

请求参数定义:

名称 类型 是否必选 含义
List<Object>>
projectCode String 所属项目编号
spaceCode String 所属空间编号
productKey String 产品Key
deviceNumber String 设备编码

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/batchActDevices

[
  {
    "projectCode":"44030049",
    "spaceCode":"1020000",
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
  },
  {
    "projectCode":"44030049",
    "spaceCode":"1020000",
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
  }
]

返回示例:

{
	"msg":"操作成功",
	"code":0
}

# 5.1.6 批量解除激活设备

调用该接口批量解除激活设备(注意: 单个批次解除激活设备 不能超过100台)。

相对 URI HTTP 方式
/iot/devices/batchInActivateDevice post

请求参数定义:

名称 类型 是否必选 含义
List<Object>>
productKey String 产品Key
deviceNumber String 设备编码

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/batchInActivateDevice

[
  {
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
  },
  {
    "productKey":"sdfwefEwq",
    "deviceNumber":"SJIF256120"
  }
]

返回示例:

{
	"msg":"操作成功",
	"code":0
}

# 5.1.7 查询设备的拓扑关系

调用该接口查询指定网关设备的子设备列表。

相对 URI HTTP 方式
/iot/v3/devices/getThingTopo get

请求参数定义:

名称 类型 是否必选 含义
did String 设备DID。平台为该设备颁发的唯一标识符。和ProductKeyDeviceNumber组合是一一对应的关系。如果您同时传入DIDProductKeyDeviceNumber组合,则以DID为准。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
List<Object>>
did String 设备全局唯一id
deviceNumber String 设备编码
productKey String 产品Key

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/v3/devices/getThingTopo?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":[
      {
      "did":"6736933959340392448",
      "deviceNumber":"FHIQW5926",
      "productKey":"sdfsdfeHYR01"
      }
    ]
}

# 5.1.8 增加网关设备拓扑关系

调用该接口通知网关设备增加拓扑关系。

相对 URI HTTP 方式
/iot/v2/devices/addThingTopo post

请求参数定义:

名称 类型 是否必选 含义
gatewayDid String 网关did 设备的唯一标识符
gatewayDeviceNumber String 网关DeviceNumber 说明:如果传入该参数,需同时传入productKey
gatewayProductKey String 网关产品key 说明:如果传入该参数,需同时传入deviceNumber
deviceList List<Object>> 子设备集合
did String 子设备did 设备的唯一标识符。
deviceNumber String 子设备DeviceNumber 说明:如果传入该参数,需同时传入productKey
productKey String 子设备产品key 说明:如果传入该参数,需同时传入deviceNumber

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/v2/devices/addThingTopo

{
  "gatewayDid":"6905398671135748096",
  "deviceList":[
    "did":"6905360446253969408",
    "did":"6905359941876326400"
  ]
}

返回示例:

{
"msg":"操作成功",
"code":0
}

# 5.1.9 移除设备的拓扑关系

调用该接口移除网关或子设备的拓扑关系。

相对 URI HTTP 方式
/iot/devices/removeThingTopo put

请求参数定义:

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/removeThingTopo?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.1.10 查询产品的设备列表

查询产品的设备列表。

相对 URI HTTP 方式
/iot/devices/queryDevice get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
projectCode String 项目编号
spaceCode String 产品编码
limit Integer 参数说明:当前获取的条数限制取值范围:1-50的整数,默认值为10,最大获取50条数据。
last String 参数说明:上一次分页查询结果中最后一条设备的Did。为空:则默认从起始位置开始获取规则。否则:从last的后一条数据开始获取分页数据。

返回的 data 消息体定义:

名称 类型 是否必填 含义
deviceName String 设备名称
productKey String 产品key
deviceNumber String 设备编码
did String DID
projectCode String 项目编号
projectName String 项目名称
spaceCode String 空间编号
spaceName String 安装位置
createTime Date 创建时间
networkStatus Integer 在线状态 1:在线 2:离线
version String 设备版本号

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDevice?did=6905326322269036544

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":[
    {
    "deviceName":"万睿摄像头1",
    "deviceNumber":"DJIEDN11120",
    "did":"6905326322269036544",
    "projectCode":"j1010101",
    "projectName":"深圳璞悦山",
    "spaceCode":"i10101103",
    "spaceName":"一期/二栋",
    "createTime":1606210222000,
    "networkStatus":1,
    "version":"1.0"
     }
  ]
}

# 5.1.11 查询条件下的设备列表

查询条件下的设备列表。

相对 URI HTTP 方式
/iot/devices/queryDeviceByCondition get

请求参数定义:

名称 类型 是否必选 含义
projectCode String 项目编号
spaceCode String 空间编号
limit Integer 参数说明:当前获取的条数限制取值范围:1-50的整数,默认值为10,最大获取50条数据。
last String 参数说明:上一次分页查询结果中最后一条设备的Did。为空:则默认从起始位置开始获取规则。否则:从last的后一条数据开始获取分页数据。

返回的 data 消息体定义:

名称 类型 是否必填 含义
deviceName String 设备名称
productKey String 产品key
deviceNumber String 设备编码
did String DID
projectCode String 项目编号
projectName String 项目名称
spaceCode String 空间编号
spaceName String 安装位置
createTime Date 创建时间
networkStatus Integer 在线状态 1:在线 2:离线
version String 设备版本号

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceByCondition?projectCode=j1010101

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":[
    {
    "deviceName":"万睿摄像头1",
    "deviceNumber":"DJIEDN11120",
    "did":"6736933959340392000",
    "projectCode":"j1010101",
    "projectName":"深圳璞悦山",
    "spaceCode":"i10101103",
    "spaceName":"一期/二栋",
    "createTime":1606210222000,
    "networkStatus":1,
    "version":"1.0"
     }
  ]
}

# 5.1.12 查询设备的运行状态

获取设备的运行状态

相对 URI HTTP 方式
/iot/v2/devices/getDeviceStatus get

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备编号。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
did String 设备全局唯一id
networkStatus Integer 在线状态 1:在线 2:离线

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/getDeviceStatus?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":{
    "did":"6736933959340392448",
    "networkStatus":1
  }
}


# 5.1.13 修改设备

调用该接口修改指定设备。标黄处字段,修改时填入设备当前最新信息.

相对 URI HTTP 方式
/iot/v3/devices/updateDevice put

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
productKey String 设备编号。说明 如果传入该参数,需同时传入productKey。
deviceNumber String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
deviceName String 设备名称
usageStatus Integer 设备使用状态 0:使用中 1:维修中 2:报废 3:备用
projectCode String 项目编码 当传入null时,则移除设备项目信息。
spaceCode String 安装区域 当传入null时,则移除设备空间信息。
longitude Double 经度 当传入null时,则移除设备经度信息。
latitude Double 纬度 当传入null时,则移除设备经度信息。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/v3/devices/updateDevice

{
    "did":"6736933959340392448",
    "spaceCode":"s45123001",
    "deviceName":"TEST0001",
    "usageStatus":0,
    "projectCode":"i4121515",
    "longitude":"114.043339",
    "latitude":"22.553421"
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.1.14 查询子设备绑定的网关

调用该接口查询子设备绑定的网关。

相对 URI HTTP 方式
/iot/devices/getGatewayBySubDevice get

请求参数定义:

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
did String 设备全局唯一id
deviceNumber String 设备编码
productKey String 产品Key

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/getGatewayBySubDevice?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":{
      "did":"6736933959340392448",
      "deviceNumber":"FHIQW5926",
      "productKey":"sdfsdfeHYR01"
     }
}

# 5.1.15 查询设备动态参数

查询设备动态参数

相对 URI HTTP 方式
/iot/devices/queryDeviceDynamicParams get

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备编号。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
isMultipart Integer 是否为多组动参 0否 1是
dynamicParams Object/List 当isMultipart:0 则类型为Object,当isMultipart:1 则类型为List
-{identifier} String key为动参标识符,value为对应的值

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceDynamicParams?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":{
    	"isMultipart":0,
    	"dynamicParams":{
            "loopnum":"1",
	    	"network_key":"1"
    	}
  }
}

# 5.1.16 保存设备动态参数

保存更新设备动态参数

相对 URI HTTP 方式
/iot/devices/saveDeviceDynamicParams post

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
productKey String 设备编号。说明 如果传入该参数,需同时传入productKey。
deviceNumber String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
dynamicParams Object/List 设备动参列表
-{identifier} String key为动参标识符
-{value} Object value为动参标识符对应的值

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/saveDeviceDynamicParams

{
    "did":"6736933959340392448",
    "dynamicParams":{
        "loopnum":"1",
    	"network_key":"1"
  }
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.1.17 查询设备标签

查询设备标签

相对 URI HTTP 方式
/iot/devices/queryDeviceTags get

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备编号。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 含义
data List
-tagKey String 标签key
-tagValue String 标签值

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceTags?did=6736933959340392448

返回示例:

{
  "msg":"操作成功",
  "code":0,
  "data":[
      {
        "tagKey":"loopnum",
        "tagValue":"1"  
      },
      {
        "tagKey":"network_key",
        "tagValue":"DSAF1E51F5115FW"  
      }
  ]
}

# 5.1.18 保存设备标签

保存更新设备标签

相对 URI HTTP 方式
/iot/devices/upsertDeviceTags post

请求参数定义:

名称 类型 是否必选 含义
did String 要调用服务的设备ID。平台为该设备颁发的ID,设备的唯一标识符。
productKey String 设备编号。说明 如果传入该参数,需同时传入productKey。
deviceNumber String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
deviceTags list 设备标签列表
-tagKey String 标签Key
-tagValue String 标签值

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/upsertDeviceTags

{
    "did":"6736933959340392448",
    "deviceTags":[
        {
           	"tagKey":"loopnum",
		    "tagValue": "10"
        },
        {
           	"tagKey":"network_key",
		    "tagValue": "DSAF1E51F5115FW"
        }
    ]
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.1.19 删除设备标签

删除设备标签

相对 URI HTTP 方式
/iot/devices/deleteDeviceTags delete

请求参数定义:

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
tagKeys List<String>> 要删除的设备标签

返回的 data 消息体定义:

名称 类型 含义
did String 设备全局唯一id
deviceNumber String 设备编码
productKey String 产品Key

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/deleteDeviceTags

{
    "did":"6736933959340392448",
    "tagKeys":[
    	"loopnum","network_key"
    ]
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.1.20 根据标签查询设备

根据标签查询设备

相对 URI HTTP 方式
/iot/devices/queryDeviceByTags post

请求参数定义:

名称 类型 是否必选 含义
pageNum Integer 当前页数
pageSize Integer 每页显示多少条 最大100
deviceTags list 设备动参列表
-tagKey String 动参标识符
-tagValue String 动参值

返回数据

名称 类型 是否必填 描述
-pageNum Integer 当前页
-pageSize Integer 每页条数
-totalPages Integer 总页数
-total Long 总条数
-list List<Object>>
deviceName String 设备名称
productKey String 产品key
deviceNumber String 设备编码
did String DID
projectCode String 项目编号
projectName String 项目名称
spaceCode String 空间编号
spaceName String 安装位置
createTime Date 创建时间
networkStatus Integer 在线状态 1:在线 2:离线
version String 设备版本号

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceByTags

{
    "pageNum":1,
    "pageSize":10,
    "deviceTags":[
        {
           	"tagKey":"loopnum",
		    "tagValue": "10"
        },
        {
           	"tagKey":"network_key",
		    "tagValue": "DSAF1E51F5115FW"
        }
    ]
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "totalPages": 1,
    "total": 1,
    "list": [
        {
        "deviceName":"万睿摄像头1",
        "deviceNumber":"DJIEDN11120",
        "did":"6736933959340392000",
        "projectCode":"j1010101",
        "projectName":"深圳璞悦山",
        "spaceCode":"i10101103",
        "spaceName":"一期/二栋",
        "createTime":1606210222000,
        "networkStatus":1,
        "version":"1.0"
         }
      ]
  }
}

# 5.1.21 根据标签统计设备

根据标签查询设备

相对 URI HTTP 方式
/iot/devices/querySummaryByTags post

请求参数定义:

名称 类型 是否必选 含义
projectCode String 项目编码
deviceTags list 设备动参列表
-tagKey String 动参标识符
-tagValue String 动参值

返回数据

名称 类型 是否必填 描述
deviceActive Integer 1 激活设备数量。
deviceCount Integer 10 设备总数。
deviceOnline Integer 0 在线设备数量。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/querySummaryByTags

{
    "deviceTags":[
        {
           	"tagKey":"loopnum",
		    "tagValue": "10"
        },
        {
           	"tagKey":"network_key",
		    "tagValue": "DSAF1E51F5115FW"
        }
    ]
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":{
        "deviceActive":1,
        "deviceCount":10,
        "deviceOnline":2
    }
}

# 5.2 产品管理

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.2.1 查询产品详情

调用该接口查询指定产品的详情信息。

相对 URI HTTP 方式
/iot/products/queryProduct get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
modelCode String 产品型号编码

返回的 data 消息体定义:

名称 类型 含义
name String 名称
nodeType String 节点类型: 0直连设备 1网关子设备 2网关设备
networkMode String 联网方式 0:以太网 1:2G/3G/4G 2:LoRaWAN 3:NB 4:网关子设备 5:Modbus 6:CPC UA 7:Zigbee 8:BLE 9:其他.
status Integer 发布状态:0未发布 1已发布.
productKey String 产品key
productSecret String 产品密钥
authType Integer 认证方式 1: 一机一密 2:一型一密
selfRegistration Integer 自动注册 0:关 1:开
isStandard Integer 是否为标准品. 0 否 1是
cateCode String 品类code
cateName String 品类名称
modelName String 产品型号
modelCode String 产品型号编码
protocolCode Integer 协议code
protocolName String 协议名称
reportingCycle Integer 数据判断周期
supplier String 厂家
brand String 品牌
createTime Long 创建时间
updateTime Long 修改时间

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/queryProduct?productKey=tDQvBJqbUyHs***

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "name": "fdd",
    "nodeType": "0",
    "networkMode": "0",
    "status": 1,
    "productKey": "tDQvBJqbUyHs",
    "productSecret": "3BXVQqd0MiN2FhvJ",
    "authType": 1,
    "selfRegistration": 0,
    "isStandard": 1,
    "cateCode": "11",
    "cateName": "随便添加的",
    "modelName": "广东佛山孤独颂歌",
    "modelCode": "dsfgsdfgdf",
    "protocolCode": 1,
    "protocolName": "MQTT",
    "reportingCycle": 111,
    "supplier": "海康",
    "brand": "海康",
    "createTime":1652695059000,
    "updateTime":1652695059000
  }
}

# 5.2.2 查询产品列表

调用该接口查询产品列表。

相对 URI HTTP 方式
/iot/products/queryProductList post

请求参数定义:

名称 类型 是否必选 含义
cateCodes List<String> 品类code集合
nodeCode String 品类节点
nodeLevel Integer 品类级别 1: 行业 2:场景 3:品类
isStandard Integer 是否为标准品. 0 否 1是
name String 名称模糊搜索
productTagList List<TagKeyValueVo> 产品标签
status Integer 发布状态:0未发布 1已发布
pageNum Integer 当前页 起始页为1
pageSize Integer 每页条数 最大值为100

其中TagKeyValueVo对象属性如下:

名称 类型 是否必选 含义
tagKey String 标签key
tagValue String 标签value

返回的 data 消息体定义:

名称 类型 含义
-pageNum Integer 当前页
-pageSize Integer 每页条数
-totalPages Integer 总页数
-total Long 总条数
-list List 设备列表
productKey String 产品key
name String 名称
status Integer 发布状态:0未发布 1已发布
cateCode String 品类code
cateName String 品类名称
modelCode String 产品型号编码
modelName String 产品型号名称
deviceQty Integer 关联设备数

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/queryProductList

{
  "cateCodes": [
    "gdfwfew"
  ],
  "productTagList": [{
        "tagKey": "1",
        "tagValue": ""
    },{
        "tagKey": "1",
        "tagValue": "22"
    }],
  "pageNum": 1,
  "pageSize": 10
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "totalPages": 1,
    "total": 1,
    "list": [
      {
        "productKey": "88xSUsmUuIc",
        "name": "cmp水浸",
        "status": 1,
        "cateCode": "aqws",
        "cateName": "aqws",
        "modelCode": "ZNZD106007",
        "modelName": "CMP水浸传感器RIBA-FSTWI01-WL",
        "deviceQty": 3
      }
    ]
  }
}

# 5.2.3 添加产品

调用该接口查询分组中的设备列表。

相对 URI HTTP 方式
/iot/products/createProduct post

请求参数定义:

名称 类型 是否必选 含义
name String 产品名称
nodeType String 节点类型: 0直连设备 1网关子设备 2网关设备
networkMode String 联网方式
0,以太网
1,蜂窝(2G/3G/4G/5G)
2,LoRaWAN
5,modbus
6,OPC UA
7,ZigBee
8,BLE
9,其他
10,Wi-Fi
11,OPC DA
12,Bacnet
13,自定义
authType Integer 认证方式, 1 : 一机一密,2:一型一密.
isStandard Integer 是否为标准品. 0 否 1是
cateCode String 品类code 当为标准品时,该值必填
modelName String 产品型号名称
modelCode String 产品型号编码
protocolCode Integer 协议code
1,MQTT
2,万睿协议
3,IotHub
4,其他
5,萤石云协议
6,云眸协议
7,智居协议
8,Lora设备
9,Http
10,CMP
reportingCycle Integer 数据判断周期
supplier String 厂家
brand String 品牌
desc String 产品描述
productKey String 产品key

返回的 data 消息体定义:

名称 类型 含义
productKey String 产品Key
productSecret String 产品秘钥

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/createProduct

{
    "isStandard":1,
    "authType":1,
    "name":"测试井盖产品",
    "productKey":"",
    "cateCode":"ZHCS0106",
    "cateName":"井盖监测装置",
    "networkMode":"1",
    "modelCode":"SJ111",
    "modelName":"菲尔斯特SJ111",
    "brand":"菲尔斯特",
    "supplier":"菲尔斯特",
    "reportingCycle":"300",
    "nodeType":"0",
    "protocolCode":"1",
    "desc":"test"
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "productKey": "rPU4PHokGR3",
    "productSecret": "IC81m3ryC3k182Pz"
  }
}

# 5.2.4 发布/撤销发布产品

调用该接口发布/撤销发布指定产品。

相对 URI HTTP 方式
/iot/products/publishProduct put

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
status Integer 发布状态:0撤销发布 1发布

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/publishProduct

{
    "productKey":"rPU4PHokGR3",
    "status":1
}

返回示例:

{
    "msg":"操作成功",
    "code":0
}

# 5.2.5 修改产品

调用该接口修改指定产品的信息。

相对 URI HTTP 方式
/iot/products/updateProduct put

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
name String 产品名称
modelName String 产品型号名称
reportingCycle Integer 数据判断周期
supplier String 厂家
brand String 品牌
desc String 产品描述

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/updateProduct

{
    "productKey":"rPU4PHokGR3",
    "name":"测试井盖产品",
    "modelName":"菲尔斯特SJ1111",
    "brand":"菲尔斯特",
    "supplier":"菲尔斯特",
    "reportingCycle":"300",
    "nodeType":"0",
    "protocolCode":"1",
    "desc":"test"
}

返回示例:

{
    "msg":"操作成功",
    "code":0
}

# 5.2.6 删除产品

调用该接口删除指定产品。

相对 URI HTTP 方式
/iot/products/deleteProduct delete

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/deleteProduct

{
    "productKey":"rPU4PHokGR3"
}

返回示例:

{
    "msg":"操作成功",
    "code":0
}

# 5.2.7 保存产品标签

调用该接口创建或者更新产品标签信息。

相对 URI HTTP 方式
/iot/products/upsertProductTags post

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
tagString List 产品key-value
tagKey String 标签key
tagValue String 标签value

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/upsertProductTags

{
    "productKey": "4bcRb1u0dV6",
    "tagString": [{
        "tagKey": "3",
        "tagValue": "33"
    },{
        "tagKey": "2",
        "tagValue": "44"
    }]
}

返回示例:

{
    "success": true,
    "msg": "操作成功",
    "code": 0,
    "data": true
}

# 5.2.8 删除产品标签

调用该接口删除产品标签信息。

相对 URI HTTP 方式
/iot/products/deleteProductTags post

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
delTagKeyList List<String> 删除产品key列表

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/deleteProductTags

{
    "productKey": "4bcRb1u0dV6",
    "delTagKeyList": [
        "3","2"
    ]
}

返回示例:

{
    "success": true,
    "msg": "操作成功",
    "code": 0,
    "data": true
}

# 5.2.9 查询产品标签

调用该接口查询产品标签。

相对 URI HTTP 方式
/iot/products/listProductTags get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/listProductTags?productKey=4bcRb1u0dV6

返回示例:

{
    "success": true,
    "msg": "操作成功",
    "code": 0,
    "data": [
        {
            "tagKey": "1",
            "tagValue": "33"
        },
        {
            "tagKey": "2",
            "tagValue": "44"
        }
    ]
}

# 5.2.10 查询产品动参配置

调用该接口查询指定产品的详情信息。

相对 URI HTTP 方式
/iot/products/queryDynamicParamsConfig get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key

返回的 data 消息体定义:

名称 类型 含义
-data List 动参配置列表
paramName String 动参名称
identifier String 动参标识符
paramType String 动参参数类型
"1",int32
"2",double
"3",bool
"4",enum
"5",text
"6",float
"7",date
required Integer 是否必须 0非必填
paramDesc String 动参描述
updateTime Long 动参更新时间
enabled Integer 启停状态 0:启用,1:停用
spaces String 参数范围 JSON格式

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/products/queryProduct?productKey=tDQvBJqbUyHs***

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":[
        {
            "paramName":"dsadas",
            "identifier":"gfdg",
            "paramType":"1",
            "required":0,
            "paramDesc":null,
            "updateTime":1653548948000,
            "enabled":0,
            "spaces":"{\"min\":\"1\",\"max\":\"3\",\"step\":\"2\",\"unit\":\"n\"}"
        },
        {
            "paramName":"JH",
            "identifier":"JGHJ",
            "paramType":"2",
            "required":0,
            "paramDesc":null,
            "updateTime":1653549015000,
            "enabled":0,
            "spaces":"{\"min\":\"1.1\",\"max\":\"2.1\",\"step\":\"1\",\"unit\":\"L\"}"
        }
    ]
}

# 5.3 物模型使用

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.3.1 设置设备属性值

调用该接口为指定设备设置属性值。

相对 URI HTTP 方式
/iot/thing/setDeviceProperty post

返回结果说明

因为云端下发属性设置命令和设备收到并执行该命令是异步的,所以调用该接口时,返回的成功结果只表示云端下发属性设置的请求成功,不能保证设备端收到并执行了该请求。需设备端SDK成功响应云端设置设备属性值的请求,设备属性值才能真正设置成功。

请求参数

名称 类型 是否必选 示例值 描述
items JSON Object {"Switch":1,"Color":"blue"} 要设置的属性信息,数据格式为 JSON Object。属性组成为属性标识符key:属性值value,多个属性用英文逗号隔开。例如,设置智能灯的如下两个属性:标识符为Switch的开关属性,数据类型为Bool,设置值为1(开);标识符为Color的灯颜色属性,数据类型为String,设置值为blue。那么,Items={"Switch":1,"Color":"blue"}。
did String Q7uOhVRdZRRlDnTLv00100 设备DID。平台为该设备颁发的唯一标识符。和ProductKeyDeviceNumber组合是一一对应的关系。如果您同时传入DIDProductKeyDeviceNumber组合,则以DID为准。
deviceNumber String light 设备编码。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

调用API时,除了本文介绍的该API的特有请求参数,还需传入公共请求参数。公共请求参数说明,请参见api签名算法,后续接口不再重复说明

返回数据

名称 类型 示例值 描述
code Int 错误码
data Struct 调用成功时,返回的数据。
requestId String 平台为该请求生成的唯一标识符。
messageId String 云端向设备下发服务调用的消息ID。
result Struct
msg String 错误信息。
success Boolean true 表示是否调用成功。· true:调用成功。· false:调用失败。

示例

参数示例

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/setDeviceProperty

{
    "did": "6795983672244699136",
    "items": {"switch_1":true}
}

返回示例

{
  "success":true,
  "msg":"操作成功",
  "code":0,
  "data":{
    "requestId":"Mdo5CsA2FpOf82z9vCg022p31NU5SvE0",
    "messageId":"8TGZSr4G4Cd6x5jy",
    "result":null
    }
}

属性设置相关错误码

错误码 消息 描述
21301 失败: [did] 与 [productKey&deviceNumber] 不能同时为空 请求参数缺失
21302 设备不存在. 无法根据参数信息找到设备。
21304 设备: %s , 不在线 设备离线,无法设置属性
21315 物模型标识符不存在:%s 产品下功能定义不存在
21320 物模型标识符使用异常:%s 该标识符非属性标识符
21321 物模型元素值校验失败:%s 元素值类型错误
21305 设备响应超时 %s 设备超时未响应,或设备处理超时
21351 设备处理时,发生错误:%s 设备处理属性设置失败
21352 设备端繁忙,请稍后再试:%s 请求过于频繁,设备端繁忙
21353 请求参数错误, 设备入参校验失败:%s 请求参数错误,设备无法识别
21316 设备响应失败:%s 设备响应的未知异常

# 5.3.2 调用设备服务

调用该接口在一个设备上调用指定服务。

相对 URI HTTP 方式
/iot/thing/invokeThingService post

请求参数

名称 类型 是否必选 示例值 描述
args JSON Object {"param1":1} 要启用服务的输入入参信息,数据格式为JSON Object,例如args={"param1":1}。若此参数为空时,需传入 args={} 。
identifier String Set 服务的标识符。设备的服务Identifier,可在控制台中,设备所属的产品的功能定义中查看;或调用QueryThingModel,从返回的物模型信息中查看。
did String 6800675159679172608 要调用服务的设备DID,设备的唯一标识符。
deviceNumber String light 设备编号。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回数据

名称 类型 示例值 描述
msg String 错误信息。
success Boolean true 表示是否调用成功。· true:调用成功。· false:调用失败。
code Int 错误码
data Struct 调用成功时,返回的数据。
requestId String 平台为该请求生成的唯一标识符。
messageId String 云端向设备下发服务调用的消息ID。
result Object 同步调用服务,返回的调用结果。异步调用服务,不返回此参数。
id String 消息ID,正常情况下与messageId一致。
code Int 设备回复的状态码
data Object 输出参数

示例

请求示例

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/invokeThingService

{
  "did":"6800675159679172608",
  "identifier":"saveVideo",
  "args":{
    "channelNo":"1",
    "startTime":1621412750000,
    "endTime":1621413110000,
    "voiceSwitch":2
  }
}

同步服务返回

{
 "success": true,
 "msg": "操作成功",
 "code": 0,
 "data": {
  "requestId": "etD240V1sUI6Z05ycBjDW1j6Nd2H94Q0",
  "messageId": "or173pC954Ur3VTo",
  "result": {
      "url":"fd456ff124.m3u8"
  }
}

异步服务返回,设备响应的内容通过服务端订阅推送,见6.1.3.1.3

{
 "success": true,
 "msg": "操作成功",
 "code": 0,
 "data": {
  "requestId": "etD240V1sUI6Z05ycBjDW1j6Nd2H94Q0",
  "messageId": "or173pC954Ur3VTo"
 }
}

服务调用相关错误码

错误码 消息 描述
21301 失败: [did] 与 [productKey&deviceNumber] 不能同时为空 请求参数缺失
21302 设备不存在. 无法根据参数信息找到设备。
21304 设备: %s , 不在线 设备离线,无法下发服务
21315 物模型标识符不存在:%s 产品下功能定义不存在
21320 物模型标识符使用异常:%s 该标识符非服务标识符
21321 物模型元素值校验失败:%s 元素值类型错误
21305 设备响应超时 %s 设备超时未响应,或设备处理超时
21351 设备处理时,发生错误:%s 设备处理属性设置失败
21352 设备端繁忙,请稍后再试:%s 请求过于频繁,设备端处理不过来
21353 请求参数错误, 设备入参校验失败:%s 请求参数错误,设备无法识别
21316 设备响应失败:%s 设备响应的未知异常

# 5.3.3 查询设备属性快照

调用该接口查询指定设备的属性快照。

相对 URI HTTP 方式
/iot/v2/thing/queryDevicePropertyStatus get

请求参数

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回数据

名称 类型 示例值 描述
did String 151515111111 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
propertyStatusInfo Object
-identifier String Temperture 属性标识符。
-time String 1517553572362 属性修改的时间,单位是毫秒。
-value Object 25 属性值。

示例

请求示例

https://api-eg.smartihw.com:1443/open/device-configuration/iot/v2/thing/queryDevicePropertyStatus

{
  "did":"6800675159679172608",
}

正常返回示例

{
  "msg":"操作成功",
  "code":0,
  "data":{
    "did":"151515111111",
    "propertyStatusInfo": [
      {
        "value": "48",
        "time": "1579249151178",
        "identifier": "Humidity",				
      },
      {
        "value": "32.46",
        "time": "1579249151178",
        "identifier": "Temperature",
      }
    ]
  }
}

# 5.3.4 批量查询设备属性快照

调用该接口批量查询设备的属性快照。

相对URI HTTP 方式
/iot/thing/batchQueryDevicePropertyStatus post

请求参数

名称 类型 是否必选 示例值 描述
dids List<String> 6800675159679172608 设备ID。平台为该设备颁发的ID,设备的唯一标识符。

返回数据

名称 类型 示例值 描述
did String 6800675159679172*** 设备did
propertyStatusInfo
-identifier String Temperture 属性标识符。
-time String 1517553572362 属性修改的时间,单位是毫秒。
-value Object 25 属性值。

示例

请求示例

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/batchQueryDevicePropertyStatus

{
  "dids":[
    "6800675159679172***",
    "6736933959340392***"
  ]
}

正常返回示例

{
    "msg":"操作成功",
    "code":0,
    "data":[
        {
            "did:":"6800675159679172***",
            "propertyStatusInfo":[
                {
                    "value":"48",
                    "time":"1579249151178",
                    "identifier":"Humidity"
                },
                {
                    "value":"32.46",
                    "time":"1579249151178",
                    "identifier":"Temperature"
                }
            ]
        }
    ]
}

# 5.3.5 查询设备影子

调用该接口查询指定设备的影子信息。

相对 URI HTTP 方式
/iot/devices/getDeviceShadow get

请求参数定义:

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

返回的 data 消息体定义:

名称 类型 描述
desired Object 设备的预期状态。仅当设备影子文档具有预期状态时,才包含desired部分。应用程序向desired部分写入数据,更新事物的状态,而无需直接连接到该设备。
reported Object 设备的报告状态。设备可以在reported部分写入数据,报告其最新状态。应用程序可以通过读取该参数值,获取设备的状态。JSON文档中也可以不包含reported部分,没有reported部分的文档同样为有效影子JSON文档。
metadata Object 当用户更新设备状态文档后,设备影子服务会自动更新metadata的值。设备状态的元数据的信息包含以 Epoch 时间表示的每个属性的时间戳,用来获取准确的更新时间。
timestamp Long 影子文档的最新更新时间。
version Long 用户主动更新版本号时,设备影子会检查请求中的version值是否大于当前版本号。如果大于当前版本号,则更新设备影子,并将version值更新到请求的版本中,反之则会拒绝更新设备影子。 该参数更新后,版本号会递增,用于确保正在更新的文档为最新版本。 version参数为long型。为防止参数溢出,您可以手动传入-1将版本号重置为0。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/getDeviceShadow?did=6736933959340392448

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
      "state": {
          "desired": {
              "color": "RED", 
              "sequence": [
                  "RED", 
                  "GREEN", 
                  "BLUE"
              ]
          }, 
          "reported": {
              "color": "GREEN"
          }
      }, 
      "metadata": {
          "desired": {
              "color": {
                  "timestamp": 1650619456994
              }, 
              "sequence": {
                  "timestamp": 1650619456994
              }
          }, 
          "reported": {
              "color": {
                  "timestamp": 1650619456994
              }
          }
      }, 
      "timestamp": 1650619456994, 
      "version": 1
  }
}

# 5.3.6 修改设备影子

调用该接口修改指定设备的影子信息。

相对 URI HTTP 方式
/iot/v2/devices/updateDeviceShadow put

请求参数定义:

名称 类型 是否必选 含义
did String 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
shadow Object 修改后的设备影子信息。
-method String 取固定值 update
-version Long 备影子的版本,必须大于当前影子版本。
-state Object 发送给影子的具体状态
--desired Object 期望的影子状态

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/v2/devices/updateDeviceShadow

{
    "did":"6741996731459698688",
    "shadow":{
        "method":"update",
        "state":{
            "desired":{
                "color":"green"
            }
        },
        "version":2
    }
}

返回示例:

{
    "msg":"操作成功",
    "code":0
}

# 5.3.7 查询设备事件上报记录

调用该接口获取设备事件上报记录。

相对 URI HTTP 方式
/iot/thing/QueryDeviceEventData get

请求参数定义:

名称 类型 是否必选 示例 含义
did String 6800675159679172608 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String light 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
pageNum Integer 1 页数
pageSize Integer 10 每页显示的条数 最大为100
isDesc Boolean true 是否倒序
identifier String TrailingAlarm 事件标识符
startTime Long 1649299946000 开始时间
endTime Long 1649299956000 结束时间

返回数据

名称 类型 示例值 描述
list
-name String 尾随告警 事件名称。
-identifier String TrailingAlarm 事件标识符。
-eventType String 1 事件类型 1信息 2告警 3故障。
-outputData String {"A":"B"} 事件输出参数
-time Long 1649299948000 事件采集时间

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/queryDeviceEventData?did=6914083768374407168&identifier=TrailingAlarm&pageNum=1&pageSize=10

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "totalPages": 1,
    "total": 4,
    "list": [
      {
        "name": "尾随告警",
        "identifier": "TrailingAlarm",
        "eventType": 2,
        "outputData": "{\"status\":0}",
        "time": 1649299948000
      },
      {
        "name": "尾随告警",
        "identifier": "TrailingAlarm",
        "eventType": 2,
        "outputData": "{\"status\":1}",
        "time": 1649299949000
      }
    ]
  }
}

# 5.3.8 查询设备事件最新记录

调用该接口获取设备事件的最新记录。

相对 URI HTTP 方式
/iot/thing/queryNearestDeviceEvent get

请求参数定义:

名称 类型 是否必选 示例 含义
did String 6800675159679172608 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String light 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/queryNearestDeviceEvent?did=6914083768374407168

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":[
        {
            "name":"尾随告警",
            "identifier":"TrailingAlarm",
            "eventType":2,
            "outputData":"{\"status\":1}",
            "time":1649299949000
        },
        {
            "name":"心跳事件",
            "identifier":"heartbeat",
            "eventType":1,
            "outputData":"{\"appVersion\":\"1.0\",\"version\":\"1.2\",\"simCard\":\"89860446101970351079\"}",
            "time":1649299949000
        },
        {
            "name":"玻璃门告警事件",
            "identifier":"GlassDoorAlarm",
            "eventType":2,
            "outputData":"{\"status\":0}",
            "time":1649299949000
        }
    ]
}

# 5.3.9 查询设备属性上报记录

调用该接口获取设备属性上报记录。

相对 URI HTTP 方式
/iot/thing/queryDevicePropertyData get

请求参数定义:

名称 类型 是否必选 示例 含义
did String 6800675159679172608 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String light 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
pageNum Integer 1 页数
pageSize Integer 10 每页显示的条数 最大为100
isDesc Boolean true 是否倒序
identifier String TrailingAlarm 属性标识符
startTime Long 1649299946000 开始时间
endTime Long 1649299956000 结束时间

返回数据

名称 类型 示例值 描述
list
-name String 尾随告警 属性名称。
-identifier String TrailingAlarm 属性标识符。
-type String float 数据类型
-value String 3295.0 采集值
-time Long 1649299948000 采集值采集时间

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/queryDevicePropertyData?did=6890539992360259584&pageNum=1&pageSize=10

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "totalPages": 1,
    "total": 2,
    "list": [
	  {
        "name": "沼气浓度",
        "identifier": "ch4",
        "type": "float",
        "value": "0.0",
        "time": 1652695059000
      },
      {
        "name": "电压",
        "identifier": "voltage",
        "type": "float",
        "value": "3295.0",
        "time": 1652695059000
      }
    ]
  }
}

# 5.3.10 查询设备服务调用记录

调用该接口获取设备服务调用记录。

相对 URI HTTP 方式
/iot/thing/queryDeviceServiceData get

请求参数定义:

名称 类型 是否必选 示例 含义
did String 6800675159679172608 设备ID。平台为该设备颁发的ID,设备的唯一标识符。
deviceNumber String light 设备名称。说明 如果传入该参数,需同时传入productKey。
productKey String a1BwAGV 设备所隶属的产品productKey。说明 如果传入该参数,需同时传入deviceNumber。
pageNum Integer 1 页数
pageSize Integer 10 每页显示的条数 最大为100
isDesc Boolean true 是否倒序
identifier String AddKey 服务标识符
startTime Long 1649299946000 开始时间
endTime Long 1649299956000 结束时间

返回数据

名称 类型 示例值 描述
list
-name String 尾随告警 服务名称。
-identifier String TrailingAlarm 服务标识符。
-input String float 服务输入参数
-output String 3295.0 服务输出参数
-messageId Long 1649299948000 消息id

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/queryDeviceServiceData?did=6890539992360259584&pageNum=1&pageSize=10

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "totalPages": 1,
    "total": 2,
    "list": [
	  {
        "name": "沼气浓度",
        "identifier": "ch4",
        "type": "float",
        "value": "0.0",
        "time": 1652695059000
      },
      {
        "name": "电压",
        "identifier": "voltage",
        "type": "float",
        "value": "3295.0",
        "time": 1652695059000
      }
    ]
  }
}

# 5.4 物模型管理

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.4.1 查询物模型TSL

调用该接口为查询产品对应物模型。

相对 URI HTTP 方式
/iot/thing/queryThingModel get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品Key

返回的 data 消息体定义:

名称 类型 示例值 描述
profile ThingProfileDTO 物模型概述
properties List<ThingElementDTO> 属性列表
events List<ThingElementDTO> 事件列表
services List<ThingElementDTO> 服务列表

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/thing/queryThingModel?productKey=Ysob4TcEyDN

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "profile": {
      "version": "1",
      "productKey": "Ysob4TcEyDN",
      "productName": "智能门锁a110",
      "authType": 1,
      "modelCode": "yda110",
      "cateCode": "ZNMSDEMO",
      "protocolType": "1"
    },
    "properties": [
      {
        "identifier": "RemainBattery",
        "name": "剩余电量",
        "dataType": {
          "type": "int32",
          "specs": {
            "min": "0",
            "max": "100",
            "step": "1"
          }
        },
        "accessMode": "rw",
        "required": 0,
        "desc": "",
        "method": "thing.event.property.post",
        "elementType": 1,
        "extDesc": "",
        "isStandard": 0
      }
    ],
    "events": [
      {
        "identifier": "DoorOpenNotification",
        "name": "开门通知",
        "required": 0,
        "desc": "",
        "method": "thing.event.DoorOpenNotification.post",
        "elementType": 2,
        "eventType": 1,
        "outputData": [
          {
            "identifier": "LockType",
            "name": "开锁方式",
            "type": "enum",
            "specs": {
              "0": "指纹",
              "1": "密码",
              "2": "卡",
              "3": "机械钥匙"
            },
            "dataType": 2
          },
          {
            "identifier": "KeyId",
            "name": "钥匙ID",
            "type": "text",
            "specs": {
              "length": "256"
            },
            "dataType": 2
          }
        ],
        "inputData": [],
        "extDesc": "",
        "isStandard": 0
      }
    ],
    "services": [
      {
        "identifier": "AddKey",
        "name": "添加钥匙",
        "required": 0,
        "desc": "",
        "method": "thing.service.AddKey",
        "callType": 2,
        "elementType": 3,
        "outputData": [
          {
            "identifier": "KeyId",
            "name": "钥匙ID",
            "type": "text",
            "specs": {
              "length": "256"
            },
            "dataType": 2
          }
        ],
        "inputData": [
          {
            "identifier": "LockType",
            "name": "开锁方式",
            "type": "enum",
            "specs": {
              "0": "指纹",
              "1": "密码",
              "2": "卡",
              "3": "机械钥匙"
            },
            "dataType": 1
          },
          {
            "identifier": "UserLimit",
            "name": "用户权限",
            "type": "enum",
            "specs": {
              "1": "普通用户",
              "2": "管理员"
            },
            "dataType": 1
          }
        ],
        "extDesc": "",
        "isStandard": 0
      }
    ]
  }
}

# 5.5 OTA

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.5.1 查询设备升级任务

获取设备当前升级任务信息

相对 URI HTTP 方式
/iot/devices/getUpgradeInfo get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
deviceNumber String 设备编码
did String 设备did

返回的 data 消息体定义:

名称 类型 示例值 描述
packageId String PGI2Lk1Y6xHIS7lg0V7VDaqEKGyWcI 升级包id
packageName String 睿讲升级包1 升级包名称
packageType Integer 0 升级包类型 0-整包
packageVersion String v2.0.1 升级包版本号
versionCode Integer 1 版本编号
isImportant Integer 0 是否关键版本 0:否 1:是
fileSize Long 12517740 升级包大小 字节
signatureAlgorithm Integer 0 签名算法 0-MD5
signature String 18b2c6fe77dacd00f680ff0954ffcc5d 签名
description String 更新内容... 升级包描述
createTime Long 1623140684000 创建时间

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/getUpgradeInfo?did=cd5b278848bb44b3

返回示例:

{
  "success":true,
  "msg":"操作成功",
  "code":0,
  "data":{
  "packageId":"PGI2Lk1Y6xHIS7lg0V7VDaqEKGyWcI",
  "packageName":"睿讲升级包1",
  "packageType":0,
  "packageVersion":"v2.0.1",
  "versionCode":0,
  "isImportant":0,
  "fileSize":12517740,
  "signatureAlgorithm":0,
  "signature":"18b2c6fe77dacd00f680ff0954ffcc5d",
  "description":"1111",
  "createTime":1623140684000
  }
}

# 5.5.2 升级设备

远程升级设备

相对 URI HTTP 方式
/iot/devices/upgradeDevice post

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
deviceNumber String 设备编码
did String 设备did

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/upgradeDevice

{
	"did":"123123xx"
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.6 设备日志

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.6.1 触发设备上传日志

触发设备上传日志

相对 URI HTTP 方式
/iot/devices/triggerDeviceLogs post

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
deviceNumber String 设备编码
did String 设备did

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/triggerDeviceLogs

{
	"did":"123123xx"
}

返回示例:

{
  "msg":"操作成功",
  "code":0
}

# 5.6.2 查询设备上传日志列表

触发设备上传日志

相对 URI HTTP 方式
/iot/devices/queryDeviceLogs get

请求参数定义:

名称 类型 是否必选 含义
productKey String 产品key
deviceNumber String 设备编码
did String 设备did
startTime Lonng 开始时间
endTime Lonng 结束时间
pageNum Integer 当前页数
pageSize Integer 每页显示多少条

返回的 data 消息体定义:

名称 类型 示例值 描述
id Long 1151 文件id
fileName String 17.log 文件名称
fileStatus Integer 1 日志状态 0:上传中 1:上传成功 2:上传失败
createTime Long 1623140684000 创建时间

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/queryDeviceLogs

{
	"did":"123123xx",
    "pageNum": 1,
    "pageSize": 2
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":{
        "pageNum":1,
        "pageSize":2,
        "totalPages":313,
        "total":626,
        "list":[
            {
                "id":1056,
                "fileName":"log9.zip",
                "fileStatus":1,
                "createTime":1636972015000
            },
            {
                "id":1055,
                "fileName":"log1.zip",
                "fileStatus":1,
                "createTime":1636709450000
            }
        ]
    }
}

# 5.6.3 获取设备日志下载地址

触发设备上传日志

相对 URI HTTP 方式
/iot/devices/downloadDeviceLogs post

请求参数定义:

名称 类型 是否必选 含义
ids List<long> 文件id数组

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/devices/downloadDeviceLogs

{
	"ids":[
        1001,1002
    ]
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":[
        {
            "id":123,
            "downloadUrl":"https://intelligenthardware-stg.oss-cn-shenzhen.aliyuncs.com/10211/9ad2a14f-b3bf-4d2e-bfc9-7259655cbb69/log9.zip?response-content-disposition=attachment&Expires=1637634633&OSSAccessKeyId=LTAI4G3wdbddvj4skCK98UWP&Signature=iItvl2o7R29jOW2vPmMR138g6P0%3D"
        }
    ]
}

# 5.7 场景联动

请求路径

https://[host]:[port]/open/rule-engine/{api}

# 5.7.1 创建规则

应用服务器可调用此接口在IoT PaaS创建一条规则,当指定设备上报的数据满足条件时,触发规则。

相对 URI HTTP 方式
/iot/rules post

请求参数

名称 类型 是否必选 位置 含义
name String body 参数说明:规则名称。
description String body 参数说明:规则的描述信息。
triggers List<Trigger> body 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> body 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> body 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String body 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String body 参数说明:规则的状态,默认值:INACTIVE。取值范围:ACTIVE:激活。INACTIVE:未激活。

表 RuleTrigger

名称 类型 是否必选 位置 含义
type String body 参数说明:规则条件的类型。取值范围:DEVICE_TRIGGER:设备触发TIME_TRIGGER:时间触发
deviceTrigger DeviceTrigger Object body 参数说明:条件中设备数据类型的信息,当type为DEVICE_TRIGGER时,为必选参数
timeTrigger TimeTrigger Object body 参数说明:时间触发器信息

表 DeviceTrigger

名称 类型 是否必选 位置 含义
type String body 参数说明:规则条件的类型。取值范围:PROPERTY_TRIGGER:属性触发。EVENT_TRIGGER:事件触发。STATUS_TRIGGER:上下线触发
deviceNumber String body 参数说明:设备编码,用于唯一标识一个设备,在注册设备时由IoT PaaS分配获得。当ruleType为DEVICE_LINKAGE时,该参数值和productKey不能同时为空。如果该参数和productKey同时存在时,以该参数值对应的设备进行条件过滤。取值范围:长度不超过64,只允许字母、数字、下划线()、连接符(-)的组合。取值范围:长度不超过64,只允许字母、数字、下划线()、连接符(-)的组合。
productKey String body 参数说明:设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。当ruleType为DEVICE_LINKAGE时,如果该参数和deviceNumber同时存在时,以deviceNumber参数值对应的设备进行条件过滤。
propertyTrigger Property (opens new window)Trigger Object body 参数说明:数据触发条件type为PROPERTY_TRIGGER时填写。为空:代表全部属性非空:按照实际属性判断
statusTrigger String body 参数说明:在线状态触发条件ON: 上线触发OFF:下线触发ALL: 上线线触发
eventTrigger EventTrigger Object body 参数说明:事件触发条件type为EVENT_TRIGGER时填写。为空:代表全部事件非空:按照事件条件判断

Property (opens new window)Trigge

名称 类型 是否必选 位置 含义
identifier String body 参数说明:设备属性的标识符
operator String body 参数说明:数据比较的操作符。取值范围:支持的操作符有:>,<,>=,<=,=和between:表示数值区间。
value String body 参数说明:数据比较表达式的右值。与数据比较操作符between联用时,右值表示最小值和最大值,用逗号隔开,如“20,30”表示大于等于20小于30。

表 EventTrigger

名称 类型 是否必选 位置 含义
identifier String body 参数说明:事件的标识符

表 timeTrigger

名称 类型 是否必选 位置 含义
cron String body 参数说明:cron表达式Cron表达式填写方式:Cron表达式仅支持5位,不支持秒;您可以参考 详细表达式 (opens new window)

表 RuleCondition

名称 类型 是否必选 位置 含义
type String body 参数说明:规则条件的类型。取值范围:DEVICE_PROPERTY:设备数据类型条件。TIME_RANGE:规则条件触发的有效时间段
devicePropertyCondition DevicePropertyCondition Object body 参数说明:条件中设备数据类型的信息,当type为DEVICE_PROPERTY时,为必选参数
timeRange TimeRange Object body 参数说明:规则条件触发的有效时间段当type为TIME_RANGE时,为必选参数

表 DevicePropertyCondition

名称 类型 是否必选 位置 含义
deviceNumber String body 参数说明:设备编码,用于唯一标识一个设备,在注册设备时由IoT PaaS分配获得。当ruleType为DEVICE_LINKAGE时,该参数值和productKey不能同时为空。如果该参数和productKey同时存在时,以该参数值对应的设备进行条件过滤。 取值范围:长度不超过64,只允许字母、数字、下划线(_)、连接符(-)的组合。
productKey String body 参数说明:设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。当ruleType为DEVICE_LINKAGE时,如果该参数和deviceNumber同时存在时,以deviceNumber参数值对应的设备进行条件过滤。
propertyFilter PropertyFilter Object body 参数说明:数据过滤条件

表 PropertyFilter

名称 类型 是否必选 位置 含义
identifier String body 参数说明:设备属性的标识符
operator String body 参数说明:数据比较的操作符。取值范围:支持的操作符有:>,<,>=,<=,=和between:表示数值区间。
value String body 参数说明:数据比较表达式的右值。与数据比较操作符between联用时,右值表示最小值和最大值,用逗号隔开,如“20,30”表示大于等于20小于30。

表 TimeRange

名称 类型 是否必选 位置 含义
rangeType String body 参数说明:范围类型 TIME:时间类型(startTime和endTime必填) WEEK_DAY:周类型 (daysOfWeek必填)
startTime String body 参数说明:时间可以从任意一个字段开始填,之前的字段用“”占位,之后字段必须全部填写,起始时间和结束时间省略的字段需要保持一致,否则视为非法输入。例如起始时间输入***-- 18:00:00,结束时间输入****-- 21:00:00,表示从规则创建的天开始,每一天的18点到21点为执行条件。
endTime String body 参数说明:时间可以从任意一个字段开始填,之前的字段用“”占位,之后字段必须全部填写,起始时间和结束时间省略的字段需要保持一致,否则视为非法输入。例如起始时间输入***-- 18:00:00,结束时间输入****-- 21:00:00,表示从规则创建的天开始,每一天的18点到21点为执行条件。
daysOfWeek String body 参数说明:周几 可选项为1-7,分表代表周一至周日,多选的情况下以逗号“,” 进行拼接

表 RuleAction

名称 类型 是否必选 位置 含义
type String body 参数说明:规则动作的类型。取值范围:DEVICE_PROPERTY_ACTION:下发设备属性设置消息类型。ALARM_ACTION:上报设备告警消息类型。当选择该类型时,condition中必须有DEVICE_PROPERTY条件类型。该类型动作只能唯一。RULE_ID_ACTION: 执行触发规则
devicePropertyAction DevicePropertyAction Object body 参数说明:下发设备命令消息内容。当type为DEVICE_PROPERTY_ACTION时,必填。
alarmAction AlarmAction Object body 参数说明:上报设备告警消息内容。当type为ALARM_ACTION时,必填。
ruleIdAction RuleIdAction Object body 参数说明:执行触发规则。当type为RULE_ID_ACTION时,必填。

表 DevicePropertyAction

名称 类型 是否必选 位置 含义
deviceNumber String body 参数说明:下发属性命令的设备ID。
productKey String body 参数说明:下发属性命令的产品Key。
propertyAction PropertyActionObject body 参数说明:下发属性命令信息。

表 PropertyAction

名称 类型 是否必选 位置 含义
identifier String body 参数说明:设备属性标识符。
value String body 参数说明:设备属性的值
delayTime Integer body 取值范围 0 ~ 86400 秒

表 RuleIdAction

名称 类型 是否必选 位置 含义
ruleId String body 参数说明:规则Id
actionType String body 参数说明:规则动作 触发:TRIGGER、启用:ACTIVE、停用:INACTIVE
delayTime Integer body 取值范围 0 ~ 86400 秒

表 AlarmAction

名称 类型 是否必选 位置 含义
alarmId String body 参数说明:告警Id
delayTime Integer body 取值范围 0 ~ 86400 秒
名称 类型 是否必选 位置 含义
name String body 参数说明:告警名称。
alarmStatus String body 参数说明:告警状态。取值范围:fault:上报告警。recovery:恢复告警。
severity String body 参数说明:告警级别。取值范围:minor(一般)、major(严重)和critical(致命)。
description String body 参数说明:告警的描述信息。

返回数据

名称 类型 示例值 描述
ruleId String 规则id。
name String 规则名称。
description String 规则的描述信息。
triggers List<RuleTrigger> 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String 参数说明:规则的状态,默认值:active。取值范围:ACTIVE:激活。INACTIVE:未激活。
lastUpdateTime long 规则最后更新时间,时间搓。(ms)
edgeNodeDevice List<EdgeNodeDevice> 归属边缘侧节点设备列表。

表 EdgeNodeDevice

名称 类型 是否必选 位置 含义
did String body 参数说明:设备did
productKey String body 参数说明:产品Key
deviceNumber String body 参数说明:设备编码

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules

{
    "name":"测试规则",
    "description":"desc",
    "productKey":"",
    "projectId":"",
    "triggers":[
        {
            "deviceTrigger":{
                "propertyTrigger":{
                    "identifier":"CO2",
                    "operator":">",
                    "value":"10"
                },
                "eventTrigger":{
                    "identifier":null,
                    "outputDataIdentifier":null,
                    "operator":null,
                    "value":null
                },
                "productKey":"625MmdVruV4",
                "deviceNumber":"eee0000000000111",
                "type":"PROPERTY_TRIGGER"
            },
            "timeTrigger":{

            },
            "type":"DEVICE_TRIGGER"
        }
    ],
    "conditions":[
        {
            "devicePropertyCondition":{
                "propertyFilter":{
                    "identifier":null
                },
                "productKey":null,
                "deviceNumber":null
            },
            "timeRange":{
                "rangeType":"WEEK_DAY",
                "daysOfWeek":"6,7"
            },
            "type":"TIME_RANGE"
        }
    ],
    "actions":[
        {
            "devicePropertyAction":{
                "propertyAction":{
                    "identifier":"WorkStatus",
                    "value":"1"
                },
                "productKey":"Gk11757LUkf",
                "deviceNumber":"kk20220825"
            },
            "ruleIdAction":{

            },
            "alarmAction":null,
            "type":"DEVICE_PROPERTY_ACTION"
        }
    ],
    "status":"INACTIVE",
    "ruleType":"DEVICE_LINKAGE"
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":{
        "ruleId":"1610573365187497985",
        "name":"测试规则",
        "description":"desc",
        "triggers":[
            {
                "type":"DEVICE_TRIGGER",
                "deviceTrigger":{
                    "type":"PROPERTY_TRIGGER",
                    "deviceNumber":"eee0000000000111",
                    "productKey":"625MmdVruV4",
                    "propertyTrigger":{
                        "identifier":"CO2",
                        "operator":">",
                        "value":"10"
                    },
                    "statusTrigger":null,
                    "eventTrigger":{
                        "identifier":null,
                        "outputDataIdentifier":null,
                        "operator":null,
                        "value":null
                    }
                },
                "timeTrigger":{
                    "cron":null
                }
            }
        ],
        "conditions":[
            {
                "type":"TIME_RANGE",
                "devicePropertyCondition":{
                    "deviceNumber":null,
                    "productKey":null,
                    "propertyFilter":{
                        "identifier":null,
                        "operator":null,
                        "value":null
                    }
                },
                "timeRange":{
                    "rangeType":"WEEK_DAY",
                    "startTime":null,
                    "endTime":null,
                    "daysOfWeek":"6,7 "
                }
            }
        ],
        "actions":[
            {
                "type":"DEVICE_PROPERTY_ACTION",
                "devicePropertyAction":{
                    "deviceNumber":"kk20220825",
                    "productKey":"Gk11757LUkf",
                    "propertyAction":{
                        "identifier":"WorkStatus",
                        "value":"1",
                        "delayTime":null
                    }
                },
                "alarmAction":null,
                "ruleIdAction":{
                    "ruleId":null,
                    "actionType":null,
                    "delayTime":null
                }
            }
        ],
        "ruleType":"DEVICE_LINKAGE",
        "status":"INACTIVE",
        "lastUpdateTime":1672825587924,
        "edgeNodeDevice":[

        ],
        "projectId":"",
        "productKey":""
    }
}

# 5.7.2 查询规则列表

应用服务器可调用此接口查询IoT PaaS中设置的规则列表。

相对 URI HTTP 方式
/iot/rules get

请求参数

名称 类型 是否必选 位置 含义
limit Integer body 参数说明:当前获取的条数限制取值范围:1-50的整数,默认值为10,最大获取50条数据。
last String body 参数说明:上一次分页查询结果中最后一条规则的ID。为空:则默认从起始位置开始获取规则。否则:从last的后一条数据开始获取分页数据。
did String body 参数说明:设备did
productKey String body 参数说明:产品Key (当通过三元组信息筛选时,该值必填)
deviceNumber String body 参数说明:设备编码(当通过三元组信息筛选时,该值必填)

返回数据

名称 类型 示例值 描述
last String 最后一条规则的id
rules List<RuleResponse> 规则信息列表。

表1 RuleResponse

名称 类型 示例值 描述
ruleId String 规则id。
name String 规则名称。
description String 规则的描述信息。
triggers List<RuleTrigger> 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String 参数说明:规则的状态,默认值:active。取值范围:ACTIVE:激活。INACTIVE:未激活。
lastUpdateTime long 规则最后更新时间,时间搓。(ms)
edgeNodeDevice List<EdgeNodeDevice> 归属边缘侧节点设备列表。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules?last=1608359102519668737&limit=1

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "last": "1610573365187497985",
    "rules": [
      {
        "ruleId": "1610573365187497985",
        "name": "测试规则",
        "description": "desc",
        "triggers": [
          {
            "type": "DEVICE_TRIGGER",
            "deviceTrigger": {
              "type": "PROPERTY_TRIGGER",
              "deviceNumber": "eee0000000000111",
              "productKey": "625MmdVruV4",
              "propertyTrigger": {
                "identifier": "CO2",
                "operator": ">",
                "value": "10"
              },
              "statusTrigger": null,
              "eventTrigger": {
                "identifier": null,
                "outputDataIdentifier": null,
                "operator": ">",
                "value": "10"
              }
            },
            "timeTrigger": {
              "cron": null
            }
          }
        ],
        "conditions": [
          {
            "type": "TIME_RANGE",
            "devicePropertyCondition": {
              "deviceNumber": null,
              "productKey": null,
              "propertyFilter": {
                "identifier": null,
                "operator": null,
                "value": null
              }
            },
            "timeRange": {
              "rangeType": "WEEK_DAY",
              "startTime": null,
              "endTime": null,
              "daysOfWeek": "6,7 "
            }
          }
        ],
        "actions": [
          {
            "type": "DEVICE_PROPERTY_ACTION",
            "devicePropertyAction": {
              "deviceNumber": "kk20220825",
              "productKey": "Gk11757LUkf",
              "propertyAction": {
                "identifier": "WorkStatus",
                "value": "1",
                "delayTime": null
              }
            },
            "alarmAction": {
              "alarmId": null,
              "delayTime": null
            },
            "ruleIdAction": {
              "ruleId": null,
              "actionType": null,
              "delayTime": null
            }
          }
        ],
        "ruleType": "DEVICE_LINKAGE",
        "status": "INACTIVE",
        "lastUpdateTime": 1672825588000,
        "edgeNodeDevice": [],
        "projectId": "",
        "productKey": ""
      }
    ]
  }
}

# 5.7.3 查询规则

应用服务器可调用此接口查询IoT PaaS中指定规则的配置信息。

相对 URI HTTP 方式
/iot/rules/{ruleId} get

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。

返回数据

名称 类型 示例值 描述
ruleId String 规则id。
name String 规则名称。
description String 规则的描述信息。
triggers List<RuleTrigger> 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String 参数说明:规则的状态,默认值:active。取值范围:ACTIVE:激活。INACTIVE:未激活。
lastUpdateTime long 规则最后更新时间,时间搓。(ms)
edgeNodeDevice List<EdgeNodeDevice> 归属边缘侧节点设备ID列表。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "6,7 "
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "INACTIVE",
    "lastUpdateTime": 1672825588000,
    "edgeNodeDevice": [],
    "projectId": "",
    "productKey": ""
  }
}

# 5.7.4 修改规则

应用服务器可调用此接口修改IoT PaaS中指定规则的配置。

相对 URI HTTP 方式
/iot/rules/{ruleId} put

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。
name String body 参数说明:规则名称。
description String body 参数说明:规则的描述信息。
triggers List<RuleTrigger> body 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> body 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> body 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String body 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String body 参数说明:规则的状态,默认值:active。取值范围:ACTIVE:激活。INACTIVE:未激活。

返回数据

名称 类型 示例值 描述
ruleId String 规则id。
name String 规则名称。
description String 规则的描述信息。
triggers List<RuleTrigger> 参数说明:规则的触发器列表,单个规则最多支持设置10个触发器。
conditions List<RuleCondition> 参数说明:规则的条件列表,单个规则最多支持设置10个条件。
actions List<RuleAction> 参数说明:规则的动作列表,单个规则最多支持设置10个动作。
ruleType String 参数说明:规则的类型取值范围:DEVICE_LINKAGE:设备联动。
status String 参数说明:规则的状态,默认值:active。取值范围:ACTIVE:激活。INACTIVE:未激活。
lastUpdateTime long 规则最后更新时间,时间搓。(ms)
edgeNodeDevice List<EdgeNodeDevice> 归属边缘侧节点设备ID列表。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985

{
    "name":"测试规则",
    "description":"desc",
    "triggers":[
        {
            "type":"DEVICE_TRIGGER",
            "deviceTrigger":{
                "type":"PROPERTY_TRIGGER",
                "deviceNumber":"eee0000000000111",
                "productKey":"625MmdVruV4",
                "propertyTrigger":{
                    "identifier":"CO2",
                    "operator":">",
                    "value":"10"
                },
                "statusTrigger":null,
                "eventTrigger":{
                    "identifier":null,
                    "outputDataIdentifier":null,
                    "operator":">",
                    "value":"10"
                }
            },
            "timeTrigger":{
                "cron":null
            }
        }
    ],
    "conditions":[
        {
            "type":"TIME_RANGE",
            "devicePropertyCondition":{
                "deviceNumber":null,
                "productKey":null,
                "propertyFilter":{
                    "identifier":null,
                    "operator":null,
                    "value":null
                }
            },
            "timeRange":{
                "rangeType":"WEEK_DAY",
                "startTime":null,
                "endTime":null,
                "daysOfWeek":"5"
            }
        }
    ],
    "actions":[
        {
            "type":"DEVICE_PROPERTY_ACTION",
            "devicePropertyAction":{
                "deviceNumber":"kk20220825",
                "productKey":"Gk11757LUkf",
                "propertyAction":{
                    "identifier":"WorkStatus",
                    "value":"1",
                    "delayTime":null
                }
            },
            "alarmAction":{
                "alarmId":null,
                "delayTime":null
            },
            "ruleIdAction":{
                "ruleId":null,
                "actionType":null,
                "delayTime":null
            }
        }
    ],
    "ruleType":"DEVICE_LINKAGE",
    "status":"INACTIVE",
    "lastUpdateTime":1672825588000,
    "edgeNodeDevice":[

    ],
    "projectId":"",
    "productKey":""
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "INACTIVE",
    "lastUpdateTime": 1672883218085,
    "edgeNodeDevice": [],
    "projectId": "",
    "productKey": ""
  }
}

# 5.7.5 删除规则

应用服务器可调用此接口删除IoT PaaS中的指定规则。

相对 URI HTTP 方式
/iot/rules/{ruleId} delete

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "INACTIVE",
    "lastUpdateTime": 1672883218085,
    "edgeNodeDevice": [],
    "projectId": "",
    "productKey": ""
  }
}

# 5.7.6 修改规则状态

应用服务器可调用此接口删除IoT PaaS中的指定规则。该状态代表的是云端的运行状态,如果active,代表会按照触发器的规则进行触发运行,如果触发器为空则只能手动(接口)触发。

相对 URI HTTP 方式
/iot/rules/{ruleId}/status put

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。
status String body 参数说明:规则的激活状态。取值范围:ACTIVE:激活。INACTIVE:未激活。

返回数据

名称 类型 含义
status String 规则的激活状态。active:激活。inactive:未激活。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985/status

{
  "status": "ACTIVE"
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "ACTIVE",
    "lastUpdateTime": 1672883218000,
    "edgeNodeDevice": [],
    "projectId": "",
    "productKey": ""
  }
}

边缘节点/网关API

# 5.7.7 设备绑定规则

应用服务器可调用此接口把指定的规则绑定到设备上面,IoT PaaS会把规则下发到设备。

一旦绑定了设备的规则,在云端必须是非激活状态。

相对 URI HTTP 方式
/iot/rules/{ruleId}/bind put

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。
did String body 参数说明:边缘设备的did (did或三元组信息二选)
productKey String body 参数说明:产品Key (当通过三元组信息筛选时,该值必填)
deviceNumber String body 参数说明:设备编码(当通过三元组信息筛选时,该值必填)

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985/bind

{
  "did": "6222123"
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "ACTIVE",
    "lastUpdateTime": 1672883218000,
    "edgeNodeDevice": [
        {
          "deviceNumber": "1111111",
          "did": "6222123",
          "productKey": "dwqfwq"
        }
    ],
    "projectId": "",
    "productKey": ""
  }
}

# 5.7.8 设备解除绑定规则

应用服务器可调用此接口把指定的规则解除绑定到设备上面。

相对 URI HTTP 方式
/iot/rules/{ruleId}/unbind put

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。
did String body 参数说明:边缘设备的did (did或三元组信息二选)
productKey String body 参数说明:产品Key (当通过三元组信息筛选时,该值必填)
deviceNumber String body 参数说明:设备编码(当通过三元组信息筛选时,该值必填)

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985/unbind

{
  "did": "6222123"
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "ACTIVE",
    "lastUpdateTime": 1672883218000,
    "edgeNodeDevice": [],
    "projectId": "",
    "productKey": ""
  }
}

# 5.7.9 触发指定规则

应用服务器可调用此接口触发边缘设备执行规则。该规则是需要

相对 URI HTTP 方式
/iot/rules/{ruleId}/devices/trigger put

请求参数

名称 类型 是否必选 位置 含义
ruleId String path 参数说明:规则ID,用于唯一标识一条规则,在创建规则时由IoT PaaS分配获得。取值范围:长度不超过32,只允许字母、数字的组合。
did String body 参数说明:边缘设备的did (did或三元组信息二选)
productKey String body 参数说明:产品Key (当通过三元组信息筛选时,该值必填)
deviceNumber String body 参数说明:设备编码(当通过三元组信息筛选时,该值必填)

示例

请求示例:

https://api-eg.smartihw.com:1443/open/rule-engine/iot/rules/1610573365187497985/devices/trigger

{
  "did": "6222123"
}

返回示例:

{
  "success": true,
  "msg": "操作成功",
  "code": 0,
  "data": {
    "ruleId": "1610573365187497985",
    "name": "测试规则",
    "description": "desc",
    "triggers": [
      {
        "type": "DEVICE_TRIGGER",
        "deviceTrigger": {
          "type": "PROPERTY_TRIGGER",
          "deviceNumber": "eee0000000000111",
          "productKey": "625MmdVruV4",
          "propertyTrigger": {
            "identifier": "CO2",
            "operator": ">",
            "value": "10"
          },
          "statusTrigger": null,
          "eventTrigger": {
            "identifier": null,
            "outputDataIdentifier": null,
            "operator": ">",
            "value": "10"
          }
        },
        "timeTrigger": {
          "cron": null
        }
      }
    ],
    "conditions": [
      {
        "type": "TIME_RANGE",
        "devicePropertyCondition": {
          "deviceNumber": null,
          "productKey": null,
          "propertyFilter": {
            "identifier": null,
            "operator": null,
            "value": null
          }
        },
        "timeRange": {
          "rangeType": "WEEK_DAY",
          "startTime": null,
          "endTime": null,
          "daysOfWeek": "5"
        }
      }
    ],
    "actions": [
      {
        "type": "DEVICE_PROPERTY_ACTION",
        "devicePropertyAction": {
          "deviceNumber": "kk20220825",
          "productKey": "Gk11757LUkf",
          "propertyAction": {
            "identifier": "WorkStatus",
            "value": "1",
            "delayTime": null
          }
        },
        "alarmAction": {
          "alarmId": null,
          "delayTime": null
        },
        "ruleIdAction": {
          "ruleId": null,
          "actionType": null,
          "delayTime": null
        }
      }
    ],
    "ruleType": "DEVICE_LINKAGE",
    "status": "ACTIVE",
    "lastUpdateTime": 1672883218000,
    "edgeNodeDevice": [
        {
          "deviceNumber": "1111111",
          "did": "6222123",
          "productKey": "dwqfwq"
        }
    ],
    "projectId": "",
    "productKey": ""
  }
}

# 5.8 设备分组管理

请求路径

https://[host]:[port]/open/device-configuration/{api}

# 5.8.1 查询分组详情

调用该接口查询分组详情。

相对 URI HTTP 方式
/iot/groups/queryDeviceGroupInfo get

请求参数定义:

名称 类型 是否必选 含义
groupId String 分组ID

返回的 data 消息体定义:

名称 类型 是否必填 含义
deviceActive Integer 1 激活设备数量。
deviceCount Integer 10 设备总数。
deviceOnline Integer 0 在线设备数量。
groupId String tDQvBJqbUyHs**** 分组ID。
groupName String aliyun 分组名称。
createTime Long 1606210222000 创建时间。

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/groups/queryDeviceGroupInfo?groupId=tDQvBJqbUyHs***

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":{
        "deviceActive":1,
        "deviceCount":10,
        "deviceOnline":2,
        "groupId":"tDQvBJqbUyHs",
        "groupName":"传感器",
        "createTime":1649299949000
    }
}

# 5.8.2 查询分组中的设备列表

调用该接口查询分组中的设备列表。

相对 URI HTTP 方式
/iot/groups/queryDeviceListByDeviceGroup get

请求参数定义:

名称 类型 是否必选 含义
groupId String 分组ID
pageNum Integer 当前页 起始页为1
pageSize Integer 每页条数 最大值为100

返回的 data 消息体定义:

名称 类型 含义
-pageNum Integer 当前页
-pageSize Integer 每页条数
-totalPages Integer 总页数
-total Long 总条数
-list List 设备列表
deviceName String 设备名称
deviceNumber String 设备编码
deviceName String 设备名称
deviceSecret String 设备秘钥
did String DID
productKey String 产品Key
modelCode String 产品型号编码
createTime Long 创建时间
updateTime Long 修改时间
networkStatus Integer 在线状态 1:在线 2:离线
enable Integer 启用状态 0已启用 1未启用
version String 设备版本号

示例

请求示例:

https://api-eg.smartihw.com:1443/open/device-configuration/iot/groups/queryDeviceListByDeviceGroup?groupId=tDQvBJqbUyHs***&pageNum=1&pageSize=10

返回示例:

{
    "id":"123",
    "code":200,
    "data":{
        "pageNum":1,
        "pageSize":10,
        "totalPages":25,
        "total":250,
        "list":[
            {
                "deviceNumber":"万睿摄像头1",
                "deviceName":"DJIEDN11120",
                "deviceSecret":"wzir73vq140xmq4cc11pyjsl6gcy2rvt",
                "did":"6736933959340392000",
                "productKey":"O0EvS9jGGII",
                "modelCode":"mj1010101",
                "createTime":1606210222000,
                "updateTime":1606210222000,
                "networkStatus":1,
                "enable":0,
                "version":"1.0.1"
            }
        ]
    }
}

# 5.9 项目管理

请求路径

https://[host]:[port]/open/basic-data/{api}

# 5.9.1 创建项目

调用该接口创建项目。

相对 URI HTTP 方式
/projects post

请求参数定义:

名称 类型 是否必选 含义
projectName String 项目名称
abbreviation String 名称简称
projectType Integer 项目类型,默认值0;0:住宅;1:商写
longitude Double 项目经度
latitude Double 项目纬度
address String 地址
adAreaCode String 行政区编码
managementArea Double 管理面积
sourceCode String 公共组件数据源code
code String 主数据编码
shangqiCode String 商企编码
srCode String 百川云编码
parentId Long 上级项目id
projectFormat Integer 项目业态,默认值0;1:住宅;2:商业;3:城市
takeOverTime Long 接管时间
planningHouseholds Integer 规划总户数
totalTakeOverRoom Integer 接管总户数
staffing Integer 人员编制
onDutyTotal Integer 在岗人数
orgIds Long[] 组织ID数组
projectCode String 项目编码
dataSource Integer 数据来源,默认值1;1:自建数据;2:主数据
userName String 用户名
userId Long 用户ID

返回的 data 消息体定义:

名称 类型 是否必填 含义
data Long 项目ID

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/projects

{
    "projectCode":"i000163601",
    "projectName":"Test1",
    "address":"新一代产业园",
    "orgIds":[
        13
    ],
    "projectFormat":2
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":245211
}

# 5.9.2 修改项目

调用该接口修改项目。

相对 URI HTTP 方式
/projects put

请求参数定义:

名称 类型 是否必选 含义
id Long 项目ID
projectName String 项目名称
abbreviation String 名称简称
projectType Integer 项目类型,默认值0;0:住宅;1:商写
longitude Double 项目经度
latitude Double 项目纬度
address String 地址
adAreaCode String 行政区编码
managementArea Double 管理面积
sourceCode String 公共组件数据源code
code String 主数据编码
shangqiCode String 商企编码
srCode String 百川云编码
parentId Long 上级项目id
projectFormat Integer 项目业态,默认值0;1:住宅;2:商业;3:城市
takeOverTime Long 接管时间
planningHouseholds Integer 规划总户数
totalTakeOverRoom Integer 接管总户数
staffing Integer 人员编制
onDutyTotal Integer 在岗人数
orgIds Long[] 组织ID数组
projectCode String 项目编码
dataSource Integer 数据来源,默认值1;1:自建数据;2:主数据
userName String 用户名
userId Long 用户ID

返回的 data 消息体定义:

名称 类型 是否必填 含义
data Long 项目ID

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/projects

{
	"id":245211
    "projectCode":"i000163601",
    "projectName":"Test1",
    "address":"新一代产业园",
    "orgIds":[
        13
    ],
    "projectFormat":2
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0
}

# 5.9.3 删除项目

调用该接口删除项目。

相对 URI HTTP 方式
/projects delete

请求参数定义:

名称 类型 是否必选 含义
id Long 项目ID

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/projects?id=245211

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0
}

# 5.10 空间管理

请求路径

https://[host]:[port]/open/basic-data/{api}

# 5.10.1 创建空间

调用该接口创建空间。

相对 URI HTTP 方式
/spaces post

请求参数定义:

名称 类型 是否必选 含义
spaceName String 空间名称(必填)
spaceType Integer 空间类型(必填)10:围合,20:楼栋,30:单元,40:楼层,50:室内空间(51:,52,53,) 60:US街道 70:US河流管理 80:US管廊 90:US社区 100:US河段 110:US分段 120:US路段 130:US公园 140:US桥梁 150:US楼栋 160:US楼层 170:US空间
innerSpaceType String 室内空间类型(空间类型为50时选填如:会议室
innerSpaceTypeCode String 室内空间类型编码
layoutName String 户型名称
projectId Long 项目ID(必填)
parentId Long 父空间ID(必填;如果是在项目下,父空间ID传projectId)
sort Integer 排序(必填)
version Integer 版本号
dataSource Integer 数据来源 1:自建,2:主数据
code String 主数据编码
sourceCode String 公共组件数据源code
longitude Double 经度
latitude Double 纬度
address String 地址
spaceName String 空间名称(必填)
spaceCode String 空间Code默认不填
parentPath String 父空间path(必填;如果是在项目下级,父空间path如: 21
thirdPartyName String 第三方系统名称
thirdPartySpaceCode String 第三方系统空间编码

返回的 data 消息体定义:

名称 类型 含义
spaceName String 空间名称(必填)
spaceType Integer 空间类型(必填)10:围合,20:楼栋,30:单元,40:楼层,50:室内空间(51:,52,53,) 60:US街道 70:US河流管理 80:US管廊 90:US社区 100:US河段 110:US分段 120:US路段 130:US公园 140:US桥梁 150:US楼栋 160:US楼层 170:US空间
innerSpaceType String 室内空间类型(空间类型为50时选填如:会议室
innerSpaceTypeCode String 室内空间类型编码
layoutName String 户型名称
projectId Long 项目ID(必填)
parentId Long 父空间ID(必填;如果是在项目下,父空间ID传projectId)
sort Integer 排序(必填)
version Integer 版本号
dataSource Integer 数据来源 1:自建,2:主数据
code String 主数据编码
sourceCode String 公共组件数据源code
longitude Double 经度
latitude Double 纬度
address String 地址
Long id 空间ID
String spaceCode 空间编码
LocalDateTime createTime 创建时间
String createUser 创建人
LocalDateTime updateTime 更新时间
String updateUser 更新人
String path 路径
Integer isDel 0表示未删除;1删除
String linkName 空间名路径
String thirdPartyName 第三方系统名称
Integer parentSpaceType 父级空间类型
String thirdPartySpaceCode 第三方系统空间编码

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/spaces

{
    "spaceType":20,
    "spaceName":"test1空间",
    "sort":1,
    "projectId":245211,
    "parentId":245211,
    "parentPath":"245211,"
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0,
    "data":{
        "spaceName":"test1空间",
        "spaceType":20,
        "innerSpaceType":"",
        "innerSpaceTypeCode":null,
        "layoutName":"",
        "projectId":245211,
        "parentId":245211,
        "sort":1,
        "version":0,
        "dataSource":1,
        "code":"",
        "sourceCode":"",
        "longitude":null,
        "latitude":null,
        "address":null,
        "userName":null,
        "id":3257811,
        "spaceCode":"s003257812",
        "createTime":1659077975000,
        "createUser":"test",
        "updateTime":1659077975000,
        "updateUser":"test",
        "path":"245211,3257811,",
        "isDel":0,
        "linkName":null,
        "thirdPartyName":null,
        "parentSpaceType":null,
        "thirdPartySpaceCode":null
    }
}

# 5.10.2 修改空间

调用该接口修改空间。

相对 URI HTTP 方式
/spaces put

请求参数定义:

名称 类型 是否必选 含义
id Long 空间ID
spaceCode String 空间code
spaceName String 空间名称(必填)
spaceType Integer 空间类型(必填);10:期数,20:楼栋,30:单元,40:楼层,50:房屋
sort Integer 排序(必填)
innerSpaceType String 室内空间类型(空间类型为50时选填如:会议室
innerSpaceTypeCode String 室内空间类型编码
layoutName String 户型名称
version Integer 版本号
code String 主数据编码
sourceCode String 公共组件编码
thirdPartyName String 第三方系统名称
thirdPartySpaceCode String 第三方系统空间编码
address String 地址
parentId Long 父空间ID(必填;如果是在项目下,父空间ID传projectId)
path String 空间path

返回的 data 消息体定义:

名称 类型 是否必填 含义
data Long 项目ID

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/spaces

{
    "spaceType":20,
    "spaceName":"test2空间",
    "id":3257811,
    "sort":1
}

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0
}

# 5.10.3 删除空间

调用该接口删除空间。

相对 URI HTTP 方式
/spaces delete

请求参数定义:

名称 类型 是否必选 含义
id Long 项目ID

示例

请求示例:

https://api-eg.smartihw.com:1443/open/basic-data/spaces?id=245211

返回示例:

{
    "success":true,
    "msg":"操作成功",
    "code":0
}

# 6物模型数据订阅

# 6.1 AMQP

# 6.1.1 绑定关系定义

ExchangeName:{appkey}_thing

ExchangeType:Topic

QueueName:应用侧自行定义,约定以appkey作为队列前缀。

物模型通讯相关

设备属性上报通知RoutingKey:

{productKey}.basicData

设备事件上报通知RoutingKey:

{productKey}.event.{eventType}

设备服务返回值通知RoutingKey:

{productKey}.serviceResponse

设备管理相关

设备状态变化通知RoutingKey:

{productKey}.networkStatus

设备生命周期变更通知RoutingKey:

{productKey}.deviceLifecycle.{changedType}

产品管理相关

物模型生命周期变更通知RoutingKey:

{productKey}.modelLifecycle.{changedType}

告警中心

告警中心告警通知RoutingKey:

alarmCenter

# 6.1.2 变量说明

{appkey}:应用AppKey,由基础服务新增应用后获取。

{productKey}:产品key 如:79b69gtWO85

{eventType}:事件类型 information:信息 alarm:告警 fault:故障

{changedType}:变更类型 add:新增 update:修改 delete:删除

# 6.1.3 消息体定义

# 6.1.3.1 **物模型通讯\设备管理相关推送 **

以下由 [3.2.2 物模型TSL(智能门锁a110 )](#TSL Example) 作为示例依据

外层消息体定义:

名称 类型 是否非空 含义
messageId String 消息ID
did String did 全局唯一的设备标识
deviceNumber String 设备编码 设备颁发产品内唯一的标识
typeCode String 设备型号编码 产品上指定的型号固定编码
time String 上报时间
identifier String 标识符(事件、服务特有)
projectCode String 项目编码 设备所属的项目编码,全局唯一
cateCode String 品类编码 一类或多类产品对应的品类编码。
body Object 内容
# 6.1.3.1.1 设备属性上报通知

RoutingKey:Ysob4TcEyDN.basicData

body定义:

名称 类型 含义
RemainBattery Object 属性标识符 剩余电量
-value Object 属性值,具体内容由该属性的数据类型决定
-time Long 值采集时间戳
{
    "messageId":"LJZKF15G8M2u2Wf1",
    "did":"6793736399557230592",
    "deviceNumber":"19961znms0",
    "typeCode":"yda110",
    "time":1650948779000,
    "projectCode":"i40123009",
    "cateCode":"znms",
    "body":{
        "RemainBattery":{
            "time":1650948778000,
            "value":72
        }
    }
}

属性与物模型TSL的对应:

property

# 6.1.3.1.2 设备事件上报通知

RoutingKey:Ysob4TcEyDN.event.information

body定义:

名称 类型 含义
time Long 事件采集时间
value Object 事件输出参数
-LockType Integer 事件输出参数[0] 开锁方式
-KeyId String 事件输出参数[1] 钥匙ID
{
    "messageId":"LJZKF15G8M2u2Wf1",    
    "did":"6924578564029308928",
    "deviceNumber":"19961znms0",
    "typeCode":"yda110",
    "identifier":"DoorOpenNotification",
    "time":1650961378565,
    "projectCode":"i40123009",
    "cateCode":"znms",
    "body":{
        "time":1650948778000,
        "value":{
            "LockType":1,
            "KeyId":"fd456ff123"
        }
    }
}

事件与物模型TSL的对应:

event

# 6.1.3.1.3 设备服务返回值通知

RoutingKey:Ysob4TcEyDN.serviceResponse

body定义:

名称 类型 含义
id String 服务调用时响应的消息id
code Integer 状态码,200:正常 504:设备响应超时
data Object 服务输出参数
-KeyId String 服务输出参数[0] 钥匙ID
{
    "messageId":"LJZKF15G8M2u2Wf1",
    "did":"6924578564029308928",
    "deviceNumber":"19961znms0",
    "typeCode":"yda110",
    "identifier":"DoorOpenNotification",
    "time":1650961378565,
    "projectCode":"i40123009",
    "cateCode":"znms",
    "body":{
        "id":"105917531",
        "code":200,
        "data":{
            "KeyId":"fd456ff124"
        }
    }
}

异步服务回复与物模型TSL的对应:

service

# 6.1.3.1.4 设备状态变化通知

RoutingKey:Ysob4TcEyDN.networkStatus

body定义:

名称 类型 含义
networkStatus Integer 在线状态 1:在线 2:离线
{
    "messageId":"LJZKF15G8M2u2Wf1",
    "did":"6924578564029308928",
    "deviceNumber":"19961znms0",
    "typeCode":"yda110",
    "time":1650961378565,
    "projectCode":"i40123009",
    "cateCode":"znms",
    "body":{
        "networkStatus":1
    }
}
# 6.1.3.1.5 设备生命周期变更通知

RoutingKey:Ysob4TcEyDN.deviceLeftcycle.update

body定义:

名称 类型 含义
deviceName String 设备名称
deviceNumber String 设备编码
projectCode String 项目编号
projectName String 项目名称
did String DID
productKey String 产品Key
deviceSecret String 设备密钥
productName String 产品名称
deviceTypeCode String 设备类型编号
spaceCode String 空间编号
spaceName String 安装位置
createTime Date 创建时间
networkStatus Integer 在线状态 1:在线 2:离线
usageStatus Integer 使用状态 0:使用中 1:维修中 2:报废 3:备用 4:启用 5:停用
enable Integer 启停状态 0:启用 1:停用
iccid String iccid卡号
version String 设备版本号
isMultipart Integer 是否为多组动参 0:否 1:是
dynamicParams Object/List 如果为多组动参时,类型为List,否则为Object
-{identifier} String key为动参标识符,value为对应的值
{
    "messageId":"LJZKF15G8M2u2Wf1",
    "did":"6924578564029308928",
    "deviceNumber":"19961znms0",
    "typeCode":"yda110",
    "time":1650961378565,
    "projectCode":"i40123009",
    "cateCode":"znms",
    "body":{
        "deviceName":"智能门锁a1102",
        "deviceNumber":"19961znms0",
        "projectCode":"i000161213",
        "projectName":"智能运维作业项目",
        "did":"6924578564029308928",
        "productKey":"Ysob4TcEyDN",
        "deviceSecret":"htjmjkzvb463ehhpdwur0mgia1toqn3r",
        "productName":"智能门锁a110",
        "deviceTypeCode":"yda110",
        "spaceCode":"s000037010",
        "spaceName":"智能运维一期|1栋|1层",
        "createTime":1650948182000,
        "networkStatus":1,
        "usageStatus":0,
        "version":"1.0.1",
        "iccid":"12300123000"
    }
}
# 6.1.3.2 告警中心告警推送

RoutingKey:alarmCenter

消息体定义:

名称 类型 含义
alarmId String 告警id
name String 告警名称
description String 告警描述
level String 告警级别 普通:NORMAL 重要:IMPORTANT
ruleResponse Object<RuleResponse> 对应规则,见5.7场景联动规则实体定义
{
  "alarmId":"6810833009898422272",
  "name":"ZNDJ101009",
  "description":1623829128879,
  "level":1,
  "ruleResponse":{
	...
  }
}

# 6.2 MQTT

# 6.2.1 登录认证

登录参数:

mqttClientId:appkey{appkey}|timestamp{timestamp}|noise{noise}

mqttUserName:{appkey}

mqttPassword:hmacSha1(mqttClientId,{appSecret})

其中:mqttClientId作为加密内容,appSecret作为加密密钥

示例:

appKey:YoW23tX4aA3BJG6Q

timestamp:1647968584000

noise:123

appSecret:a542b4fa-7e52-4698-b8d3-9126658ab2a6

mqttClientId:appkeyYoW23tX4aA3BJG6Q|timestamp1647968584000|noise123

mqttUserName:YoW23tX4aA3BJG6Q

mqttPassword:f84fbf4bbfa93d1c06f8ede9bc1bf33b16fa6811

# 6.2.2 Topic定义

物模型通讯相关

设备属性上报通知Topic:

{appkey}_thing/{productKey}/basicData

设备事件上报通知Topic:

{appkey}_thing/{productKey}/event/{eventType}

设备服务返回值通知Topic:

{appkey}_thing/{productKey}/serviceResponse

设备管理相关

设备状态变化通知Topic:

{appkey}_thing/{productKey}/networkStatus

设备生命周期变更通知Topic:

{appkey}_thing/{productKey}/deviceLifecycle/{changedType}

产品管理相关

物模型生命周期变更通知Topic:

{appkey}_thing/{productKey}/modelLifecycle/{changedType}

告警中心

告警中心告警通知Topic:

{appkey}_thing/alarmCenter

# 6.2.3 变量说明

{appkey}:应用AppKey,由基础服务新增应用后获取。

{appSecret}:应用秘钥

{timestamp}:毫秒值时间戳

{noise}:随机数

{productKey}:产品key 如:79b69gtWO85

{eventType}:事件类型 information:信息 alarm:告警 fault:故障

{changedType}:变更类型 add:新增 update:修改 delete:删除

# 6.2.3 消息体定义

与 [AMQP消息体定义](#AMQP Msg Payload)一致,详见 [6.1.3](#AMQP Msg Payload)

Last Updated: 1/12/2023, 1:40:01 AM