将近一年没有关注阿里云物联网的api,最近看了下官网的文档,api列表中赫然多出了物模型的管理和使用两大类.这也难怪,物模型被誉为物联网世界的原子.通过物模型可以有效的使用属性,服务和事件就可以表示出纷繁复杂和多姿多彩的物联网世界中的各种类型的设备;目前物模型并没有统一的规范,所以阿里,小米,京东和中移动等大厂,都是各自制定一套自己的规范;阿里云这面主要是在自家的ICA联盟定义了一套物模型的规范.本文也从实践角度分享一下物模型相关api的使用.
物模型管理这类api一共有18个,所有物模型的api接口都是基于产品的,所以需要一个以创建的产品id:productkey. 按照功能特性又可以分为模型,模板,语言和脚本四个小类.下面就看一下第一小类模型的6个api.
它们分别是:创建 查询 更新 发布 拷贝 删除
首先是创建一个物模型,使用CreateThingModel这个api接口;这个接口需要使用到两个参数:产品的id号以及创建物模型的三元素[属性.服务.事件],为了易于理解,我们以单独创建一个物模型的属性为例,创建一束光的属性,标识符和名称都为LightVal,取值范围为1-10,访问权限为可读写,那么可以使用如下格式:
XYsayFrO.IoT.Srv.CreateThingModel.a141rgUXgFl.{"properties":[{"identifier":"LightVal","dataSpecs":{"max":"10","min":"1","dataType":"INT"},"std":false,"custom":true,"dataType":"INT","rwFlag":"READ_WRITE","productKey":"a141rgUXgFl","required":false,"customFlag":true,"name":"LightVal"}]}.
运行脚本解释器,可以看到创建成功的提示:
因为创建模型的接口,返回的信息只有成功和失败,过于精简,所以需要我们使用查询物模型接口来确认一下.这个查询的接口为QueryThingModel,后面只需要带一个产品id号的参数就可以啦;具体格式和示例如下:
XYsayFrO.IoT.Srv.QueryThingModel.a141rgUXgFl.
返回的结果截图界面如下:
可以看到绿色圈的信息和我们要求创建的信息一致;
物模型创建好后,难免根据实际情况需要修改更新,这时候就需要用到第三个接口UpdateThingModel物模型更新api了,此接口和第一个创建物模型接口类似,也是需要产品id号和物模型json格式的信息.比如我们需要现在将之前的创建号的光束改为最大值为100,名字改为Light,那么就可以使用下面的格式:
XYsayFrO.IoT.Srv.UpdateThingModel.a141rgUXgFl.{"properties":[{"identifier":"LightVal","dataSpecs":{"max":"100","min":"1","step":"1","dataType":"INT"},"dataType":"INT","rwFlag":"READ_WRITE","productKey":"a141rgUXgFl","required":false,"name":"Light"}]}.
如果更新成功,就会返回如下界面:
这个时候,我们就可以再使用之前一样的查询命令去看更新后的信息.
XYsayFrO.IoT.Srv.QueryThingModel.a141rgUXgFl.
可以看到返回的结果已经变为最大值为100了,说明之前的更新确实成功了;
当我们将物模型创建好,又修改好了以后,就可以正式发布了,这时需要使用第四个接口,PublishThingModel这个api来发布,这里需要两个参数,一个为产品id,一个为需要发布的版本号.
XYsayFrO.IoT.Srv.PublishThingModel.a141rgUXgFl.V0x0x9.
发布成功后,会有如下信息:
当我们的产品很多,创建的物模型相似度又非常高的时候,可以使用第五个拷贝接口,具体名称为CopyThingModel,根据这个接口的实际功能,需要三个参数分别为:拷贝源和目的的产品id,以及源产品的发布版本号.
比如,我们现在把产品id为a141rgUXgFl的产品中物模型,拷贝到产品id为a17hjshDgiK的产品中,物模型的版本号为V0x0x9,那么就可以使用下面的格式:
XYsayFrO.IoT.Srv.CopyThingModel.a141rgUXgFl.a17hjshDgiK.V0x0x9.
最后一个接口为删除产品的物模型,这个api只需要一个参数:需要删除产品所对应的产品id.
XYsayFrO.IoT.Srv.DeleteThingModel.a141rgUXgFl.
运行后,会返回如下信息:
这个时候再去使用下面的命令查询,会返回所有相关的空信息.
XYsayFrO.IoT.Srv.QueryThingModel.a141rgUXgFl.