创建设备
接口说明
应用服务器可调用此接口在物联网平台创建一个设备,仅在创建后设备才可以接入物联网平台。
- 该接口支持使用gateway_id参数指定在父设备下创建一个子设备,并且支持多级子设备,当前最大支持二级子设备。
- 该接口同时还支持对设备进行初始配置,接口会读取创建设备请求参数product_id对应的产品详情,如果产品的属性有定义默认值,则会将该属性默认值写入该设备的设备影子中。
- 用户还可以使用创建设备请求参数shadow字段为设备指定初始配置,指定后将会根据service_id和desired设置的属性值与产品中对应属性的默认值比对,如果不同,则将以shadow字段中设置的属性值为准写入到设备影子中。
调试
您可以在API Explorer中直接运行调试该接口。
URI
|
请求方法 |
POST |
|---|---|
|
URI |
/v5/iot/{project_id}/devices |
|
传输协议 |
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。 |
|
device_id |
可选 |
String |
Body |
参数说明:设备ID,用于唯一标识一个设备。如果携带该参数,平台将设备ID设置为该参数值;如果不携带该参数,设备ID由物联网平台分配获得,生成规则为"product_id" + "_" + "node_id"拼接而成。 取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
node_id |
必选 |
String |
Body |
参数说明:设备标识码,通常使用IMEI、MAC地址或Serial No作为node_id。 设备标识码长度为1到64个字符,包含英文字母、数字、连接号“-”和下划线“_”。 注意:NB设备由于模组烧录信息后无法配置,所以NB设备会校验node_id全局唯一。 取值范围:长度不超过64,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
device_name |
可选 |
String |
Body |
参数说明:设备名称。 取值范围:长度不超过256,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合 |
|
product_id |
必选 |
String |
Body |
参数说明:设备关联的产品ID,用于唯一标识一个产品模型,在管理门户导入产品模型后由平台分配获得。 取值范围:长度不超过36,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
auth_info |
可选 |
AuthInfo Object |
Body |
参数说明:设备的接入认证信息。 |
|
description |
可选 |
String |
Body |
参数说明:设备的描述信息。 取值范围:长度不超过2048,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合 |
|
gateway_id |
可选 |
String |
Body |
参数说明:网关ID,用于标识设备所属的父设备,即父设备的设备ID。携带该参数时,表示在该父设备下创建一个子设备,这个子设备不与平台直连,此时必须保证这个父设备在平台已存在,创建成功后子设备的gateway_id等于该参数值;不携带该参数时,表示创建一个和平台直连的设备,创建成功后设备的device_id和gateway_id一致。注意:当前平台最多支持二级子设备。 取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
app_id |
可选 |
String |
Body |
参数说明:资源空间ID。此参数为非必选参数,存在多资源空间的用户需要使用该接口时,建议携带该参数指定创建的设备归属到哪个资源空间下,否则创建的设备将会归属到默认资源空间下。 取值范围:长度不超过36,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
extension_info |
可选 |
Object |
Body |
参数说明:设备扩展信息。用户可以自定义任何想要的扩展信息,如果在创建设备时为子设备指定该字段,将会通过MQTT接口“平台通知网关子设备新增“将该信息通知给网关。字段值大小上限为1K。 |
|
shadow |
可选 |
List<InitialDesired> |
Body |
参数说明:设备初始配置。用户使用该字段可以为设备指定初始配置,指定后将会根据service_id和desired设置的属性值与产品中对应属性的默认值比对,如果不同,则将以shadow字段中设置的属性值为准写入到设备影子中。service_id的值和desired内的属性必须是profile中定义的。 |
|
名称 |
必选/可选 |
类型 |
说明 |
|---|---|---|---|
|
auth_type |
可选 |
String |
参数说明:鉴权类型。注意:不填写auth_type默认为密钥认证接入方式(SECRET)。 取值范围:
|
|
secret |
可选 |
String |
参数说明:设备密钥,认证类型使用密钥认证接入(SECRET)可填写该字段。注意:NB设备密钥由于协议特殊性,只支持十六进制密钥接入;查询设备列表接口不返回该参数。 取值范围:长度不低于8不超过32,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
fingerprint |
可选 |
String |
参数说明:证书指纹,认证类型使用证书认证接入(CERTIFICATES)可填写该字段,注册设备时不填写该字段则取第一次设备接入时的证书指纹。 取值范围:长度为40的十六进制字符串或者长度为64的十六进制字符串。 |
|
secure_access |
可选 |
Boolean |
参数说明:指设备是否通过安全协议方式接入。默认值为true。 取值范围:
|
|
timeout |
可选 |
Integer |
参数说明:设备接入的有效时间,单位:秒,默认值:0 若设备在有效时间内未接入物联网平台并激活,则平台会删除该设备的注册信息。若设置为“0”,则表示平台不会删除该设备的注册信息(建议填写为“0”)。 注意:只有注册设备接口或者修改设备接口修改timeout时返回该参数。 |
|
名称 |
必选/可选 |
类型 |
说明 |
|---|---|---|---|
|
service_id |
必选 |
String |
参数说明:设备的服务ID,在设备关联的产品模型中定义。 取值范围:长度不超过32,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。 |
|
desired |
必选 |
Object |
参数说明:设备初始配置属性数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name),目前如样例所示只支持一层结构;这里设置的属性值与产品中对应属性的默认值比对,如果不同,则将以该字段中设置的属性值为准写入到设备影子中;如果想要删除整个desired可以填写空object(例如"desired":{}),如果想要删除某一个属性期望值可以将属性置位null(例如{"temperature":null}) |
响应参数
|
名称 |
类型 |
说明 |
|---|---|---|
|
app_id |
String |
资源空间ID。 |
|
app_name |
String |
资源空间名称。 |
|
device_id |
String |
设备ID,用于唯一标识一个设备。在注册设备时直接指定,或者由物联网平台分配获得。由物联网平台分配时,生成规则为"product_id" + "_" + "node_id"拼接而成。 |
|
node_id |
String |
设备标识码,通常使用IMEI、MAC地址或Serial No作为node_id。 |
|
gateway_id |
String |
网关ID,用于标识设备所属的父设备,即父设备的设备ID。当设备是直连设备时,gateway_id与设备的device_id一致。当设备是非直连设备时,gateway_id为设备所关联的父设备的device_id。 |
|
device_name |
String |
设备名称。 |
|
node_type |
String |
设备节点类型。
|
|
description |
String |
设备的描述信息。 |
|
fw_version |
String |
设备的固件版本。 |
|
sw_version |
String |
设备的软件版本。 |
|
device_sdk_version |
String |
设备的sdk信息。 |
|
auth_info |
AuthInfo Object |
设备的接入认证信息。 |
|
product_id |
String |
设备关联的产品ID,用于唯一标识一个产品模型。 |
|
product_name |
String |
设备关联的产品名称。 |
|
status |
String |
设备的状态。
|
|
create_time |
String |
在物联网平台注册设备的时间。格式:yyyyMMdd'T'HHmmss'Z',如20151212T121212Z。 |
|
extension_info |
Object |
设备扩展信息。用户可以自定义任何想要的扩展信息,如果在创建设备时为子设备指定该字段,将会通过MQTT接口“平台通知网关子设备新增“将该信息通知给网关。 |
|
名称 |
类型 |
说明 |
|---|---|---|
|
auth_type |
String |
参数说明:鉴权类型。注意:不填写auth_type默认为密钥认证接入方式(SECRET)。 取值范围:
|
|
secret |
String |
参数说明:设备密钥,认证类型使用密钥认证接入(SECRET)可填写该字段。注意:NB设备密钥由于协议特殊性,只支持十六进制密钥接入;查询设备列表接口不返回该参数。 取值范围:长度不低于8不超过32,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
fingerprint |
String |
参数说明:证书指纹,认证类型使用证书认证接入(CERTIFICATES)可填写该字段,注册设备时不填写该字段则取第一次设备接入时的证书指纹。 取值范围:长度为40的十六进制字符串或者长度为64的十六进制字符串。 |
|
secure_access |
Boolean |
参数说明:指设备是否通过安全协议方式接入。默认值为true。 取值范围:
|
|
timeout |
Integer |
参数说明:设备接入的有效时间,单位:秒,默认值:0 若设备在有效时间内未接入物联网平台并激活,则平台会删除该设备的注册信息。若设置为“0”,则表示平台不会删除该设备的注册信息(建议填写为“0”)。 注意:只有注册设备接口或者修改设备接口修改timeout时返回该参数。 |
请求示例
POST https://{Endpoint}/v5/iot/{project_id}/devices
Content-Type: application/json
X-Auth-Token: ********
Instance-Id: ********
{
"device_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
"node_id" : "ABC123456789",
"device_name" : "dianadevice",
"product_id" : "b640f4c203b7910fc3cbd446ed437cbd",
"auth_info" : {
"auth_type" : "SECRET",
"secure_access" : true,
"fingerprint" : "dc0f1016f495157344ac5f1296335cff725ef22f",
"secret" : "3b935a250c50dc2c6d481d048cefdc3c",
"timeout" : 0
},
"description" : "watermeter device",
"gateway_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
"app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka",
"extension_info" : {
"aaa" : "xxx",
"bbb" : 0
},
"shadow" : [ {
"desired" : {
"temperature" : "60"
},
"service_id" : "WaterMeter"
} ]
}
响应示例
Status Code: 201 Created
Content-Type: application/json
{
"app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka",
"app_name" : "testAPP01",
"device_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
"node_id" : "ABC123456789",
"gateway_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",
"device_name" : "dianadevice",
"node_type" : "ENDPOINT",
"description" : "watermeter device",
"fw_version" : "1.1.0",
"sw_version" : "1.1.0",
"auth_info" : {
"auth_type" : "SECRET",
"secret" : "3b935a250c50dc2c6d481d048cefdc3c",
"fingerprint" : "dc0f1016f495157344ac5f1296335cff725ef22f",
"secure_access" : true,
"timeout" : 0
},
"product_id" : "b640f4c203b7910fc3cbd446ed437cbd",
"product_name" : "Thermometer",
"status" : "INACTIVE",
"create_time" : "20190303T081011Z",
"tags" : [ {
"tag_key" : "testTagName",
"tag_value" : "testTagValue"
} ],
"extension_info" : {
"aaa" : "xxx",
"bbb" : 0
}
}
错误码
|
HTTP状态码 |
错误码 |
错误码英文描述 |
错误码中文描述 |
处理建议 |
|---|---|---|---|---|
|
400 |
IOTDA.000008 |
Invalid input. Bad request, for more detail, refer to the error message. |
请求的格式不正确,如json非法,mediaType不正确等。 |
请排查该请求的请求格式是否正确。 |
|
IOTDA.013000 |
The product does not exist. |
产品不存在 |
请排查请求参数是否正确或产品是否已经在平台注册 |
|
|
IOTDA.013002 |
The properties of deviceServiceCapability do not exist. |
产品的属性不存在 |
请排查该产品是否有属性信息,若没有,可调用修改产品接口添加属性。 |
|
|
IOTDA.013003 |
Operation not allowed. The product is unavailable. |
未知的产品类型 |
请排查设备是否有产品ID, 若没有,可调用修改设备信息接口添加产品ID。 |
|
|
IOTDA.014008 |
Invalid input. The nodeId is duplicated. |
nodeId重复 |
请更换nodeId后再重试。 |
|
|
IOTDA.014009 |
Invalid input. The deviceName is duplicated. |
deviceName重复 |
请更换deviceName后再重试。 |
|
|
IOTDA.014010 |
Invalid input. The secretDevice cannot be empty when authType is SECRET. |
当authType是SECRET时, secretDevice不能为空 |
请联系华为工程师分析解决。 |
|
|
IOTDA.014011 |
Invalid input. The secretEncryptionType cannot be empty when authType is MQTT. |
当authType为MQTT时,secretEncryptionType不能为空 |
请联系华为工程师分析解决 |
|
|
IOTDA.014012 |
Invalid input. The pskDevice cannot be empty when authType is PSK. |
authType为PSK时,pskDevice不能为空 |
请联系华为工程师分析解决 |
|
|
IOTDA.014013 |
Invalid input. The isSecure must be true. |
isSecure参数值必须为true |
请将isSecure参数设置成true。 |
|
|
IOTDA.014023 |
Gateway and sensor auth type is inconsistent |
网关和子设备的认证类型不一致。 |
请保证网关和子设备的认证类型一致。 |
|
|
IOTDA.014025 |
Invalid input. Invalid parameter 'serviceId'. |
serviceId不合法 |
请排查请求参数serviceId是否符合华为云文档要求 |
|
|
IOTDA.014027 |
Invalid input. The initialization cannot be empty when mode is INITIALIZATION. |
mode为INITIALIZATION时initialization参数不能为空 |
请联系华为工程师分析解决。 |
|
|
IOTDA.014031 |
Invalid input. The device already exists. |
设备已存在 |
请更换参数后再重试。 |
|
|
IOTDA.014034 |
Invalid input. The serviceId or eventType do not match. |
serviceId或eventType不匹配 |
请检查请求参数serviceId与eventType是否与profile中定义的相同。 |
|
|
IOTDA.014035 |
Invalid input. The size of extension_info has reach or exceed 1k. |
extension_info字段大小超过1K |
请将extension_info参数的大小限制在1K以内。 |
|
|
403 |
IOTDA.000022 |
Operation not allowed. The user does not have the permission |
该用户没有权限 |
请排查该用户是否有权限访问。 |
|
IOTDA.001000 |
The application does not exist. |
该应用不存在 |
请确定是否已在平台注册应用并检查应用ID是否正确。 |
|
|
IOTDA.001002 |
Operation not allowed. The application has not been authorized. |
该应用没有权限访问 |
请检查该应用是否已被授权。 |
|
|
IOTDA.013004 |
Operation not allowed. You have no Write permission. |
您没有可写的权限 |
请排查您的产品属性是否是可写的,若不是,可调用修改产品的接口将属性改成可写。 |
|
|
IOTDA.014019 |
Operation not allowed. The number of user's device has reached the limit. |
用户下的设备数量达到上限 |
请删除无用设备或联系华为工程师分析解决。 |
|
|
IOTDA.014020 |
Operation not allowed. The number of device bound to this application has reached the limit. |
应用下的设备数量超过最大上限 |
请删除无用设备或联系华为工程师分析解决。 |
|
|
IOTDA.014021 |
Operation not allowed. The number of device has reached the limit of ordered package. |
套餐下的设备数量超过最大上限 |
请删除无用设备或联系华为工程师分析解决。 |
|
|
IOTDA.014022 |
Operation not allowed. The number of license resource has reached the limit. |
许可证资源数量已达到上限 |
请联系华为工程师分析解决。 |
|
|
IOTDA.014026 |
Operation not allowed. The number of nonSecure device has reached the limit. |
非安全设备的数量已达到上限 |
请删除无用的非安全设备或联系华为工程师分析解决。 |
|
|
IOTDA.014036 |
Operation not allowed. The product of this device has not defined service capabilities |
该设备的产品未定义设备服务能力 |
请使用修改产品接口将该产品添加设备服务能力。 |
|
|
404 |
IOTDA.014000 |
The device does not exist. |
设备不存在 |
请排查请求参数是否有误并确认是否有在平台注册该设备。 |
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.