調用某些物模型相關API時,請求參數或返回參數中包含參數ThingModelJson,該參數的取值格式為物模型功能定義在物聯網平臺系統的存儲結構,與TSL中的數據結構有所不同。ThingModelJson中所有字段按照key的字符排序。

物模型功能定義的限制說明,請參見產品與設備中物模型功能定義限制

數據結構

默認模塊和自定義模塊數據結構不同。

  • 默認模塊
    {
      "_ppk":{
           "description":"test",
           "version":"159244410****"
      }
      "events":[],
      "productKey":"al12345****",
      "properties":[],
      "services":[],
      "functionBlocks":[{
          "productKey":"al12345****",
          "functionBlockId":"location0",
          "functionBlockName":"定位模塊0"
        }]
    }
    參數類型說明
    productKeyString物模型所屬產品的ProductKey。
    _ppkString物模型版本信息。包含參數:
    • version:當前物模型版本號。僅發布后的正式版物模型才有此參數。
    • description:當前默認模塊物模型版本的描述。僅發布后的正式版物模型才有此參數。
    propertiesList物模型中的屬性列表。關于屬性數據結構中包含的參數說明,請參見屬性數據結構規范

    每個屬性數據結構中,可以使用extendConfig來定義物模型擴展描述的配置,請參見extendConfig數據結構規范。當屬性無擴展描述時,無需傳入extendConfig

    servicesList物模型中的服務列表。關于服務數據結構中包含的參數說明,請參見服務數據格式規范

    每個服務數據結構中,可以使用extendConfig來定義物模型擴展描述的配置,請參見extendConfig數據結構規范。當服務無擴展描述時,無需傳入extendConfig

    eventsList物模型中的事件列表。關于事件數據結構中包含的參數說明,請參見事件數據格式規范

    每個事件數據結構中,可以使用extendConfig來定義物模型擴展描述的配置,請參見extendConfig數據結構規范。當事件無擴展描述時,無需傳入extendConfig

    functionBlocksList自定義模塊列表。僅當產品下有自定義模塊時,才包含該參數。包含參數:
    • productKey:物模型所屬產品的ProductKey。
    • functionBlockId:物模型自定義模塊標識符,在產品中具有唯一性。
    • functionBlockName:物模型自定義模塊名稱。
  • 自定義模塊
    {
      "productKey":"al12345****", 
      "identifier":"location0",
      "name":"定位模塊0",
      "properties":[],
      "services":[],
      "events":[],
      "description":""
    }

    自定義模塊基本參數說明如下,其他參數說明與默認模塊中相同。

    參數類型說明
    identifierString物模型自定義模塊標識符,在產品中具有唯一性。

    支持英文大小寫字母、數字和下劃線(_),不超過30個字符。

    nameString物模型的自定義模塊名稱。

    支持中文、英文字母、日文、數字和下劃線(_),長度限制為4~30個字符,一個中文、一個日文算1個字符。

    descriptionString對模塊進行說明或備注。長度限制為100個字符。

屬性數據結構規范

以下表格展示屬性定義中需包含的參數和說明。

重要 參數stdcustomFlag已過期,對于已使用的API,不影響接口調用,此處不再說明;對于新調用的API,無需傳入已過期參數。
參數類型是否必需說明
productKeyString物模型所屬產品的ProductKey。
createTsLong功能創建的時間戳,默認長度是13位。可手動傳入也可由系統生成。功能定義會根據該時間由小到大進行排序。
說明 存量物模型創建時間,以該物模型功能上線后第一次編輯為準。
identifierString屬性的標識符。可包含大小寫英文字母、數字、下劃線(_),長度不超過50個字符。
說明 不能用以下詞匯作為標識符:set、get、post、property、event、time、value。
dataTypeString屬性值的數據類型。

可選值:ARRAYSTRUCTINTFLOATDOUBLETEXTDATEENUMBOOL

不同數據類型,可傳入的參數不同。詳情請參見本文中對應數據類型的數據規范章節。

nameString屬性名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文字母或數字開頭,長度不超過30個字符,一個中文計為一個字符。
rwFlagString在云端可以對該屬性進行的操作類型。
  • READ_WRITE:讀寫。
  • READ_ONLY:只讀。
dataSpecsObject數據類型(dataType)為非列表型(INTFLOATDOUBLETEXTDATEARRAY)的數據規范存儲在dataSpecs中,請參見表格下方示例。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
dataSpecsListList數據類型(dataType)為列表型(ENUMBOOLSTRUCT)的數據規范存儲在dataSpecsList中,請參見表格下方示例。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
requiredBoolean是否是標準品類的必選屬性。
  • true:是
  • false:否
customBoolean是否是自定義功能。
  • true:是
  • false:否
  • dataTypeINTdataSpecs示例:
    {
      "dataSpecs": {
        "custom": true,
        "dataType": "INT",
        "defaultValue": "30",
        "max": "1440",
        "min": "0",
        "step": "10",
        "unit": "min"
      }
    }
  • dataTypeTEXTdataSpecs示例:
    {
      "dataSpecs": {
        "custom": true,
        "dataType": "TEXT",
        "id": 2412127,
        "length": 2048
      }
    }
  • dataTypeARRAYdataSpecs示例:
    {
      "dataSpecs": {
        "childDataType": "INT",
        "custom": true,
        "dataType": "ARRAY",
        "size": 1
      }
    }
  • dataTypeENUMdataSpecsList示例:
    {
      "dataSpecsList": [
        {
          "custom": false,
          "dataType": "ENUM",
          "defaultValue": "true",
          "name": "打開",
          "value": 1
        },
        {
          "custom": false,
          "dataType": "ENUM",
          "defaultValue": "false",
          "name": "關閉",
          "value": 0
        }
      ]
    }
  • dataTypeSTRUCTdataSpecsList示例:
    {
      "childDataType": "TEXT",
      "childName": "卡編號",
      "dataSpecs": {
        "custom": true,
        "dataType": "TEXT",
        "length": 128
      },
      "dataType": "STRUCT",
      "identifier": "CardNo",
      "name": "NVR所擁有的芯片信息"
    }

服務數據格式規范

以下表格展示服務定義中需包含的參數和說明。

參數類型是否必填說明
productKeyString物模型所屬產品的ProductKey。
createTsLong功能創建的時間戳,默認長度是13位。可手動傳入也可由系統生成。功能定義會根據該時間由小到大進行排序。
說明 存量物模型創建時間,以該物模型功能上線后第一次編輯為準。
identifierString服務的標識符。可包含大小寫英文字母、數字、下劃線(_),長度不超過50個字符。
說明 不能用以下詞匯作為標識符:set、get、post、property、event、time、value。
serviceNameString服務名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文字母或數字開頭,長度不超過30個字符,一個中文計為一個字符。
inputParamsList服務的輸入參數。數據結構說明,請參見輸入、輸出參數結構規范
outputParamsList服務的輸出參數。數據結構說明,請參見輸入、輸出參數結構規范
requiredBoolean是否是標準品類的必選服務。
  • true:是
  • false:否
callTypeString服務的調用方式。
  • ASYNC:異步調用
  • SYNC:同步調用
customBoolean是否是自定義功能。
  • true:是
  • false:否

事件數據格式規范

以下表格展示事件定義中需包含的參數和說明。

參數類型是否必填說明
productKeyString物模型所屬產品的ProductKey。
createTsLong功能創建的時間戳,默認長度是13位。可手動傳入也可由系統生成。功能定義會根據該時間由小到大進行排序。
說明 存量物模型創建時間,以該物模型功能上線后第一次編輯為準。
identifierString事件的標識符。可包含大小寫英文字母、數字、下劃線(_),長度不超過50個字符。
說明 不能用以下詞匯作為標識符:set、get、post、property、event、time、value。
eventNameString事件名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文或數字開頭,長度不超過30個字符,一個中文計為一個字符。
eventTypeString事件類型。
  • INFO_EVENT_TYPE:信息。
  • ALERT_EVENT_TYPE:告警。
  • ERROR_EVENT_TYPE:故障。
outputdataList事件的輸出參數。數據結構說明,請參見輸入、輸出參數結構規范
requiredBoolean是否是標準品類的必選事件。
  • true:是
  • false:否
customBoolean是否是自定義功能。
  • true:是
  • false:否

輸入、輸出參數結構規范

服務或事件中的輸入或輸出參數的數據結構規范如下。

參數類型是否必填說明
dataTypeString參數值的數據類型。

可選值:ARRAYSTRUCTINTFLOATDOUBLETEXTDATEENUMBOOL

各數據類型的數據規范,請參見本文中對應數據類型的數據規范章節。

identifierString參數的標識符。可包含大小寫英文字母、數字、下劃線(_),長度不超過50個字符。
說明 不能用以下詞匯作為標識符:set、get、post、property、event、time、value。
nameString參數名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文字母或數字開頭,長度不超過30個字符,一個中文計為一個字符。
directionString表示參數是輸入參數還是輸出參數。
  • PARAM_INPUT:輸入參數。
  • PARAM_OUTPUT:輸出參數。
paraOrderInteger參數的序號。從0開始排序,且不能重復。
dataSpecsObject數據類型(dataType)為非列表型(INTFLOATDOUBLETEXTDATEARRAY)的數據規范存儲在dataSpecs中。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
dataSpecsListList數據類型(dataType)為列表型(ENUMBOOLSTRUCT)的數據規范存儲在dataSpecsList中。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
customBoolean參數是否隸屬于自定義功能。
  • true:是
  • false:否

INT、FLOAT、DOUBLE類型數據結構規范

當功能或參數的數據類型為INTFLOATDOUBLE時,數據結構中包含的參數如下。

參數類型是否必需說明
dataTypeString取值為INTFLOATDOUBLE
maxString最大值。取值為INTFLOATDOUBLE,必須與dataType設置一致。

取值需轉為對應的STRING類型。例如,dataTypeINT,取值為"max":"200",而不是"max":200

minString最小值。取值為INTFLOATDOUBLE,必須與dataType設置一致。

取值需轉為對應的STRING類型,請參見max說明。

stepString步長,數據每次變化的增量。取值為INTFLOATDOUBLE,必須與dataType設置一致。

取值需轉為對應的STRING類型,請參見max說明。

preciseString精度。當dataType取值為FLOATDOUBLE時,可傳入的參數。
defaultValueString傳入此參數,可存入一個默認值。
unitString單位的符號。
unitNameString單位的名稱。
customBoolean是否是自定義功能。
  • true:是
  • false:否

DATE、TEXT類型數據結構規范

當功能或參數的數據類型為DATETEXT時,數據結構中包含的參數如下。

參數類型是否必需說明
dataTypeString取值為DATETEXT
lengthLong數據長度,取值不能超過2048,單位:字節。dataType取值為TEXT時,需傳入該參數。
defaultValueString傳入此參數,可存入一個默認值。
customBoolean是否是自定義功能。
  • true:是
  • false:否

ARRAY類型數據規范

當功能或參數的數據類型為ARRAY時,數據結構中包含的參數如下。

重要 ARRAYSTRUCT類型數據相互嵌套時,最多支持遞歸嵌套2層(父和子)。
參數類型是否必需說明
dataTypeString取值為ARRAY
sizeLong數組中的元素個數。
childDataTypeString數組中的元素的數據類型。可選值:STRUCTINTFLOATDOUBLETEXT
dataSpecsObject數據類型(dataType)為非列表型(INTFLOATDOUBLETEXTDATEARRAY)的數據規范存儲在dataSpecs中。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
dataSpecsListList數據類型(dataType)為列表型(ENUMBOOLSTRUCT)的數據規范存儲在dataSpecsList中。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
customBoolean是否是自定義功能。
  • true:是
  • false:否

枚舉、布爾類型數據規范

當功能或參數的數據類型為BOOLENUM時,數據結構中包含的參數如下。

參數類型是否必需說明
dataTypeString取值為BOOLENUM
nameString枚舉項的名稱,可包含中文、大小寫英文字母、數字、下劃線(_)和短劃線(-),且必須以中文、英文字母或數字開頭。長度不超過20個字符,一個中文計為一個字符。
valueInteger枚舉值。
customBoolean是否是自定義功能。
  • true:是
  • false:否

STRUCT類型數據結構規范

當功能或參數的數據類型為STRUCT時,數據結構中包含的參數如下。

重要
  • 參數childSpecsDTOchildEnumSpecsDTO已過期,對于已使用的API,不影響接口調用,此處不再說明;對于新調用的API,無需傳入已過期參數,建議使用參數dataSpecsList
  • ARRAYSTRUCT類型數據相互嵌套時,最多支持遞歸嵌套2層(父和子)。
參數類型是否必需說明
dataTypeString取值為STRUCT
identifierString結構體中的子參數的標識符。可包含大小寫英文字母、數字、下劃線(_),長度不超過50個字符。
說明 不能用以下詞匯作為標識符:set、get、post、property、event、time、value。
nameString結構體中的子參數名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文字母或數字開頭,長度不超過30個字符,一個中文計為一個字符。
說明 該參數與childName定義相同,目前不使用。
childDataTypeString結構體中子參數的數據類型。

可選值:INTFLOATDOUBLETEXTDATEENUMBOOL

childNameString結構體中的子參數名稱。可包含中文、大小寫英文字母、數字、短劃線(-)、下劃線(_)和半角句號(.),且必須以中文、英文字母或數字開頭,長度不超過30個字符,一個中文計為一個字符。
dataSpecsObject

數據類型(dataType)為非列表型(INTFLOATDOUBLETEXTDATEARRAY)的數據規范存儲在dataSpecs中。

說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
dataSpecsListList數據類型(dataType)為列表型(ENUMBOOLSTRUCT)的數據規范存儲在dataSpecsList中。
說明
  • 除屬性、服務、事件和參數定義數據以外,其他數據都屬于數據規范。
  • dataSpecsdataSpecsList之中必須傳入且只能傳入一個,請根據實際數據類型傳入。
customBoolean是否是自定義功能。
  • true:是
  • false:否

extendConfig數據結構規范

每個屬性、事件或服務數據結構中,可以使用extendConfig來定義物模型擴展描述的配置。擴展描述為設備通信協議到標準物模型的映射關系。

說明 返回數據中的configCode是系統為單個功能定義擴展描述生成的唯一標識符。

目前系統支持接入網關協議為Modbus、OPC UA或自定義的設備配置擴展描述。不同類型的擴展描述需要滿足不同的數據規范:

Modbus類型

Modbus只支持屬性類型的物模型擴展描述。

說明 為了完整展示extendConfig的結構,以下示例中包含所有參數,不代表實際使用中可能出現的組合。各參數的使用場景請參見參數說明。
{
  "identifier":"extend1",
  "writeFunctionCode":0,
  "writeOnly":0,
  "registerAddress":"0xFE",
  "operateType":"coilStatus",
  "scaling":0.1,
  "pollingTime":1000,
  "trigger":1,
  "bitMask":128,
  "originalDataType":{
     "type":"uint64",
     "specs":{
        "swap":0,
        "reverseRegister":0}
  }
}
參數類型說明
identifierString屬性唯一標識符(產品下唯一)。
registerAddressString寄存器地址,必須以0x開頭,且限制范圍是0x0~0xFFFF,例如0xFE。
operateTypeString操作類型,取值:
  • coilStatus:線圈狀態
  • inputStatus:離散量輸入
  • holdingRegister:保持寄存器
  • inputRegister:輸入寄存器
writeFunctionCodeInteger讀寫操作,對于不同操作類型(operateType),可選的取值不同:
  • coilStatus:
    • 5:讀寫(讀0x01,寫0x05)
    • 15:讀寫(讀0x01,寫0x0F)
    • 0:只讀0x01
    • 6:只寫0x05
    • 15:只寫0x0F
  • inputStatus:0:只讀0x02
  • holdingRegister:
    • 6:讀寫(讀0x03,寫0x06)
    • 16:讀寫(讀0x03,寫0x10)
    • 0:只讀0x03
    • 6:只寫0x06
    • 16:只寫0x10
  • inputRegister:0:只讀0x04
writeOnlyInteger是否只寫。
  • 0:非只寫。
    • writeFunctionCode取值不為0(表示讀寫)時,writeOnly為0表示支持讀寫。
    • writeFunctionCode取值為0(表示只讀)時,writeOnly必須為0。
  • 1:只寫。

    僅當writeFunctionCode取值不為0(表示讀寫)時,writeOnly可以為1,表示僅支持寫。

scalingNumber縮放因子,不能為0。

string、bool無該參數。

pollingTimeInteger采集間隔,單位是ms。無需傳入,將使用設備配置的采集間隔。
triggerInteger數據上報方式。1代表按時上報,2代表變更上報。
bitMaskIntegerbool特有的參數。

掩碼,取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768,即1<<(0~15)。

originalDataTypeObject原始數據類型描述。
typeString原始數據類型,需要為基礎類型:int16、uint16、int32、uint32、int64、uint64、float、double、string、bool、customized data(按大端順序返回hex data)。
specsObject部分數據類型特有的參數。
registerCountIntegerstring、customized data特有的參數。

寄存器的數據個數。

swapInteger除string、customized data外,其他數據類型特有的參數。

是否交換寄存器內高低字節,把寄存器內16位數據的前后8個bit互換(byte1byte2 -> byte2byte1)。

  • 0:不交換
  • 1:交換
reverseRegisterInteger除string、customized data外,其他數據類型特有的參數。
是否交換寄存器順序,把原始數據32位數據的前后16個bit互換(byte1byte2byte3byte4 -> byte3byte4byte1byte2)。
  • 0:不交換
  • 1:交換

OPC UA類型

OPC UA支持屬性、服務、事件類型的物模型擴展描述。

{
  "identifier":"extend2",
  "displayName":"Action",
  "inputData":[
    {
      "identifier":"xxxx",
      "index":1
    },
    {
      "identifier":"xxxx",
      "index":2 
    }
  ],
  "outputData":[
     {
      "identifier":"xxxx",
      "index":1
    },
    {
      "identifier":"xxxx",
      "index":2
    }
  ]
}
參數類型說明
identifierString屬性、服務、事件的唯一標識符(產品下唯一)。
displayNameString屬性、事件需要傳入displayName,服務不需要傳入。
inputDataList輸入數據。
outputDataList輸出數據。
identifierString輸入數據、輸出數據的唯一標識符(產品下唯一)。
indexInteger索引。inputData中的index不能重復,outputData中的index不能重復。

自定義類型

自定義類型支持屬性、服務、事件類型的物模型擴展描述。

{
  "identifier":"xxx",
  "customize":{}
}
參數類型說明
identifierString屬性、服務、事件的唯一標識符(產品下唯一)。
customizeObject自定義JSON。

校驗

您可以通過json-schemaThingModelJson中的入參進行預校驗。

關于json-schema的定義代碼,請參見schema.json

校驗示例如下:

  • 在Maven工程中添加如下依賴,下載json-schema的版本庫。
    <dependency>
        <groupId>com.github.everit-org.json-schema</groupId>
        <artifactId>org.everit.json.schema</artifactId>
        <version>1.11.0</version>
    </dependency>
  • 示例代碼:
    package com.aliyun.iot.thingmodel;
    
    import java.io.InputStream;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    import org.everit.json.schema.Schema;
    import org.everit.json.schema.ValidationException;
    import org.everit.json.schema.loader.SchemaLoader;
    import org.json.JSONObject;
    import org.json.JSONTokener;
    
    /**
     * @author: ***
     * @date: 2020-01-14 15:11
     */
    public class ThingModelJsonValidator {
    
        public static void main(String[] args) throws Exception {
    
            try (InputStream inputStream = new URL("https://iotx-thing-model-schema.oss-ap-southeast-1.aliyuncs.com/schema.json").openStream()) {
                JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream));
                Schema schema = SchemaLoader.load(rawSchema);
                long start = System.currentTimeMillis();
                JSONObject object = new JSONObject();
                String jsonStr = "{\n"
                        + "\t\t\t\"productKey\": \"a1Q1Yrc****\",\n"
                        + "\t\t\t\"name\": \"報警事件\",\n"
                        + "\t\t\t\"identifier\": \"alarmEvent\",\n"
                        + "\t\t\t\"eventName\": \"報警事件\",\n"
                        + "\t\t\t\"eventType\": \"ALERT_EVENT_TYPE\",\n"
                        + "\t\t\t\"outputData\": [\n"
                        + "\t\t\t\t{\n"
                        + "\t\t\t\t\t\"paraOrder\": 0,\n"
                        + "\t\t\t\t\t\"direction\": \"PARAM_OUTPUT\",\n"
                        + "\t\t\t\t\t\"dataSpecsList\": [\n"
                        + "\t\t\t\t\t\t{\n"
                        + "\t\t\t\t\t\t\t\"dataType\": \"ENUM\",\n"
                        + "\t\t\t\t\t\t\t\"name\": \"防拆報警\",\n"
                        + "\t\t\t\t\t\t\t\"value\": 0\n"
                        + "\t\t\t\t\t\t},\n"
                        + "\t\t\t\t\t\t{\n"
                        + "\t\t\t\t\t\t\t\"dataType\": \"ENUM\",\n"
                        + "\t\t\t\t\t\t\t\"name\": \"防拆報警解除\",\n"
                        + "\t\t\t\t\t\t\t\"value\": 1\n"
                        + "\t\t\t\t\t\t}\n"
                        + "\t\t\t\t\t],\n"
                        + "\t\t\t\t\t\"dataType\": \"ENUM\",\n"
                        + "\t\t\t\t\t\"identifier\": \"alarmType\",\n"
                        + "\t\t\t\t\t\"name\": \"報警類型\",\n"
                        + "\t\t\t\t\t\"index\": 0,\n"
                        + "\t\t\t\t\t\"custom\": true\n"
                        + "\t\t\t\t}\n"
                        + "\t\t\t],\n"
                        + "\t\t\t\"outputParams\": [\n"
                        + "\t\t\t\t{\n"
                        + "\t\t\t\t\t\"index\": 0,\n"
                        + "\t\t\t\t\t\"identifier\": \"alarmType\"\n"
                        + "\t\t\t\t}\n"
                        + "\t\t\t],\n"
                        + "\t\t\t\"custom\": true\n"
                        + "\t\t}";
    
                object.put("properties", new ArrayList<>());
                object.put("services", new ArrayList<>());
                object.put("events", Arrays.asList(com.alibaba.fastjson.JSONObject.parseObject(jsonStr)));
                object.put("productKey", "a1Q1Yrc****");
                schema.validate(object); // throws a ValidationException if this object is invalid
                //}
                System.out.println(System.currentTimeMillis() - start);
            }
            catch (ValidationException exception) {
                System.out.println(exception);
            }
        }
    
    }

如何快速編寫ThingModelJson

下文為您介紹,如何使用Visual Studio Code工具編寫ThingModelJson。

  1. 訪問Visual Studio Code官網 ,下載并安裝新版本Visual Studio Code工具。
  2. 打開Visual Studio Code,單擊左下角設置按鈕,選擇Settings
  3. user頁簽,選擇Extensions > JSON,單擊SchemasEdit in settings.json,配置如下內容并保存。
     "json.schemas": [{
            "fileMatch": ["/.json"],
            "url": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json"
    }]

    配置完成后,編寫TSL時,會自動智能提示,如下圖所示。

    提示