Update Thing Model


更新模型。使用此 API 前,确保当前环境已安装 EnOS 2.3 CU 2

操作权限

需授权的资源 所需操作权限
模型管理 Full Access

请求格式

POST https://{apigw-address}/model-service/v2.1/thing-models?action=update

请求参数(URI)

名称 位置(Path/Query) 必需/可选 数据类型 描述
orgId Query 必需 String 模型所属的 OU ID。如何获取 orgId 信息>>
isPatchUpdate Query 可选 Boolean

是否是局部更新,默认为 true

  • 当其值为 true 时,只更新参数中指定字段的值。
  • 当其值为 false 时,更新所有字段的值,即未指定值的字段将被置空。

请求参数(Body)

名称 必需/可选 数据类型 描述
modelId 必需 String 模型标识符。
name isPatchUpdatefalse 时必填 StringI18n 模型名称,其结构参见 国际化名称结构体
desc 可选 String 模型描述。
category 可选 String 模型分类。
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
featuresToDelete 可选 String Array 需要删除的 features ID 列表。只有 isPatchUpdatetrue 的情况下该参数才有效。如果 array 中的 feature 出现在 attributesmeasurepointseventsservices 中,该 feature 不会被删除。
attributes 可选 Map(Key 为 String,Value 为 ThingAttribute 结构体)

静态属性定义的 map 类型值,key 为静态属性 ID,value 为属性定义。属性定义的结构参见 ThingAttribute 结构体

注:无法在当前模型中添加父模型或子模型中已存在的属性。
measurepoints 可选 Map(Key 为 String,Value 为 ThingMeasurepoint 结构体)

测点定义的 map 类型值,key 为测点 ID,value 为测点定义。测点定义的结构参见 ThingMeasurepoint 结构体

注:无法在当前模型中添加父模型或子模型中已存在的测点。
services 可选 Map(Key 为 String,Value 为 ThingService 结构体)

服务定义的 map 类型值,key 为服务 ID,value 为服务定义。服务定义的结构参见 ThingService 结构体

注:无法在当前模型中添加父模型或子模型中已存在的服务。
events 可选 Map(Key 为 String,Value 为 ThingEvent 结构体)

事件定义的 map 类型值,key 为事件 ID,value 为事件定义。事件定义的结构参见 ThingEvent 结构体

注:无法在当前模型中添加父模型或子模型中已存在的事件。

ThingAttribute 结构体

名称 必需/可选 数据类型 描述
identifier 可选 String 属性ID。
dataType 可选 String 数据类型。比如:ARRAY、BOOL、DATE、ENUM、INT、FLOAT、DOUBLE、STRUCT、STRING、TIMESTAMP、FILE。
dataDefinition 可选 String 本结构体内 datatype 的数据定义,是一个 JSON 字符串。如对于 String 的数据类型,需要定义长度。对于 enum 的数据类型需要定义取值及描述。如何使用 dataDefinition>>
isRequired 可选 Boolean 是否是必须的属性。如果为 true,则要求资产在实例化的时候必须设置该属性的值,否则资产在创建的时候会返回校验失败的错误。
defaultValue 可选 根据属性的定义决定

属性的默认值。如果没有设置默认值,则为 null。

注:EnOS Edge 不支持该参数。

name 可选 StringI18n 支持国际化的属性名称。结构参见 国际化名称结构体
desc 可选 String 属性描述。
i18nDesc 可选 StringI18n 支持国际化的描述。结构参见 国际化名称结构体
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
isStdElement 可选 Boolean

是否是标准元素。true 为是,false 为否。

注:EnOS Edge 不支持该参数。

stdElementId 可选 String

当元素是标准元素时,标准元素的URN,其命名格式为 urn:enos:modelelement:std: <id> : <version>id 为元素标识符,<version> 表示元素的版本。如果该元素不是标准元素,则值为 null

如果提供了 stdElementId,那么元素定义将取自标准元素定义,忽略 dataDefinition 字段。

注:EnOS Edge 不支持该参数。

unit 可选 Unit 结构体 单位。参见 Unit 结构体

ThingMeasurepoint 结构体

名称 必需/可选 数据类型 描述
identifier 可选 String 测点 ID
dataType 可选 String 数据类型。比如:ARRAY、DATE、ENUM、INT、FLOAT、DOUBLE、STRUCT、STRING、TIMESTAMP、FILE。
dataDefinition 可选 String 本结构体内 datatype 的数据定义,是一个 JSON 字符串。如对于 String 的数据类型,需要定义长度。对于 enum 的数据类型需要定义取值及描述。如何使用 dataDefinition>>
name 可选 StringI18n 支持国际化的测点名称。结构参见 国际化名称结构体
desc 可选 String 测点描述。
i18nDesc 可选 StringI18n 支持国际化的描述。结构参见 国际化名称结构体
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
isStdElement 可选 Boolean

是否是标准元素。true 为是,false 为否。

注:EnOS Edge 不支持该参数。

stdElementId 可选 String

当元素是标准元素时,标准元素的 URN,其命名格式为 urn:enos:modelelement:std: <id> : <version>id 为元素标识符,<version> 表示元素的版本。如果该元素不是标准元素,则值为 null

如果提供了 stdElementId,那么元素定义将取自标准元素定义,忽略 dataDefinition 字段。

注:EnOS Edge 不支持该参数。

hasQuality 可选 Boolean 是否有质量位。
signalType 可选 String 信号类型。有如下类型:Generic、AI、PI、DI。
unit 可选 Unit 结构体 单位。参见 Unit 结构体

ThingService 结构体

名称 必需/可选 数据类型 描述
identifier 可选 String 服务 ID。
name 可选 StringI18n 支持国际化的服务名称。结构参见 国际化名称结构体
desc 可选 String 服务描述。
i18nDesc 可选 StringI18n 支持国际化的描述。结构参见 国际化名称结构体
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
isStdElement 可选 Boolean

是否是标准元素。true 为是,false 为否。

注:EnOS Edge 不支持该参数。

stdElementId 可选 String

当元素是标准元素时,标准元素的 URN,其命名格式为 urn:enos:modelelement:std: <id> : <version>id 为元素标识符,<version> 表示元素的版本。如果该元素不是标准元素,则值为 null

如果提供了 stdElementId,那么元素定义将取自标准元素定义,忽略 dataDefinition 字段。

注:EnOS Edge 不支持该参数。

inputData 可选 ThingDatapoint 结构体 Service 的入参列表。参见 ThingDatapoint 结构体
outputData 可选 ThingDatapoint 结构体 Service 返回参数列表。参见 ThingDatapoint 结构体
callType 可选 String 注意:callType 已废弃,未来会删除,请不要使用。调用类型。SYNC 表示同步,ASYNC 表示异步。

ThingEvent 结构体

名称 必需/可选 数据类型 描述
identifier 可选 String 事件 ID。
name 可选 StringI18n 支持国际化的事件名称。结构参见 国际化名称结构体
desc 可选 String 事件描述。
i18nDesc 可选 StringI18n 支持国际化的描述。结构参见 国际化名称结构体
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
isStdElement 可选 Boolean

是否是标准元素。true 为是,false 为否。

注:EnOS Edge 不支持该参数。

stdElementId 可选 String

当元素是标准元素时,标准元素的URN,其命名格式为 urn:enos:modelelement:std: <id> : <version>id 为元素标识符,<version> 表示元素的版本。如果该元素不是标准元素,则值为 null

如果提供了 stdElementId,那么元素定义将取自标准元素定义,忽略 dataDefinition 字段。

注:EnOS Edge 不支持该参数。

outputData 可选 ThingDatapoint 结构体 Event 返回参数列表。参见 ThingDatapoint 结构体
eventType 可选 String 事件类型。有 INFOWARNERROR 三种取值。

ThingDatapoint 结构体

名称 必需/可选 数据类型 描述
identifier 可选 String 点 ID。
dataType 可选 String 数据类型。比如:ARRAY、DATE、ENUM、INT、FLOAT、DOUBLE、STRUCT、STRING、TIMESTAMP、FILE。
dataDefinition 可选 String 本结构体内 datatype 的数据定义,是一个 JSON 字符串。如对于 String 的数据类型,需要定义长度。对于 enum 的数据类型需要定义取值及描述。如何使用 dataDefinition>>
name 可选 StringI18n 支持国际化的测点名称。结构参见 国际化名称结构体
desc 可选 String 测点描述。
i18nDesc 可选 StringI18n 支持国际化的描述。结构参见 国际化名称结构体
tags 可选 Map (Key 为 String,Value 为 String) 用户自定义标签。
isStdElement 可选 Boolean

是否是标准元素。true 为是, false 为否。

注:EnOS Edge 不支持该参数。

stdElementId 可选 String

当元素是标准元素时,标准元素的 URN,其命名格式为 urn:enos:modelelement:std: <id> : <version>id 为元素标识符,<version> 表示元素的版本。如果该元素不是标准元素,则值为 null

注:EnOS Edge 不支持该参数。

unit 可选 Unit 结构体 单位。参见 Unit 结构体

Unit 结构体

名称 必需/可选 数据类型 描述
unitId 可选 String 单位的标识符。
multiplier 可选 String 单位的乘数。参见 Multiplier

Multiplier

单位的乘数有如下取值:

YOTTA ,//Y     10^24
ZETTA ,//Z     10^21
EXA   ,//E     10^18
PETA  ,//P     10^15
TERA  ,//T     10^12
GIGA  ,//G     10^9
MEGA  ,//M     10^6
KILO  ,//k     10^3
HECTO ,//h     10^2
DECA  ,//da    10^1
ONE   ,//      10^0
DECI  ,//d     10^-1
CENTI ,//c     10^-2
MILLI ,//m     10^-3
MICRO ,//μ     10^-6
NANO  ,//n     10^-9
PICO  ,//p     10^-12
FEMTO ,//f     10^-15
ATTO  ,//a     10^-18
ZEPTO ,//z     10^-21
YOCTO ,//y     10^-24

错误码

名称 描述
10404 模型不存在。
10945 模型元素与父子模型冲突
10952 模型四要素的数量超过限制

示例

请求示例

url: https://{apigw-address}/model-service/v2.1/thing-models?action=update&orgId=yourOrgId&isPatchUpdate=true
method: POST
requestBody:
{
  "modelId": "yourModelId",
  "name": {
    "defaultValue": "Device Name",
    "i18nValue": {
      "zh_CN": "设备名称",
      "en_US": "Device Name"
    }
  },
  "desc": "jw-1112",
  "category": "system",
  "tags": {
    "group": "1"
  },
  "attributes": {
    "capacity": {
      "identifier": "capacity",
      "name": {
        "defaultValue": "capacity",
        "i18nValue": {
          "en_US": "capacity",
          "zh_CN": "容量"
        }
      },
      "desc": "Capacity",
      "i18nDesc": {
        "defaultValue": "Capacity description",
        "i18nValue": {
          "en_US": "Capacity description",
          "zh_CN": "容量描述"
        }
      },
      "tags": {
        "cap": "1"
      },
      "stdElementId": "urn:user:modelelement:std:atom-property-int:1.0",
      "isStdElement": true,
      "dataType": "INT",
      "unit": {
          "unitId": "G",
          "multiplier": "ONE"
      },
      "dataDefinition": null,
      "isRequired": true,
      "defaultValue": 111
    }
  },
  "measurepoints": {
    "ActiveSC": {
      "identifier": "ActiveSC",
      "name": {
        "defaultValue": "活动状态字",
        "i18nValue": {
          "en_US": "ActiveSC_Name"
        }
      },
      "desc": "ActiveSC desc",
      "i18nDesc": {
        "defaultValue": "ActiveSC desc",
        "i18nValue": {
          "en_US": "ActiveSC desc",
          "zh_CN": "活动状态描述"
        }
      },
      "tags": {},
      "stdElementId": null,
      "isStdElement": false,
      "dataType": "INT",
      "unit": null,
      "dataDefinition": null,
      "hasQuality": false,
      "signalType": "DI"
    }
  },
  "services": {
    "speedup": {
      "identifier": "speedup",
      "name": {
        "defaultValue": "speedup",
        "i18nValue": {
          "en_US": "speedup"
        }
      },
      "desc": "Speedup",
      "i18nDesc": {
        "defaultValue": "Speedup",
        "i18nValue": {
          "en_US": "Speedup",
          "zh_CN": "加速"
        }
      },
      "tags": null,
      "stdElementId": null,
      "isStdElement": false,
      "outputData": [
        {
          "identifier": "delta",
          "name": {
            "defaultValue": "delta",
            "i18nValue": {
              "en_US": "delta"
            }
          },
          "desc": "Delta",
          "i18nDesc": {
            "defaultValue": "Delta",
            "i18nValue": {
              "en_US": "Delta",
              "zh_CN": "Delta 描述"
            }
          },
          "tags": {},
          "stdElementId": null,
          "isStdElement": false,
          "dataType": "INT",
          "unit": null,
          "dataDefinition": null
        }
      ],
      "inputData": [
        {
          "identifier": "delta",
          "name": {
            "defaultValue": "delta",
            "i18nValue": {
              "en_US": "delta"
            }
          },
          "desc": "Delta",
          "i18nDesc": {
            "defaultValue": "Delta",
            "i18nValue": {
              "en_US": "Delta",
              "zh_CN": "Delta 描述"
            }
          },
          "tags": {},
          "stdElementId": null,
          "isStdElement": false,
          "dataType": "INT",
          "unit": {
            "unitId": "rpm",
            "multiplier": "ONE"
          },
          "dataDefinition": null
        }
      ],
      "callType": "ASYNC"
    }
  },
  "events": {
    "alert": {
      "identifier": "alert",
      "name": {
        "defaultValue": "alert",
        "i18nValue": {
          "en_US": "alert"
        }
      },
      "desc": "Alert",
      "i18nDesc": {
        "defaultValue": "Alert",
        "i18nValue": {
          "en_US": "Alert",
          "zh_CN": "告警"
        }
      },
      "tags": null,
      "stdElementId": null,
      "isStdElement": false,
      "outputData": [
        {
          "identifier": "event1",
          "name": {
            "defaultValue": "event1",
            "i18nValue": {
              "en_US": "event1"
            }
          },
          "desc": "Event 1",
          "i18nDesc": {
            "defaultValue": "Event 1",
            "i18nValue": {
              "en_US": "Event 1",
              "zh_CN": "事件"
            }
          },
          "tags": {},
          "stdElementId": null,
          "isStdElement": false,
          "dataType": "INT",
          "unit": null,
          "dataDefinition": null
        }
      ],
      "eventType": "ERROR"
    }
  }
}

返回示例

{
  "code": 0,
  "msg": "OK",
  "requestId": "fa11232e-7e45-4176-a382-963c1240a27f"
}

Java SDK 调用示例

import com.envision.apim.poseidon.config.PConfig;
import com.envision.apim.poseidon.core.Poseidon;
import com.envisioniot.enos.api.common.constant.common.StringI18n;
import com.envisioniot.enos.model_service.v2_1.UpdateThingModelRequest;
import com.envisioniot.enos.model_service.v2_1.UpdateThingModelResponse;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UpdateThingModel {
  public static void main(String[] args) {
    String appKey = "yourAppAccessKey";
    String appSecret = "yourAppSecretKey";
    String serverUrl = "https://{apigw-address}";

    String orgId = "yourOrgId";

    UpdateThingModelRequest request = new UpdateThingModelRequest();
    request.setModelId("yourModelId");
    request.setIsPatchUpdate(true);
    StringI18n i18n = new StringI18n();
    i18n.setDefaultValue("Device Name");
    request.setName(i18n);
    Map<String, String> tags = new HashMap<>();
    tags.put("group", "1");
    request.setTags(tags);
    request.setDesc("jw-1112");
    request.setOrgId(orgId);
    List<String> featuresToDelete = new ArrayList<>();
    featuresToDelete.add("test_measure_point");
    request.setFeaturesToDelete(featuresToDelete);
    UpdateThingModelResponse response = Poseidon.config(PConfig.init().appKey(appKey).appSecret(appSecret).debug())
      .url(serverUrl)
      .getResponse(request, request.getResponseClass());
    if (response.success()) {
      System.out.println("update is successful!");
    }else{
      System.out.println(response.toString());
    }
  }
}