创建数据转发规则
接口说明
应用服务器可调用此接口在物联网平台创建一条规则,当指定设备上报的数据满足条件时,触发规则。
调试
您可以在API Explorer中直接运行调试该接口。
URI
请求方法 |
POST |
---|---|
URI |
/v5/iot/{project_id}/rules |
传输协议 |
HTTPS |
请求参数
名称 |
必选/可选 |
类型 |
位置 |
说明 |
---|---|---|---|---|
X-Auth-Token |
必选 |
String |
Header |
用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 |
Instance-Id |
可选 |
String |
Header |
实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。 |
project_id |
必选 |
String |
Path |
项目ID。获取方法请参见 获取项目ID。 |
name |
必选 |
String(1-128) |
Body |
规则名称。 |
description |
可选 |
String(256) |
Body |
规则的描述信息。 |
condition_group |
必选 |
Body |
规则的条件组,包含简单规则和复杂规则集合。 |
|
actions |
必选 |
List<RuleAction> |
Body |
规则的动作列表,单个规则最多支持设置10个动作。 |
rule_type |
必选 |
String |
Body |
规则的类型
|
status |
可选 |
String |
Body |
规则的状态,默认值:active。
|
app_id |
可选 |
String |
Body |
资源空间ID。此参数为非必选参数,存在多资源空间的用户需要使用该接口时,建议携带该参数指定创建的规则归属到哪个资源空间下,否则创建的规则将会归属到默认资源空间下。 |
edge_node_ids |
可选 |
List<String> |
Body |
归属边缘侧节点设备ID列表。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
conditions |
可选 |
List<RuleCondition> |
规则的条件列表,单个规则最多支持设置10个条件。 |
logic |
可选 |
String |
规则条件列表中多个条件之间的逻辑关系,默认值:and。
|
time_range |
可选 |
规则条件触发的有效时间段。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
type |
必选 |
String |
规则条件的类型,取值范围:
|
device_property_condition |
可选 |
条件中设备数据类型的信息,当type为DEVICE_DATA时,为必选参数 |
|
device_message_condition |
可选 |
条件中设备消息类型的信息,当type为DEVICE_MESSAGE时,为必选参数 |
|
device_status_condition |
可选 |
条件中设备状态类型的信息,当type为DEVICE_STATUS时,为必选参数 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
device_id |
可选 |
String |
设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。当rule_type为DEVICE_LINKAGE时,该参数值和product_id不能同时为空。如果该参数和product_id同时存在时,以该参数值对应的设备进行条件过滤。 |
product_id |
可选 |
String(128) |
设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。当rule_type为DEVICE_LINKAGE时,该参数值和device_id不能同时为空。如果该参数和device_id同时存在时,以device_id参数值对应的设备进行条件过滤。 |
filters |
可选 |
List<PropertyFilter> |
数据过滤条件 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
path |
必选 |
String(128) |
设备属性的路径信息,格式:service_id/DataProperty,例如门磁状态为“DoorWindow/status”。多个属性路径之间以逗号分隔。 |
operator |
必选 |
String |
数据比较的操作符,当前支持的操作符有:>,<,>=,<=,=和between:表示数值区间,geo.circle.in:表示圆形区域范围内,geo.circle.out:表示圆形区域范围外。 |
value |
必选 |
String(64) |
数据比较表达式的右值。与数据比较操作符between联用时,右值表示最小值和最大值,用逗号隔开,如“20,30”表示大于等于20小于30。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
product_id |
可选 |
String(128) |
设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。 |
topic |
可选 |
String(64) |
产品关联的topic信息,用于过滤消息中指定topic消息。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
start_time |
必选 |
String |
规则条件触发的开始时间,格式:HH:mm。 |
end_time |
必选 |
String |
规则条件触发的结束时间,格式:HH:mm。若结束时间与开始时间一致,则时间为全天。 |
days_of_week |
可选 |
String |
星期列表,以逗号分隔。1代表周日,2代表周一,依次类推,默认为每天。星期列表中的日期为开始时间的日期。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
type |
必选 |
String |
规则动作的类型,取值范围:
|
addition |
可选 |
List<String> |
附加信息,在默认规则执行结果中附加额外内容,仅设备属性和消息类型数据转发规则支持使用,取值范围:PRODUCT_ID |
dis_forwarding |
可选 |
转发到DIS服务的消息内容。当type为DIS_FORWARDING时,必填。 |
|
obs_forwarding |
可选 |
转发到OBS服务的消息内容。当type为OBS_FORWARDING时,必填。 |
|
roma_forwarding |
可选 |
转发到ROMA Connect服务的消息内容。当type为ROMA_FORWARDING时,必填。 |
|
iota_forwarding |
可选 |
转发到IoTA服务的消息内容。当type为IoTA_FORWARDING时,必填。 |
|
kafka_forwarding |
可选 |
转发到Kafka服务的消息内容。当type为KAFKA_FORWARDING时,必填。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
region_name |
必选 |
String(256) |
DIS服务对应的region区域 |
project_id |
必选 |
String(256) |
DIS服务对应的projectId信息 |
stream_name |
可选 |
String(256) |
DIS服务对应的通道名称,和通道ID参数中至少一个不为空,和通道ID参数都存在时,以通道ID参数值为准。通过调用DIS服务 查询通道列表接口获取。 |
stream_id |
可选 |
String(256) |
DIS服务对应的通道ID,和通道名称参数中至少一个不为空,和通道名称参数都存在时,以本参数值为准。通过调用DIS服务 查询通道详情接口获取。 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
region_name |
必选 |
String(256) |
OBS服务对应的region区域 |
project_id |
必选 |
String(256) |
OBS服务对应的projectId信息 |
bucket_name |
必选 |
String(256) |
OBS服务对应的桶名称 |
location |
可选 |
String(256) |
OBS服务对应桶的区域 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
region_name |
必选 |
String(256) |
ROMA Connect服务对应的region区域 |
project_id |
必选 |
String(256) |
ROMA Connect服务对应的projectId信息 |
roma_push_type |
可选 |
String(256) |
ROMA Connect服务对应的推送类型 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
region_name |
必选 |
String(256) |
IoTA服务对应的region区域 |
project_id |
必选 |
String(256) |
IoTA服务对应的projectId信息 |
名称 |
必选/可选 |
类型 |
说明 |
---|---|---|---|
region_name |
可选 |
String(256) |
kafka服务对应的region区域 |
project_id |
可选 |
String(256) |
kafka服务对应的projectId信息 |
kafka_addresses |
可选 |
List<NetAddress> |
kafka服务对应的地址列表 |
kafka_topic |
可选 |
String(256) |
kafka服务关联的topic信息。 |
kafka_username |
可选 |
String(256) |
kafka服务关联的用户名信息。 |
kafka_password |
可选 |
String(256) |
kafka服务关联的密码信息。 |
kafka_mechanism |
可选 |
String |
kafka服务关联的鉴权机制。 类型说明: PAAS:非SASL鉴权。 PLAIN:SASL/PLAIN模式。需要填写对应的用户名密码信息。 |
响应参数
名称 |
类型 |
说明 |
---|---|---|
rule_id |
String(128) |
规则id。 |
name |
String(1-128) |
规则名称。 |
description |
String(256) |
规则的描述信息。 |
condition_group |
规则的条件组,包含简单规则和复杂规则集合。 |
|
actions |
List<RuleAction> |
规则的动作列表,单个规则最多支持设置10个动作。 |
rule_type |
String |
规则的类型
|
status |
String |
规则的状态,默认值:active。
|
app_id |
String |
资源空间ID。此参数为非必选参数,存在多资源空间的用户需要使用该接口时,建议携带该参数指定创建的规则归属到哪个资源空间下,否则创建的规则将会归属到默认资源空间下。 |
edge_node_ids |
List<String> |
归属边缘侧节点设备ID列表。 |
last_update_time |
String |
规则最后更新时间,使用UTC时区,格式:yyyyMMdd'T'HHmmss'Z'。 |
名称 |
类型 |
说明 |
---|---|---|
conditions |
List<RuleCondition> |
规则的条件列表,单个规则最多支持设置10个条件。 |
logic |
String |
规则条件列表中多个条件之间的逻辑关系,默认值:and。
|
time_range |
规则条件触发的有效时间段。 |
名称 |
类型 |
说明 |
---|---|---|
type |
String |
规则条件的类型,取值范围:
|
device_property_condition |
条件中设备数据类型的信息,当type为DEVICE_DATA时,为必选参数 |
|
device_message_condition |
条件中设备消息类型的信息,当type为DEVICE_MESSAGE时,为必选参数 |
|
device_status_condition |
条件中设备状态类型的信息,当type为DEVICE_STATUS时,为必选参数 |
名称 |
类型 |
说明 |
---|---|---|
device_id |
String |
设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。当rule_type为DEVICE_LINKAGE时,该参数值和product_id不能同时为空。如果该参数和product_id同时存在时,以该参数值对应的设备进行条件过滤。 |
product_id |
String(128) |
设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。当rule_type为DEVICE_LINKAGE时,该参数值和device_id不能同时为空。如果该参数和device_id同时存在时,以device_id参数值对应的设备进行条件过滤。 |
filters |
List<PropertyFilter> |
数据过滤条件 |
名称 |
类型 |
说明 |
---|---|---|
path |
String(128) |
设备属性的路径信息,格式:service_id/DataProperty,例如门磁状态为“DoorWindow/status”。多个属性路径之间以逗号分隔。 |
operator |
String |
数据比较的操作符,当前支持的操作符有:>,<,>=,<=,=和between:表示数值区间,geo.circle.in:表示圆形区域范围内,geo.circle.out:表示圆形区域范围外。 |
value |
String(64) |
数据比较表达式的右值。与数据比较操作符between联用时,右值表示最小值和最大值,用逗号隔开,如“20,30”表示大于等于20小于30。 |
名称 |
类型 |
说明 |
---|---|---|
product_id |
String(128) |
设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。 |
topic |
String(64) |
产品关联的topic信息,用于过滤消息中指定topic消息。 |
名称 |
类型 |
说明 |
---|---|---|
start_time |
String |
规则条件触发的开始时间,格式:HH:mm。 |
end_time |
String |
规则条件触发的结束时间,格式:HH:mm。若结束时间与开始时间一致,则时间为全天。 |
days_of_week |
String |
星期列表,以逗号分隔。1代表周日,2代表周一,依次类推,默认为每天。星期列表中的日期为开始时间的日期。 |
名称 |
类型 |
说明 |
---|---|---|
type |
String |
规则动作的类型,取值范围:
|
addition |
List<String> |
附加信息,在默认规则执行结果中附加额外内容,仅设备属性和消息类型数据转发规则支持使用,取值范围:PRODUCT_ID |
dis_forwarding |
转发到DIS服务的消息内容。当type为DIS_FORWARDING时,必填。 |
|
obs_forwarding |
转发到OBS服务的消息内容。当type为OBS_FORWARDING时,必填。 |
|
roma_forwarding |
转发到ROMA Connect服务的消息内容。当type为ROMA_FORWARDING时,必填。 |
|
iota_forwarding |
转发到IoTA服务的消息内容。当type为IoTA_FORWARDING时,必填。 |
|
kafka_forwarding |
转发到Kafka服务的消息内容。当type为KAFKA_FORWARDING时,必填。 |
名称 |
类型 |
说明 |
---|---|---|
region_name |
String(256) |
DIS服务对应的region区域 |
project_id |
String(256) |
DIS服务对应的projectId信息 |
stream_name |
String(256) |
DIS服务对应的通道名称,和通道ID参数中至少一个不为空,和通道ID参数都存在时,以通道ID参数值为准。通过调用DIS服务 查询通道列表接口获取。 |
stream_id |
String(256) |
DIS服务对应的通道ID,和通道名称参数中至少一个不为空,和通道名称参数都存在时,以本参数值为准。通过调用DIS服务 查询通道详情接口获取。 |
名称 |
类型 |
说明 |
---|---|---|
region_name |
String(256) |
OBS服务对应的region区域 |
project_id |
String(256) |
OBS服务对应的projectId信息 |
bucket_name |
String(256) |
OBS服务对应的桶名称 |
location |
String(256) |
OBS服务对应桶的区域 |
名称 |
类型 |
说明 |
---|---|---|
region_name |
String(256) |
ROMA Connect服务对应的region区域 |
project_id |
String(256) |
ROMA Connect服务对应的projectId信息 |
roma_push_type |
String(256) |
ROMA Connect服务对应的推送类型 |
名称 |
类型 |
说明 |
---|---|---|
region_name |
String(256) |
IoTA服务对应的region区域 |
project_id |
String(256) |
IoTA服务对应的projectId信息 |
名称 |
类型 |
说明 |
---|---|---|
region_name |
String(256) |
kafka服务对应的region区域 |
project_id |
String(256) |
kafka服务对应的projectId信息 |
kafka_addresses |
List<NetAddress> |
kafka服务对应的地址列表 |
kafka_topic |
String(256) |
kafka服务关联的topic信息。 |
kafka_username |
String(256) |
kafka服务关联的用户名信息。 |
kafka_password |
String(256) |
kafka服务关联的密码信息。 |
kafka_mechanism |
String |
kafka服务关联的鉴权机制。 类型说明: PAAS:非SASL鉴权。 PLAIN:SASL/PLAIN模式。需要填写对应的用户名密码信息。 |
请求示例
POST https://{Endpoint}/v5/iot/{project_id}/rules Content-Type: application/json X-Auth-Token: ******** Instance-Id: ******** { "name" : "string", "description" : "string", "condition_group" : { "time_range" : { "days_of_week" : "string", "start_time" : "string", "end_time" : "string" }, "logic" : "string", "conditions" : [ { "device_status_condition" : { "status_list" : [ "string" ] }, "device_property_condition" : { "device_id" : "string", "product_id" : "string", "filters" : [ { "path" : "string", "value" : "string", "operator" : "string" } ] }, "type" : "string", "device_message_condition" : { "product_id" : "string", "topic" : "string" } } ] }, "actions" : [ { "iota_forwarding" : { "project_id" : "string", "region_name" : "string" }, "roma_forwarding" : { "project_id" : "string", "region_name" : "string", "roma_push_type" : "string" }, "kafka_forwarding" : { "kafka_mechanism" : "string", "project_id" : "string", "kafka_addresses" : [ { "port" : 0, "ip" : "string", "domain" : "string" } ], "kafka_username" : "string", "region_name" : "string", "kafka_topic" : "string", "kafka_password" : "string" }, "obs_forwarding" : { "project_id" : "string", "bucket_name" : "string", "region_name" : "string", "location" : "string" }, "type" : "string", "dis_forwarding" : { "stream_name" : "string", "project_id" : "string", "stream_id" : "string", "region_name" : "string" }, "addition" : [ "string" ] } ], "rule_type" : "string", "status" : "string", "app_id" : "string", "edge_node_ids" : [ "string" ] }
响应示例
Status Code: 201 Created
Content-Type: application/json { "rule_id" : "string", "name" : "string", "description" : "string", "condition_group" : { "conditions" : [ { "type" : "string", "device_property_condition" : { "device_id" : "string", "product_id" : "string", "filters" : [ { "path" : "string", "operator" : "string", "value" : "string" } ] }, "device_message_condition" : { "product_id" : "string", "topic" : "string" }, "device_status_condition" : { "status_list" : [ "string" ] } } ], "logic" : "string", "time_range" : { "start_time" : "string", "end_time" : "string", "days_of_week" : "string" } }, "actions" : [ { "type" : "string", "addition" : [ "string" ], "dis_forwarding" : { "region_name" : "string", "project_id" : "string", "stream_name" : "string", "stream_id" : "string" }, "obs_forwarding" : { "region_name" : "string", "project_id" : "string", "bucket_name" : "string", "location" : "string" }, "roma_forwarding" : { "region_name" : "string", "project_id" : "string", "roma_push_type" : "string" }, "iota_forwarding" : { "region_name" : "string", "project_id" : "string" }, "kafka_forwarding" : { "region_name" : "string", "project_id" : "string", "kafka_addresses" : [ { "ip" : "string", "port" : 0, "domain" : "string" } ], "kafka_topic" : "string", "kafka_username" : "string", "kafka_password" : "string", "kafka_mechanism" : "string" } } ], "rule_type" : "string", "status" : "string", "app_id" : "string", "edge_node_id" : [ "string" ], "last_update_time" : "string" }
错误码
HTTP状态码 |
错误码 |
错误码英文描述 |
错误码中文描述 |
处理建议 |
---|---|---|---|---|
400 |
IOTDA.000006 |
Invalid input data. |
请求参数不合法 |
请排查请求参数是否符合华为云文档要求。 |
IOTDA.001001 |
Invalid input for this application. |
应用参数不合法 |
请排查请求参数是否符合华为云文档要求。 |
|
IOTDA.010000 |
Invalid input for this rule. |
规则参数不合法 |
请排查请求参数是否符合华为云文档要求。 |
|
IOTDA.010004 |
Invalid parameter in the rule condition. |
规则条件不合法 |
请排查请求参数是否符合华为云文档要求 |
|
IOTDA.010005 |
Invalid parameter in the rule action. |
规则动作参数不合法 |
请排查请求中action参数是否符合华为云文档要求。 |
|
IOTDA.010006 |
Repeated condition ID in the same rule. |
规则条件ID重复 |
请重新命名规则条件ID后重试。 |
|
IOTDA.010007 |
Repeated action ID in the same rule. |
规则动作ID重复 |
请重新命名规则动作ID后重试。 |
|
IOTDA.010008 |
The device with this condition does not exist. |
规则条件中对应的设备不存在 |
请检查请求参数是否正确或设备在平台是否已经存在。 |
|
IOTDA.010009 |
The device with this action does not exist. |
规则动作中对应的设备不存在 |
请检查请求参数是否正确或设备在平台是否已经存在。 |
|
IOTDA.010010 |
The device data with this condition does not exist. |
规则条件中对应的设备信息不存在 |
请检查请求参数是否正确或设备在平台是否已经存在。 |
|
IOTDA.010011 |
The device data with this action does not exist. |
规则动作中对应的设备信息不存在 |
请检查请求参数是否正确或设备在平台是否已经存在。 |
|
IOTDA.010012 |
The tag with this condition does not exist. |
规则条件中对应的标签不存在 |
请检查请求参数是否正确或标签在平台是否已经存在 |
|
IOTDA.010013 |
Invalid rule parameter. |
规则参数不合法 |
请排查请求参数是否符合华为云文档要求 |
|
IOTDA.010015 |
The rule count of each user has reached the upper limit, the current up limit is 10 entries. |
用户下规则数量超过上限 |
请删除多余的规则后再注册。 |
|
403 |
IOTDA.000004 |
Invalid access token. |
非法token |
请排查请求中的token是否正常。 |
IOTDA.000021 |
Operation not allowed. User not found by IAM token or the authorized user has not subscribed IOTDA service. |
没有找到IAM Token所对应的用户信息或该用户没有订阅设备接入服务(IOTDA) |
请排查IAM Token所在用户是否订阅了设备接入服务(IOTDA)。 |
|
IOTDA.001000 |
The application does not exist. |
该应用不存在 |
请确定是否已在平台注册应用并检查应用ID是否正确。 |
|
IOTDA.001002 |
Operation not allowed. The application has not been authorized. |
该应用没有权限访问 |
请检查该应用是否已被授权。 |
|
IOTDA.001005 |
Operation not allowed. The parameter 'app_id' is not carried, and the authorized user has more than one applications. Include the parameter 'app_id', or contact Huawei technical support engineers to merge application data. |
该用户下有多个应用的情况下未携带appId访问接口 |
请携带对应的appId或联系华为工程师合并应用数据。 |
|
IOTDA.001006 |
Operation not allowed. Application not found by authorized user or the authorized user has no application. |
用户下没有应用或应用与用户不匹配 |
请排查用户下是否有应用或是否有指定的应用。 |
|
IOTDA.001007 |
Operation not allowed. The application does not belong to the authorized user. |
应用与用户信息不匹配 |
请排查该用户下是否有指定的应用。 |
|
IOTDA.010003 |
The number of rules has reached the upper limit. |
规则数量已达到上限 |
请删除多余的规则后重试。 |
|
404 |
IOTDA.010002 |
The rule does not exist. |
该规则不存在 |
请确认平台是否存在该规则或请求参数是否正确。 |
500 |
IOTDA.000007 |
The data in database is abnormal. |
数据库中的数据不正常 |
请联系华为工程师分析解决。 |
IOTDA.000020 |
Decrypt IAM token failed. |
IAM Token解析失败 |
请联系华为工程师分析解决。 |