Replace Device


在资产 ID(assetId)不改变的情况下更换一个设备。该接口将注销已注册设备的原始 Device Key 及 Device Secret,为其重新分配 Device Key,生成新的 Device Secret,并重置设备为未激活状态。新设备可以通过更换后的 Device Key 连接 EnOS,新旧设备的数据将通过资产ID进行关联。

操作权限

需授权的资源 所需操作权限
设备管理 Full Access

请求格式

POST https://{apigw-address}/connect-service/v2.1/devices?action=replaceDevice

请求参数(URI)

注解

以下非必须字段中,必须提供 assetIdproductKey + deviceKey 的组合,用于指定设备。

名称 位置(Path/Query) 必需/可选 数据类型 描述
orgId Query 必需 String 资产所属的组织 ID。如何获取 orgId 信息>>
assetId Query 可选(见上述注解) String 资产 ID。如何获取 assetId 信息>>
productKey Query 可选(见上述注解) String 设备的 product key,需与 deviceKey 一起使用。
deviceKey Query 可选(见上述注解) String 设备的 device key,需与 productKey 一起使用。

请求参数(Body)

名称 必需/可选 数据类型 描述
newDeviceKey 必需 String 新设备的 device key。支持英文字母、数字、连字符(-)、下划线(_)、圆点(.)及反斜杠(\),长度限制 4~64 个字符。

响应参数

名称 数据类型 描述
data DeviceReplaceResult 结构体 设备替换结果信息,参见 DeviceReplaceResult 结构体

DeviceReplaceResult 结构体

名称 数据类型 描述
assetId String 资产 ID。
productKey String 设备的 Product Key.
deviceKey String 设备的 Device Key.
deviceSecret String 由系统分配的新设备的密钥。

错误码

代码 错误信息 描述
11702 DeviceKey existed 新的 Device Key 在数据库中已存在。
11704 DeviceKey is repetitive 新旧 Device Key 相同。
99400 Invalid arguments 参数错误。

示例

请求示例

POST https://{apigw-address}/connect-service/v2.1/devices?action=replaceDevice&orgId=yourOrgId&assetId=yourAssetId
{
    "newDeviceKey":"yourNewDeviceKey"
}

返回示例

{
    "code":0,
    "msg":"OK",
    "requestId":"fa377585-8240-4d1e-ad9d-a8d820873142",
    "data":{
        "assetId":"yourAssetId",
        "productKey":"yourProductKey",
        "deviceKey":"yourNewDeviceKey",
        "deviceSecret":"yourDeviceSecret"
    }
}

Java SDK 调用示例

public class ReplaceDevice {

    public static void main(String[] args) {

        final String appKey = "yourAppAccessKe";
        final String appSecret = "yourAppSecretKey";
        final String serverUrl = "http://{apigw-address}";
        final String orgId = "yourOrgId";
        final String assetId = "yourAssetId";

        String newDeviceKey = "yourNewDeviceKey";

        ReplaceDeviceRequest request = new ReplaceDeviceRequest();
        request.setOrgId(orgId);
        request.setAssetId(assetId);
        request.setNewDeviceKey(newDeviceKey);

        ReplaceDeviceResponse response = Poseidon.config(PConfig.init().appKey(appKey).appSecret(appSecret).debug())
                .url(serverUrl)
                .getResponse(request, ReplaceDeviceResponse.class);

        DeviceReplaceResult replaceResult = response.getData();
        String newDeviceSecret = replaceResult.getDeviceSecret();
        System.out.println(newDeviceSecret);
        System.out.println(response);
        System.out.println(response.getData());
    }
}